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

21 KiB
Raw Blame History

Домашнее задание 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

Домашние задание выполнено!