Лабораторная работа: настраиваем 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 порта

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

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

  • Partitioning method: manual, после чего вы должны увидеть такую картину:
    Лабораторная работа: настраиваем lvm, raid на linux

  • Настройка отдельного раздела под /boot: Выберите первый диск и создайте на нем новую таблицу разделов

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

  • Настройка RAID:

    • Выберите свободное место на первом диске и настройте в качестве типа раздела physical volume for RAID
    • Выберите «Done setting up the partition»
    • Повторите точно такую же настройку для второго диска, в результате получив следующее:
      Лабораторная работа: настраиваем lvm, raid на linux
    • Выберите пункт «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, raid на linux

  • Настройка 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, raid на linux
    • Завершив настройку LVM вы должны увидеть следующее:
      Лабораторная работа: настраиваем lvm, raid на linux

  • Разметка разделов: по-очереди выберите каждый созданный в LVM том и разметьте их, например, для root так:

    • Use as: ext4
    • mount point: /
    • результат разметки корневого раздела должен получиться таким:
      Лабораторная работа: настраиваем lvm, raid на linux
    • повторите операцию разметки для var и log выбрав соответствующие точки монтирования (/var и /var/log вручную ввести), получив следующий результат:
      Лабораторная работа: настраиваем lvm, raid на linux
    • Выберите Finish Partitioning
    • Вам зададут несколько вопросов, про то что у вас остался несмонтированный раздел и не настроен swap. Следует ответить отрицательно на оба вопроса.

  • Финальный результат должен получиться вот таким:
    Лабораторная работа: настраиваем lvm, raid на linux
    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: 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:

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

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

    2 SATA большого объема для давно назревшей задачи вынесения раздела с логами на отдельный диск

    2 SSD на замену погибшему, а также на замену пока еще функционирующему.

    Следует учитывать, что корзина сервера поддерживает установку только 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

      Изменим наш 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) Проверьте что произошло после добавления дисков:

      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

        запустите утилиту для работы с разметкой дисков:

        fdisk /dev/XXX

        введите ключ d для того чтобы удалить существующий раздел (выберите 2)
        введите ключ n для того чтобы создать новый раздел
        введите ключ p для того чтобы указать тип раздела «первичный»
        введите ключ 2 для того чтобы новый раздел имел второй номер
        First sector: нажмите enter, чтобы согласиться с атоматически вычесленным размером начала раздела
        Last sector: нажмите enter, чтобы согласиться с атоматически вычесленным размером конца раздела
        введите ключ l для того чтобы увидеть список всех возможных типов разделов и найдите в нем Linux raid auto
        введите ключ t для того чтобы изменить тип созданного раздела (2) и введите найденный на предыдущем шаге номер.
        введите ключ w для того чтобы записать изменение на диск.
        12) перечитаем таблицу разделов и проверим результат

        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

        13) увеличим размер раздела на диске ssd4

        запустите утилиту для работы с разметкой дисков:

        fdisk /dev/XXX

        введите ключ d для того чтобы удалить существующий раздел (выберите 2)
        введите ключ n для того чтобы создать новый раздел
        введите ключ p для того чтобы указать тип раздела «первичный»
        введите ключ 2 для того чтобы новый раздел имел второй номер
        First sector: нажмите enter, чтобы согласиться с атоматически вычесленным размером начала раздела
        Last sector: нажмите enter, чтобы согласиться с атоматически вычесленным размером конца раздела
        В конце разметки следует выбрать No, чтобы оставить сигнатуру принадлежности раздела к массиву.
        введите ключ w для того чтобы записать изменение на диск.
        12) перечитаем таблицу разделов и проверим результат

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

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

        13) на этом этапе размер raid можно теперь расширить

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

        Просмотрите lsblk и запишите что изменилось
        14) Однако, хоть мы и изменили размер raid, сами размеры vg root,var,log не изменились

        • посмотрите чему равен размер PV:
          pvs
        • расширим размер нашего PV:
          pvresize /dev/md63
        • посмотрите чему равен размер PV:
          pvs

          15) Добавим вновь появившееся место VG var,root

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

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

          16) Наша следующая задача — переместить /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

            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, но уже не монтируя его.

Источник: habr.com