Хабрахабр

Лабораторная работа: настраиваем lvm, raid на linux

Небольшое отступление: данная л\р является синтетической.

Некоторые задания которые здесь описаны можно сделать гораздо проще, но поскольку задача л/р — познакомиться с функционалом raid, lvm то некоторые операции искусственно усложнены.

Требования к инструментам для выполнения л\р:

  • Средства виртуализации, например Virtualbox
  • Установочный образ linux, например Debian9
  • Наличие интернета для скачивания нескольких пакетов
  • Подключение по ssh к установленной VM (опционально)

ВНИМАНИЕ

Данная лабораторная работа связана с такой тонкой материей как сохранность данных — это такая область, которая позволяет из-за мельчайшей ошибки — одной лишней буквы или цифры потерять все ваши данные.

Поскольку вы выполняете лабораторную работу вам ничего не грозит, разве что придется начать делать ее заново.

В реальной жизни все гораздо серьезнее, поэтому следует очень внимательно вводить имена дисков, понимая что именно вы выполняете текущей командой и с какими дисками работаете.

Если же выполнить перезагрузку перед добавлением нового диска, то новый диск будет иметь имя sdb, а старый станет именоваться sda Второй важный момент — именование дисков и разделов: в зависимости от ситуации номера дисков могут отличаться от тех значений, что представлены в командах в лабораторной работе.
Так, например, если удалить диск sda из массива, а затем добавить новый диск, то новый диск будет отображаться в системе с именем sda.

Лабораторная работа должна выполняться под суперпользователем (root) поскольку большая часть команд требует повышенных привилегий и не имеет смысла постоянно повышать привилегии через sudo.

Материалы для изучения

  • RAID
  • LVM
  • Именование дисков в ОС Linux
  • Что такое раздел
  • Что такое таблица разделов и где она хранится
  • Что такое grub

Используемые утилиты

  1. Просмотр информации о дисках:
    • lsblk -o NAME,SIZE,FSTYPE,TYPE,MOUNTPOINT
    • fdisk -l
  2. Просмотр информации и работа с LVM
    • pvs
    • pvextend
    • pvcreate
    • pvresize
    • vgs
    • vgreduce
    • lvs
    • lvextend
  3. Просмотр информации и работа с RAID:
    • сat /proc/mdstat
    • mdadm
  4. Точки монтирования:
    • mount
    • umount
    • cat /etc/fstab
    • cat /etc/mtab
  5. Переразметка диска:
    • fdisk /dev/XXX
  6. Копирование разделов:
    • dd if=/dev/xxx of=/dev/yyy
  7. Работа с таблицей разделов:
    • partx
    • sfdisk
    • mkfs.ext4
  8. Работа с загрузчиком:
    • grub-install /dev/XXX
    • update-grub
  9. misc
    • lsof
    • apt
    • rsync

Лабораторная работа состоит из 3-х частей:

  • Настройка работоспособной системы с использованием lvm, raid.
  • Эмуляция отказа одного из дисков.
  • Замена дисков на лету, с добавлением новых дисков и переносом разделов.

Задание 1 (Установка ОС и настройка LVM, RAID)

  1. Создайте новую виртуальную машину, выдав ей следующие характеристики:

    • 1 gb ram
    • 1 cpu
    • 2 hdd (назвать их ssd1, ssd2 и назначить равный размер, поставить галочки hot swap и ssd)
    • SATA контроллер настроен на 4 порта:

      select ssd disks

  2. Начать установку Linux и дойдя до выбора жестких дисков сделать следующее:

    • Partitioning method: manual, после чего вы должны увидеть такую картину:

      partition disks

    • Настройка отдельного раздела под /boot: Выберите первый диск и создайте на нем новую таблицу разделов:
      • Partition size: 512M
      • Mount point: /boot
    • Повторите настройку для второго диска, но поскольку одновременно монтировать 2 раза /boot нельзя, то выберите mount point: none в итоге получив следующее (картинка с косяком, переделывать лень):

      partition disks

    • Настройка RAID:
    • Выберите свободное место на первом диске и настройте в качестве типа раздела physical volume for RAID
    • Выберите "Done setting up the partition"
    • Повторите точно такую же настройку для второго диска, в результате получив следующее:

      partition disks

    • Выберите пункт "Configure software RAID"
      • Create MD device
      • Software RAID device type: Выберите зеркальный массив
      • Active devices for the RAID XXXX array: Выбрать оба диска
      • Spare devices: Оставить 0 по умолчанию
      • Active devices for the RAID XX array: выбрать разделы, которые вы создавали под raid
      • Finish
    • В итоге вы должны получить такую картину:

      partition disks

    • Настройка LVM: Выберите Configure the Logical Volume Manager
    • Keep current partition layout and configure LVM: Yes
    • Create volume group
    • Volume group name: system
    • Devices for the new volume group: Выберите ваш созданный RAID
    • Create logical volume
      • logical volume name: root
      • logical volume size: 2\5 от размера вашего диска
    • Create logical volume
      • logical volume name: var
      • logical volume size: 2\5 от размера вашего диска
    • Create logical volume
      • logical volume name: log
      • logical volume size: 1\5 от размера вашего диска
    • Выбрав Display configuration details вы должны получить следующую картину:

      partition disks

    • Завершив настройку LVM вы должны увидеть следующее:

      partition disks

    • Разметка разделов: по-очереди выберите каждый созданный в LVM том и разметьте их, например, для root так:
      • Use as: ext4
      • mount point: /
    • Результат разметки корневого раздела должен получиться таким:

      partition disks

    • Повторите операцию разметки для var и log выбрав соответствующие точки монтирования (/var и /var/log вручную ввести), получив следующий результат:

      partition disks

    • Выберите Finish Partitioning
    • Вам зададут несколько вопросов, про то что у вас остался несмонтированный раздел и не настроен swap. Следует ответить отрицательно на оба вопроса.
    • Финальный результат должен получиться вот таким:

      partition disks

  3. Закончить установку ОС, поставив grub на первое устройство (sda) и загрузить систему.

  4. Выполните копирование содержимого раздела /boot с диска sda (ssd1) на диск sdb (ssd2)

    dd if=/dev/sda1 of=/dev/sdb1

  5. Выполнить установку grub на второе устройство:

    • Посмотреть диски в системе:

      fdisk -l
      lsblk -o NAME,SIZE,FSTYPE,TYPE,MOUNTPOINT

    • Перечислите все диски которые вам выдала предыдущая команда и опишите что это за диск.
    • Найдите диск на который не была выполнена установка grub и выполните эту установку:

      grub-install /dev/sdb

    • Просмотрите информацию о текущем raid командой cat /proc/mdstat и запишите что вы увидели.
    • Посмотрите выводы команд: pvs, vgs, lvs, mount и запишите что именно вы увидели.

Опишите своими словами что вы сделали и какой результат получили в итоге проделанного задания.

После выполнения этого задания рекомендуется сохранить резервную копию папки с виртуальной машиной или сделать vagrant box.

Результат: Виртуальная машина с дисками ssd1, ssd2.

Задание 2 (Эмуляция отказа одного из дисков)

  1. Если вы поставили галочку hot swap, то вам доступно удаление дисков на лету:
    • Выполните удаление диска ssd1 в свойствах машины.
    • Найдите директорию, где хранятся файлы вашей виртуальной машины и удалите ssd1.vmdk.
  2. Убедитесь что ваша виртуальная машина по-прежнему работает
  3. Выполните перезагрузку виртуальной машины и убедитесь что она по-прежнему работает
  4. Проверьте статус RAID-массива: cat /proc/mdstat
  5. Добавьте в интерфейсе VM новый диск такого же размера и назовите его ssd3.
  6. Выполните операции:
    • Посмотрите что новый диск приехал в систему командой fdisk -l
    • Скопируйте таблицу разделов со старого диска на новый: sfdisk -d /dev/XXXX | sfdisk /dev/YYY
    • Посмотрите результат командой fdisk -l
    • Добавьте в рейд массив новый диск: mdadm --manage /dev/md0 --add /dev/YYY
    • Посмотрите результат: cat /proc/mdstat. Вы должны увидеть что началась синхронизация
  7. Для этого воспользуемся утилитой dd, скопировав с "живого" диска на новенький, который вы недавно поставили: Теперь нужно вручную выполните синхронизацию разделов, не входящих в RAID.

    dd if=/dev/XXX of=/dev/YYY

  8. После завершения синхронизации установите grub на новый диск.
  9. Выполните перезагрузку ВМ, для того чтобы убедиться что все работает.

Опишите своими словами что вы сделали и какой результат получили в итоге проделанного задания.

Результат: удалён диск ssd1, сохранен диск ssd2, добавлен диск ssd3.

Задание 3 (Добавление новых дисков и перенос раздела)

Очень внимательно проверяйте что вы делаете и с какими дисками и разделами. Это самое сложное и объемное задание из всех представленных. Это задание независимо от задания №2, его можно выполнять после задания №1 с поправкой на имена дисков. Рекомендуется снять копию перед его выполнением.

Вторая часть задания этой лабораторной должна привести в точно такое же состояние которое было после выполнения первой части.

С точки зрения ОС в ВМ это будет выглядеть абсолютно одинаково, но вы сможете в случае чего подключить диск обратно и продолжить выполнение работы откатившись на пару пунктов назад, в случае если у вас возникли проблемы. Для того чтобы вам было проще работать могу рекомендовать не удалять физически диски с хостовой машины, а только лишь отсоединять их в свойствах машины. Я могу лишь посоветовать несколько раз перепроверять с какими дисками и разделами вы работаете, а еще лучше выписать на листочек соответствие дисков, разделов и "физическому" номеру диска. Например вы могли выполнить неверно или забыть скопировать на новый диск раздел /boot. Красивое и понятное дерево рисует команда lsblk, пользуйтесь ей как можно чаще для анализа того что вы сделали и что нужно сделать.

К истории...

Представьте себе что ваш сервер работал долгое время на 2-х ssd дисках, как вдруг...

  1. Проэмулируйте отказ диска ssd2, удалив из свойств ВМ диск и перезагрузившись.

  2. Посмотрите текущее состояние дисков и RAID:

    cat /proc/mdstat
    fdisk -l
    lsblk -o NAME,SIZE,FSTYPE,TYPE,MOUNTPOINT

  3. Вам повезло — начальство разрешило закупить несколько новых дисков:

    2 SSD на замену погибшему, а также на замену пока еще функционирующему. 2 SATA большого объема для давно назревшей задачи вынесения раздела с логами на отдельный диск.

    одновременно, поэтому добавить все диски сразу нельзя. Следует учитывать, что корзина сервера поддерживает установку только 4х дисков.

    Объем HDD выбрать в 2 раза больше чем SSD.
    Объем SSD выбрать в 1,25 раза больше бывших SSD.

  4. Добавьте один новый ssd диск, назвав его ssd4, а после добавления проверьте что произошло:

    fdisk -l
    lsblk -o NAME,SIZE,FSTYPE,TYPE,MOUNTPOINT

  5. На этот раз мы будем переносить данные с помощью LVM: В первую очередь следует озаботиться сохранностью данных старого диска.

    • В первую очередь необходимо скопировать файловую таблицу со старого диска на новый:

      sfdisk -d /dev/XXX | sfdisk /dev/YYY

      Подставьте вместо x,y правильные диски и разберите что делает данная команда.

    • Выполните команду lsblk -o NAME,SIZE,FSTYPE,TYPE,MOUNTPOINT и сравните ее вывод с прошлым вызовом. Что поменялось?
    • С помощью команды dd скопируйте данные /boot на новый диск:

      dd if=/dev/XXX of=/dev/YYY

    • Если /boot остался смонтирован на старом диске, его следует перемонтировать на живой диск:

      mount | grep boot # смотрим куда смонтирован диск
      lsblk # смотрим какие диски есть в системе и смотрим есть ли диск, полученный из предыдущего пункта
      umount /boot # отмонтируем /boot
      mount -a # выполним монтирование всех точек согласно /etc/fstab. # Поскольку там указана точка монтирования /dev/sda, то будет выполнено корректное перемонтирование на живой диск

    • Установите загрузчик на новый ssd диск:

      grub-install /dev/YYY

      Зачем мы выполняем эту операцию?

    • Создайте новый рейд-массив с включением туда только одного нового ssd диска:

      mdadm --create --verbose /dev/md63 --level=1 --raid-devices=1 /dev/YYY

      Команда приведенная выше не отработает без указания специального ключа.Прочитайте справку и добавьте этот ключ к команде.

    • С помощью команды cat /proc/mdstat проверьте результат вашей операции. Что поменялось?
    • Выполните команду lsblk -o NAME,SIZE,FSTYPE,TYPE,MOUNTPOINT и сравните ее вывод с прошлым вызовом. Что поменялось?

  6. Следующим этапом необходимо настроить LVM

    • Выполните команду pvs для просмотра информации о текущих физических томах.
    • Создайте новый физический том включив в него ранее созданный RAID массив:

      pvcreate /dev/md63

    • Выполните команду lsblk -o NAME,SIZE,FSTYPE,TYPE,MOUNTPOINT и сравните ее вывод с прошлым вызовом. Что поменялось?
    • Снова выполните команду pvs. Что поменялось?
    • Увеличим размер Volume Group system с помощью такой команды:

      vgextend system /dev/md63

    • Выполните команды и запишите что вы увидели и что поменялось.

      vgdisplay system -v
      pvs
      vgs
      lvs -a -o+devices

      На каком физическом диске сейчас находятся LV var, log, root?

    • Выполните перемещение данных со старого диска на новый, подставив правильные имена устройств.

      pvmove -i 10 -n /dev/system/root /dev/md0 /dev/md63

      Повторите операцию для всех logical volume.

    • Выполните команды и запишите что вы увидели и что поменялось.

      vgdisplay system -v
      pvs
      vgs
      lvs -a -o+devices
      lsblk -o NAME,SIZE,FSTYPE,TYPE,MOUNTPOINT

    • Подставьте правильное имя raid. Изменим наш VG, удалив из него диск старого raid.

      vgreduce system /dev/md0

    • Выполните команды и запишите что вы увидели и что поменялось.

      lsblk -o NAME,SIZE,FSTYPE,TYPE,MOUNTPOINT
      pvs
      vgs

    • Для красоты картины перемонтируйте /boot на второй ssd диск (ssd4) и выполните lsblk. В итоге на диске ssd3 не должно быть ничего смонтировано. Внимательно проверьте что раздел /boot не пустой! ls /boot должен показать несколько файлов и папок. Изучите что хранится в этом разделе и запишите какой файл\каталог за что отвечает.

  7. Удалите ssd3 диск и добавьте ssd5, hdd1, hdd2 согласно вышеописанным ТЗ, в итоге получив:

    • ssd4 — первый новый ssd
    • ssd5 — второй новый ssd
    • hdd1 — первый новый hdd
    • hdd2 — второй новый hdd

  8. Проверьте что произошло после добавления дисков:

    fdisk -l
    lsblk -o NAME,SIZE,FSTYPE,TYPE,MOUNTPOINT

  9. Восстановим работу основного raid массива:

    • Выполните копирование таблицы разделов, подставив правильные диски:

      sfdisk -d /dev/XXX | sfdisk /dev/YYY

    • Поэтому в скором времени нам потребуется изменить размер этого раздела и расширить raid. Обратите внимание, что когда мы скопировали таблицу разделов со старого диска лказалось что новый размер не использует весь объем жесткого диска. Убедитесь в этом сами, введя команду:

      lsblk -o NAME,SIZE,FSTYPE,TYPE,MOUNTPOINT

  10. Скопируйте загрузочный раздел /boot с диска ssd4 на ssd5:

    dd if=/dev/XXX of=/dev/YYY

  11. Установите grub на новый диск (ssd5).

  12. Изменим размер второго раздела диска ssd5.

  13. Перечитаем таблицу разделов и проверим результат:

    partx -u /dev/XXX
    lsblk -o NAME,SIZE,FSTYPE,TYPE,MOUNTPOINT

    • Добавим новый диск к текущему raid массиву (не забудьте подставить правильные диски):

      mdadm --manage /dev/md63 --add /dev/sda2

    • Расширим количество дисков в нашем массиве до 2-х штук:

      mdadm --grow /dev/md63 --raid-devices=2

    • Посмотрите результат: у нас размечено 2 массива, но оба раздела входящие в этот массив имеют разные размеры:

      lsblk -o NAME,SIZE,FSTYPE,TYPE,MOUNTPOINT

  14. Увеличим размер раздела на диске ssd4

  15. Перечитаем таблицу разделов и проверим результат.

    partx -u /dev/XXX
    lsblk -o NAME,SIZE,FSTYPE,TYPE,MOUNTPOINT

    Обратите внимание, теперь sda2, sdc2 разделы имеют размер > чем размер raid-устройства.

  16. На этом этапе размер raid можно теперь расширить:

    mdadm --grow /dev/md63 --size=max
    lsblk -o NAME,SIZE,FSTYPE,TYPE,MOUNTPOINT # check result

    Просмотрите lsblk и запишите что изменилось.

  17. Однако, хоть мы и изменили размер raid, сами размеры vg root,var,log не изменились

    • Посмотрите чему равен размер PV:

      pvs

    • Расширим размер нашего PV:

      pvresize /dev/md63

    • Посмотрите чему равен размер PV:

      pvs

  18. Добавим вновь появившееся место VG var, root:

    lvs # посмотрим сколько сейчас размечено
    lvextend -l +50%FREE /dev/system/root
    lvextend -l +100%FREE /dev/system/var
    lvs # проверьте что получилось

    работа с ssd1,ssd2 закончена. На этом этапе вы завершили миграцию основного массива на новые диски.

  19. Наша следующая задача — переместить /var/log на новые диски, для этого создадим новый массив и lvm на hdd дисках.

    • Посмотрим какие имена имеют новые hdd диски:

      fdisk -l

    • Создадим raid массив:

      mdadm --create /dev/md127 --level=1 --raid-devices=2 /dev/sdc /dev/sdd

    • Создадим новый PV на рейде из больших дисков:

      pvcreate data /dev/md127

    • Создадим в этом PV группу с названием data:

      vgcreate data /dev/md127

    • Создадим логический том размером всего свободного пространства и назовем его val_log:

      lvcreate -l 100%FREE -n var_log data # lvs # посмотрим результат

    • Отформатируем созданные раздел в ext4:

      mkfs.ext4 /dev/mapper/data-var_log

    • Посмотрим результат:

      lsblk

  20. Перенесем данные логов со старого раздела на новый

    • Примонтируем временно новое хранилище логов:

      mount /dev/mapper/data-var_log /mnt

    • Выполним синхронизацию разделов:

      apt install rsync
      rsync -avzr /var/log/ /mnt/

    • Выясним какие процессы работают сейчас с /var/log:

      apt install lsof
      lsof | grep '/var/log'

    • Останавливаем эти процессы:

      systemctl stop rsyslog.service syslog.socket

    • Выполним финальную синхронизацию разделов (тех данных что могли измениться с момента последней синхронизации):

      rsync -avzr /var/log/ /mnt/

    • Поменяем местами разделы:

      umount /mnt
      umount /var/log
      mount /dev/mapper/data-var_log /var/log

    • Проверяем что получилось:

      lsblk

  21. Правим /etc/fstab

    Наша задача — найти ту строку, в которой монтируется /var/log и поправить устройство system-log на data-var_log. fstab — файл, в котором записываются правила, по которым при загрузке будут смонтированы разделы.

  22. Поскольку как бы мы не изменяли всякие raid, lvm — пока ФС на разделе не будет уведомлена о том что теперь размер раздела изменился, мы не сможем использовать новое пространство. Самое важно на этом этапе — не забыть изменить таблицу раделов (ext4, например). Используйте команду resize2fs для изменения ФС.

  23. Финальный аккорд

    • Выполним перезагрузку. Если вы все сделали правильно — вы снова попадете в вашу ОС (это нужно для того чтобы убедиться что все работает. Никакого смысла кроме самопроверки этот шаг не несет)
    • Выполните проверки, что все что мы хотели сделать действительно было сделано:

      pvs
      lvs
      vgs
      lsblk
      cat /proc/mdstat

  24. [ОПЦИОНАЛЬНО] Выполните действия

    • Перезагрузитесь нажимая F12, чтобы указать при загрузке разные диски, для того чтобы убедиться что вы можете загрузиться с любого из ssd дисков, так чтобы мы не боялись отказа одного из них.
    • Распределите это пространство между root или var, но вместо использования конструкции 100%FREE укажите размер руками с помощью ключа -L: Теперь у вас есть ненужный LV log в VG system.

      -L 500M

    • Исправьте проблему с тем что /boot находится на двух разделах без синхронизации, по-правильному так делать не нужно, здесь это добавлено для примера. Не забудьте предварительно куда-то скопировать содержимое /boot.
    • Создайте новый рейд и включите в него sda1, sda2.
    • Включите эти разделы в существующий raid и восстановите /boot в основном raid, но уже не монтируя его.

Показать больше

Похожие публикации

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Кнопка «Наверх»