master
Долгий Артём 2024-04-04 12:49:08 +03:00
parent add41635c5
commit 432c089d55
1 changed files with 183 additions and 201 deletions

View File

@ -4,8 +4,8 @@
- [Работа с пулом ZFS](#работа-с-пулом-zfs)
- [Работа с файловой и другими системами ZFS](#работа-с-файловой-и-другими-системами-zfs)
- [Файловая система](#файловая-система)
- [Snapshots (снепшоты или снимки состояния) #{.anchor}](#snapshots-снепшоты-или-снимки-состояния-anchor)
- [Снова вернемся к пулам #{.anchor}](#снова-вернемся-к-пулам-anchor)
- [Snapshots (снапшоты или снимки состояния)](#snapshots-снапшоты-или-снимки-состояния)
- [Снова вернемся к пулам](#снова-вернемся-к-пулам)
Данный справочник является переводом [данной статьи](http://lildude.co.uk/zfs-cheatsheet). Авторы перевода: [Евгений Ратников](http://citkit.ru/articles/504/) и [Сгибнев Михаил](http://dreamcatcher.ru/). Огромное им спасибо за проделанную работу!
@ -445,12 +445,10 @@ myzfs 135K 960M 0 0 0 0
```bash
[root@zfs /]# zfs create myzfs/colin
[root@zfs /]# df -Th
Файловая система Тип Размер Использовано Дост Использовано% Cмонтировано в
...
[root@zfs ~]# df -Th | grep zfs
myzfs zfs 832M 128K 832M 1% /myzfs
myzfs/colin zfs 832M 128K 832M 1% /myzfs/colin
[root@zfs /]#
[root@zfs ~]#
```
Получить список файловых систем ZFS можно следующей командой.
@ -463,103 +461,99 @@ myzfs/colin 24K 832M 24K /myzfs/colin
[root@zfs /]#
```
В данный момент в нашем пуле имеется одно зеркало, в которое входят два
диска: disc2 и disc3.
В данный момент в нашем пуле имеется одно зеркало, в которое входят два диска: disk2 и disk3.
Давайте попробуем расширить наш пул. Попытаемся добавить к нему disc1
``` {tabindex="0"}
zpool add myzfs /disk1
Давайте попробуем расширить наш пул. Попытаемся добавить к нему disk1
```bash
[root@zfs ~]# zpool add myzfs /disk1
invalid vdev specification
use '-f' to override the following errors:
mismatched replication level: pool uses mirror and new vdev is file
[root@zfs ~]#
```
Попытка добавления не удалась, т.к. она неоднозначно и при добавлении
диска к существующему зеркалу необходимо указать дополнительно один из
существующих в этом зеркале дисков, либо добавить минимум два диска для
формирования нового зеркала, которое будет входить в данный пул.
Попытка добавления не удалась, т.к. она неоднозначна и при добавлении диска к существующему зеркалу необходимо указать дополнительно один из
существующих в этом зеркале дисков, либо добавить минимум два диска для формирования нового зеркала, которое будет входить в данный пул.
Добавим к пулу новое зеркало, состоящее из дисков: disc1 и disc5
``` {tabindex="0"}
zpool add myzfs mirror /disk1 /disk5
zpool status -v
Добавим к пулу новое зеркало, состоящее из дисков: disk1 и disk5
```bash
[root@zfs ~]# zpool add myzfs mirror /disk1 /disk5
[root@zfs ~]# zpool status
pool: myzfs
state: ONLINE
scrub: none requested
scan: scrub repaired 0B in 00:00:00 with 0 errors on Wed Apr 3 16:27:35 2024
config:
NAME STATE READ WRITE CKSUM
myzfs ONLINE 0 0 0
mirror ONLINE 0 0 0
/disk3 ONLINE 0 0 0
/disk2 ONLINE 0 0 0
mirror ONLINE 0 0 0
mirror-0 ONLINE 0 0 0
//disk3 ONLINE 0 0 0
//disk2 ONLINE 0 0 0
mirror-1 ONLINE 0 0 0
/disk1 ONLINE 0 0 0
/disk5 ONLINE 0 0 0
errors: No known data errors
[root@zfs ~]#
```
Добавим теперь к пулу еще одну файловую систему и посмотрим, как это
отразится на размере файловых систем, входящих в пул.
``` {tabindex="0"}
zfs create myzfs/colin2
zfs list
Добавим теперь к пулу еще одну файловую систему и посмотрим, как это отразится на размере файловых систем, входящих в пул.
```bash
[root@zfs ~]# zfs create myzfs/colin2
[root@zfs ~]# zfs list
NAME USED AVAIL REFER MOUNTPOINT
myzfs 172K 159M 21K /myzfs
myzfs/colin 18K 159M 18K /myzfs/colin
myzfs/colin2 18K 159M 18K /myzfs/colin2
myzfs 216K 1.75G 24K /myzfs
myzfs/colin 24K 1.75G 24K /myzfs/colin
myzfs/colin2 24K 1.75G 24K /myzfs/colin2
[root@zfs ~]#
```
Обе файловые системы, входящие в пул, по объему равны всему пулу. В этом
заключается одно из преимуществ системы ZFS --- по умолчанию нет
никакого ограничения на файловые системы.
Обе файловые системы, входящие в пул, по объему равны всему пулу. В этом заключается одно из преимуществ системы ZFS --- по-умолчанию нет никакого ограничения на файловые системы.
Чтобы явно управлять объемом файловых систем, можно прибегнуть к
резервированию --- выделению гарантированного объема для файловой
системы, либо квотированию --- ограничению файловой системы по
максимальному объему.
Чтобы явно управлять объемом файловых систем, можно прибегнуть к резервированию --- выделению гарантированного объема для файловой системы, либо квотированию --- ограничению файловой системы по максимальному объему.
Давайте зарезервируем для файловой системы `/myzfs/colin` место в пуле,
равное 20 Мб. Остальные файловые системы, заполняя пул, в любом случае
оставят для этой файловой системы 20 Мб места.
``` {tabindex="0"}
zfs set reservation=20m myzfs/colin
zfs list -o reservation
Давайте зарезервируем для файловой системы `/myzfs/colin` место в пуле, равное 200 Мб. Остальные файловые системы, заполняя пул, в любом случае
оставят для этой файловой системы 200 Мб места.
```bash
[root@zfs ~]# zfs set reservation=200m myzfs/colin
[root@zfs ~]# zfs list -o reservation
RESERV
none
20M
200M
none
[root@zfs ~]#
```
Теперь для файловой системы `/myzfs/colin2` установим квоту в 20 Мб. Это
означает, что данная файловая система не сможет занять в пуле более 20
Теперь для файловой системы `/myzfs/colin2` установим квоту в 250 Мб. Это означает, что данная файловая система не сможет занять в пуле более 250
Мб, даже если пул будет полностью свободным.
``` {tabindex="0"}
zfs set quota=20m myzfs/colin2
zfs list -o quota myzfs/colin myzfs/colin2
```bash
[root@zfs ~]# zfs set quota=250m myzfs/colin2
[root@zfs ~]# zfs list -o quota myzfs/colin myzfs/colin2
QUOTA
none
20M
250M
[root@zfs ~]#
```
Также для файловой системы `/myzfs/colin2` включим сжатие. Сжатие
достаточно эффективно работает на уровне ZFS практически без потерь
производительности (конечно же, при условии, что производительности
сервера достаточно). Вместо `compression=on` можно использовать
`compression=gzip`.
Также для файловой системы `/myzfs/colin2` включим сжатие. Сжатие достаточно эффективно работает на уровне ZFS практически без потерь производительности (конечно же, при условии, что производительности сервера достаточно).
``` {tabindex="0"}
ZFS использует несколько различных алгоритмов сжатия, оптимизированных для различных типов данных:
- **LZ4** Алгоритм по-умолчанию, использующий сжатие LZ4. Предпочтение отдается скорости, а не степени сжатия.
- **LZJB** Устаревший формат с приемлемым сжатием и скоростью.
- **Gzip** Стандартное сжатие gzip. Несколько уровней сжатия от 1 до 9, чем выше, тем лучше, но медленнее.
- **ZLE** оптимизирован для нулевых блоков.
Алгоритмы адаптивно выбирают оптимальную стратегию сжатия для каждого типа данных.
При этом, вместо `compression=on` можно явно указать алгоритм сжатия `compression=gzip-9`, `compression=lzjb`, `compression=zle` и т.д.
```bash
zfs set compression=on myzfs/colin2
zfs list -o compression
@ -569,188 +563,176 @@ COMPRESS
on
```
Чтобы сделать файловую систему доступной по протоколу NFS, достаточно
выполнить одну команду. Причем после перезагрузки сервера доступ к
файловой системе утерян не будет. Никаких дополнительных настроек
операционной системы производить не нужно.
``` {tabindex="0"}
zfs set sharenfs=on myzfs/colin2
zfs get sharenfs myzfs/colin2
Чтобы сделать файловую систему доступной по протоколу NFS, достаточно выполнить одну команду. Причем после перезагрузки сервера доступ к файловой системе утерян не будет. Никаких дополнительных настроек операционной системы производить не нужно.
```bash
[root@zfs ~]# zfs set sharenfs=on myzfs/colin2
[root@zfs ~]# zfs get sharenfs myzfs/colin2
NAME PROPERTY VALUE SOURCE
myzfs/colin2 sharenfs on local
[root@zfs ~]#
```
Точно так же в одну команду ресурс можно сделать доступным по протоколу
SMB. Что пользователям ОС Windows наверняка пригодится.
``` {tabindex="0"}
zfs set sharesmb=on myzfs/colin2
zfs get sharesmb myzfs/colin2
Точно так же в одну команду ресурс можно сделать доступным по протоколу SMB. Что пользователям ОС Windows наверняка пригодится. В системе должен быть установлен пакет `samba-usershares`.
```bash
[root@zfs ~]# zfs set sharesmb=on myzfs/colin2
[root@zfs ~]# zfs get sharesmb myzfs/colin2
NAME PROPERTY VALUE SOURCE
myzfs/colin2 sharesmb on local
[root@zfs ~]#
```
Для повышения надежности (если у вас обычный пул, без избыточности),
можно использовать следующую опцию файловой системы.
Для повышения надежности (если у вас обычный пул, без избыточности), можно использовать следующую опцию файловой системы.
``` {tabindex="0"}
zfs set copies=2 myzfs/colin2
```bash
[root@zfs ~]# zfs set copies=2 myzfs/colin2
[root@zfs ~]# zfs get copies myzfs/colin2
NAME PROPERTY VALUE SOURCE
myzfs/colin2 copies 2 local
[root@zfs ~]#
```
Теперь в файловой системе будет храниться по две копии каждого блока.
Это имеет смысл, если пул без избыточности (*mirror* / *raidz*).
Теперь в файловой системе будет храниться по две копии каждого блока. Это имеет смысл, если пул без избыточности (*mirror* / *raidz*).
### Snapshots (снепшоты или снимки состояния) [\#](#snapshots-%d1%81%d0%bd%d0%b5%d0%bf%d1%88%d0%be%d1%82%d1%8b-%d0%b8%d0%bb%d0%b8-%d1%81%d0%bd%d0%b8%d0%bc%d0%ba%d0%b8-%d1%81%d0%be%d1%81%d1%82%d0%be%d1%8f%d0%bd%d0%b8%d1%8f){.anchor}
### Snapshots (снапшоты или снимки состояния)
Создать снепшот файловой системы очень просто. Давайте создадим снепшот
для файловой системы `myzfs/colin` и назовем его *test*.
``` {tabindex="0"}
zfs snapshot myzfs/colin@test
zfs list
Создать снапшот файловой системы очень просто. Давайте создадим снапшот для файловой системы `myzfs/colin` и назовем его *test*.
```bash
[root@zfs ~]# zfs snapshot myzfs/colin@test
[root@zfs ~]# zfs list -t snapshot
NAME USED AVAIL REFER MOUNTPOINT
myzfs 20.2M 139M 21K /myzfs
myzfs/colin 18K 159M 18K /myzfs/colin
myzfs/colin@test 0 - 18K -
myzfs/colin2 18K 20.0M 18K /myzfs/colin2
myzfs/colin@test 0B - 24K -
[root@zfs ~]#
```
Если появится необходимость отката к снепшоту, достаточно выполнить одну
команду.
Если появится необходимость отката к снапшоту, достаточно выполнить одну команду.
``` {tabindex="0"}
zfs rollback myzfs/colin@test
```bash
[root@zfs ~]# zfs rollback myzfs/colin@test
```
Снэпшот можно подмониторовать, как обычно. Например так.
Снапшот можно подмониторовать, как обычно. Например так.
``` {tabindex="0"}
mount -t zfs myzfs/colin@test /mnt
```bash
[root@zfs ~]# mount -t zfs myzfs/colin@test /mnt
[root@zfs ~]#
[root@zfs ~]# mount | grep /mnt
myzfs/colin@test on /mnt type zfs (ro,relatime,xattr,noacl)
[root@zfs ~]#
[root@zfs ~]# umount /mnt
[root@zfs ~]#
```
Даже можно клонировать файловую системы из снепшота в новую файловую
систему.
``` {tabindex="0"}
zfs clone myzfs/colin@test myzfs/colin3
zfs list
Даже можно клонировать файловую системы из снапшота в новую файловую систему.
```bash
[root@zfs ~]# zfs clone myzfs/colin@test myzfs/colin3
[root@zfs ~]# zfs list
NAME USED AVAIL REFER MOUNTPOINT
myzfs 20.2M 139M 21K /myzfs
myzfs/colin 18K 159M 18K /myzfs/colin
myzfs/colin@test 0 - 18K -
myzfs/colin2 18K 20.0M 18K /myzfs/colin2
myzfs/colin3 0 139M 18K /myzfs/colin3
myzfs 200M 1.55G 25K /myzfs
myzfs/colin 24K 1.75G 24K /myzfs/colin
myzfs/colin2 24K 250M 24K /myzfs/colin2
myzfs/colin3 0B 1.55G 24K /myzfs/colin3
[root@zfs ~]#
```
Теперь давайте удалим наши файловые системы `/myzfs/colin` и
`/myzfs/colin2`
Теперь давайте удалим наши файловые системы `/myzfs/colin` и `/myzfs/colin2`
Сперва удалим пустую файловую систему `/myzfs/colin2`
``` {tabindex="0"}
zfs destroy myzfs/colin2
zfs list
```bash
[root@zfs ~]# zfs destroy myzfs/colin2
[root@zfs ~]# zfs list
NAME USED AVAIL REFER MOUNTPOINT
myzfs 20.1M 139M 22K /myzfs
myzfs/colin 18K 159M 18K /myzfs/colin
myzfs/colin@test 0 - 18K -
myzfs/colin3 0 139M 18K /myzfs/colin3
myzfs 200M 1.55G 25K /myzfs
myzfs/colin 24K 1.75G 24K /myzfs/colin
myzfs/colin3 0B 1.55G 24K /myzfs/colin3
[root@zfs ~]#
```
Файловая система удалилась без проблем. Теперь удалим файловую систему,
для которой существует снепшот.
``` {tabindex="0"}
zfs destroy myzfs/colin
Файловая система удалилась без проблем. Теперь удалим файловую систему, для которой существует снапшот.
```bash
[root@zfs ~]# zfs destroy myzfs/colin
cannot destroy 'myzfs/colin': filesystem has children
use '-r' to destroy the following datasets:
myzfs/colin@test
[root@zfs ~]#
```
Удаление невозможно, т.к. у файловой системы имеется дочерний объект.
Можно воспользоваться параметром `-r` чтобы удалить файловую систему
Удаление невозможно, т.к. у файловой системы имеется дочерний объект. Можно воспользоваться параметром `-r` чтобы удалить файловую систему
вместе со всеми дочерними объектами рекурсивно.
Мы можем отключить снепшот от `/myzfs/colin` и оставить его дочерним
только для `/myzfs/colin3`
``` {tabindex="0"}
zfs promote myzfs/colin3
zfs list
Мы можем отключить снапшот от `/myzfs/colin` и оставить его дочерним только для `/myzfs/colin3`
```bash
[root@zfs ~]# zfs list -t snapshot
NAME USED AVAIL REFER MOUNTPOINT
myzfs 20.1M 139M 21K /myzfs
myzfs/colin 0 159M 18K /myzfs/colin
myzfs/colin3 18K 139M 18K /myzfs/colin3
myzfs/colin3@test 0 - 18K -
zfs destroy myzfs/colin
zfs list
myzfs/colin@test 0B - 24K -
[root@zfs ~]#
[root@zfs ~]# zfs promote myzfs/colin3
[root@zfs ~]# zfs list -t snapshot
NAME USED AVAIL REFER MOUNTPOINT
myzfs 147K 159M 21K /myzfs
myzfs/colin3 18K 159M 18K /myzfs/colin3
myzfs/colin3@test 0 - 18K -
myzfs/colin3@test 0B - 24K -
[root@zfs ~]#
[root@zfs ~]# zfs destroy myzfs/colin
[root@zfs ~]# zfs list
NAME USED AVAIL REFER MOUNTPOINT
myzfs 264K 1.75G 24K /myzfs
myzfs/colin3 24K 1.75G 24K /myzfs/colin3
[root@zfs ~]#
[root@zfs ~]# zfs list -t snapshot
NAME USED AVAIL REFER MOUNTPOINT
myzfs/colin3@test 0B - 24K -
[root@zfs ~]#
```
Теперь сделанный ранее снепшот для `/myzfs/colin` стал дочерним
объектом `/myzfs/colin3`. Таким образом у файловой
системы `/myzfs/colin` больше нет дочерних объектов и ее можно без труда
разобрать (удалить).
Теперь сделанный ранее снапшот для `/myzfs/colin` стал дочерним объектом `/myzfs/colin3`. Таким образом у файловой системы `/myzfs/colin` больше нет дочерних объектов и ее можно без труда разобрать (удалить).
Если вдруг понадобиться переименовать ранее созданную файловую систему
или снепшот, то можно воспользоваться следующими командами.
``` {tabindex="0"}
zfs rename myzfs/colin3 myzfs/bob
zfs list
Если вдруг понадобиться переименовать ранее созданную файловую систему или снапшот, то можно воспользоваться следующими командами.
```bash
[root@zfs ~]# zfs rename myzfs/colin3 myzfs/bob
[root@zfs ~]# zfs list
NAME USED AVAIL REFER MOUNTPOINT
myzfs 153K 159M 21K /myzfs
myzfs/bob 18K 159M 18K /myzfs/bob
myzfs/bob@test 0 - 18K -
zfs rename myzfs/bob@test myzfs/bob@newtest
zfs list
myzfs 270K 1.75G 25K /myzfs
myzfs/bob 24K 1.75G 24K /myzfs/bob
[root@zfs ~]#
[root@zfs ~]# zfs rename myzfs/bob@test myzfs/bob@newtest
[root@zfs ~]#
[root@zfs ~]# zfs list -t snapshot
NAME USED AVAIL REFER MOUNTPOINT
myzfs 146K 159M 20K /myzfs
myzfs/bob 18K 159M 18K /myzfs/bob
myzfs/bob@newtest 0 - 18K -
myzfs/bob@newtest 0B - 24K -
[root@zfs ~]#
```
### Снова вернемся к пулам [\#](#%d1%81%d0%bd%d0%be%d0%b2%d0%b0-%d0%b2%d0%b5%d1%80%d0%bd%d0%b5%d0%bc%d1%81%d1%8f-%d0%ba-%d0%bf%d1%83%d0%bb%d0%b0%d0%bc){.anchor}
### Снова вернемся к пулам
Получить полную информацию о пулах можно следующим образом.
``` {tabindex="0"}
zfs get all
```bash
[root@zfs ~]# zfs get all
NAME PROPERTY VALUE SOURCE
myzfs type filesystem -
myzfs creation Tue Sep 11 14:21 2007 -
myzfs used 146K -
myzfs available 159M -
myzfs referenced 20K -
myzfs creation Ср апр 3 16:15 2024 -
myzfs used 270K -
myzfs available 1.75G -
myzfs referenced 25K -
myzfs compressratio 1.00x -
[...]
```
Если пул нам более не нужен, можем его удалить. Однако, нельзя удалить
пул, в котором имеются активные файловые системы.
Если пул нам более не нужен, можем его удалить. **(не выполняйте это сейчас. Пул нам еще понадобится далее)**
``` {tabindex="0"}
zpool destroy myzfs
cannot destroy 'myzfs': pool is not empty
use '-f' to force destruction anyway
```bash
[root@zfs ~]# zpool destroy myzfs
[root@zfs ~]# zfs list
no datasets available
[root@zfs ~]# zpool status
no pools available
[root@zfs ~]#
```
Чтобы принудительно удалить пул, используйте параметр `-f` (не
@ -782,7 +764,7 @@ myzfs 159M 20K 159M 1% /myzfs
myzfs/bob 159M 18K 159M 1% /myzfs/bob
```
Снепшот можно сделать и на удаленный ресурс (или другое место в
снапшот можно сделать и на удаленный ресурс (или другое место в
локальной системе).
``` {tabindex="0"}
@ -797,9 +779,9 @@ myzfs/bob 18K 159M 18K /myzfs/bob
myzfs/bob@newtest 0 - 18K -
```
В данном случае снепшот передан `zfs receive` на локальном узле (в
В данном случае снапшот передан `zfs receive` на локальном узле (в
демонстрационных целях). В реальной ситуации таким образом можно сделать
снепшот на другой узел сети.
снапшот на другой узел сети.
Zpool ведет собственную историю всех команд. Посмотреть историю можно
следующим образом.
@ -861,5 +843,5 @@ Disqus.](https://disqus.com/?ref_noscript)
- [Работа с пулом ZFS](#работа-с-пулом-zfs)
- [Работа с файловой и другими системами ZFS](#работа-с-файловой-и-другими-системами-zfs)
- [Файловая система](#файловая-система)
- [Snapshots (снепшоты или снимки состояния) #{.anchor}](#snapshots-снепшоты-или-снимки-состояния-anchor)
- [Снова вернемся к пулам #{.anchor}](#снова-вернемся-к-пулам-anchor)
- [Snapshots (снапшоты или снимки состояния)](#snapshots-снапшоты-или-снимки-состояния)
- [Снова вернемся к пулам](#снова-вернемся-к-пулам)