ZFS

Материал из Xgu.ru

Перейти к: навигация, поиск
Автор: Игорь Чубин
ZFSDisk.png

ZFS (Zettabyte File System) — файловая система, разработанная компанией Sun Microsystems и обладающая такими характеристиками как возможность хранения больших объёмов данных, управления томами и множеством других. Первоначально файловая система была разработана для ОС Solaris, но впоследствии перенесена на ряд других операционных систем, в том числе на FreeBSD и Mac OS X.

Файловая система ZFS распространяется с открытым кодом по opensource-лицензии CDDL (несовместимой с GPL).

Появление ZFS наделало много шума, и до сих пор эта файловая является предметом горячих обсуждений. Причин у такой популярности несколько, в первую очередь:

  • Большие технические возможности файловой системы, в частности возможность хранения огромных объёмов данных и интеграция возможностей управления томами, квот, резервирования и контроля целостности данных в саму файловую систему.
  • Факт уже выполненного её портирования на несколько платформ и продолжение портирования на другие на фоне запрета на портирование на Linux.

Содержание

[править] Технические возможности ZFS

Возможности, аналогичные возможностям ZFS, по отдельности встречаются в других открытых технологиях и системах, в частности в Linux RAID, LVM, EVMS, XFS, Reiser4 и других. Однако, стоит отметить, что в настоящее время нет системы, которая одновременно включала бы в себя все те возможности, что есть у ZFS (это даёт, с одной стороны, повод говорить, что ZFS, пытаясь реализовать побольше возможностей, для которых можно использовать отдельные инструменты, противоречит unixway, и с другой стороны, говорить о лучшей интегрированности этих возможностей между собой внутри одной системы).

[править] Хранение больших объёмов данных

Файловая система ZFS позволяет адресовать

   ZFS = 128-bit = 3*10^26 [3E26] TB  (на одну ФС)

Существует расхожее утверждение, что хранение такого большого объёма информации на физических носителях потребует столько энергии, что для того чтобы её получить потребовалось бы преобразовать в энергию (не испарить!) всю воду Мирового океана.

Расчёты:

При использовании 300GB жёстких дисков их потребуется 1E27 штук.
Современные жёсткие диски Seagate потребляют около ~10Вт при простое
и 14Вт при запуске и активном использовании. Будем использовать число 10Вт для круглого счёта. 

Все жёсткие диски будут потреблять 1E28Вт или 8.8E31 КВт*ч (за год). 
Это составит 3.2E38 Дж.

Если вспомнить формулу E=mc^2, то можно подсчитать, что для получения
такой энергии потребует аннигилировать 3.5E21кг вещества.

Допустим, в качестве такого вещества будет использоваться вода.
Водные запасы мирового океана имеют суммарную массу около 1.2E21 kg.
Получается, нам её хватит чтобы вращать наши винты одну третью часть года,
то есть 4 месяца.

Существуют и другие, более серьёзные физические ограничения на организацию хранилища такого объёма. С ними можно ознакомиться на странице [1].

Таким образом, можно предположить, что ZFS может хранить объёмы информации, которые превышают все мыслимые при условии сохранения подхода к организации хранения (и при условии, что устройства хранение информации на ZFS не уйдут далеко за пределы Солнечной системы :).

С другой стороны, возможность хранения столь больших объёмов информации (что заведомо невозможно по другим причинам, в том числе фундаментальным ограничениям) можно рассматривать и как недостаток системы.

Следует отметить, что современные 64-битные файловые системы также предоставляют возможность хранения значительных объёмов информации, и этих возможностей должно хватить на ближайшие годы.

(1EiB = 2^20TiB ≈ 10^6 TiB)

[править] Снапшоты и пулы хранения

В ZFS встроены возможности по управлению снапшотами (snapshots) и пулами хранения (storage pools), что позволяет обойтись без системы управления томами, такой как LVM и использовать одни только возможности файловой системы.

Интеграция системы управления томами и файловой системы даёт дополнительную гибкость, что в свою очередь даёт:

  • лёгкость создания клонов;
  • возможность создания online-снапшотов;
  • гибкое распределение пространства между файловыми системами, входящими в пул;
  • возможность использования квот для ограничения потребления внутри пула;
  • легковесное создание файловой системы (создание новой файловой системы по трудоемкости для операционной системы соизмеримо с созданием каталога).

Если говорить в общем, то возможности ZFS превышают аналогичные возможности системы управления томами LVM, однако в сравнении с EVMS, в некоторых вопросах она проигрывает.

[править] Контроль целостности данных с помощью контрольных сумм

Традиционные файловые системы предполагают, что устройства, на которых они расположены, надёжны и в дополнительном контроле не нуждаются. ZFS исходит из того что устройство может ошибаться, и дополнительно контролирует блоки данных с помощью 256-битных контрольных сумм.

Если сбой обнаружен на блоке RAIDZ или отзеркалированном разделе, он автоматически восстанавливается.

[править] Другие преимущества

Файловая система ZFS обладает и другими преимуществами, в числе которых:

  • прозрачная возможность избирательного сжатия файлов;
  • встроенная возможность избирательного шифрования файлов (пока в процессе разработки).

[править] Портирование ZFS

Линус Торвальдс и Джефф Бонвик сидят и беседуют неизвестно о чём

Первоначально файловая система ZFS была разработана для Solaris.

В настоящий момент портирование выполнено:

  • на операционную систему FreeBSD;
  • на операционную систему Mac OS X;
  • на операционную систему NetBSD (частично);
  • часть кода интегрирована в загрузчик GRUB.

Портирование ZFS на FreeBSD и интеграция портированного кода ZFS в CVS FreeBSD была выполнена в апреле 2007 года. Портирование завершено не полностью: есть ряд функций, которые порт ZFS на FreeBSD не поддерживает. Это связано как с самим портом, так и с отсутствием необходимых возможностей у FreeBSD.

Было также выполнено портирование ZFS на Mac OS X. Сейчас ZFS для Mac OS X доступна в самой операционной системе (начиная с 10.5), но только в режиме readonly, и в виде дополнительного программного обеспечения, которое даёт возможность использования ZFS в режиме чтение/запись.

В качестве одного из проектов Google Summer of Code 2007 было начато портирование ZFS на NetBSD. Портирование не завершилось, и проект продолжился в 2009 году в рамках очередного Google Summer of Code [2]. Промежуточные результаты доступны в виде архива неработающего кода [3], но работа продолжается [4].

Кусок кода ZFS открыт по GPL, и интегрирован в загрузчик GRUB, для того чтобы GRUB мог выполнять загрузку с ZFS-раздела.

Всё это происходит на фоне запрета портирования ZFS на Linux.

Формально, портирование на Linux выполнить нельзя по причине несовместимости лицензии CDDL, по которой распространяется ZFS, и лицензии GPL, по которой распространяется ядро Linux, а также патентных запретов, защищающих ZFS.

Существует несколько (теоретически) возможных способов выйти из сложившейся ситуации и добиться того чтобы ZFS работала под ядром Linux:

  1. Sun выпустит ZFS под двумя лицензиями, одной из которых будет GPL.
  2. Linux изменит свою лицензию (это возможно только при условии согласия всех сделавших вклад в ядро, вероятность чего стремится к нулю).
  3. Судебные решения (различных государств) разрешат использовать модули ядра Linux, несовместимые с GPL, вместе с ядром Linux.
  4. ZFS будет реализована под Linux повторно с нуля.

Последний вариант наиболее вероятен, однако, не исключено, что он противоречит патентным ограничениям, в связи с многочисленными патентами, которые Sun имеет в отношении ZFS.

Периодически возникают волны обсуждения первого варианта, так, например, одно из последних бурных обсуждений было вызвано появлением в блоге Джеффа Бонвика (Jeff Bonwick, CTO of Storage Technologies in Sun Microsystems) фотографий, где они беседуют с Линусом Торвальдсом на территории Джеффа [5]. Широкая общественность восприняла это как сигнал, сообщающий о возможности портирования ZFS на Linux. Ведь что ещё может связывать этих людей?

Существует ещё возможность нелегитимного портирования ZFS под Linux и дальнейшее использование порта вопреки лицензионным и патентным ограничениям. Тем не менее, маловероятно, что если такой порт даже и будет сделан, он будет включен в mainstream-ядро.

Кроме всего прочего, можно использовать ZFS под Linux через FUSE, когда код файловой системы не интегрируется с ядром, а запускается в пространстве пользователя (userlevel) и работает через интерфейс FUSE. Такой способ, хотя и даёт возможность поэкспериментировать с файловой системой, но не может рассматриваться как возможная альтернатива при полновесном использовании ZFS на производственных серверах.


Многочисленные высказывания по поводу невозможности запуска ZFS под Linux и конфликта лицензий CDDL и GPL сводятся преимущественно к двум полярным:

  1. Ребята из Sun специально так извратились и разработали opensource-лицензию несовместимую с GPL, чтобы нельзя было ZFS (и другие компоненты OpenSolaris) встроить в Linux, что привело бы к его полной и безоговорочной победе в серверной сфере; что же касается разрешения на портирование в BSD-системы, то Sun их не боится, потому как BSD-системы для них вообще не конкурент (последнее утверждение обычно мотивируется тем, что основные соперники Sun -- Hewlett-Packard и IBM -- сделали ставку на Linux, а не на BSD и продвигают именно его). Sun в душе как был противником свободного софта, так и остался, и все свои открытия (открытия кода) он делает, главным образом, для того чтобы привлечь массы сторонников opensource и заполучить их светлые головы и быстрые руки для работы над своей фактически закрытой системой.
  2. Не CDDL запрещает линковаться с GPL, а GPL с CDDL, следовательно не Sun против, а линуксоиды против того чтобы включать CDDL-код в свои проекты. Sun открыл код ZFS и распространяет его по действительно свободной лицензии (в этом месте обычно следует ссылка на fsf.org, где перечислены свободные лицензии и CDDL в их числе), а линуксоиды по принципиальным соображениям не хотят использовать этот код. Те, кому действительно важна свобода (в том числе свобода выбора) уже наслаждаются богатыми возможностями ZFS в полностью свободной системе, а не соблюдают строгий GPL-ный пост по принципиальным соображениям.

В действительности аргументов и позиций значительно больше, а вышеприведённые утверждения лишь приблизительно отражают аргументацию сторон.

[править] Пример использования ZFS

Для того чтобы оценить возможности ZFS (или поэкспериментировать с ней, если есть возможность) ниже приводится ряд команд по работе с файловой системой.

Рассмотрены наиболее тривиальные команды и несколько команд средней сложности. Для более полного знакомства с ZFS лучше использовать документацию по этой файловой системе (ссылки в разделе "Дополнительная информация").

Ознакомиться с документацией

	$ man zpool
	$ man zfs


Создать несколько виртуальных устройств (virtual device, vdev). На месте этих файлов могут быть обычные дисковые разделы.

	$ su
	Password:
	# cd /
	# mkfile 100m disk1 disk2 disk3 disk5
	# mkfile 50m disk4
	# ls -l disk*
	-rw------T   1 root     root     104857600 Sep 11 12:15 disk1
	-rw------T   1 root     root     104857600 Sep 11 12:15 disk2
	-rw------T   1 root     root     104857600 Sep 11 12:15 disk3
	-rw------T   1 root     root     52428800 Sep 11 12:15 disk4
	-rw------T   1 root     root     104857600 Sep 11 12:15 disk5


Создать пул и посмотреть информацию о нём.

	# zpool create myzfs /disk1 /disk2
	# zpool list
	NAME          SIZE    USED   AVAIL    CAP  HEALTH     ALTROOT
	myzfs         191M     94K    191M     0%  ONLINE     -


Получить развёрнутую информацию о пуле

	# zpool status -v
	  pool: myzfs
	 state: ONLINE
	 scrub: none requested
	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


Уничтожить пул:

	# zpool destroy myzfs
	# zpool list
	no pools available

Попытка создать пул zfs с udev'ами разного размера не удаётся. Можно использовать ключ -f, в этом случае размер определяется наименьшим.

	
        # zpool create myzfs mirror /disk1 /disk4
	invalid vdev specification
	use '-f' to override the following errors:
	mirror contains devices of different sizes


Создать зеркалированный пул.

	# zpool create myzfs mirror /disk1 /disk2 /disk3
	# zpool list
	NAME          SIZE    USED   AVAIL    CAP  HEALTH     ALTROOT
	myzfs        95.5M    112K   95.4M     0%  ONLINE     -
	# 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
		    /disk1  ONLINE       0     0     0
		    /disk2  ONLINE       0     0     0
		    /disk3  ONLINE       0     0     0

	errors: No known data errors


Отключить устройство от зеркалированного пула:

	# zpool detach myzfs /disk3
	# 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
		    /disk1  ONLINE       0     0     0
		    /disk2  ONLINE       0     0     0

	errors: No known data errors


Подключить устройство к пулу. Если пул раньше не был зеркальным, он превращается в зеркальный. Если он уже был зеркальным, он превращается в тройное зеркало.

	# zpool attach myzfs /disk1 /disk3
	# zpool status -v
	  pool: myzfs
	 state: ONLINE
	 scrub: resilver completed with 0 errors on Tue Sep 11 13:31:49 2007
	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
		    /disk3  ONLINE       0     0     0

	errors: No known data errors


Попробовать удалить устройство из пула. Поскольку это зеркало, нужно использовать "zpool detach".

	# zpool remove myzfs /disk3
	cannot remove /disk3: only inactive hot spares can be removed
	# zpool detach myzfs /disk3


Добавить запасное устройство горячей замены (hot spare) к пулу.

	# zpool add myzfs spare /disk3
	# 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
		    /disk1  ONLINE       0     0     0
		    /disk2  ONLINE       0     0     0
		spares
		  /disk3    AVAIL   

	errors: No known data errors


Удалить запасное устройство горячей замены из пула:

	# zpool remove myzfs /disk3
	# 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
		    /disk1  ONLINE       0     0     0
		    /disk2  ONLINE       0     0     0

	errors: No known data errors


Вывести указанное устройство из эксплуатации (offline). После этого попыток писать и читать это устройство не будет до тех пор, пока оно не будет переведено в online. Если использовать ключ -t, устройство будет переведено в offline временно. После перезагрузки устройство опять будет в работе (online).

	# zpool offline myzfs /disk1
	# zpool status -v
	  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'.
	 scrub: resilver completed with 0 errors on Tue Sep 11 13:39:25 2007
	config:

		NAME        STATE     READ WRITE CKSUM
		myzfs       DEGRADED     0     0     0
		  mirror    DEGRADED     0     0     0
		    /disk1  OFFLINE      0     0     0
		    /disk2  ONLINE       0     0     0

	errors: No known data errors


Перевести указанное устройство в online:

	# zpool online myzfs /disk1
	# zpool status -v
	  pool: myzfs
	 state: ONLINE
	 scrub: resilver completed with 0 errors on Tue Sep 11 13:47:14 2007
	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

	errors: No known data errors


Заменить один диск в пуле другим (например, при сбое диска):

	# zpool replace myzfs /disk1 /disk3
	# zpool status -v
	  pool: myzfs
	 state: ONLINE
	 scrub: resilver completed with 0 errors on Tue Sep 11 13:25:48 2007
	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

	errors: No known data errors


Выполнить скраббинг (scrubbing) пула для того чтобы знать, что там все контрольные суммы верны. Если используется зеркало или RAIDZ автоматически восстанавливаются сбойные блоки.

Icon-caution.gif

при скраббинге очень активный ввод/вывод

	# zpool scrub myzfs


Экспортировать пул из системы для импорта в другую систему.

	# zpool export myzfs
	# zpool list
	no pools available


Импортировать ранее экспортированный пул. Если ключ -d не указан, команда ищет /dev/dsk. Поскольку в нашем примере используются файлы, нужно указать каталог, используемый пулом:

	# zpool import -d / myzfs
	# zpool list
	NAME          SIZE    USED   AVAIL    CAP  HEALTH     ALTROOT
	myzfs        95.5M    114K   95.4M     0%  ONLINE     -


Пулы работают на версии 8:

	# zpool upgrade
	This system is currently running ZFS pool version 8.


Показать версию формата пулов. Ключ -v говорит, что нужно показать какие функции поддерживаются текущей версией. Ключ -a говорит, что нужно обновить до последней версии. Пулы не будут доступны в системах, работающих с более низкой версией.

	# zpool upgrade -v
	This system is currently running ZFS pool version 8.

	The following versions are 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   pool properties
	 7   Separate intent log devices
	 8   Delegated administration
	For more information on a particular version, including supported
	releases, see:

	http://www.opensolaris.org/os/community/zfs/version/N

	Where 'N' is the version number.


Посмотреть статистику ввода/вывода для пула:

	# zpool iostat 5
		       capacity     operations    bandwidth
	pool         used  avail   read  write   read  write
	----------  -----  -----  -----  -----  -----  -----
	myzfs        112K  95.4M      0      4     26  11.4K
	myzfs        112K  95.4M      0      0      0      0
	myzfs        112K  95.4M      0      0      0      0


Создать файловую систему и проверить её с помощью df -h. Файловая система автоматически монтируется в /myzfs. Дополнительную информацию об этом можно найти в man'е zfs в разделе MOUNTPOINTS:

	# zfs create myzfs/colin
	# df -h
	Filesystem   kbytes    used   avail capacity  Mounted on
	...
	myzfs/colin  64M    18K    63M     1%    /myzfs/colin


Показать список всех файловых систем ZFS:

	# zfs list
	NAME         USED   AVAIL  REFER  MOUNTPOINT
	myzfs         139K  63.4M    19K  /myzfs
	myzfs/colin    18K  63.4M    18K  /myzfs/colin


Попытка добавить отдельный vdev к зеркалированному множеству (set):

	# 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


Добавление зеркалированного множества vdev'ов:

	# 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


Создание ещё одной файловой системы. Обратите внимание, что обе файловые системы как будто бы имеют 159M свободных, ибо квоты не установлены. Каждая может расти до тех пор, пока не заполнит пул:

	# 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


Зарезервировано 20M для одной файловой системы, что гарантирует что остальные не заполнят всё место:

	# zfs set reservation=20m myzfs/colin
	# zfs list -o reservation
	RESERV
	  none
	   20M
	  none


Установить и посмотреть квоты:

	# zfs set quota=20m myzfs/colin2
	# zfs list -o quota myzfs/colin myzfs/colin2
	QUOTA
	 none
	  20M


Включить сжатие и проверить, что оно включилось:

	# zfs set compression=on myzfs/colin2
	# zfs list -o compression
	COMPRESS
	     off
	     off
	      on


Создать снапшот (snapshot, снимок) test:

	# zfs snapshot myzfs/colin@test
	# 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


Откатиться на снапшот test:

	# zfs rollback myzfs/colin@test


Снапшот можно подмонтировать в обычном порядке:

	# mount -t zfs myzfs/colin@test /mnt


Создание клона. Тип клона будет точно таким же как и у оригинала.

	# 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


Уничтожить файловую систему:

	# 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


Неудачная попытка удалить файловую систему, у которой есть дочерняя структура. В данном случае снапшот. Нужно или удалить снапшот или превратить его в клон.

	# zfs destroy myzfs/colin
	cannot destroy 'myzfs/colin': filesystem has children
	use '-r' to destroy the following datasets:
	myzfs/colin@test


После того как мы превратили снапшот в клон, он больне не зависит от своего источника. И его можно удалять:

	# 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  -


Переименовать файловую систему и отдельно переименовать снапшот:

	# 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  -

Показать свойства заданного датасета. Есть дополнительные опции.

	# 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                    -
	[...]

Неудавшаяся попытка удалить пул с существующей и активной файловой системой:

	# zpool destroy myzfs
	cannot destroy 'myzfs': pool is not empty
	use '-f' to force destruction anyway


Размонтировать смонтированную ранее файловую систему:

	# zfs unmount myzfs/bob
	# df -h
	myzfs                  159M    20K   159M     1%    /myzfs


Смонтировать файловую систему. Обычно это делается при загрузке:

	# zfs mount myzfs/bob
	# df -h
	myzfs                  159M    20K   159M     1%    /myzfs
	myzfs/bob              159M    18K   159M     1%    /myzfs/bob


Создать потоковое представление снапшота и перенаправить его на zfs receive. В этом примере перенаправление выполняется на localhost в демонстрационных целях, вообще-то перенаправление должно быть на другой хост:

	# 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  -


Посмотреть историю команд для всех пулов. Можно ограничить историю одним пулом, для этого надо указать его имя в командной строке. После того как пул уничтожен, его история теряется.

	# 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

Уничтожить пул. Ключ -f говорит о том, что пул нужно удалить вместе с файловыми системами, которые в нём созданы.

	# zpool destroy -f myzfs
	# zpool status -v
	no pools available

[править] Дополнительная информация

Основные материалы о ZFS:

[править] Преимущества ZFS

Для того чтобы понять вокруг чего столько шума, и решить для себя, стоит ли вообще обращать на него внимание, стоит понять какие основные преимущества у ZFS есть в настоящий момент.

  • 128-битная файловая система, что даёт возможность хранения соответствующих объёмов информации
  • использование продвинутых алгоритмов хэширования для повышения надёжности хранения
  • поддержка снапшотов (snapshot), благодаря этой и следующей особенности ZFS сочетает в себе возможности файловой системы и системы управления томами (такой как LVM)
  • поддержка пулов хранения (storage pools)
  • высокая производительность на ряде задач
  • endian'о-независимость, что даёт возможность безболезнненого смешения устройств big endian и little endian
  • отсутствие необходимости в выполнении fsck благодаря использованию другого подхода к организации хранения данных

Обзор (поверхностный) некоторых преимуществ ZFS:


[править] Недостатки ZFS

Некоторые недостатки указаны на странице обсуждения.

  • Невозможно уменьшить zfs pool подробнее здесь [6].
  • Невозможно увеличить количество устройств внутри избыточного vdev ( raidz/raidz2 ) подробнее [7]
  • Из-за широкого использования Copy-on-write возможна заметная фрагментация при частом изменении файлов.[8] Дефрагментатора пока нет. (bug#*4854312 bug#*6596237)

[править] Сравнения

Считается, что одно из преимуществ ZFS это производительность. Для того чтобы лучше представлять, есть ли действительно это преимущество и, если есть, то в каких именно задачах и в сравнении с чем, можно познакомиться с результатами сравнений.

ZFS можно сравнить не только с другими файловыми системами, но и с системами управления томами: LVM и EVMS. В случае сравнения с LVM ZFS выигрывает, в случае же EVMS -- преимущества не так очевидны.

[править] ZFS и FreeBSD

[править] ZFS и Linux

Собственно, почему нельзя портировать ZFS под Linux, и если портировать, то с чем это сопряжено:

Несмотря на это, портирование идет полным ходом. http://zfsonlinux.org

Note-icon.gif

Так же можно использовать ZFS через Fuse. Понятно, что это не совсем то, что хотелось бы, но поэкспериментировать и познакомиться с ZFS можно.

[править] ZFS и файловые серверы

Интересные возможности появляются при совместном использовании ZFS и Samba:

  • Автоматические создание отдельной Файловой системы для домашнего каталога каждого пользователя
  • Автоматическое создание снимков файловой системы при заходе на файловый ресурс
  • Автоматическое создание клонов при соединении и автоматическое их удаление при отключении

[править] ZFS и СУБД

Какие возможности появляются при размещении баз данных на ZFS?

[править] Интересные методы использования ZFS

Возможности файловой системы ZFS хорошо видны на некоторых элегантных решениях.

Простой способ организации резервного копирования данных находящихся на ZFS в удалённое хранилище Amazon S3:

Использование возможностей ZFS для организации транзакционных обновлений в Nexenta:

[править] Обсуждения

Некоторые обсуждения, которые позволяют сразу въехать в глубь проблемы:

[править] Материалы по ZFS на Xgu.ru

Xentaur
Дисковая подсистема
Linux | FreeBSD

Диски и разделы
Файлы устройств: Блочное устройство | Символьное устройство | Raw-устройство | loop-устройство
Диски: IDE | SATA (SATA hotplug) | SCSI | USB
RAID-массивы: Аппаратный RAID | Linux RAID | FreeBSD RAID
Дисковые разделы: Раздел | MBR | fdisk | parted | disklabel | GPT

Управление томами
Логический том | Физический том | Группа томов | Снимок | Клон
device-mapper | dm-ioband | dm-crypt | dm-userspace | multipath
Системы управления томами: LVM | CLVM | EVMS | Btrfs* | ZFS* | AdvFS* | Zumastor

Сетевые хранилища и репликация
Отказоустойчивость: DRBD | Xen + DRBD | ggate + gmirror | HAST
Сетевые хранилища: AoE | iSCSI | FCoE | GNBD

Файловые системы
Монтирование | Проверка целостности | Дефрагментация | Суперблок | inode | Журнал | Кэш | VFS | UUID | FUSE
Локальные: ext3 | ext3cow | ext4 | JFS | Reiser4 | XFS | ZFS | Btrfs | AdvFS | ISO | aufs
Сетевые: NFS | CIFS | AFS | POHMELFS
Кластерные: GFS | OCFS2 | CXFS | VMFS | GPFS
Распределенные: Lustre | PVFS | Ceph | Coda

* Btrfs, ZFS и AdvFS — это файловые системы с возможностями управления томами
Источник — «http://xgu.ru/wiki/ZFS»