Я читал в интернете много противоречивых заявлений о ZFS на системах с небольшим объемом памяти, но большинство вариантов использования были связаны с производительным хранением данных.
Я хочу использовать ZFS не из соображений производительности, а потому, что она поддерживает прозрачное сжатие и дедупликацию (последнее может быть необязательным) и все еще кажется более зрелой, чем BTRFS. Я не хочу использовать какую-либо конфигурацию RAID.
Я хочу использовать его на ноутбуке, для корневой и домашней файловой системы, а дисковое пространство и безопасность данных (возможность восстановления после отключения питания или других случайных несоответствий, очень низкий риск повреждения из-за низкого объема оперативной памяти и т. д.) важнее производительности диска. Я хочу сравнимую безопасность с ext2/3/4.
Я хотел бы использовать ext4 поверх ZVOL.
Итак, вопросы:
- Можно ли настроить ZFS для работы?надежнос «малым объемом оперативной памяти», если производительность ввода-вывода/кэширование не имеет значения, и функциональность RAID не требуется?
- Как изменится необходимый объем оперативной памяти, если я не использую ZFS как файловую систему, а просто использую ZVOL, поверх которых размещаю другую файловую систему?
- Как меняется потребность в оперативной памяти при включенной дедупликации? Если дедупликация включена, а оперативной памяти становится мало, безопасно ли это — может ли ZFS просто приостановить дедупликацию и использовать меньше оперативной памяти?
- Можно ли отключить автоматическую дедупликацию, но время от времени запускать ее вручную?
- Может ли ext4 поверх ZVOL надежно хранить мои данные даже в ситуациях с нехваткой оперативной памяти, и если возникают несоответствия, шансы на успех исправления высоки (как и в случае с ext2/3/4)? Увеличивает ли ext4 поверх ZVOL надежность, поскольку она добавляет надежности ext4, или данные так же надежны, как и базовый ZVOL?
Характеристики системы:
- Линукс
- 8 ГиБ оперативной памяти (совместно с видеокартой), но большая ее часть (не менее 7 ГиБ) должна быть доступна для программного обеспечения пользовательского пространства,
- около 700 ГиБ SSD-накопителя для использования ZFS,
- возможно, на другой системе 128 ГиБ eMMC для использования под ZFS.
Текущее использование диска (
du -sh
больших каталогов по адресу/
) (/ — это ext4, /var, смонтированный поверх, — это reiserfs) (хотим переместить его в хранилище с прозрачным сжатием):74M /etc 342G /home 5.0G /opt 1.5G /root 261M /tmp 35G /usr 30G /var
ИЛИ просто использовать BTRFS (читал, что из-за «ошибок» может произойти серьезная/трудно поддающаяся восстановлению потеря данных, но это все спорно...)?
решение1
Короткий ответ:
- Да, возможно успешно использовать небольшой объем оперативной памяти (~ 1 ГБ) с ZFS.
- Не следует использовать дедупликацию, но RAID и сжатие обычно вполне приемлемы.
- После включения дублирования оно будет применяться ко всем вновь записанным данным, и избавиться от него будет непросто.
- Вы не можете включить обратную дедупликацию, поскольку она работает только с онлайн-данными.
- Ваша идея неоправданно сложна без всякой на то причины, поэтому я бы рекомендовал просто использовать ZFS и на этом закончить.
Длинный ответ:
Можно ли настроить ZFS для надежной работы с «малым объемом оперативной памяти», если производительность ввода-вывода/кэширование не имеет значения и функциональность RAID не требуется?
Да, даже с включенными функциями RAID. Вам нужно гораздо меньше, чем люди утверждают в сети, например, посмотрите на этого парня, который управляет быстрым файловым сервером с FreeBSD, 2 ядрами и768 МБвиртуализировано. Или взгляните на SolarisInternals Guide (в настоящее время доступно только через archive.org), где 512 МБ упоминаются как абсолютный минимум, 1 ГБ как минимальная рекомендация и 2 ГБ как полная рекомендация.
Я бы все же воздержался от дедупликации. Не потому, что она медленная из-за страничной памяти, а потому, что вы не сможете вернуться к недедупликации, если ваша система зависнет. Кроме того, это обмен между оперативной памятью и дисками, а в бюджетной системе у вас нет ни того, ни другого, так что вы не выиграете много.
Как изменится необходимый объем оперативной памяти, если я не использую ZFS как файловую систему, а просто использую ZVOL, поверх которых размещаю другую файловую систему?
Вам понадобится дополнительная память для второй файловой системы и для уровня выше ZFS, в зависимости от того, как вы планируете к ней обращаться (виртуализация типа KVM, FUSE, iSCSI и т. д.)
Как меняется потребность в оперативной памяти при включенной дедупликации? Если дедупликация включена, а оперативной памяти становится мало, безопасно ли это — может ли ZFS просто приостановить дедупликацию и использовать меньше оперативной памяти?
Вы не можете приостановить дедупликацию, но ваши данные по-прежнему в безопасности. Будет много подкачки памяти и ожидания, поэтому это может быть не очень полезно. Дедупликация находится в режиме онлайн, поэтому для ее отключения вам нужно будет отключить дедупликацию и снова записать все данные (что по сути является копированием всех данных в новую файловую систему и уничтожением старой).
Можно ли отключить автоматическую дедупликацию, но время от времени запускать ее вручную?
Нет, потому что это не влияет на данные в состоянии покоя. Если у вас включена дедупликация и вы хотите записать блок, ZFS проверяет, присутствует ли он в таблице дедупликации. Если да, то запись отменяется, и в таблицу дедупликации добавляется ссылка. Если нет, то она записывается, и добавляется первая ссылка. Это означает, что ваши старые данные не затронуты дедупликацией, и включение ее без записи нового блока ничего не делает относительно используемого размера старых данных.
Может ли ext4 поверх ZVOL надежно хранить мои данные даже в ситуациях с нехваткой оперативной памяти, и если возникают несоответствия, шансы на успех исправления высоки (как и в случае с ext2/3/4)? Увеличивает ли ext4 поверх ZVOL надежность, поскольку она добавляет надежности ext4, или данные так же надежны, как и базовый ZVOL?
На мой взгляд, это излишнее усложнение, поскольку вы не получите никаких новых функций (как в обратном случае с ext4 внизу и ZFS сверху, например, моментальные снимки), а кроме того, получите некоторые новые обязанности, например, fsck
больше fdisk
упражнений по форматированию.
Единственный случай, когда я бы сделал что-то подобное, — это специальное приложение, которому требуются низкоуровневые функции определенной файловой системы или которое имеет жестко запрограммированные предположения (к счастью, в последнее время такое поведение, похоже, отмерло).
решение2
user121391 проделал большую работу, предоставив вам полезную информацию, поэтому я коснусь только ваших проблем с памятью.
Что касается памяти, да, ZFS может быть пожирателем памяти. Он будет использовать свободную системную память для кэширования. За эти годы Sun, теперь Oracle, улучшили производительность, надежность и улучшили использование памяти. Вы можете проверить сайт ZFS internals/evil tuning guide илиблог ZFSдля конкретики. Однако большинство этих настроек и функций можно найти только в версии Solaris 11.x ZFS.
Если вы действительно беспокоитесь о памяти, вам не следует использовать дедупликацию, так как она требует значительного объема памяти, поскольку дедупликация выполняется в реальном времени и должна хранить таблицу дедупликации в памяти.