# Домашнее задание 5 ## Работа с ZFS Для выполнение задания используется Ubuntu Server 24.04 ### Добавляем 8 hdd в VM Для выполнения домашнего задания добавил в VM 8 дисков по 200Mb Проверяем через 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 204M 0 disk sdc 8:32 0 204M 0 disk sdd 8:48 0 204M 0 disk sde 8:64 0 204M 0 disk sdf 8:80 0 204M 0 disk sdg 8:96 0 204M 0 disk sdh 8:112 0 204M 0 disk sdi 8:128 0 204M 0 disk sr0 11:0 1 3.1G 0 rom ``` Для дальнейших действий перейдем сразу в суперпользователя ```bash nimda@ubuntu:~$ sudo su [sudo] password for nimda: root@ubuntu:/home/nimda# ``` ### Установка утилит для ZFS Устанавливаем утилиты ZFS ```bash root@ubuntu:/home/nimda# apt install zfsutils-linux -y Reading package lists... Done Building dependency tree... Done Reading state information... Done The following additional packages will be installed: libnvpair3linux libuutil3linux libzfs4linux libzpool5linux zfs-zed ... ... No VM guests are running outdated hypervisor (qemu) binaries on this host. root@ubuntu:/home/nimda# ``` ### Создание пулов ZFS Создаем 4 пула ZFS в режиме raid 1 ```bash root@ubuntu:/home/nimda# zpool create pool_1 mirror /dev/sdb /dev/sdc root@ubuntu:/home/nimda# zpool create pool_2 mirror /dev/sdd /dev/sde root@ubuntu:/home/nimda# zpool create pool_3 mirror /dev/sdf /dev/sdg root@ubuntu:/home/nimda# zpool create pool_4 mirror /dev/sdh /dev/sdi ``` посмотрим вывод zpool list ```bash root@ubuntu:/home/nimda# zpool list NAME SIZE ALLOC FREE CKPOINT EXPANDSZ FRAG CAP DEDUP HEALTH ALTROOT pool_1 176M 110K 176M - - 1% 0% 1.00x ONLINE - pool_2 176M 108K 176M - - 1% 0% 1.00x ONLINE - pool_3 176M 105K 176M - - 1% 0% 1.00x ONLINE - pool_4 176M 102K 176M - - 1% 0% 1.00x ONLINE - ``` Для каждого пула включим сжатие данных, и применим разные алгоритмы сжатия ```bash root@ubuntu:/home/nimda# zfs set compression=lzjb pool_1 root@ubuntu:/home/nimda# zfs set compression=lz4 pool_2 root@ubuntu:/home/nimda# zfs set compression=gzip-9 pool_3 root@ubuntu:/home/nimda# zfs set compression=zle pool_4 ``` ### Проверка сжатие файлов разными алгоритмами Выполним небольшой скрипт, который скачает один и тот же файл на все на пулы ```bash root@ubuntu:/home/nimda# for i in {1..4}; do wget -P /pool_$i https://gutenberg.org/cache/epub/2600/pg2600.converter.log; done ``` С помощью zpool list посмотрим, сколько занято место в пулах ```bash root@ubuntu:/home/nimda# zpool list NAME SIZE ALLOC FREE CKPOINT EXPANDSZ FRAG CAP DEDUP HEALTH ALTROOT pool_1 176M 21.7M 154M - - 4% 12% 1.00x ONLINE - pool_2 176M 17.7M 158M - - 4% 10% 1.00x ONLINE - pool_3 176M 10.8M 165M - - 3% 6% 1.00x ONLINE - pool_4 176M 39.5M 137M - - 7% 22% 1.00x ONLINE - ``` Мы видим, что меньше всего занято в pool_3, там применялся метод сжатия gzip-9 ### Определение настроек пула Скачиваем архив в каталог /tmp ```bash root@ubuntu:/home/nimda# wget -O /tmp/archive.tar.gz --no-check-certificate 'https://drive.usercontent.google.com/download?id=1MvrcEp-WgAQe57aDEzxSRalPAwbNN1Bb&export=download' ... ... /tmp/archive.tar.gz 100%[=======================================================>] 6.94M 9.97MB/s in 0.7s 2025-11-22 19:34:08 (9.97 MB/s) - ‘/tmp/archive.tar.gz’ saved [7275140/7275140] root@ubuntu:/home/nimda# ls ``` распаковываем скаченный архив ```bash root@ubuntu:/home/nimda# tar -xzvf /tmp/archive.tar.gz zpoolexport/ zpoolexport/filea zpoolexport/fileb ``` Проверим возможность импорта ```bash root@ubuntu:/home/nimda# zpool import -d zpoolexport/ pool: otus id: 6554193320433390805 state: ONLINE status: Some supported features are not enabled on the pool. (Note that they may be intentionally disabled if the 'compatibility' property is set.) action: The pool can be imported using its name or numeric identifier, though some features will not be available without an explicit 'zpool upgrade'. config: otus ONLINE mirror-0 ONLINE /home/nimda/zpoolexport/filea ONLINE /home/nimda/zpoolexport/fileb ONLINE ``` Сделаем импорт пула ```bash root@ubuntu:/home/nimda# zpool import -d zpoolexport/ otus ``` проверяем ```bash root@ubuntu:/home/nimda# zpool status otus pool: otus state: ONLINE status: Some supported and requested features are not enabled on the pool. The pool can still be used, but some features are unavailable. action: Enable all features using 'zpool upgrade'. Once this is done, the pool may no longer be accessible by software that does not support the features. See zpool-features(7) for details. config: NAME STATE READ WRITE CKSUM otus ONLINE 0 0 0 mirror-0 ONLINE 0 0 0 /home/nimda/zpoolexport/filea ONLINE 0 0 0 /home/nimda/zpoolexport/fileb ONLINE 0 0 0 errors: No known data errors ``` Посмотрим сколько файлов и папок храниться в импортируемом пуле ```bash root@ubuntu:/home/nimda# find /otus -type d | wc -l 17538 root@ubuntu:/home/nimda# find /otus -type f | wc -l 0 ``` Видим, что имеется 17538 папок, и нет ни одного файла ### Работа со снапшотами Скачаем отдельно файл снапшота ```bash root@ubuntu:/home/nimda# wget -O /tmp/otus_task2.file --no-check-certificate https://drive.usercontent.google.com/download?id=1wgxjih8YZ-cqLqaZVa0lA3h3Y029c3oI&export=download [2] 4835 root@ubuntu:/home/nimda# Redirecting output to ‘wget-log.1’. [2]- Done wget -O /tmp/otus_task2.file --no-check-certificate https://drive.usercontent.google.com/download?id=1wgxjih8YZ-cqLqaZVa0lA3h3Y029c3oI ``` Восстановим пул otus из скаченного снапшота ```bash root@ubuntu:/home/nimda# zfs receive otus/test@today < /tmp/otus_task2.file ``` Ищем секретное сообщение ```bash root@ubuntu:/home/nimda# find /otus/test -name "secret_message" /otus/test/task1/file_mess/secret_message ``` Смотрим содержимое файла ```bash root@ubuntu:/home/nimda# cat /otus/test/task1/file_mess/secret_message https://otus.ru/lessons/linux-hl/ ``` Видим, что там ссылка на https://otus.ru/lessons/linux-hl/