# Домашнее задание 3 ## Работа с LVM Для выполнение задания используется Ubuntu Server 24.04 ### Добавляем 5 hdd в VM Для выполнения домашнего задания добавил в VM 4 диска. 1 диск 15G, 2 диска по 5G ,1 диск 1G и 1 диск 10G Проверяем через lsblk, что диски присутствуют в системе ```bash 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 ```bash 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 создаем группу томов на всех дисках ```bash 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 ```bash 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 ```bash 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 проверим, что все сделали правильно ```bash 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 ```bash 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 ```bash 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 ```bash 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 ```bash 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, указываем ему, где будет храниться кеш ```bash 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 ```bash 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 ``` ```bash 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 который временно будем использовать для корневого каталога ```bash 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 ```bash 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 ```bash nimda@ubuntu:~$ sudo mkdir /mnt/tmp_root nimda@ubuntu:~$ sudo mount /dev/vg_tmp_root/lv_tmp_root /mnt/tmp_root ``` Переносим все из корневого раздела ```bash 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 ```bash 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 ```bash 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 и перезагружаемся ```bash root@ubuntu:/# update-initramfs -u update-initramfs: Generating /boot/initrd.img-6.17.7-061707-generic root@ubuntu:/# reboot ``` После перезагрузки с помощью df смотрим куда примонтирован корневой раздел ```bash 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 Перед началом проверим диск на ошибки ```bash 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, который уменьшит файловую систему автоматически ```bash 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 ```bash 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 после перезагрузки ```bash 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 ```bash 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 ```bash nimda@ubuntu:~$ sudo mkdir /mnt/tmp_var nimda@ubuntu:~$ sudo mount /dev/vg_hdd/lv_var /mnt/tmp_var/ ``` Скопируем содержимое /var и очистим ее ```bash 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 ```bash nimda@ubuntu:~$ sudo umount /mnt/tmp_var nimda@ubuntu:~$ sudo mount /dev/vg_hdd/lv_var /var/ ``` Перед монтированием lv_home уменьшим разрмер, так как далее будем работать со снапшотами, а места для них заранее не зарезирвировали ```bash 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 ```bash nimda@ubuntu:~$ sudo mkdir /mnt/tmp_home nimda@ubuntu:~$ sudo mount /dev/vg_hdd/lv_home /mnt/tmp_home/ ``` Скопируем содержимое /home и очистим ее ```bash 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 ```bash nimda@ubuntu:~$ sudo umount /mnt/tmp_home nimda@ubuntu:~$ sudo mount /dev/vg_hdd/lv_home /home/ ``` Далее отредактируем fstab нам требуется указать UUID наших новых LV разделов. UUID мы ранее запомнили, теперь требуется вставить 2 строки в /etc/fstab ```bash UUID="a8d9ec3a-a076-4019-be45-8097c701af85" /home ext4 defaults 0 0 UUID="c6a38d19-e028-4668-b021-163395d8be3b" /var ext4 defaults 0 0 ``` После перезагрузки посмотрим вывод команды df, что бы убедиться правильно ли все монтируется при старте ```bash 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 ``` Мы видим, что все смонтировано верно ### Работа со снапшотами Сгенерируем файлы в домашнем каталоге ```bash nimda@ubuntu:~$ touch /home/nimda/file{1..20} ``` C помощью lvcreate создадим снапшот, не забыв добавить параметр -s ```bash nimda@ubuntu:~$ sudo lvcreate -s -L 1G -n snap_home /dev/vg_hdd/lv_home Logical volume "snap_home" created. ``` Можем посмотреть текущий вывод команды lvs ```bash 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 Удалим несколько созданных файлов, и посмотрим что сейчас в каталоге ```bash 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 выдаст ошибку ```bash nimda@ubuntu:~$ sudo umount /home umount: /home: target is busy. ``` Поэтому выполняем команду возврата на предыдущую версию снапшота без отмонтирования ```bash 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 и смотрим, что стало с нашими файлами ```bash 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 ``` Домашние задание выполнено!