Лабораторная работа: настраиваем lvm, raid на linux
Небольшое отступление: данная л\р является синтетической.
Некоторые задания которые здесь описаны можно сделать гораздо проще, но поскольку задача л/р — познакомиться с функционалом raid, lvm то некоторые операции искусственно усложнены.
Требования к инструментам для выполнения л\р:
- Средства виртуализации, например Virtualbox
- Установочный образ linux, например Debian9
- Наличие интернета для скачивания нескольких пакетов
- Подключение по ssh к установленной VM (опционально)
ВНИМАНИЕ
Данная лабораторная работа связана с такой тонкой материей как сохранность данных — это такая область, которая позволяет из-за мельчайшей ошибки — одной лишней буквы или цифры потерять все ваши данные.
Поскольку вы выполняете лабораторную работу вам ничего не грозит, разве что придется начать делать ее заново.
В реальной жизни все гораздо серьезнее, поэтому следует очень внимательно вводить имена дисков, понимая что именно вы выполняете текущей командой и с какими дисками работаете.
Если же выполнить перезагрузку перед добавлением нового диска, то новый диск будет иметь имя sdb, а старый станет именоваться sda Второй важный момент — именование дисков и разделов: в зависимости от ситуации номера дисков могут отличаться от тех значений, что представлены в командах в лабораторной работе.
Так, например, если удалить диск sda из массива, а затем добавить новый диск, то новый диск будет отображаться в системе с именем sda.
Лабораторная работа должна выполняться под суперпользователем (root) поскольку большая часть команд требует повышенных привилегий и не имеет смысла постоянно повышать привилегии через sudo.
Материалы для изучения
- RAID
- LVM
- Именование дисков в ОС Linux
- Что такое раздел
- Что такое таблица разделов и где она хранится
- Что такое grub
Используемые утилиты
- Просмотр информации о дисках:
- lsblk -o NAME,SIZE,FSTYPE,TYPE,MOUNTPOINT
- fdisk -l
- Просмотр информации и работа с LVM
- pvs
- pvextend
- pvcreate
- pvresize
- vgs
- vgreduce
- lvs
- lvextend
- Просмотр информации и работа с RAID:
- сat /proc/mdstat
- mdadm
- Точки монтирования:
- mount
- umount
- cat /etc/fstab
- cat /etc/mtab
- Переразметка диска:
- fdisk /dev/XXX
- Копирование разделов:
- dd if=/dev/xxx of=/dev/yyy
- Работа с таблицей разделов:
- partx
- sfdisk
- mkfs.ext4
- Работа с загрузчиком:
- grub-install /dev/XXX
- update-grub
- misc
- lsof
- apt
- rsync
Лабораторная работа состоит из 3-х частей:
- Настройка работоспособной системы с использованием lvm, raid.
- Эмуляция отказа одного из дисков.
- Замена дисков на лету, с добавлением новых дисков и переносом разделов.
Задание 1 (Установка ОС и настройка LVM, RAID)
-
Создайте новую виртуальную машину, выдав ей следующие характеристики:
- 1 gb ram
- 1 cpu
- 2 hdd (назвать их ssd1, ssd2 и назначить равный размер, поставить галочки hot swap и ssd)
- SATA контроллер настроен на 4 порта:
-
Начать установку Linux и дойдя до выбора жестких дисков сделать следующее:
- Partitioning method: manual, после чего вы должны увидеть такую картину:
- Настройка отдельного раздела под /boot: Выберите первый диск и создайте на нем новую таблицу разделов:
- Partition size: 512M
- Mount point: /boot
- Повторите настройку для второго диска, но поскольку одновременно монтировать 2 раза /boot нельзя, то выберите mount point: none в итоге получив следующее (картинка с косяком, переделывать лень):
- Настройка RAID:
- Выберите свободное место на первом диске и настройте в качестве типа раздела physical volume for RAID
- Выберите "Done setting up the partition"
- Повторите точно такую же настройку для второго диска, в результате получив следующее:
- Выберите пункт "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
- В итоге вы должны получить такую картину:
- Настройка 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 вы должны получить следующую картину:
- Завершив настройку LVM вы должны увидеть следующее:
- Разметка разделов: по-очереди выберите каждый созданный в LVM том и разметьте их, например, для root так:
- Use as: ext4
- mount point: /
- Результат разметки корневого раздела должен получиться таким:
- Повторите операцию разметки для var и log выбрав соответствующие точки монтирования (/var и /var/log вручную ввести), получив следующий результат:
- Выберите Finish Partitioning
- Вам зададут несколько вопросов, про то что у вас остался несмонтированный раздел и не настроен swap. Следует ответить отрицательно на оба вопроса.
- Финальный результат должен получиться вот таким:
-
Закончить установку ОС, поставив grub на первое устройство (sda) и загрузить систему.
-
Выполните копирование содержимого раздела /boot с диска sda (ssd1) на диск sdb (ssd2)
dd if=/dev/sda1 of=/dev/sdb1
-
Выполнить установку 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 (Эмуляция отказа одного из дисков)
- Если вы поставили галочку hot swap, то вам доступно удаление дисков на лету:
- Выполните удаление диска ssd1 в свойствах машины.
- Найдите директорию, где хранятся файлы вашей виртуальной машины и удалите ssd1.vmdk.
- Убедитесь что ваша виртуальная машина по-прежнему работает
- Выполните перезагрузку виртуальной машины и убедитесь что она по-прежнему работает
- Проверьте статус RAID-массива:
cat /proc/mdstat
- Добавьте в интерфейсе VM новый диск такого же размера и назовите его ssd3.
- Выполните операции:
- Посмотрите что новый диск приехал в систему командой
fdisk -l
- Скопируйте таблицу разделов со старого диска на новый:
sfdisk -d /dev/XXXX | sfdisk /dev/YYY
- Посмотрите результат командой
fdisk -l
- Добавьте в рейд массив новый диск:
mdadm --manage /dev/md0 --add /dev/YYY
- Посмотрите результат:
cat /proc/mdstat
. Вы должны увидеть что началась синхронизация
- Посмотрите что новый диск приехал в систему командой
-
Для этого воспользуемся утилитой dd, скопировав с "живого" диска на новенький, который вы недавно поставили: Теперь нужно вручную выполните синхронизацию разделов, не входящих в RAID.
dd if=/dev/XXX of=/dev/YYY
- После завершения синхронизации установите grub на новый диск.
- Выполните перезагрузку ВМ, для того чтобы убедиться что все работает.
Опишите своими словами что вы сделали и какой результат получили в итоге проделанного задания.
Результат: удалён диск ssd1, сохранен диск ssd2, добавлен диск ssd3.
Задание 3 (Добавление новых дисков и перенос раздела)
Очень внимательно проверяйте что вы делаете и с какими дисками и разделами. Это самое сложное и объемное задание из всех представленных. Это задание независимо от задания №2, его можно выполнять после задания №1 с поправкой на имена дисков. Рекомендуется снять копию перед его выполнением.
Вторая часть задания этой лабораторной должна привести в точно такое же состояние которое было после выполнения первой части.
С точки зрения ОС в ВМ это будет выглядеть абсолютно одинаково, но вы сможете в случае чего подключить диск обратно и продолжить выполнение работы откатившись на пару пунктов назад, в случае если у вас возникли проблемы. Для того чтобы вам было проще работать могу рекомендовать не удалять физически диски с хостовой машины, а только лишь отсоединять их в свойствах машины. Я могу лишь посоветовать несколько раз перепроверять с какими дисками и разделами вы работаете, а еще лучше выписать на листочек соответствие дисков, разделов и "физическому" номеру диска. Например вы могли выполнить неверно или забыть скопировать на новый диск раздел /boot. Красивое и понятное дерево рисует команда lsblk
, пользуйтесь ей как можно чаще для анализа того что вы сделали и что нужно сделать.
К истории...
Представьте себе что ваш сервер работал долгое время на 2-х ssd дисках, как вдруг...
-
Проэмулируйте отказ диска ssd2, удалив из свойств ВМ диск и перезагрузившись.
-
Посмотрите текущее состояние дисков и RAID:
cat /proc/mdstat
fdisk -l
lsblk -o NAME,SIZE,FSTYPE,TYPE,MOUNTPOINT -
Вам повезло — начальство разрешило закупить несколько новых дисков:
2 SSD на замену погибшему, а также на замену пока еще функционирующему. 2 SATA большого объема для давно назревшей задачи вынесения раздела с логами на отдельный диск.
одновременно, поэтому добавить все диски сразу нельзя. Следует учитывать, что корзина сервера поддерживает установку только 4х дисков.
Объем HDD выбрать в 2 раза больше чем SSD.
Объем SSD выбрать в 1,25 раза больше бывших SSD. -
Добавьте один новый ssd диск, назвав его ssd4, а после добавления проверьте что произошло:
fdisk -l
lsblk -o NAME,SIZE,FSTYPE,TYPE,MOUNTPOINT -
На этот раз мы будем переносить данные с помощью 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 и сравните ее вывод с прошлым вызовом. Что поменялось?
-
-
Следующим этапом необходимо настроить 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
должен показать несколько файлов и папок. Изучите что хранится в этом разделе и запишите какой файл\каталог за что отвечает.
-
Удалите ssd3 диск и добавьте ssd5, hdd1, hdd2 согласно вышеописанным ТЗ, в итоге получив:
- ssd4 — первый новый ssd
- ssd5 — второй новый ssd
- hdd1 — первый новый hdd
- hdd2 — второй новый hdd
-
Проверьте что произошло после добавления дисков:
fdisk -l
lsblk -o NAME,SIZE,FSTYPE,TYPE,MOUNTPOINT -
Восстановим работу основного raid массива:
-
Выполните копирование таблицы разделов, подставив правильные диски:
sfdisk -d /dev/XXX | sfdisk /dev/YYY
-
Поэтому в скором времени нам потребуется изменить размер этого раздела и расширить raid. Обратите внимание, что когда мы скопировали таблицу разделов со старого диска лказалось что новый размер не использует весь объем жесткого диска. Убедитесь в этом сами, введя команду:
lsblk -o NAME,SIZE,FSTYPE,TYPE,MOUNTPOINT
-
-
Скопируйте загрузочный раздел /boot с диска ssd4 на ssd5:
dd if=/dev/XXX of=/dev/YYY
-
Установите grub на новый диск (ssd5).
-
Изменим размер второго раздела диска ssd5.
-
Перечитаем таблицу разделов и проверим результат:
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
-
-
Увеличим размер раздела на диске ssd4
-
Перечитаем таблицу разделов и проверим результат.
partx -u /dev/XXX
lsblk -o NAME,SIZE,FSTYPE,TYPE,MOUNTPOINTОбратите внимание, теперь sda2, sdc2 разделы имеют размер > чем размер raid-устройства.
-
На этом этапе размер raid можно теперь расширить:
mdadm --grow /dev/md63 --size=max
lsblk -o NAME,SIZE,FSTYPE,TYPE,MOUNTPOINT # check resultПросмотрите lsblk и запишите что изменилось.
-
Однако, хоть мы и изменили размер raid, сами размеры vg root,var,log не изменились
-
Посмотрите чему равен размер PV:
pvs
-
Расширим размер нашего PV:
pvresize /dev/md63
-
Посмотрите чему равен размер PV:
pvs
-
-
Добавим вновь появившееся место VG var, root:
lvs # посмотрим сколько сейчас размечено
lvextend -l +50%FREE /dev/system/root
lvextend -l +100%FREE /dev/system/var
lvs # проверьте что получилосьработа с ssd1,ssd2 закончена. На этом этапе вы завершили миграцию основного массива на новые диски.
-
Наша следующая задача — переместить /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
-
-
Перенесем данные логов со старого раздела на новый
-
Примонтируем временно новое хранилище логов:
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
-
-
Правим /etc/fstab
Наша задача — найти ту строку, в которой монтируется /var/log и поправить устройство
system-log
наdata-var_log
. fstab — файл, в котором записываются правила, по которым при загрузке будут смонтированы разделы. -
Поскольку как бы мы не изменяли всякие raid, lvm — пока ФС на разделе не будет уведомлена о том что теперь размер раздела изменился, мы не сможем использовать новое пространство. Самое важно на этом этапе — не забыть изменить таблицу раделов (ext4, например). Используйте команду
resize2fs
для изменения ФС. -
Финальный аккорд
- Выполним перезагрузку. Если вы все сделали правильно — вы снова попадете в вашу ОС (это нужно для того чтобы убедиться что все работает. Никакого смысла кроме самопроверки этот шаг не несет)
-
Выполните проверки, что все что мы хотели сделать действительно было сделано:
pvs
lvs
vgs
lsblk
cat /proc/mdstat
-
[ОПЦИОНАЛЬНО] Выполните действия
- Перезагрузитесь нажимая F12, чтобы указать при загрузке разные диски, для того чтобы убедиться что вы можете загрузиться с любого из ssd дисков, так чтобы мы не боялись отказа одного из них.
-
Распределите это пространство между root или var, но вместо использования конструкции 100%FREE укажите размер руками с помощью ключа -L: Теперь у вас есть ненужный LV log в VG system.
-L 500M
- Исправьте проблему с тем что /boot находится на двух разделах без синхронизации, по-правильному так делать не нужно, здесь это добавлено для примера. Не забудьте предварительно куда-то скопировать содержимое /boot.
- Создайте новый рейд и включите в него sda1, sda2.
- Включите эти разделы в существующий raid и восстановите /boot в основном raid, но уже не монтируя его.