commit 225d9eebcbd68aa1ac03dc13faeca875f533196c Author: alex Date: Thu Feb 5 21:47:51 2026 +0300 Добавить README.md diff --git a/README.md b/README.md new file mode 100644 index 0000000..edae070 --- /dev/null +++ b/README.md @@ -0,0 +1,557 @@ +# Домашнее задание 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 +``` + +Домашние задание выполнено! \ No newline at end of file