Учитывая, что у вас есть все основные предпосылки, в частности ОЗУ ECC, я думаю, что ZFS (через реализацию ZFS On Linux ) может быть полезным вариантом.
В отличие от btrfs, который позаимствовал у ZFS много идей по дизайну, ZFS - это проверенная и надежная (менеджер томов) файловая система. Конечно, у порта Linux есть некоторые неровности, которые с течением времени сглаживаются, но код и дизайн были протестированы во многих реальных сценариях сбоев.
Вы можете использовать ZFS либо с двумя отдельными разделами в зеркальной конфигурации, либо с одним разделом и установив copies=2
в корневой файловой системе пула. Дисковое пространство и накладные расходы производительности ввода-вывода будут аналогичными. Любой из них позволит вам перейти на более крупные диски или конфигурации с несколькими дисками, поскольку ваши потребности со временем меняются. Вы можете использовать raidz vdevs (с разными уровнями избыточности: один, два или три диска), но это создает проблемы, если вы когда-нибудь захотите изменить уровни избыточности.
Я бы посоветовал серьезно рассмотреть возможность запуска ZFS поверх LUKS.
Противоположность (запуск LUKS поверх ZFS) также возможна, но значительно более сложна. Вы также можете запустить что-то вроде ecryptfs поверх незашифрованной ZFS, но это может привести к утечке значительного количества метаданных файловой системы.
Другими словами, создайте контейнеры LUKS (по одному для каждого диска или раздела), а затем используйте эти контейнеры для создания пула ZFS. Запуск ZFS поверх LUKS должен быть достаточным для предотвращения автономного злоумышленника в большинстве сценариев, хотя это будет небольшим препятствием для злоумышленника онлайн. Является ли это проблемой, зависит от вашей модели угроз, но для резервного копирования за пределы сайта автономный доступ часто является более важным аспектом, который следует учитывать.
Запуск двух отдельных разделов в виде отдельных контейнеров LUKS должен помочь избежать повреждения заголовка LUKS, делая обе копии недоступными, но другие методы также могут сделать это (например, надежно сохраненная резервная копия заголовка LUKS). Запуск одного раздела LUKS-контейнера для каждого диска позволит ZFS принимать решения о хранении метаданных файловой системы в различных избыточных местах.
Если вы идете с copies=2
, убедитесь, что вы установили это сразу при создании пула. Другими словами, вы хотите что-то вроде:
cryptsetup luksFormat /dev/sdx
cryptsetup luksOpen /dev/sdx sdx-crypt
zpool create -O copies=2 tank /dev/mapper/sdx-crypt
и не
cryptsetup luksFormat /dev/sdx
cryptsetup luksOpen /dev/sdx sdx-crypt
zpool create tank /dev/mapper/sdx-crypt
zfs set copies=2 tank
потому что последний не полностью копирует метаданные корневой файловой системы, пока эти метаданные не будут перезаписаны.
Обратите внимание, что, как и в любой файловой системе с копированием при записи, ZFS работает лучше всего, когда уровень использования диска поддерживается на уровне ниже 75-80%, и вы должны ожидать фрагментации со временем. Для резервных копий это не должно быть серьезной проблемой.