264 lines
7.9 KiB
Markdown
264 lines
7.9 KiB
Markdown
# Домашнее задание 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/
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|