Всегда отдавал предпочтение православной, СКУФ'ской разметке диска и никогда не воспринимал LVM всерьёз, но однажды его попробовав, я уже не мог остановиться...=)
Ну действительно плюсов куча. Важный на мой взгляд - это не надо особо заморачиваться с планированием места, при создании виртуальной машины
Опустим простой LVM и сделаем конфигурацию серьёзнее
Для написания этой статьи, все действия создавались в виртуальной машине, но моя домашняя лаба как раз работает на такой конфигурации жёстких дисков.
Смотрим разметку
lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS sr0 11:0 1 1024M 0 rom vda 254:0 0 10G 0 disk ├─vda1 254:1 0 487M 0 part /boot ├─vda2 254:2 0 1K 0 part └─vda5 254:5 0 9.5G 0 part └─test--vg-root 253:0 0 8.5G 0 lvm / vdb 254:16 0 20G 0 disk vdc 254:32 0 20G 0 disk
Лепить вольюм групп будем из двух физических дисков vdb и vdc
Много кто советует инициализировать не диски для LVM, а разделы на них. Так и поступим. Создадим сперва разделы на дисках
fdisk /dev/vdb
Welcome to fdisk (util-linux 2.38.1). Changes will remain in memory only, until you decide to write them. Be careful before using the write command. Device does not contain a recognized partition table. Created a new DOS (MBR) disklabel with disk identifier 0xc3b09434. Command (m for help):
Жмём g
для получения GPT
Created a new GPT disklabel (GUID: C00D60DE-27E0-7047-861D-156F8D036A4F).
Затем n
и далее по умолчанию enter, enter, enter
Command (m for help): n Partition number (1-128, default 1): First sector (2048-41943006, default 2048): Last sector, +/-sectors or +/-size{K,M,G,T,P} (2048-41943006, default 41940991): Created a new partition 1 of type 'Linux filesystem' and of size 20 GiB. Command (m for help):
Далее t
чтобы указать тип разметки и 43
для выбора разметки LVM
Command (m for help): t Selected partition 1 Partition type or alias (type L to list all): 43 Changed type of partition 'Linux LVM' to 'Linux LVM'.
и сохраняем изменения нажатием клавиши w
Повторяем процедуру на втором диске
Добавляем созданные на предыдущем этапе разделы физических дисков в менеджер томов
pvcreate /dev/vdb1 /dev/vdc1
Посмотреть что получилось можно командой
pvdisplay
Далее создаём группу томов с именем vgdata из добавленных двух разделов диска
vgcreate vgdata /dev/vdb1 /dev/vdc1
Аналогично смотрим что у нас получилось
vgdisplay
Теперь можно создавать логические диски
lvcreate --size 3G --name test vgdata
Не забываем про вывод
lvdisplay
Но это простой логический диск, а мы хотим отказоустойчивость, поэтому попросим менеджера томов создать нам диск raid-1
lvcreate --size 3G --name test-mirror --mirrors 1 vgdata
и наблюдаем что получилось
lvs -a -o +devices
В колонке Cpy%Sync отображён, процент синхронизации, а Devices, показывает устройства, на которых находятся данные логического диска.
Аналогично командой lsblk можно посмотреть на каких физических дисках расположены логические.
Создаём файловую систему
mkfs.ext4 /dev/vgdata/test-mirror
Монтируем и юзаем
mount /dev/vgdata/test-mirror /mnt/
mkdir /mnt/test-folder
echo "test" >> /mnt/test-folder/test.txt
Настало время протестировать нашу отказоустойчивость. Сперва посмотрим в каком состоянии у нас конфигурация хранилища и зафиксируем в голове.
lvs -a -o +devices,lv_health_status
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert Devices Health root test-vg -wi-ao---- 8.54g /dev/vda5(0) swap_1 test-vg -wi-ao---- 976.00m /dev/vda5(2187) test vgdata -wi-a----- 3.00g /dev/vdb1(0) test-mirror vgdata rwi-aor--- 3.00g 100.00 test-mirror_rimage_0(0),test-mirror_rimage_1(0) [test-mirror_rimage_0] vgdata iwi-aor--- 3.00g /dev/vdb1(769) [test-mirror_rimage_1] vgdata iwi-aor--- 3.00g /dev/vdc1(1) [test-mirror_rmeta_0] vgdata ewi-aor--- 4.00m /dev/vdb1(768) [test-mirror_rmeta_1] vgdata ewi-aor--- 4.00m /dev/vdc1(0)
Смоделируем отвал диска
На реальном железе будет выглядеть так
echo offline > /sys/block/sdX/device/state
Но у меня это виртуальная машина, поэтому я просто отключу диск
Смотрим что произошло
lvs -a -o +devices,lv_health_status
WARNING: Couldn't find device with uuid 9e1vgn-E0LC-tKy5-oUBJ-XvU5-9sab-aQ7WO0. WARNING: VG vgdata is missing PV 9e1vgn-E0LC-tKy5-oUBJ-XvU5-9sab-aQ7WO0 (last written to /dev/vdc1). LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert Devices Health root test-vg -wi-ao---- 8.54g /dev/vda5(0) swap_1 test-vg -wi-ao---- 976.00m /dev/vda5(2187) test vgdata -wi------- 3.00g /dev/vdb1(0) test-mirror vgdata rwi---r-p- 3.00g test-mirror_rimage_0(0),test-mirror_rimage_1(0) partial [test-mirror_rimage_0] vgdata Iwi---r--- 3.00g /dev/vdb1(769) [test-mirror_rimage_1] vgdata Iwi---r-p- 3.00g [unknown](1) partial [test-mirror_rmeta_0] vgdata ewi---r--- 4.00m /dev/vdb1(768) [test-mirror_rmeta_1] vgdata ewi---r-p- 4.00m [unknown](0) partial
Статус в колоне Health стал partial и что меня малость притормозило, что при попытке подмонтировать диск командой
mount /dev/vgdata/test-mirror /mnt
я получил ошибку
mount: /mnt: special device /dev/vgdata/test-mirror does not exist.
Группа томов vgdata куда-то проебалась.
Те, кто умеет в LVM, конечно же сейчас улыбнулись и подумали что это мелочь...=)
Смотрим что у нас есть вообще из физических дисков
pvscan
WARNING: Couldn't find device with uuid 9e1vgn-E0LC-tKy5-oUBJ-XvU5-9sab-aQ7WO0. WARNING: VG vgdata is missing PV 9e1vgn-E0LC-tKy5-oUBJ-XvU5-9sab-aQ7WO0 (last written to [unknown]). PV /dev/vdb1 VG vgdata lvm2 [<20.00 GiB / 13.99 GiB free] PV [unknown] VG vgdata lvm2 [<20.00 GiB / 16.99 GiB free] PV /dev/vda5 VG test-vg lvm2 [<9.52 GiB / 24.00 MiB free] Total: 3 [49.51 GiB] / in use: 3 [49.51 GiB] / in no VG: 0 [0 ]
Один из перешёл в статус неизвестный. Ну в принципе логично. А вот группа томов vgdata есть! Нам просто необходимо активировать её командой
vgchange -ay vgdata
Смотрим
lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS sr0 11:0 1 1024M 0 rom vgdata-test--mirror_rmeta_1-missing_0_0 253:5 0 4M 0 lvm └─vgdata-test--mirror_rmeta_1 253:6 0 4M 0 lvm └─vgdata-test--mirror 253:9 0 3G 0 lvm vgdata-test--mirror_rimage_1-missing_0_0 253:7 0 3G 0 lvm └─vgdata-test--mirror_rimage_1 253:8 0 3G 0 lvm └─vgdata-test--mirror 253:9 0 3G 0 lvm vda 254:0 0 10G 0 disk ├─vda1 254:1 0 487M 0 part /boot ├─vda2 254:2 0 1K 0 part └─vda5 254:5 0 9.5G 0 part ├─test--vg-root 253:0 0 8.5G 0 lvm / └─test--vg-swap_1 253:1 0 976M 0 lvm [SWAP] vdb 254:16 0 20G 0 disk └─vdb1 254:17 0 20G 0 part ├─vgdata-test 253:2 0 3G 0 lvm ├─vgdata-test--mirror_rmeta_0 253:3 0 4M 0 lvm │ └─vgdata-test--mirror 253:9 0 3G 0 lvm └─vgdata-test--mirror_rimage_0 253:4 0 3G 0 lvm └─vgdata-test--mirror 253:9 0 3G 0 lvm
Мнотируем диск
mount /dev/vgdata/test-mirror /mnt
Смотрим содержимое
ls -la /mnt
drwxr-xr-x 2 root root 4096 Oct 19 06:44 1 drwx------ 2 root root 16384 Oct 19 06:43 lost+found drwxr-xr-x 2 root root 4096 Oct 19 06:50 test-folder
Фух...! Всё на месте
В реальной жизни мы выпавший диск заменим на другой и пусть он у нас будет немного большего размера.
Я добавил в виртуальную машину диск, ёмкостью на 25% больше, чем был в группе томов
lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS sr0 11:0 1 1024M 0 rom vda 254:0 0 10G 0 disk ├─vda1 254:1 0 487M 0 part /boot ├─vda2 254:2 0 1K 0 part └─vda5 254:5 0 9.5G 0 part ├─test--vg-root 253:0 0 8.5G 0 lvm / └─test--vg-swap_1 253:1 0 976M 0 lvm [SWAP] vdb 254:16 0 20G 0 disk └─vdb1 254:17 0 20G 0 part vdc 254:32 0 25G 0 disk
Инициализируем его fdisk
'ом, создаём раздел, как в начале статьи и добавляем его в физическую группу и группу томов LVM командами
pvcreate /dev/vdc1
vgextend vgdata /dev/vdc1
Удаляем запись группы томов
vgreduce --removemissing --force vgdata
Запустим копирование нашего логического диска на добавленный ранее диск
lvconvert --repair /dev/vgdata/test-mirror
Всё...!