ZFS RAID и LUKS шифрование в Linux

24

Я планирую установить набор 3x 2TB 7200rpm дисков в качестве пула Z-RAID с шифрованием LUKS в Linux (для решения NAS).

Насколько я понимаю, проблема заключается в том, что единственный способ добиться этого - использовать luksFormatкаждое физическое устройство, а затем собрать zpool из разблокированных контейнеров LUKS.

У меня есть следующие проблемы с этим:

  • Разве это существенно не повлияет на производительность записи? В этой настройке избыточные данные зашифрованы несколько раз, потому что LUKS не «знает» о Z-RAID. В решении LUKS-on-mdadm данные шифруются один раз и просто записываются на диски несколько раз. Мой процессор поддерживает Intel AES-NI.

  • Будет ли ZFS знать о сбоях диска при работе с контейнерами LUKS устройства отображения, в отличие от физических устройств? Как насчет дедупликации и других функций ZFS?

MasterM
источник
4
Я бы не стал это делать. Звучит неудачно.
ewwhite
3
@MadHatter, потому что это ZFS. Вы не можете сделать это.
Майкл Хэмптон
1
Хорошо (я верю вашему слову). Сделать одной большой ZFS , содержащие один большой файл, петлевой смонтировать его и шифровать , что .
MadHatter поддерживает Монику
1
@eewhite Я просто выясняю варианты использования шифрования с ZFS в Linux, пока модуль ядра ZFS не реализует само шифрование. Но я должен согласиться - LUKS и ZFS, похоже, не ладят.
MasterM
4
Никогда, никогда не создавайте большой файл и не зацикливайте его на ZFS. Вы ушли, запустив свой пул до непригодной скорости, когда CoW не хватает места для его операций.
Vinícius Ferrão

Ответы:

27

Один из серверов, которые я администрирую, использует тип конфигурации, который вы описываете. Он имеет шесть жестких дисков по 1 ТБ с пулом RAIDZ, зашифрованным LUKS. У меня также есть два жестких диска по 3 ТБ в зеркале ZFS с шифрованием LUKS, которые меняются каждую неделю, чтобы быть удаленными. Сервер использует эту конфигурацию около трех лет, и у меня никогда не было проблем с ней.

Если вам нужна ZFS с шифрованием в Linux, я рекомендую эту настройку. Я использую ZFS-Fuse, а не ZFS в Linux. Однако я считаю, что это никак не повлияет на результат, кроме того, что ZFS в Linux, вероятно, будет иметь лучшую производительность, чем установка, которую я использую.

В этой настройке избыточные данные зашифрованы несколько раз, потому что LUKS не «знает» о Z-RAID. В решении LUKS-on-mdadm данные шифруются один раз и просто записываются на диски несколько раз.

Имейте в виду, что LUKS не знает о RAID. Он только знает, что он сидит на блочном устройстве. Если вы используете mdadm для создания устройства RAID, а затем luksformatего, именно mdadm реплицирует зашифрованные данные на базовые устройства хранения, а не LUKS.

Вопрос 2.8 из часто задаваемых вопросов LUKS посвящен тому, должно ли шифрование быть поверх RAID или наоборот . Это обеспечивает следующую диаграмму.

Filesystem     <- top
|
Encryption
|
RAID
|
Raw partitions
|
Raw disks      <- bottom

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

RAID-Z and ZFS Filesystem  <-top
|
Encryption
|
Raw partitions (optional)
|
Raw disks                  <- bottom

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

Разве это существенно не повлияет на производительность записи? [...] Мой процессор поддерживает Intel AES-NI.

Не должно быть проблем с производительностью, если вы выбираете метод шифрования, который поддерживается вашим драйвером AES-NI. Если у вас Cryptsetup 1.6.0 или новее, вы можете запустить cryptsetup benchmarkи посмотреть, какой алгоритм обеспечит наилучшую производительность.

Этот вопрос о рекомендуемых вариантах для LUKS также может иметь значение.

Учитывая, что у вас есть аппаратная поддержка шифрования, вы, скорее всего, столкнетесь с проблемами производительности из-за смещения раздела.

ZFS в Linux добавил ashiftсвойство к zfsкоманде, чтобы вы могли указать размер сектора для ваших жестких дисков. Согласно связанному FAQ, ashift=12скажу, что вы используете диски с размером блока 4K.

В FAQ по LUKS указано, что раздел LUKS имеет выравнивание 1 МБ. Вопросы 6.12 и 6.13 обсуждают это подробно, а также дают советы о том, как увеличить заголовок раздела LUKS. Однако я не уверен, что возможно сделать его достаточно большим, чтобы гарантировать, что ваша файловая система ZFS будет создана на границе 4K. Мне было бы интересно услышать, как это работает для вас, если это проблема, которую вам нужно решить. Поскольку вы используете диски емкостью 2 ТБ, вы можете не столкнуться с этой проблемой.

Будет ли ZFS знать о сбоях диска при работе с контейнерами LUKS устройства отображения, в отличие от физических устройств?

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

В документации ZFS есть раздел по устранению неисправностей, который стоит прочитать. В разделе о замене или ремонте поврежденного устройства описывается, с чем вы можете столкнуться в случае сбоя, и как вы можете его устранить. Здесь вы сделали бы то же самое, что и для устройств без ZFS. Проверьте системный журнал на наличие сообщений от вашего драйвера SCSI, контроллера HBA или HD и / или программного обеспечения для мониторинга SMART, а затем действуйте соответствующим образом.

Как насчет дедупликации и других функций ZFS?

Все функции ZFS будут работать одинаково, независимо от того, зашифровано ли базовое хранилище блоков или нет.

Резюме

  1. ZFS на устройствах с шифрованием LUKS работает хорошо.
  2. Если у вас есть аппаратное шифрование, вы не увидите снижения производительности, если используете метод шифрования, поддерживаемый вашим оборудованием. Используйте, cryptsetup benchmarkчтобы увидеть, что будет лучше всего работать на вашем оборудовании.
  3. Думайте о ZFS как о RAID и файловой системе, объединенных в единую сущность. См. Диаграмму ASCII выше, где она помещается в стек хранения.
  4. Вам нужно будет разблокировать каждое блочное устройство с шифрованием LUKS, которое использует файловая система ZFS.
  5. Следите за состоянием оборудования хранения точно так же, как сейчас.
  6. Помните о выравнивании блоков файловой системы, если вы используете диски с блоками 4K. Возможно, вам придется поэкспериментировать с параметрами luksformat или другими настройками, чтобы получить требуемое выравнивание для приемлемой скорости.
морская звезда
источник
3
+1 За то, что нашли способ сделать это с помощью примеров.
ewwhite
1
1 МиБ уже равномерно делится на 4 КБ, поэтому вы должны быть правильно выровнены вплоть до ashift = 20 (что, я не думаю, будет необходимо в моей карьере), если вы использовали сырые диски.
Майкл Хэмптон
1
Еще одна вещь: я голосую за твой ответ, потому что это то, что ожидал ОП, и он хорошо написан, поэтому он лучше моего ответа.
Винициус Феррао
3
@ ViníciusFerrão: также обратите внимание, что FreeBSD и FreeNAS используют идентичный подход для шифрования ZFS. geliиспользуется для создания зашифрованного устройства, и данные в виде открытого текста становятся доступными через второе устройство, которое использует ZFS. См. Второй пункт на странице doc.freenas.org/index.php/Volumes#Encryption .
Морская звезда
2
@CMCDragonkai Поскольку устройства L2ARC и SLOG содержат биты и фрагменты данных из вашего пула, если вы шифруете хранилище для обеспечения конфиденциальности (что зачастую является целью использования зашифрованного хранилища в первую очередь), вы почти наверняка захотите запускать любые устройства L2ARC и SLOG с аналогичным шифрованием.
CVn
2

Альтернативная реализация - создать блочное устройство ZVOL ( http://zfsonlinux.org/example-zvol.html ), использовать LUKS для шифрования вновь созданного ZVOL, а затем создать файловую систему ext4 (или другую) поверх зашифрованного блока. устройство.

Tux Racer
источник