866 lines
35 KiB
Markdown
866 lines
35 KiB
Markdown
# ZFS --- Справочник команд
|
||
|
||
- [ZFS --- Справочник команд](#zfs-----справочник-команд)
|
||
- [Работа с пулом ZFS](#работа-с-пулом-zfs)
|
||
- [Работа с файловой и другими системами ZFS](#работа-с-файловой-и-другими-системами-zfs)
|
||
- [Файловая система](#файловая-система)
|
||
- [Snapshots (снепшоты или снимки состояния) #{.anchor}](#snapshots-снепшоты-или-снимки-состояния-anchor)
|
||
- [Снова вернемся к пулам #{.anchor}](#снова-вернемся-к-пулам-anchor)
|
||
|
||
Данный справочник является переводом [данной статьи](http://lildude.co.uk/zfs-cheatsheet). Авторы перевода: [Евгений Ратников](http://citkit.ru/articles/504/) и [Сгибнев Михаил](http://dreamcatcher.ru/). Огромное им спасибо за проделанную работу!
|
||
|
||
Не забывайте про страницы справки по командам работы с ZFS.
|
||
|
||
```bash
|
||
man zpool
|
||
man zfs
|
||
```
|
||
|
||
Так как включить в пул (zpool) можно любые сущности файловой системы, автор приводит примеры построения пулов и работы с ними с использованием простых файлов. Итак, создадим несколько файлов, с которыми будем работать подобно дискам.
|
||
|
||
```bash
|
||
[root@zfs]# cd /
|
||
[root@zfs /]# for i in {1..3}; do dd if=/dev/zero of=disk$i bs=1M count=1000; done
|
||
[root@zfs /]# dd if=/dev/zero of=disk4 bs=1M count=500
|
||
[root@zfs /]# dd if=/dev/zero of=disk5 bs=1M count=1000
|
||
[root@zfs /]#
|
||
```
|
||
|
||
Мы создали 5 «виртуальных дисков». Четыре имеют размер по 1000 Мб, а один - 500 Мб. Это пригодится для демонстрации работы с устройствами (разделами) разной ёмкости.
|
||
|
||
## Работа с пулом ZFS
|
||
|
||
Теперь создадим простой пул без избыточности, затем проверим его размер и использование.
|
||
|
||
```bash
|
||
[root@zfs /]# zpool create myzfs /disk1 /disk2
|
||
[root@zfs /]#
|
||
```
|
||
|
||
```bash
|
||
[root@zfs /]# zpool list
|
||
NAME SIZE ALLOC FREE CKPOINT EXPANDSZ FRAG CAP DEDUP HEALTH ALTROOT
|
||
myzfs 1.88G 110K 1.87G - - 0% 0% 1.00x ONLINE -
|
||
[root@zfs /]#
|
||
```
|
||
|
||
Созданы пул автоматически монтируется в каталог `/myzfs`. Посмотрим более детальную информацию о нашем хранилище.
|
||
|
||
```bash
|
||
[root@zfs /]# zpool status
|
||
pool: myzfs
|
||
state: ONLINE
|
||
config:
|
||
|
||
NAME STATE READ WRITE CKSUM
|
||
myzfs ONLINE 0 0 0
|
||
/disk1 ONLINE 0 0 0
|
||
/disk2 ONLINE 0 0 0
|
||
|
||
errors: No known data errors
|
||
[root@zfs /]#
|
||
```
|
||
|
||
Из вывода видно, что в пул включены два диска. Пул без избыточности (не mirror и не RAIDZ).
|
||
|
||
Теперь попробуем удалить только что созданный пул. Должны же мы это уметь.
|
||
|
||
```bash
|
||
[root@zfs /]# zpool destroy myzfs
|
||
[root@zfs /]# zpool list
|
||
no pools available
|
||
[root@zfs /]#
|
||
```
|
||
|
||
Попробуем снова создать пул типа `MIRROR` (зеркало), но на этот раз попытаемся включить в него диски разного размера. Zpool не даст нам этого сделать. Чтобы безоговорочно создать такой пул, используйте опцию `-f`, но в этом случае помните --- размер зеркала будет равен объему наименьшего диска.
|
||
|
||
```bash
|
||
[root@zfs /]# zpool create myzfs mirror /disk1 /disk4
|
||
invalid vdev specification
|
||
use '-f' to override the following errors:
|
||
/disk1 is part of active pool 'myzfs'
|
||
[root@zfs /]#
|
||
```
|
||
|
||
Создать зеркалируемое (*MIRROR*) хранилище можно на двух и более устройствах. Сколько устройств в пуле типа `MIRROR` --- столько у нас есть одинаковых копий данных.
|
||
|
||
```bash
|
||
[root@zfs /]# zpool create -f myzfs mirror /disk1 /disk2 /disk3
|
||
[root@zfs /]# zpool list
|
||
NAME SIZE ALLOC FREE CKPOINT EXPANDSZ FRAG CAP DEDUP HEALTH ALTROOT
|
||
myzfs 960M 129K 960M - - 0% 0% 1.00x ONLINE -
|
||
[root@zfs /]#
|
||
[root@zfs /]# zpool status
|
||
pool: myzfs
|
||
state: ONLINE
|
||
config:
|
||
|
||
NAME STATE READ WRITE CKSUM
|
||
myzfs ONLINE 0 0 0
|
||
mirror-0 ONLINE 0 0 0
|
||
/disk1 ONLINE 0 0 0
|
||
/disk2 ONLINE 0 0 0
|
||
/disk3 ONLINE 0 0 0
|
||
|
||
errors: No known data errors
|
||
[root@zfs /]#
|
||
```
|
||
|
||
Вместо зеркалирования можно использовать массивы `RAID`. Для этого необходимо создавать пул типа `raidz` вместо `mirror`. Подробнее <https://docs.freebsd.org/en/books/handbook/zfs/>.
|
||
|
||
Давайте теперь исключим один из дисков из пула. Так как этот диск относится к зеркалу `MIRROR`, то при его исключении никаких проблем не возникает.
|
||
|
||
```bash
|
||
[root@zfs /]# zpool detach myzfs /disk3
|
||
[root@zfs /]# zpool status
|
||
pool: myzfs
|
||
state: ONLINE
|
||
config:
|
||
|
||
NAME STATE READ WRITE CKSUM
|
||
myzfs ONLINE 0 0 0
|
||
mirror-0 ONLINE 0 0 0
|
||
/disk1 ONLINE 0 0 0
|
||
/disk2 ONLINE 0 0 0
|
||
|
||
errors: No known data errors
|
||
[root@zfs /]#
|
||
```
|
||
|
||
Теперь давайте добавим к пулу новый диск. Если пул не был зеркальным, то он им станет после добавления нового диска.
|
||
|
||
```bash
|
||
[root@zfs /]# zpool attach myzfs /disk1 /disk3
|
||
[root@zfs /]# zpool status
|
||
pool: myzfs
|
||
state: ONLINE
|
||
scan: resilvered 152K in 00:00:00 with 0 errors on Wed Apr 3 16:10:22 2024
|
||
config:
|
||
|
||
NAME STATE READ WRITE CKSUM
|
||
myzfs ONLINE 0 0 0
|
||
mirror-0 ONLINE 0 0 0
|
||
/disk1 ONLINE 0 0 0
|
||
/disk2 ONLINE 0 0 0
|
||
/disk3 ONLINE 0 0 0
|
||
|
||
errors: No known data errors
|
||
[root@zfs /]#
|
||
```
|
||
|
||
А что будет, если попытаемся *удалить*, а не исключить устройство из пула? Zpool сообщит нам о том, что устройство не может быть удалено. Для начала его нужно отключить.
|
||
|
||
```bash
|
||
[root@zfs /]# zpool remove myzfs /disk3
|
||
cannot remove /disk3: operation not supported on this type of pool
|
||
[root@zfs /]# zpool detach myzfs /disk3
|
||
[root@zfs /]#
|
||
```
|
||
|
||
Теперь давайте попробуем добавить диск горячей замены `hot spare` к нашему пулу.
|
||
|
||
```bash
|
||
zpool add myzfs spare /disk3
|
||
zpool status
|
||
|
||
pool: myzfs
|
||
state: ONLINE
|
||
scrub: none requested
|
||
config:
|
||
|
||
NAME STATE READ WRITE CKSUM
|
||
myzfs ONLINE 0 0 0
|
||
mirror ONLINE 0 0 0
|
||
/disk1 ONLINE 0 0 0
|
||
/disk2 ONLINE 0 0 0
|
||
spares
|
||
/disk3 AVAIL
|
||
|
||
errors: No known data errors
|
||
```
|
||
|
||
А теперь удалим его из пула.
|
||
|
||
```bash
|
||
[root@zfs /]# zpool remove myzfs /disk3
|
||
[root@zfs /]# zpool status
|
||
pool: myzfs
|
||
state: ONLINE
|
||
config:
|
||
|
||
NAME STATE READ WRITE CKSUM
|
||
myzfs ONLINE 0 0 0
|
||
mirror-0 ONLINE 0 0 0
|
||
/disk1 ONLINE 0 0 0
|
||
/disk2 ONLINE 0 0 0
|
||
|
||
errors: No known data errors
|
||
[root@zfs /]#
|
||
```
|
||
|
||
Теперь попробуем отключить один из дисков. Пока диск отключен, на него не будет производиться запись и с него не будет производиться чтение. Если использовать параметр `-t`, то при перезагрузке сервера диск вернется в состояние онлайн автоматически.
|
||
|
||
```bash
|
||
[root@zfs /]# zpool offline myzfs /disk1
|
||
[root@zfs /]# zpool status
|
||
pool: myzfs
|
||
state: DEGRADED
|
||
status: One or more devices has been taken offline by the administrator.
|
||
Sufficient replicas exist for the pool to continue functioning in a
|
||
degraded state.
|
||
action: Online the device using 'zpool online' or replace the device with
|
||
'zpool replace'.
|
||
config:
|
||
|
||
NAME STATE READ WRITE CKSUM
|
||
myzfs DEGRADED 0 0 0
|
||
mirror-0 DEGRADED 0 0 0
|
||
/disk1 OFFLINE 0 0 0
|
||
/disk2 ONLINE 0 0 0
|
||
|
||
errors: No known data errors
|
||
[root@zfs /]#
|
||
```
|
||
|
||
Обратите внимание на состояние пула: **DEGRADED**
|
||
|
||
Теперь включим этот диск.
|
||
|
||
```bash
|
||
[root@zfs /]# zpool online myzfs /disk1
|
||
[root@zfs /]# zpool status
|
||
pool: myzfs
|
||
state: ONLINE
|
||
scan: resilvered 36K in 00:00:00 with 0 errors on Wed Apr 3 16:24:12 2024
|
||
config:
|
||
|
||
NAME STATE READ WRITE CKSUM
|
||
myzfs ONLINE 0 0 0
|
||
mirror-0 ONLINE 0 0 0
|
||
/disk1 ONLINE 0 0 0
|
||
/disk2 ONLINE 0 0 0
|
||
|
||
errors: No known data errors
|
||
[root@zfs /]#
|
||
```
|
||
|
||
Состояние пула снова **ONLINE**.
|
||
|
||
В данный момент в нашем пуле два диска: disk1 и disk2. Также в системе имеется диск disk3, но он не подключен к пулу. Предположим, что disk1 вышел из строя и его нужно заменить на disk3.
|
||
|
||
```bash
|
||
[root@zfs /]# zpool replace myzfs /disk1 /disk3
|
||
[root@zfs /]# zpool status
|
||
pool: myzfs
|
||
state: ONLINE
|
||
scan: resilvered 264K in 00:00:00 with 0 errors on Wed Apr 3 16:26:44 2024
|
||
config:
|
||
|
||
NAME STATE READ WRITE CKSUM
|
||
myzfs ONLINE 0 0 0
|
||
mirror-0 ONLINE 0 0 0
|
||
/disk3 ONLINE 0 0 0
|
||
/disk2 ONLINE 0 0 0
|
||
|
||
errors: No known data errors
|
||
[root@zfs /]#
|
||
```
|
||
|
||
Периодически для исправления ошибок необходимо выполнять процедуру чистки (scrubbing) для пулов типа *MIRROR* или *RAID-Z*. Данная процедура находит ошибки в контрольных суммах и исправляет их. Также восстанавливаются сбойные блоки.
|
||
|
||
**Данная операция слишком ресурсоемка! Следует выполнять ее только во время наименьшей нагрузки на пул.**
|
||
|
||
```bash
|
||
[root@zfs /]# zpool scrub myzfs
|
||
[root@zfs /]#
|
||
```
|
||
|
||
Если необходимо перенести пул в другую систему, то его необходимо сначала экспортировать.
|
||
|
||
```bash
|
||
[root@zfs /]# zpool export myzfs
|
||
[root@zfs /]# zpool list
|
||
no pools available
|
||
[root@zfs /]#
|
||
```
|
||
|
||
А затем импортировать в новой системе.
|
||
|
||
Если ключ `-d` не указать, то команда ищет `/dev/dsk`. Так как в данном примере мы используем файлы, необходимо указать директорию с файлами используемыми хранилищем.
|
||
|
||
```bash
|
||
[root@zfs /]# zpool import -d / myzfs
|
||
[root@zfs /]# zpool list
|
||
NAME SIZE ALLOC FREE CKPOINT EXPANDSZ FRAG CAP DEDUP HEALTH ALTROOT
|
||
myzfs 960M 166K 960M - - 0% 0% 1.00x ONLINE -
|
||
[root@zfs /]#
|
||
```
|
||
|
||
Обновление версии пула. Показать версию используемого пула. Флаг `-v` показывает возможности, поддерживаемые данным пулом. Используйте флаг `-a`, чтобы обновить все доступные пулы до новейшей из них версии. Обновленные пулы больше не будут доступны из систем, на которых работают более старые версии.
|
||
|
||
```bash
|
||
[root@zfs /]# zpool upgrade
|
||
This system supports ZFS pool feature flags.
|
||
|
||
All pools are formatted using feature flags.
|
||
|
||
Every feature flags pool has all supported and requested features enabled.
|
||
[root@zfs /]#
|
||
[root@zfs /]# zpool upgrade -v
|
||
This system supports ZFS pool feature flags.
|
||
|
||
The following features are supported:
|
||
|
||
FEAT DESCRIPTION
|
||
-------------------------------------------------------------
|
||
async_destroy (read-only compatible)
|
||
Destroy filesystems asynchronously.
|
||
empty_bpobj (read-only compatible)
|
||
Snapshots use less space.
|
||
lz4_compress
|
||
LZ4 compression algorithm support.
|
||
multi_vdev_crash_dump
|
||
Crash dumps to multiple vdev pools.
|
||
spacemap_histogram (read-only compatible)
|
||
Spacemaps maintain space histograms.
|
||
enabled_txg (read-only compatible)
|
||
Record txg at which a feature is enabled
|
||
hole_birth
|
||
Retain hole birth txg for more precise zfs send
|
||
extensible_dataset
|
||
Enhanced dataset functionality, used by other features.
|
||
embedded_data
|
||
Blocks which compress very well use even less space.
|
||
bookmarks (read-only compatible)
|
||
"zfs bookmark" command
|
||
filesystem_limits (read-only compatible)
|
||
Filesystem and snapshot limits.
|
||
large_blocks
|
||
Support for blocks larger than 128KB.
|
||
large_dnode
|
||
Variable on-disk size of dnodes.
|
||
sha512
|
||
SHA-512/256 hash algorithm.
|
||
skein
|
||
Skein hash algorithm.
|
||
edonr
|
||
Edon-R hash algorithm.
|
||
userobj_accounting (read-only compatible)
|
||
User/Group object accounting.
|
||
encryption
|
||
Support for dataset level encryption
|
||
project_quota (read-only compatible)
|
||
space/object accounting based on project ID.
|
||
device_removal
|
||
Top-level vdevs can be removed, reducing logical pool size.
|
||
obsolete_counts (read-only compatible)
|
||
Reduce memory used by removed devices when their blocks are freed or remapped.
|
||
zpool_checkpoint (read-only compatible)
|
||
Pool state can be checkpointed, allowing rewind later.
|
||
spacemap_v2 (read-only compatible)
|
||
Space maps representing large segments are more efficient.
|
||
allocation_classes (read-only compatible)
|
||
Support for separate allocation classes.
|
||
resilver_defer (read-only compatible)
|
||
Support for deferring new resilvers when one is already running.
|
||
bookmark_v2
|
||
Support for larger bookmarks
|
||
redaction_bookmarks
|
||
Support for bookmarks which store redaction lists for zfs redacted send/recv.
|
||
redacted_datasets
|
||
Support for redacted datasets, produced by receiving a redacted zfs send stream.
|
||
bookmark_written
|
||
Additional accounting, enabling the written#<bookmark> property(space written since a bookmark), and estimates of send stream sizes for incrementals from bookmarks.
|
||
log_spacemap (read-only compatible)
|
||
Log metaslab changes on a single spacemap and flush them periodically.
|
||
livelist (read-only compatible)
|
||
Improved clone deletion performance.
|
||
device_rebuild (read-only compatible)
|
||
Support for sequential mirror/dRAID device rebuilds
|
||
zstd_compress
|
||
zstd compression algorithm support.
|
||
draid
|
||
Support for distributed spare RAID
|
||
|
||
The following legacy versions are also supported:
|
||
|
||
VER DESCRIPTION
|
||
--- --------------------------------------------------------
|
||
1 Initial ZFS version
|
||
2 Ditto blocks (replicated metadata)
|
||
3 Hot spares and double parity RAID-Z
|
||
4 zpool history
|
||
5 Compression using the gzip algorithm
|
||
6 bootfs pool property
|
||
7 Separate intent log devices
|
||
8 Delegated administration
|
||
9 refquota and refreservation properties
|
||
10 Cache devices
|
||
11 Improved scrub performance
|
||
12 Snapshot properties
|
||
13 snapused property
|
||
14 passthrough-x aclinherit
|
||
15 user/group space accounting
|
||
16 stmf property support
|
||
17 Triple-parity RAID-Z
|
||
18 Snapshot user holds
|
||
19 Log device removal
|
||
20 Compression using zle (zero-length encoding)
|
||
21 Deduplication
|
||
22 Received properties
|
||
23 Slim ZIL
|
||
24 System attributes
|
||
25 Improved scrub stats
|
||
26 Improved snapshot deletion performance
|
||
27 Improved snapshot creation performance
|
||
28 Multiple vdev replacements
|
||
|
||
For more information on a particular version, including supported releases,
|
||
see the ZFS Administration Guide.
|
||
|
||
[root@zfs /]#
|
||
```
|
||
|
||
Если нужно получить статистику по операциям ввода/вывода пулов, выполняем команду.
|
||
|
||
```bash
|
||
[root@zfs /]# zpool iostat 5
|
||
capacity operations bandwidth
|
||
pool alloc free read write read write
|
||
---------- ----- ----- ----- ----- ----- -----
|
||
myzfs 135K 960M 0 1 4.17K 8.67K
|
||
myzfs 135K 960M 0 0 0 0
|
||
myzfs 135K 960M 0 0 0 0
|
||
myzfs 135K 960M 0 0 0 0
|
||
myzfs 135K 960M 0 0 0 0
|
||
^C
|
||
[root@zfs /]#
|
||
```
|
||
|
||
## Работа с файловой и другими системами ZFS
|
||
|
||
### Файловая система
|
||
|
||
Создадим файловую систему в нашем пуле. Затем проверим автомонтирование новой файловой системы.
|
||
|
||
```bash
|
||
[root@zfs /]# zfs create myzfs/colin
|
||
[root@zfs /]# df -Th
|
||
Файловая система Тип Размер Использовано Дост Использовано% Cмонтировано в
|
||
...
|
||
myzfs zfs 832M 128K 832M 1% /myzfs
|
||
myzfs/colin zfs 832M 128K 832M 1% /myzfs/colin
|
||
[root@zfs /]#
|
||
```
|
||
|
||
Получить список файловых систем ZFS можно следующей командой.
|
||
|
||
```bash
|
||
[root@zfs /]# zfs list
|
||
NAME USED AVAIL REFER MOUNTPOINT
|
||
myzfs 171K 832M 24K /myzfs
|
||
myzfs/colin 24K 832M 24K /myzfs/colin
|
||
[root@zfs /]#
|
||
```
|
||
|
||
В данный момент в нашем пуле имеется одно зеркало, в которое входят два
|
||
диска: disc2 и disc3.
|
||
|
||
Давайте попробуем расширить наш пул. Попытаемся добавить к нему disc1
|
||
|
||
``` {tabindex="0"}
|
||
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
|
||
```
|
||
|
||
Попытка добавления не удалась, т.к. она неоднозначно и при добавлении
|
||
диска к существующему зеркалу необходимо указать дополнительно один из
|
||
существующих в этом зеркале дисков, либо добавить минимум два диска для
|
||
формирования нового зеркала, которое будет входить в данный пул.
|
||
|
||
Добавим к пулу новое зеркало, состоящее из дисков: disc1 и disc5
|
||
|
||
``` {tabindex="0"}
|
||
zpool add myzfs mirror /disk1 /disk5
|
||
zpool status -v
|
||
|
||
pool: myzfs
|
||
state: ONLINE
|
||
scrub: none requested
|
||
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
|
||
/disk1 ONLINE 0 0 0
|
||
/disk5 ONLINE 0 0 0
|
||
|
||
errors: No known data errors
|
||
```
|
||
|
||
Добавим теперь к пулу еще одну файловую систему и посмотрим, как это
|
||
отразится на размере файловых систем, входящих в пул.
|
||
|
||
``` {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
|
||
```
|
||
|
||
Обе файловые системы, входящие в пул, по объему равны всему пулу. В этом
|
||
заключается одно из преимуществ системы ZFS --- по умолчанию нет
|
||
никакого ограничения на файловые системы.
|
||
|
||
Чтобы явно управлять объемом файловых систем, можно прибегнуть к
|
||
резервированию --- выделению гарантированного объема для файловой
|
||
системы, либо квотированию --- ограничению файловой системы по
|
||
максимальному объему.
|
||
|
||
Давайте зарезервируем для файловой системы `/myzfs/colin` место в пуле,
|
||
равное 20 Мб. Остальные файловые системы, заполняя пул, в любом случае
|
||
оставят для этой файловой системы 20 Мб места.
|
||
|
||
``` {tabindex="0"}
|
||
zfs set reservation=20m myzfs/colin
|
||
zfs list -o reservation
|
||
|
||
RESERV
|
||
none
|
||
20M
|
||
none
|
||
```
|
||
|
||
Теперь для файловой системы `/myzfs/colin2` установим квоту в 20 Мб. Это
|
||
означает, что данная файловая система не сможет занять в пуле более 20
|
||
Мб, даже если пул будет полностью свободным.
|
||
|
||
``` {tabindex="0"}
|
||
zfs set quota=20m myzfs/colin2
|
||
zfs list -o quota myzfs/colin myzfs/colin2
|
||
|
||
QUOTA
|
||
none
|
||
20M
|
||
```
|
||
|
||
Также для файловой системы `/myzfs/colin2` включим сжатие. Сжатие
|
||
достаточно эффективно работает на уровне ZFS практически без потерь
|
||
производительности (конечно же, при условии, что производительности
|
||
сервера достаточно). Вместо `compression=on` можно использовать
|
||
`compression=gzip`.
|
||
|
||
``` {tabindex="0"}
|
||
zfs set compression=on myzfs/colin2
|
||
zfs list -o compression
|
||
|
||
COMPRESS
|
||
off
|
||
off
|
||
on
|
||
```
|
||
|
||
Чтобы сделать файловую систему доступной по протоколу NFS, достаточно
|
||
выполнить одну команду. Причем после перезагрузки сервера доступ к
|
||
файловой системе утерян не будет. Никаких дополнительных настроек
|
||
операционной системы производить не нужно.
|
||
|
||
``` {tabindex="0"}
|
||
zfs set sharenfs=on myzfs/colin2
|
||
zfs get sharenfs myzfs/colin2
|
||
|
||
NAME PROPERTY VALUE SOURCE
|
||
myzfs/colin2 sharenfs on local
|
||
```
|
||
|
||
Точно так же в одну команду ресурс можно сделать доступным по протоколу
|
||
SMB. Что пользователям ОС Windows наверняка пригодится.
|
||
|
||
``` {tabindex="0"}
|
||
zfs set sharesmb=on myzfs/colin2
|
||
zfs get sharesmb myzfs/colin2
|
||
|
||
NAME PROPERTY VALUE SOURCE
|
||
myzfs/colin2 sharesmb on local
|
||
```
|
||
|
||
Для повышения надежности (если у вас обычный пул, без избыточности),
|
||
можно использовать следующую опцию файловой системы.
|
||
|
||
``` {tabindex="0"}
|
||
zfs set copies=2 myzfs/colin2
|
||
```
|
||
|
||
Теперь в файловой системе будет храниться по две копии каждого блока.
|
||
Это имеет смысл, если пул без избыточности (*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}
|
||
|
||
Создать снепшот файловой системы очень просто. Давайте создадим снепшот
|
||
для файловой системы `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
|
||
```
|
||
|
||
Если появится необходимость отката к снепшоту, достаточно выполнить одну
|
||
команду.
|
||
|
||
``` {tabindex="0"}
|
||
zfs rollback myzfs/colin@test
|
||
```
|
||
|
||
Снэпшот можно подмониторовать, как обычно. Например так.
|
||
|
||
``` {tabindex="0"}
|
||
mount -t zfs myzfs/colin@test /mnt
|
||
```
|
||
|
||
Даже можно клонировать файловую системы из снепшота в новую файловую
|
||
систему.
|
||
|
||
``` {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
|
||
```
|
||
|
||
Теперь давайте удалим наши файловые системы `/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
|
||
```
|
||
|
||
Файловая система удалилась без проблем. Теперь удалим файловую систему,
|
||
для которой существует снепшот.
|
||
|
||
``` {tabindex="0"}
|
||
zfs destroy myzfs/colin
|
||
|
||
cannot destroy 'myzfs/colin': filesystem has children
|
||
use '-r' to destroy the following datasets:
|
||
myzfs/colin@test
|
||
```
|
||
|
||
Удаление невозможно, т.к. у файловой системы имеется дочерний объект.
|
||
Можно воспользоваться параметром `-r` чтобы удалить файловую систему
|
||
вместе со всеми дочерними объектами рекурсивно.
|
||
|
||
Мы можем отключить снепшот от `/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 -
|
||
```
|
||
|
||
Теперь сделанный ранее снепшот для `/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 -
|
||
```
|
||
|
||
### Снова вернемся к пулам [\#](#%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 -
|
||
[...]
|
||
```
|
||
|
||
Если пул нам более не нужен, можем его удалить. Однако, нельзя удалить
|
||
пул, в котором имеются активные файловые системы.
|
||
|
||
``` {tabindex="0"}
|
||
zpool destroy myzfs
|
||
|
||
cannot destroy 'myzfs': pool is not empty
|
||
use '-f' to force destruction anyway
|
||
```
|
||
|
||
Чтобы принудительно удалить пул, используйте параметр `-f` (не
|
||
выполняйте это сейчас. Пул нам еще понадобится далее)
|
||
|
||
``` {tabindex="0"}
|
||
zpool destroy -f myzfs
|
||
zpool status -v
|
||
|
||
no pools available
|
||
```
|
||
|
||
Отключить файловую систему от пула можно следующим образом.
|
||
|
||
``` {tabindex="0"}
|
||
zfs unmount myzfs/bob
|
||
df -h
|
||
|
||
myzfs 159M 20K 159M 1% /myzfs
|
||
```
|
||
|
||
Подключить файловую систему к пулу вот так.
|
||
|
||
``` {tabindex="0"}
|
||
zfs mount myzfs/bob
|
||
df -h
|
||
|
||
myzfs 159M 20K 159M 1% /myzfs
|
||
myzfs/bob 159M 18K 159M 1% /myzfs/bob
|
||
```
|
||
|
||
Снепшот можно сделать и на удаленный ресурс (или другое место в
|
||
локальной системе).
|
||
|
||
``` {tabindex="0"}
|
||
zfs send myzfs/bob@newtest | ssh localhost zfs receive myzfs/backup
|
||
zfs list
|
||
|
||
NAME USED AVAIL REFER MOUNTPOINT
|
||
myzfs 172K 159M 20K /myzfs
|
||
myzfs/backup 18K 159M 18K /myzfs/backup
|
||
myzfs/backup@newtest 0 - 18K -
|
||
myzfs/bob 18K 159M 18K /myzfs/bob
|
||
myzfs/bob@newtest 0 - 18K -
|
||
```
|
||
|
||
В данном случае снепшот передан `zfs receive` на локальном узле (в
|
||
демонстрационных целях). В реальной ситуации таким образом можно сделать
|
||
снепшот на другой узел сети.
|
||
|
||
Zpool ведет собственную историю всех команд. Посмотреть историю можно
|
||
следующим образом.
|
||
|
||
``` {tabindex="0"}
|
||
zpool history
|
||
|
||
History for 'myzfs':
|
||
2007-09-11.15:35:50 zpool create myzfs mirror /disk1 /disk2 /disk3
|
||
2007-09-11.15:36:00 zpool detach myzfs /disk3
|
||
2007-09-11.15:36:10 zpool attach myzfs /disk1 /disk3
|
||
2007-09-11.15:36:53 zpool detach myzfs /disk3
|
||
2007-09-11.15:36:59 zpool add myzfs spare /disk3
|
||
2007-09-11.15:37:09 zpool remove myzfs /disk3
|
||
2007-09-11.15:37:18 zpool offline myzfs /disk1
|
||
2007-09-11.15:37:27 zpool online myzfs /disk1
|
||
2007-09-11.15:37:37 zpool replace myzfs /disk1 /disk3
|
||
2007-09-11.15:37:47 zpool scrub myzfs
|
||
2007-09-11.15:37:57 zpool export myzfs
|
||
2007-09-11.15:38:05 zpool import -d / myzfs
|
||
2007-09-11.15:38:52 zfs create myzfs/colin
|
||
2007-09-11.15:39:27 zpool add myzfs mirror /disk1 /disk5
|
||
2007-09-11.15:39:38 zfs create myzfs/colin2
|
||
2007-09-11.15:39:50 zfs set reservation=20m myzfs/colin
|
||
2007-09-11.15:40:18 zfs set quota=20m myzfs/colin2
|
||
2007-09-11.15:40:35 zfs set compression=on myzfs/colin2
|
||
2007-09-11.15:40:48 zfs snapshot myzfs/colin@test
|
||
2007-09-11.15:40:59 zfs rollback myzfs/colin@test
|
||
2007-09-11.15:41:11 zfs clone myzfs/colin@test myzfs/colin3
|
||
2007-09-11.15:41:25 zfs destroy myzfs/colin2
|
||
2007-09-11.15:42:12 zfs promote myzfs/colin3
|
||
2007-09-11.15:42:26 zfs rename myzfs/colin3 myzfs/bob
|
||
2007-09-11.15:42:57 zfs destroy myzfs/colin
|
||
2007-09-11.15:43:23 zfs rename myzfs/bob@test myzfs/bob@newtest
|
||
2007-09-11.15:44:30 zfs receive myzfs/backup
|
||
```
|
||
|
||
Ну вот. Основные команды для работы с пулами ZFS усвоены.
|
||
|
||
Теперь можно удалить сам пул и файлы. Они нам больше не пригодятся.
|
||
|
||
::: {.flex .flex-wrap .justify-between}
|
||
:::
|
||
|
||
::: book-comments
|
||
::: {#disqus_thread}
|
||
:::
|
||
|
||
Please enable JavaScript to view the [comments powered by
|
||
Disqus.](https://disqus.com/?ref_noscript)
|
||
|
||
[comments powered by
|
||
[Disqus]{.logo-disqus}](https://disqus.com){.dsq-brlink}
|
||
:::
|
||
:::
|
||
|
||
::: book-toc-content
|
||
- [ZFS --- Справочник команд](#zfs-----справочник-команд)
|
||
- [Работа с пулом ZFS](#работа-с-пулом-zfs)
|
||
- [Работа с файловой и другими системами ZFS](#работа-с-файловой-и-другими-системами-zfs)
|
||
- [Файловая система](#файловая-система)
|
||
- [Snapshots (снепшоты или снимки состояния) #{.anchor}](#snapshots-снепшоты-или-снимки-состояния-anchor)
|
||
- [Снова вернемся к пулам #{.anchor}](#снова-вернемся-к-пулам-anchor)
|