Лабораторная работа: настраиваем lvm, raid на linux
Небольшое отступление: данная лр является синтетической.
Некторые задания которые здесь описаны можно сделать гораздо проще, но поскольку задача л/р — познакомиться
с функционалом raid, lvm то некоторые операции искуственно усложнены.
Требования к инструментам для выполнения лр:
Средства виртуализации, например Virtualbox
Установочный образ linux, например Debian9
Наличие интернета для скачивания нескольких пакетов
Подключение по ssh к установленной VM (опционально)
ВНИМАНИЕ
Данная лабораторная работа связана с такой тонкой материей как сохранность данных — это такая область,
которая позволяет из-за мельчайшей ошибки — одной лишней буквы или цифры потерять все ваши данные.
Поскольку вы выполняете лабораторную работу вам ничего не грозит, разве что придется начать делать ее заново.
В реальной жизни все гораздо серьезнее, поэтому следует очень внимательно вводить имена дисков, понимая
что именно вы выполняете текущей командой и с какими дисками работаете.
Второй важный момент — именование дисков и разделов: в зависимости от ситуации номера дисков могут отличаться
от тех значений, что представлены в командах в лабораторной работе.
Так, например, если удалить диск sda из массива, а затем добавить новый диск, то новый диск будет отображаться
в системе с именем sda. Если же выполнить перезагрузку перед добавлением нового диска, то новый
диск будет иметь имя sdb, а старый станет именоваться 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 порта
2) Начать установку 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»
Повторите точно такую же настройку для второго диска, в результате получив следующее:
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: 25 от размера вашего диска
Create logical volume
logical volume name: var
logical volume size: 25 от размера вашего диска
Create logical volume
logical volume name: log
logical volume size: 15 от размера вашего диска
Выбрав Display configuration details вы должны получить следующую картину:
Завершив настройку LVM вы должны увидеть следующее:
Разметка разделов: по-очереди выберите каждый созданный в LVM том и разметьте их, например, для root так:
Use as: ext4
mount point: /
результат разметки корневого раздела должен получиться таким:
повторите операцию разметки для var и log выбрав соответствующие точки монтирования (/var и /var/log вручную ввести), получив следующий результат:
Выберите Finish Partitioning
Вам зададут несколько вопросов, про то что у вас остался несмонтированный раздел и не настроен swap. Следует ответить отрицательно на оба вопроса.
Финальный результат должен получиться вот таким:
3) Закончить установку ОС, поставив grub на первое устройство (sda) и загрузить систему.
4) Выполните копирование содержимого раздела /boot с диска sda (ssd1) на диск sdb (ssd2)
Перечислите все диски которые вам выдала предыдущая команда и опишите что это за диск
Найдите диск на который не была выполнена установка grub и выполните эту установку: grub-install /dev/sdb
просмотрите информацию о текущем raid командой cat /proc/mdstat и запишите что вы увидели.
посмотрите выводы команд: pvs, vgs, lvs, mount и запишите что именно вы увидели
Опишите своими словами что вы сделали и какой результат получили в итоге проделанного задания
После выполнения этого задания рекомендуется сохранить резервную копию папки с виртуальной машиной или сделать
vagrant box: https://t.me/bykvaadm/191
Результат: Виртуальная машина с дисками 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) Теперь нужно вручную выполните синхронизацию разделов, не входящих в RAID.
Для этого воспользуемся утилитой dd, скопировав с «живого» диска на новенький, который вы недавно поставили
dd if=/dev/XXX of=/dev/YYY
8) После завершнения синхронизации установите grub на новый диск
9) Выполните перезагрузку ВМ, для того чтобы убедиться что все работает
Опишите своими словами что вы сделали и какой результат получили в итоге проделанного задания
Результат: Удален диск ssd1, сохранен диск ssd2, добавлен диск ssd3.
Задание 3 (Добавление новых дисков и перенос раздела)
Это самое сложное и объемное задание из всех представленных.
Очень внимательно проверяйте что вы делаете и с какими дисками и разделами.
Рекомендуется снять копию перед его выполнением.
Это задание независимо от задания №2, его можно выполнять после задания №1 с поправкой на имена дисков.
Вторая часть задания этой лабораторной должна привести в точно такое же состояние которое было после выполнения первой части.
Для того чтобы вам было проще работать могу рекомендовать не удалять физически диски с хостовой машины, а только лишь
отсоединять их в свойствах машины. С точки зрения ОС в ВМ это будет выглядеть абсолютно одинаково, но вы сможете
в случае чего подключить диск обратно и продолжить выполнение работы откатившись на пару пунктов назад, в случае если
у вас возникли проблемы. Например вы могли выполнить неверно или забыть скопировать на новый диск раздел /boot.
Я могу лишь посоветовать несколько раз перепроверять с какими дисками и разделами вы работаете, а еще лучше
выписать на листочек соответствие дисков, разделов и «физическому» номеру диска. Красивое и понятное дерево
рисует команда lsblk, пользуйтесь ей как можно чаще для анализа того что вы сделали и что нужно сделать.
К истории…
Представьте себе что ваш сервер работал долгое время на 2-х ssd дисках, как вдруг…
1) Проэмулируйте отказ диска ssd2, удалив из свойств ВМ диск и перезагрузившись
2) Посмотрите текущее состояние дисков и RAID:
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 диска:
Команда приведенная выше не отработает без указания специального ключа.
Прочитайте справку и добавьте этот ключ к команде.
С помощью команды 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?
Выполните перемещение данных со старого диска на новый, подставив правильные имена устройств.
Выполните команды и запишите что вы увидели и что поменялось.
vgdisplay system -v
pvs
vgs
lvs -a -o+devices
lsblk -o NAME,SIZE,FSTYPE,TYPE,MOUNTPOINT
Изменим наш VG, удалив из него диск старого raid. Подставьте правильное имя 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) Проверьте что произошло после добавления дисков:
Обратите внимание, что когда мы скопировали таблицу разделов со старого диска лказалось что новый размер
не использует весь объем жесткого диска.
Поэтому в скором времени нам потребуется изменить размер этого раздела и расширить raid.
Убедитесь в этом сами, введя команду:
lsblk -o NAME,SIZE,FSTYPE,TYPE,MOUNTPOINT
10) скопируйте загрузочный раздел /boot с диска ssd4 на ssd5
dd if=/dev/XXX of=/dev/YYY
11) Установите grub на новый диск (ssd5)
12) изменим размер второго раздела диска ssd5
запустите утилиту для работы с разметкой дисков:
fdisk /dev/XXX
введите ключ d для того чтобы удалить существующий раздел (выберите 2)
введите ключ n для того чтобы создать новый раздел
введите ключ p для того чтобы указать тип раздела «первичный»
введите ключ 2 для того чтобы новый раздел имел второй номер
First sector: нажмите enter, чтобы согласиться с атоматически вычесленным размером начала раздела
Last sector: нажмите enter, чтобы согласиться с атоматически вычесленным размером конца раздела
введите ключ l для того чтобы увидеть список всех возможных типов разделов и найдите в нем Linux raid auto
введите ключ t для того чтобы изменить тип созданного раздела (2) и введите найденный на предыдущем шаге номер.
введите ключ w для того чтобы записать изменение на диск.
12) перечитаем таблицу разделов и проверим результат
добавим новый диск к текущему raid массиву (не забудьте подставить правильные диски)
mdadm --manage /dev/md63 --add /dev/sda2
Расширим количество дисков в нашем массиве до 2-х штук:
mdadm --grow /dev/md63 --raid-devices=2
Посмотрите результат: у нас размечено 2 массива, но оба раздела входящие в этот массив имеют разные размеры
lsblk -o NAME,SIZE,FSTYPE,TYPE,MOUNTPOINT
13) увеличим размер раздела на диске ssd4
запустите утилиту для работы с разметкой дисков:
fdisk /dev/XXX
введите ключ d для того чтобы удалить существующий раздел (выберите 2)
введите ключ n для того чтобы создать новый раздел
введите ключ p для того чтобы указать тип раздела «первичный»
введите ключ 2 для того чтобы новый раздел имел второй номер
First sector: нажмите enter, чтобы согласиться с атоматически вычесленным размером начала раздела
Last sector: нажмите enter, чтобы согласиться с атоматически вычесленным размером конца раздела
В конце разметки следует выбрать No, чтобы оставить сигнатуру принадлежности раздела к массиву.
введите ключ w для того чтобы записать изменение на диск.
12) перечитаем таблицу разделов и проверим результат
создадим логический том размером всего свободного пространства и назовем его val_log
lvcreate -l 100%FREE -n var_log data # lvs # посмотрим результат
отформатируем созданные раздел в ext4
mkfs.ext4 /dev/mapper/data-var_log
посмотрим результат
lsblk
17) перенесем данные логов со старого раздела на новый
примонтируем временно новое хранилище логов
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
18) Правим /etc/fstab
fstab — файл, в котором записываются правила, по которым при загрузке будут смонтированы раздеы
наша задача — найти ту строку, в которой монтируется /var/log и поправить устройство system-log на data-var_log
19) Самое важно на этом этапе — не забыть изменить таблицу раделов (ext4, например). Поскольку как бы мы не изменяли всякие raid, lvm — пока ФС на разделе не будет уведомлена о том что теперь размер раздела изменился, мы не сможем использовать новое пространство. Используйте команду resize2fs для изменения ФС.
20) Финальный аккорд
выполним перезагрузку. Если вы все сделали правильно — вы снова попадете в вашу ОС (это нужно для того чтобы убедиться что все работает. Никакого смысла кроме самопроверки этот шаг не несет)
выполните проверки, что все что мы хотели сделать действительно было сделано:
pvs
lvs
vgs
lsblk
cat /proc/mdstat
21) [ОПЦИОНАЛЬНО] Выполните действия
перезагрузитесь нажимая F12, чтобы указать при загрузке разные диски, для того чтобы убедиться что вы можете загрузиться
с любого из ssd дисков, так чтобы мы не боялись отказа одного из них
теперь у вас есть ненужный LV log в VG system. Распределите это пространство между root или var, но вместо использования
конструкции 100%FREE укажите размер руками с помощью ключа -L:
-L 500M
исправьте проблему с тем что /boot находится на двух разделах без синхронизации, по-правильному так делать не нужно,
здесь это добавлено для примера. Не забудьте предварительно куда-то скопировать содержимое /boot.
создайте новый рейд и включите в него sda1,sda2
включите эти разделы в существующий raid и восставновите /boot в основном raid, но уже не монтируя его.