Глава 9. ZFS

9.1. Какой минимальный объём ОЗУ нужно иметь для ZFS?
9.2. Что такое ZIL и когда оно используется?
9.3. Нужен ли мне SSD для ZIL?
9.4. Что такое L2ARC?
9.5. Целесообразно ли включение дедупликации?
9.6. Я не могу создать или удалить файлы на пуле ZFS. Как я могу это исправить?
9.7. Поддерживается ли TRIM в ZFS для твердотельных накопителей?

9.1.

Какой минимальный объём ОЗУ нужно иметь для ZFS?

Для комфортного использования требуется 4 Гбайт ОЗУ, но конкретная нагрузка может сильно различаться.

9.2.

Что такое ZIL и когда оно используется?

ZIL ((ZFS intent log) - это журнал записи, используемый для фиксации операций записи. Обычно операции собираются в группу транзакций и при заполнении группы пишутся на диск (<<Transaction Group Commit>>). Однако системные вызовы типа fsync(2) требуют фиксацию записи данных на устройстве перед возвратом управления. ZIL нужен для подтверждения такой записи, но когда данные ещё не находятся на диске. Группа транзакций помечается временной меткой. В случае системного сбоя ищется последняя неповреждённая метка и из ZIL извлекаются недостающие данные.

9.3.

Нужен ли мне SSD для ZIL?

По умолчанию ZFS хранит ZIL в пуле со всеми данными. Если приложение имеет большой процент записи, вынос ZIL на отдельное устройство с очень быстрой синхронной последовательной записью может улучшить общую производительность. В остальных случаях SSD вряд ли сможет что-то сильно улучшить.

9.4.

Что такое L2ARC?

L2ARC - это кеш на чтение, хранимый на быстром устройстве, таком как SSD. Этот кеш не сохраняется между перезагрузками. Следует заметить, что ОЗУ выступает как кеш первого уровня, а L2ARC задействуется только при нехватке ОЗУ.

Для L2ARC нужно пространство в ARC для его индексации. Таким образом, рабочий набор, который идеально помещается в ARC, не будет помещаться при использовании L2ARC, потому что часть ARC будет отведена под индекс L2ARC с вытеснением части рабочего набора в L2ARC, более медленный, чем ОЗУ.

9.5.

Целесообразно ли включение дедупликации?

В общем случае нет.

Дедупликация занимает значительный объём ОЗУ и может увеличить задержки операций ввода/вывода. Если данные не являются сильно дублированными (образы виртуальных машин или пользовательские бекапы), то, возможно, дедупликация даст больше вреда. Другое соображение касается невозможности отменить статус дедупликации. Если данные записаны при включённой дедупликации, её выключение не приведёт к обратной репликации объединённых блоков до момента следующей перезаписи.

Дедупликация также может приводить к некоторым неожиданным ситуациям. В частности, удаление файлов может сильно замедлиться.

9.6.

Я не могу создать или удалить файлы на пуле ZFS. Как я могу это исправить?

Такое может произойти при 100% заполненности пула. ZFS требуется свободное место на диске для записи метаданных транзакций. Для восстановления работоспособного состояния пула обрежьте файл перед его удалением.

% truncate -s 0 unimportant-file

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

Примечание:

На системах с дополнительной настройкой ZFS dataset, такой как дедупликация, свободное место может не быть доступно сразу.

9.7.

Поддерживается ли TRIM в ZFS для твердотельных накопителей?

Поддержка ZFS TRIM была добавлена во FreeBSD 10-CURRENT в ревизии r240868 и стала доступна в ветках -STABLE в r252162 и r251419.

ZFS TRIM включена по умолчанию и может быть отключена посредством добавления такой строки в /etc/sysctl.conf:

vfs.zfs.trim_disable=1

Примечание:

ZFS TRIM может не работать на всех конфигурациях, в частности для файловой системы ZFS на устройствах с использованием GELI.

Этот, и другие документы, могут быть скачаны с https://download.freebsd.org/ftp/doc/.

По вопросам, связанным с FreeBSD, прочитайте документацию прежде чем писать в <questions@FreeBSD.org>.

По вопросам, связанным с этой документацией, пишите в рассылку <doc@FreeBSD.org>.