Files
homework03/README.md
2026-02-05 21:47:51 +03:00

557 lines
21 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Домашнее задание 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
```
Домашние задание выполнено!