From 432c089d557fb3142ff77e6fcf18bf1b293e0fa8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=94=D0=BE=D0=BB=D0=B3=D0=B8=D0=B9=20=D0=90=D1=80=D1=82?= =?UTF-8?q?=D1=91=D0=BC?= Date: Thu, 4 Apr 2024 12:49:08 +0300 Subject: [PATCH] mod --- zfs_commands.md | 384 +++++++++++++++++++++++------------------------- 1 file changed, 183 insertions(+), 201 deletions(-) diff --git a/zfs_commands.md b/zfs_commands.md index c26f050..f9fa041 100644 --- a/zfs_commands.md +++ b/zfs_commands.md @@ -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 - -NAME USED AVAIL REFER MOUNTPOINT -myzfs 172K 159M 21K /myzfs -myzfs/colin 18K 159M 18K /myzfs/colin -myzfs/colin2 18K 159M 18K /myzfs/colin2 +```bash +[root@zfs ~]# zfs create myzfs/colin2 +[root@zfs ~]# zfs list +NAME USED AVAIL REFER MOUNTPOINT +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, достаточно -выполнить одну команду. Причем после перезагрузки сервера доступ к -файловой системе утерян не будет. Никаких дополнительных настроек -операционной системы производить не нужно. +Чтобы сделать файловую систему доступной по протоколу NFS, достаточно выполнить одну команду. Причем после перезагрузки сервера доступ к файловой системе утерян не будет. Никаких дополнительных настроек операционной системы производить не нужно. -``` {tabindex="0"} -zfs set sharenfs=on myzfs/colin2 -zfs get sharenfs myzfs/colin2 - -NAME PROPERTY VALUE SOURCE -myzfs/colin2 sharenfs on local +```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 наверняка пригодится. +Точно так же в одну команду ресурс можно сделать доступным по протоколу SMB. Что пользователям ОС Windows наверняка пригодится. В системе должен быть установлен пакет `samba-usershares`. -``` {tabindex="0"} -zfs set sharesmb=on myzfs/colin2 -zfs get sharesmb myzfs/colin2 - -NAME PROPERTY VALUE SOURCE -myzfs/colin2 sharesmb on local +```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*. +Создать снапшот файловой системы очень просто. Давайте создадим снапшот для файловой системы `myzfs/colin` и назовем его *test*. -``` {tabindex="0"} -zfs snapshot myzfs/colin@test -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 +```bash +[root@zfs ~]# zfs snapshot myzfs/colin@test +[root@zfs ~]# zfs list -t snapshot +NAME USED AVAIL REFER MOUNTPOINT +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 - -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 +```bash +[root@zfs ~]# zfs clone myzfs/colin@test myzfs/colin3 +[root@zfs ~]# zfs list +NAME USED AVAIL REFER MOUNTPOINT +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 - -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 +```bash +[root@zfs ~]# zfs destroy myzfs/colin2 +[root@zfs ~]# zfs list +NAME USED AVAIL REFER MOUNTPOINT +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` +Мы можем отключить снапшот от `/myzfs/colin` и оставить его дочерним только для `/myzfs/colin3` -``` {tabindex="0"} -zfs promote myzfs/colin3 -zfs list - -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 - -NAME USED AVAIL REFER MOUNTPOINT -myzfs 147K 159M 21K /myzfs -myzfs/colin3 18K 159M 18K /myzfs/colin3 -myzfs/colin3@test 0 - 18K - +```bash +[root@zfs ~]# zfs list -t snapshot +NAME USED AVAIL REFER MOUNTPOINT +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/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 - -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 - -NAME USED AVAIL REFER MOUNTPOINT -myzfs 146K 159M 20K /myzfs -myzfs/bob 18K 159M 18K /myzfs/bob -myzfs/bob@newtest 0 - 18K - +```bash +[root@zfs ~]# zfs rename myzfs/colin3 myzfs/bob +[root@zfs ~]# zfs list +NAME USED AVAIL REFER MOUNTPOINT +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/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 - -NAME PROPERTY VALUE SOURCE -myzfs type filesystem - -myzfs creation Tue Sep 11 14:21 2007 - -myzfs used 146K - -myzfs available 159M - -myzfs referenced 20K - +```bash +[root@zfs ~]# zfs get all +NAME PROPERTY VALUE SOURCE +myzfs type filesystem - +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-снапшоты-или-снимки-состояния) + - [Снова вернемся к пулам](#снова-вернемся-к-пулам)