21 KiB
Домашнее задание 3
Работа с LVM
Для выполнение задания используется Ubuntu Server 24.04
Добавляем 5 hdd в VM
Для выполнения домашнего задания добавил в VM 4 диска. 1 диск 15G, 2 диска по 5G ,1 диск 1G и 1 диск 10G
Проверяем через lsblk, что диски присутствуют в системе
nimda@ubuntu:~$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
sda 8:0 0 20G 0 disk
├─sda1 8:1 0 1M 0 part
├─sda2 8:2 0 1.8G 0 part /boot
└─sda3 8:3 0 18.2G 0 part
└─ubuntu--vg-ubuntu--lv 252:0 0 16G 0 lvm /
sdb 8:16 0 15G 0 disk
sdc 8:32 0 5G 0 disk
sdd 8:48 0 5G 0 disk
sde 8:64 0 1G 0 disk
sdf 8:80 0 10G 0 disk
sr0 11:0 1 3.1G 0 rom
Размечаем диски для lvm
С помощью pvcreate размечаем все диски для lvm
nimda@ubuntu:~$ sudo pvcreate /dev/sdb /dev/sdc /dev/sdd /dev/sde
Physical volume "/dev/sdb" successfully created.
Physical volume "/dev/sdc" successfully created.
Physical volume "/dev/sdd" successfully created.
Physical volume "/dev/sde" successfully created.
Создаем Volume Group для будущих разделов /var и /home
С помощью vgcreate создаем группу томов на всех дисках
nimda@ubuntu:~$ sudo vgcreate vg_hdd /dev/sdb /dev/sdc /dev/sdd /dev/sde
Volume group "vg_hdd" successfully created
Создаем Logical Volume
Создаем на диске /dev/sdb Logical Volume для /home
nimda@ubuntu:~$ sudo lvcreate -l 100%FREE -n lv_home vg_hdd /dev/sdb
Logical volume "lv_home" created.
Для раздела /var создадим RAID 1 (добавив параметр --type raid1) на lvm на дисках /dev/sdc и /dev/sdd
nimda@ubuntu:~$ sudo lvcreate -l 100%FREE --type raid1 -n lv_var vg_hdd /dev/sdc /dev/sdd
Logical volume "lv_var" created.
С помощью команды pvs -o pv_name,vg_name,lv_name,lv_size проверим, что все сделали правильно
nimda@ubuntu:~$ sudo pvs -o pv_name,vg_name,lv_name,lv_size
PV VG LV LSize
/dev/sda3 ubuntu-vg ubuntu-lv 16.00g
/dev/sda3 ubuntu-vg 0
/dev/sdb vg_hdd lv_home <15.00g
/dev/sdc vg_hdd [lv_var_rmeta_0] 4.00m
/dev/sdc vg_hdd [lv_var_rimage_0] 4.99g
/dev/sdd vg_hdd [lv_var_rmeta_1] 4.00m
/dev/sdd vg_hdd [lv_var_rimage_1] 4.99g
/dev/sde vg_hdd 0
Так же посмотрим что выдают команды pvs, vgs и lvs
pvs
nimda@ubuntu:~$ sudo pvs
PV VG Fmt Attr PSize PFree
/dev/sda3 ubuntu-vg lvm2 a-- 18.22g 2.22g
/dev/sdb vg_hdd lvm2 a-- <15.00g 0
/dev/sdc vg_hdd lvm2 a-- <5.00g 0
/dev/sdd vg_hdd lvm2 a-- <5.00g 0
/dev/sde vg_hdd lvm2 a-- 1020.00m 1020.00m
vgs
nimda@ubuntu:~$ sudo vgs
VG #PV #LV #SN Attr VSize VFree
ubuntu-vg 1 1 0 wz--n- 18.22g 2.22g
vg_hdd 4 2 0 wz--n- 25.98g 1020.00m
lvs
nimda@ubuntu:~$ sudo lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
ubuntu-lv ubuntu-vg -wi-ao---- 16.00g
lv_home vg_hdd -wi-a----- <15.00g
lv_var vg_hdd rwi-a-r--- 4.99g 100.00
Включаем кеширивание для /var
Так как в /var постоянно изменяемые данные, сделаем быстрый добавим отдельный кеш на ssd (будем считать, что /dev/sde это ssd диск)
Создаем еще один LV на /dev/sde но указав параметр--type cache-pool
nimda@ubuntu:~$ sudo lvcreate -l 100%FREE --type cache-pool -n lv_var_cache vg_hdd /dev/sde
Logical volume "lv_var_cache" created.
Теперь конвертируем ранее созданный LV lv_var, указываем ему, где будет храниться кеш
nimda@ubuntu:~$ sudo lvconvert --type cache --cache-pool vg_hdd/lv_var_cache vg_hdd/lv_var
Do you want wipe existing metadata of cache pool vg_hdd/lv_var_cache? [y/n]: y
Logical volume vg_hdd/lv_var is now cached.
Создаем файловую систему на созданных LV
С помощью mkfs.ext4 создаем файловую систему на наших LV
nimda@ubuntu:~$ sudo mkfs.ext4 /dev/vg_hdd/lv_home
mke2fs 1.47.0 (5-Feb-2023)
Creating filesystem with 3931136 4k blocks and 983040 inodes
Filesystem UUID: a8d9ec3a-a076-4019-be45-8097c701af85
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208
Allocating group tables: done
Writing inode tables: done
Creating journal (16384 blocks): done
Writing superblocks and filesystem accounting information: done
nimda@ubuntu:~$ sudo mkfs.ext4 /dev/vg_hdd/lv_var
mke2fs 1.47.0 (5-Feb-2023)
Discarding device blocks: done
Creating filesystem with 1308672 4k blocks and 327680 inodes
Filesystem UUID: c6a38d19-e028-4668-b021-163395d8be3b
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912, 819200, 884736
Allocating group tables: done
Writing inode tables: done
Creating journal (16384 blocks): done
Writing superblocks and filesystem accounting information: done
Тут следует запомнить UUID, далее этот UUID мы будем прописывать в fstab!
Уменьшение раздела / до 8G
По условию домашнего задания требуется, уменьшение корневого раздела до 8G Создадим новый LV на диске /dev/sdf который временно будем использовать для корневого каталога
nimda@ubuntu:~$ sudo pvcreate /dev/sdf
Physical volume "/dev/sdf" successfully created.
nimda@ubuntu:~$ sudo vgcreate vg_tmp_root /dev/sdf
Volume group "vg_tmp_root" successfully created
nimda@ubuntu:~$ sudo lvcreate -l 100%FREE -n lv_tmp_root vg_tmp_root
Logical volume "lv_tmp_root" created.
Отформатируем новый диск в ext4
nimda@ubuntu:~$ sudo mkfs.ext4 /dev/vg_tmp_root/lv_tmp_root
mke2fs 1.47.0 (5-Feb-2023)
Creating filesystem with 2620416 4k blocks and 655360 inodes
Filesystem UUID: 95afff46-fb13-4482-8d1b-36e734819a5c
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632
Allocating group tables: done
Writing inode tables: done
Creating journal (16384 blocks): done
Writing superblocks and filesystem accounting information: done
Создаем каталог /mnt/tmp_root и монтируем туда созданный LV
nimda@ubuntu:~$ sudo mkdir /mnt/tmp_root
nimda@ubuntu:~$ sudo mount /dev/vg_tmp_root/lv_tmp_root /mnt/tmp_root
Переносим все из корневого раздела
nimda@ubuntu:~$ sudo rsync -avxHAX --progress / /mnt/tmp_root/
sending incremental file list
./
bin -> usr/bin
lib -> usr/lib
lib64 -> usr/lib64
sbin -> usr/sbin
swap.img
671,907,840 31% 640.75MB/s 0:00:02
...
...
sent 5,302,143,572 bytes received 2,267,126 bytes 54,967,986.51 bytes/sec
total size is 5,296,836,991 speedup is 1.00
Создадим синонимы системных каталогов. Делаем chroot предварительно войдя в sudo su
nimda@ubuntu:~$ sudo su
[sudo] password for nimda:******
root@ubuntu:/home/nimda# mount --bind /proc/ /mnt/tmp_root/proc/
root@ubuntu:/home/nimda# mount --bind /sys/ /mnt/tmp_root/sys/
root@ubuntu:/home/nimda# mount --bind /dev/ /mnt/tmp_root/dev/
root@ubuntu:/home/nimda# mount --bind /run/ /mnt/tmp_root/run/
root@ubuntu:/home/nimda# mount --bind /boot/ /mnt/tmp_root/boot/
root@ubuntu:/home/nimda# chroot /mnt/tmp_root/
Обновим grub
root@ubuntu:/# grub-mkconfig -o /boot/grub/grub.cfg
Sourcing file `/etc/default/grub'
Generating grub configuration file ...
Found linux image: /boot/vmlinuz-6.17.7-061707-generic
Found initrd image: /boot/initrd.img-6.17.7-061707-generic
Found linux image: /boot/vmlinuz-6.8.0-87-generic
Found initrd image: /boot/initrd.img-6.8.0-87-generic
Warning: os-prober will not be executed to detect other bootable partitions.
Systems on them will not be added to the GRUB boot configuration.
Check GRUB_DISABLE_OS_PROBER documentation entry.
Adding boot menu entry for UEFI Firmware Settings ...
done
Обновляем временную корневую систему в grub и перезагружаемся
root@ubuntu:/# update-initramfs -u
update-initramfs: Generating /boot/initrd.img-6.17.7-061707-generic
root@ubuntu:/# reboot
После перезагрузки с помощью df смотрим куда примонтирован корневой раздел
nimda@ubuntu:~$ df -h
Filesystem Size Used Avail Use% Mounted on
tmpfs 192M 1.4M 191M 1% /run
/dev/mapper/vg_tmp_root-lv_tmp_root 9.8G 5.3G 4.0G 57% /
tmpfs 960M 0 960M 0% /dev/shm
tmpfs 5.0M 0 5.0M 0% /run/lock
/dev/sda2 1.8G 199M 1.5G 13% /boot
tmpfs 192M 12K 192M 1% /run/user/1000
Видим, что корневой раздел находиться на /dev/mapper/vg_tmp_root-lv_tmp_root, значит все прошло успешно.
Уменьшаем LVM ubuntu-lv до 8G
Перед началом проверим диск на ошибки
nimda@ubuntu:~$ sudo e2fsck -f /dev/ubuntu-vg/ubuntu-lv
e2fsck 1.47.0 (5-Feb-2023)
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information
/dev/ubuntu-vg/ubuntu-lv: 137913/1048576 files (0.1% non-contiguous), 1460236/4194304 blocks
Уменьшим раздел файловой системы на /dev/ubuntu-vg/ubuntu-lv до 8G с помощью lvreduce не забыв параметр -r, который уменьшит файловую систему автоматически
nimda@ubuntu:~$ sudo lvreduce -r -L 8G /dev/ubuntu-vg/ubuntu-lv
fsck from util-linux 2.39.3
/dev/mapper/ubuntu--vg-ubuntu--lv: clean, 137913/524288 files, 1425281/2097152 blocks
resize2fs 1.47.0 (5-Feb-2023)
The filesystem is already 2097152 (4k) blocks long. Nothing to do!
Size of logical volume ubuntu-vg/ubuntu-lv changed from 16.00 GiB (4096 extents) to 8.00 GiB (2048 extents).
Logical volume ubuntu-vg/ubuntu-lv successfully resized.
nimda@ubuntu:~$
Примонтируем /dev/ubuntu-vg/ubuntu-lv в /mnt/tmp_root/ Так как у нас прошло мало времени, и мы знаем что системные файлы не изменялись, мы не будем вновь копировать корневой раздел, а просто проведем все опярации кроме копирования которые мы проводили ранее для переноса / предварительно войдя в sudo su
nimda@ubuntu:~$ sudo su
[sudo] password for nimda:******
root@ubuntu:/home/nimda# mount /dev/ubuntu-vg/ubuntu-lv /mnt/tmp_root/
root@ubuntu:/home/nimda# mount --bind /proc/ /mnt/tmp_root/proc/
root@ubuntu:/home/nimda# mount --bind /sys/ /mnt/tmp_root/sys/
root@ubuntu:/home/nimda# mount --bind /dev/ /mnt/tmp_root/dev/
root@ubuntu:/home/nimda# mount --bind /run/ /mnt/tmp_root/run/
root@ubuntu:/home/nimda# mount --bind /boot/ /mnt/tmp_root/boot/
root@ubuntu:/home/nimda# chroot /mnt/tmp_root/
root@ubuntu:/# grub-mkconfig -o /boot/grub/grub.cfg
Sourcing file `/etc/default/grub'
Generating grub configuration file ...
Found linux image: /boot/vmlinuz-6.17.7-061707-generic
Found initrd image: /boot/initrd.img-6.17.7-061707-generic
Found linux image: /boot/vmlinuz-6.8.0-87-generic
Found initrd image: /boot/initrd.img-6.8.0-87-generic
Warning: os-prober will not be executed to detect other bootable partitions.
Systems on them will not be added to the GRUB boot configuration.
Check GRUB_DISABLE_OS_PROBER documentation entry.
Adding boot menu entry for UEFI Firmware Settings ...
done
root@ubuntu:/# update-initramfs -u
update-initramfs: Generating /boot/initrd.img-6.17.7-061707-generic
Вывод команды df -h после перезагрузки
nimda@ubuntu:~$ df -h
Filesystem Size Used Avail Use% Mounted on
tmpfs 192M 1.4M 191M 1% /run
/dev/mapper/ubuntu--vg-ubuntu--lv 7.8G 5.2G 2.2G 71% /
tmpfs 960M 0 960M 0% /dev/shm
tmpfs 5.0M 0 5.0M 0% /run/lock
/dev/sda2 1.8G 199M 1.5G 13% /boot
tmpfs 192M 12K 192M 1% /run/user/1000
Тут мы видим, что /dev/ubuntu-vg/ubuntu-lv уменьшился до 8Gb
Можем удалить теперь ненужный LVM tmp_root
nimda@ubuntu:~$ sudo lvremove vg_tmp_root/lv_tmp_root
Do you really want to remove and DISCARD active logical volume vg_tmp_root/lv_tmp_root? [y/n]: y
Logical volume "lv_tmp_root" successfully removed.
nimda@ubuntu:~$ sudo vgremove vg_tmp_root
Volume group "vg_tmp_root" successfully removed
nimda@ubuntu:~$ sudo pvremove /dev/sdf
Labels on physical volume "/dev/sdf" successfully wiped.
Монтирование /var и /home на новые LMV
Ранее мы уже создали LV lv_var для будущего раздела /var. Примонтируем его в /mnt/tmp_var
nimda@ubuntu:~$ sudo mkdir /mnt/tmp_var
nimda@ubuntu:~$ sudo mount /dev/vg_hdd/lv_var /mnt/tmp_var/
Скопируем содержимое /var и очистим ее
nimda@ubuntu:~$ sudo cp -aR /var/* /mnt/tmp_var/
nimda@ubuntu:~$ sudo rm -rf /var/*
Отмонтируем LV /dev/vg_hdd/lv_var от /mnt/tmp_var/ и примонтируем в /var
nimda@ubuntu:~$ sudo umount /mnt/tmp_var
nimda@ubuntu:~$ sudo mount /dev/vg_hdd/lv_var /var/
Перед монтированием lv_home уменьшим разрмер, так как далее будем работать со снапшотами, а места для них заранее не зарезирвировали
nimda@ubuntu:~$ sudo lvreduce -r -L 10G /dev/vg_hdd/lv_home
fsck from util-linux 2.39.3
/dev/mapper/vg_hdd-lv_home: clean, 11/983040 files, 88340/3931136 blocks
resize2fs 1.47.0 (5-Feb-2023)
Resizing the filesystem on /dev/mapper/vg_hdd-lv_home to 2621440 (4k) blocks.
The filesystem on /dev/mapper/vg_hdd-lv_home is now 2621440 (4k) blocks long.
Size of logical volume vg_hdd/lv_home changed from <15.00 GiB (3839 extents) to 10.00 GiB (2560 extents).
Logical volume vg_hdd/lv_home successfully resized.
Монтируем в /mnt/tmp_home
nimda@ubuntu:~$ sudo mkdir /mnt/tmp_home
nimda@ubuntu:~$ sudo mount /dev/vg_hdd/lv_home /mnt/tmp_home/
Скопируем содержимое /home и очистим ее
nimda@ubuntu:~$ sudo cp -aR /home/* /mnt/tmp_home/
nimda@ubuntu:~$ sudo rm -rf /home/*
Отмонтируем LV /dev/vg_hdd/lv_home от /mnt/tmp_home/ и примонтируем в /home
nimda@ubuntu:~$ sudo umount /mnt/tmp_home
nimda@ubuntu:~$ sudo mount /dev/vg_hdd/lv_home /home/
Далее отредактируем fstab нам требуется указать UUID наших новых LV разделов.
UUID мы ранее запомнили, теперь требуется вставить 2 строки в /etc/fstab
UUID="a8d9ec3a-a076-4019-be45-8097c701af85" /home ext4 defaults 0 0
UUID="c6a38d19-e028-4668-b021-163395d8be3b" /var ext4 defaults 0 0
После перезагрузки посмотрим вывод команды df, что бы убедиться правильно ли все монтируется при старте
nimda@ubuntu:~$ df -h
Filesystem Size Used Avail Use% Mounted on
tmpfs 192M 1.4M 191M 1% /run
/dev/mapper/ubuntu--vg-ubuntu--lv 7.8G 4.5G 2.9G 61% /
tmpfs 960M 0 960M 0% /dev/shm
tmpfs 5.0M 0 5.0M 0% /run/lock
/dev/mapper/vg_hdd-lv_home 9.8G 192M 9.1G 3% /home
/dev/mapper/vg_hdd-lv_var 4.9G 595M 4.0G 13% /var
/dev/sda2 1.8G 199M 1.5G 13% /boot
tmpfs 192M 12K 192M 1% /run/user/1000
Мы видим, что все смонтировано верно
Работа со снапшотами
Сгенерируем файлы в домашнем каталоге
nimda@ubuntu:~$ touch /home/nimda/file{1..20}
C помощью lvcreate создадим снапшот, не забыв добавить параметр -s
nimda@ubuntu:~$ sudo lvcreate -s -L 1G -n snap_home /dev/vg_hdd/lv_home
Logical volume "snap_home" created.
Можем посмотреть текущий вывод команды lvs
nimda@ubuntu:~$ sudo lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
ubuntu-lv ubuntu-vg -wi-ao---- 8.00g
lv_home vg_hdd owi-aos--- 10.00g
lv_var vg_hdd Cwi-aoC--- 4.99g [lv_var_cache_cpool] [lv_var_corig] 25.19 2.83 0.00
snap_home vg_hdd swi-a-s--- 1.00g lv_home 0.01
Тут мы видим, что snap_home имеет в атрибутах s и Origin указывается lv_home
Удалим несколько созданных файлов, и посмотрим что сейчас в каталоге
nimda@ubuntu:~$ rm /home/nimda/file1*
nimda@ubuntu:~$ ls -l /home/nimda/
total 0
-rw-rw-r-- 1 nimda nimda 0 Nov 16 15:48 file2
-rw-rw-r-- 1 nimda nimda 0 Nov 16 15:48 file20
-rw-rw-r-- 1 nimda nimda 0 Nov 16 15:48 file3
-rw-rw-r-- 1 nimda nimda 0 Nov 16 15:48 file4
-rw-rw-r-- 1 nimda nimda 0 Nov 16 15:48 file5
-rw-rw-r-- 1 nimda nimda 0 Nov 16 15:48 file6
-rw-rw-r-- 1 nimda nimda 0 Nov 16 15:48 file7
-rw-rw-r-- 1 nimda nimda 0 Nov 16 15:48 file8
-rw-rw-r-- 1 nimda nimda 0 Nov 16 15:48 file9
Теперь нам следует вернуться в предыдущие состояние, для этого требуется отмонтировать /home но при работающей системе home всегда занята, и umount выдаст ошибку
nimda@ubuntu:~$ sudo umount /home
umount: /home: target is busy.
Поэтому выполняем команду возврата на предыдущую версию снапшота без отмонтирования
nimda@ubuntu:~$ sudo lvconvert --merge /dev/vg_hdd/snap_home
Delaying merge since origin is open.
Merging of snapshot vg_hdd/snap_home will occur on next activation of vg_hdd/lv_home.
LVM нам сообщит, что возврат произойдет при следующей активации vg_hdd/lv_home Просто делаем reboot и смотрим, что стало с нашими файлами
nimda@ubuntu:~$ ls -l /home/nimda/
total 0
-rw-rw-r-- 1 nimda nimda 0 Nov 16 16:12 file1
-rw-rw-r-- 1 nimda nimda 0 Nov 16 16:12 file10
-rw-rw-r-- 1 nimda nimda 0 Nov 16 16:12 file11
-rw-rw-r-- 1 nimda nimda 0 Nov 16 16:12 file12
-rw-rw-r-- 1 nimda nimda 0 Nov 16 16:12 file13
-rw-rw-r-- 1 nimda nimda 0 Nov 16 16:12 file14
-rw-rw-r-- 1 nimda nimda 0 Nov 16 16:12 file15
-rw-rw-r-- 1 nimda nimda 0 Nov 16 16:12 file16
-rw-rw-r-- 1 nimda nimda 0 Nov 16 16:12 file17
-rw-rw-r-- 1 nimda nimda 0 Nov 16 16:12 file18
-rw-rw-r-- 1 nimda nimda 0 Nov 16 16:12 file19
-rw-rw-r-- 1 nimda nimda 0 Nov 16 16:12 file2
-rw-rw-r-- 1 nimda nimda 0 Nov 16 16:12 file20
-rw-rw-r-- 1 nimda nimda 0 Nov 16 16:12 file3
-rw-rw-r-- 1 nimda nimda 0 Nov 16 16:12 file4
-rw-rw-r-- 1 nimda nimda 0 Nov 16 16:12 file5
-rw-rw-r-- 1 nimda nimda 0 Nov 16 16:12 file6
-rw-rw-r-- 1 nimda nimda 0 Nov 16 16:12 file7
-rw-rw-r-- 1 nimda nimda 0 Nov 16 16:12 file8
-rw-rw-r-- 1 nimda nimda 0 Nov 16 16:12 file9
Домашние задание выполнено!