существует ли файловая система, в которой один и тот же файловый путь перенаправляется в разные файлы, когда к нему обращаются разные пользователи?

Краткий ответ:
  • Да, с ZFS можно успешно использовать малый объем ОЗУ (~ 1 ГБ).
  • Вы не должны использовать дедупликацию, но RAID и сжатие обычно в порядке.
  • После включения дублирования оно работает для всех вновь записанных данных, и вы не сможете легко избавиться от него.
  • Вы не можете включить обратную дедупликацию, потому что она работает только с онлайн-данными.
  • Ваша идея излишне сложна без уважительной причины, поэтому я бы порекомендовал просто использовать ZFS и завершить ее.

Длинный ответ:

Можно ли настроить 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 .

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

1
04.08.2016, 19:30
2 ответа

Внезапно я могу придумать 4 способа сделать это, но я бы не рекомендовал ни один из них!

  1. Используйте пространства имен Linux; внутри каждого пространства имен для каждого пользователя смонтируйте файл для каждого пользователя поверх базового файла.

  2. Создайте среду chroot для каждого пользователя с символической ссылкой базового файла на целевой файл

  3. Запустите файловую систему на основе FUSE и смонтируйте ее поверх базового файла.

  4. Сделайте базовый файл именованным каналом с процессом демона, обрабатывающим чтение / запись в файл для каждого пользователя.

Но все из них сложны в настройке и хрупки , и я бы их не рекомендовал. Я не буду вдаваться в подробности того, как это реализовать, потому что, если вы не можете его собрать, вы не сможете это исправить КОГДА он сломается!

В общем, вам следует обойти проблему другим способом в вашем коде (например, использовать переменные среды).

2
27.01.2020, 23:47

Используйте переменную для достижения цели. Предположим, вы используете 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
-1
27.01.2020, 23:47

Теги

Похожие вопросы