Можно ли настроить ZFS для надежной работы с «малым объемом ОЗУ», если производительность / кеширование ввода-вывода не вызывает беспокойства и не требуется функциональность RAID?
Да, даже с включенными функциями RAID. Вам нужно гораздо меньше, чем утверждают в сети, например, посмотрите на этого парня, который запускает быстрый файловый сервер с FreeBSD, 2 ядрами и 768 МБ виртуализированными. Или взгляните на руководство SolarisInternals (в настоящее время доступно только на 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
.
Единственный вариант использования, в котором я бы сделал что-то подобное, - это если бы у меня было специальное приложение, которое требует низкоуровневых функций конкретной файловой системы или имеет жестко запрограммированные допущения (к счастью, такое поведение, похоже, умерло в последнее время).
Внезапно я могу придумать 4 способа сделать это, но я бы не рекомендовал ни один из них!
Используйте пространства имен Linux; внутри каждого пространства имен для каждого пользователя смонтируйте файл для каждого пользователя поверх базового файла.
Создайте среду chroot для каждого пользователя с символической ссылкой базового файла на целевой файл
Запустите файловую систему на основе FUSE и смонтируйте ее поверх базового файла.
Сделайте базовый файл именованным каналом с процессом демона, обрабатывающим чтение / запись в файл для каждого пользователя.
Но все из них сложны в настройке и хрупки , и я бы их не рекомендовал. Я не буду вдаваться в подробности того, как это реализовать, потому что, если вы не можете его собрать, вы не сможете это исправить КОГДА он сломается!
В общем, вам следует обойти проблему другим способом в вашем коде (например, использовать переменные среды).
Используйте переменную для достижения цели. Предположим, вы используете bash, затем для пользователя user1 определите переменную, скажем cpath в ~ / .bashprofile
cpath=custom/path1
, получите доступ к файлу, например
"/some/path/$cpath/filename" # Quotes important to prevent word splitting
для пользователя user2, определите переменную, например
cpath=custom/path2
, получите доступ к файлу, например
"/some/path/$cpath/filename" #note the same path