Лабораторна работа: конфигуриране на 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
  • cat /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) работа с bootloader
  • grub-install /dev/XXX
  • update-grub
    9) разнообразно
  • 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 и стигнете до избора на твърди дискове, след което направете следното:

  • Метод на разпределение: ръчен, след което трябва да видите следната картина:
    Лабораторна работа: конфигуриране на lvm, raid в linux

  • Конфигуриране на отделен дял за \/boot: Изберете първия диск и създайте на него нова таблица с дялове

    • Размер на дяла: 512M
    • Точка на монтиране: \/boot
    • Повторете настройката за втория диск, но тъй като не можете да монтирате 2 пъти \/boot, изберете точка на монтиране: none, в резултат получавате следното (картина с грешка, ленива преработка):
      Лабораторна работа: конфигуриране на lvm, raid в linux

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

    • Изберете свободно пространство на първия диск и настройте типа на дяла на physical volume for RAID.
    • Изберете „Готово с настройването на дяла“
    • Повторете точно същата настройка за втория диск, в резултат да получите следното:
      Лабораторна работа: конфигуриране на lvm, raid в linux
    • Изберете опцията „Конфигуриране на софтуерен RAID“
    • Създайте MD устройство
    • Тип на софтуерното RAID устройство: Изберете огледален масив
    • Активни устройства за RAID XXXX масив: Изберете и двата диска
    • Спарени устройства: Оставете 0 по подразбиране
    • Активни устройства за RAID XX масив: изберете дяловете, които сте създали за raid
    • Завърши
    • В крайна сметка трябва да получите следната картина:
      Лабораторна работа: конфигуриране на lvm, raid в linux

  • Настройка на LVM: Изберете Конфигуриране на Логическия Обем Мениджър

    • Запазете текущата конфигурация на дяловете и конфигурирайте LVM: Да
    • Създайте група обеми
    • Име на групата обеми: system
    • Устройства за новата група обеми: Изберете вашия създаден RAID
    • Създайте логически обем
    • име на логическия обем: root
    • размер на логическия обем: 25 от размера на вашия диск
    • Създайте логически обем
    • име на логическия обем: var
    • размер на логическия обем: 25 от размера на вашия диск
    • Създайте логически обем
    • име на логическия обем: log
    • размер на логическия обем: 15 от размера на вашия диск
    • Ако изберете Показване на детайли от конфигурацията, трябва да получите следната картина:
      Лабораторна работа: конфигуриране на lvm, raid в linux
    • След завършване на настройката на LVM, трябва да видите следното:
      Лабораторна работа: конфигуриране на lvm, raid в linux

  • Разпределение на дяловете: последователно изберете всеки създаден в LVM том и го разпределете, например, за root така:

    • Използвай като: ext4
    • точка на монтиране: \/
    • резултатът от разпределението на коренния дял трябва да изглежда така:
      Лабораторна работа: конфигуриране на lvm, raid в linux
    • повторете операцията на разпределение за var и log, избирайки съответните точки на монтиране (\var и \var\log, въведете ръчно), получавайки следния резултат:
      Лабораторна работа: конфигуриране на lvm, raid в linux
    • Изберете Завършване на разпределението
    • Ще ви зададат няколко въпроса относно несмонтирования дял и ненастроен 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
  • Добавете новия диск в RAID масива: 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 да е двойно по-голям от 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

      Защо изпълняваме тази операция?

      създайте нов RAID масив, включващ само един нов 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 

      Повторете операцията за всички логически томове

      Изпълнете командите и запишете какво видяхте и какво се е променило.

      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, за да новият раздел има втори номер
        Първи сектор: натиснете enter, за да се съгласите с автоматично изчисления размер на началото на раздела
        Последен сектор: натиснете 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, за да новият раздел има втори номер
        Първи сектор: натиснете enter, за да се съгласите с автоматично изчисления размер на началото на раздела
        Последен сектор: натиснете enter, за да се съгласите с автоматично изчисления размер на края на раздела
        В края на разпределението изберете Не, за да оставите сигнатурата на принадлежността на раздела към масива.
        въведете ключ 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 # проверете резултата

        Прегледайте 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 на RAID от големите дискове
            pvcreate data /dev/md127
          • Ще създадем група в този PV с името data
            vgcreate data /dev/md127
          • Ще създадем логически том с размер на всичкото свободно пространство и ще го наречем var_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 някъде.
              • създайте нов raid и включете в него sda1, sda2
              • включете тези дялове в съществуващ raid и възстановете /boot в основния raid, но вече не го монтирайте.

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

Купете надежден хостинг за сайтове със защита от DDoS, VPS и VDS сървъри 🔥 Купете надежден хостинг за сайтове със защита от DDoS, VPS и VDS сървъри | ProHoster