Ext4 против XFS против Btrfs против ZFS для NAS

Ext4 против XFS против Btrfs против ZFS для NAS

Мой вариант использования: У меня установлен Ubuntu Server 18.04 на M.2 SSD. У меня есть 4 ТБ HDD, который я хочу добавить в качестве хранилища. Поскольку он в основном предназначен для больших медиафайлов и резервных копий, запись на него будет производиться нечасто.

Какая файловая система, по вашему мнению, лучше всего подходит для этого варианта использования?

Моими основными кандидатами являются Ext3/4, XFS, Btrfs и ZFS (вы можете свободно утверждать и другие).

Я не спрашиваю: «Какая файловая система самая лучшая?» — такого понятия, как «лучшая», не существует. Я просто спрашиваю людей, какая файловая система может быть наиболее подходящей для этого варианта использования. Пожалуйста, попробуйте включить:

  • Есть ли какие-то недостатки или риски? Я слышал, что XFS может повредить данные при отключении питания. То же самое с ZFS без ECC RAM.
  • Можно ли добавить RAID-1 позже без потери данных? У меня сейчас нет денег на еще один жесткий диск (я использовал его как внешний диск; RAID не заменяет резервные копии), но я могу добавить один позже. Это не обязательно, просто что-то, что может быть приятно.
  • Какова производительность чтения/записи? Btrfs, вероятно, удовлетворит большинство моих потребностей, но она очень медленная в тестах Phoronix. XFS имеет впечатляющую производительность, но я слышал, что она может привести к потере данных.

Спасибо за ваш совет.

решение1

Обычно я использую одну из следующих двух файловых систем:

  • XFS для всего, что плохо работает с CoW (или для виртуальных машин, хранилище данных которых уже находится в файловой системе CoW) или когда требуется чрезвычайно быстрый прямой ввод-вывод;

  • ZFS для всего остального.

Для вашего варианта использования я бы использовал ZFS, особенно учитывая, что Ubuntu 18.04 уже поставляет его. Поскольку вы можете легко прикрепить еще одну ножку зеркала к уже существующему устройству, ZFS подходит очень хорошо. Например, назовите свой диск nvme0p1:

  • zpool create tank /dev/nvme0p1создайте свой единый пул vdev под названием «tank»;
  • zpool attach tank <newdev> /dev/nvme0p1позволяет зеркалировать.

Если по каким-то причинам вы не можете использовать ZFS, то вам подойдут MDRAID и XFS:

  • mdadm --create /dev/md200 -l raid1 -n 2 /dev/nvme0p1 missingсоздаст массив RAID1 с отсутствующей ногой (см. №1);
  • mdadm --manage /dev/md200 --add <newdev>прикрепляет новую ножку зеркала (формируя полный RAID1, см. № 2)

После создания массива вы можете отформатировать его в XFS черезmkfs.xfs

Я делаюнетпредлагаю использовать BTRFS, так как и производительность, и устойчивость не на должном уровне. Например, изВики Debian:

В настоящее время (07.07.2019, Linux ≤ 5.1.16) существует ошибка, из-за которой двухдисковый профиль RAID1 навсегда становится доступным только для чтения при втором монтировании в неисправном состоянии, например, из-за отсутствующего/сломанного/сброса соединения SATA-диска.

Также обратите внимание, что поставщики коммерческих NAS-систем, использующие BTRFS (читай: Synology), не используют собственную интегрированную функцию RAID; вместо этого они используют проверенный уровень Linux MDRAID.

РЕДАКТИРОВАТЬ:Хотя некоторые утверждают, что XFS склонна к потере данных, это просто неверно. Ну, по сравнению с ext3, XFS (и другие файловые системы, поддерживающие отложенное распределение) могут потерять больше несинхронизированных данных в случае неконтролируемого отключения питания. Но синхронизированные данные (т. е. важные записи) на 100% безопасны. Более того, конкретная ошибка, усугубляющая потерю данных XFSбыло исправлено более 10 лет назад. Этот жук врозь,любойфайловая система с отложенным размещением (включая ext4 и btrfs)воляпотеря значительного количества несинхронизированных данных в случае неконтролируемого отключения питания.

По сравнению с ext4, XFS имеет неограниченное выделение инодов, расширенные подсказки по выделению (если они вам нужны) и, в последней версии, поддержку reflink (но их необходимо явно включить в Ubuntu 18.04, см.Страница руководства mkfs.xfsдля дополнительной информации)


1: Пример /proc/mdstatфайла с отсутствующим устройством:

Personalities : [raid1]
md200 : active raid1 loop0[0]
      65408 blocks super 1.2 [2/1] [U_]

unused devices: <none>

2: /proc/mdstatфайл после добавления второго устройства

Personalities : [raid1]
md200 : active raid1 loop1[2] loop0[0]
      65408 blocks super 1.2 [2/2] [UU]

unused devices: <none>

решение2

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

  • XFS имеет репутацию нелюбящей потери питания. С тех пор многое произошло, и RedHat, Oracle и подобные ей используют ее в качестве файловой системы по умолчанию в настоящее время, поэтому я не удивлюсь, если сегодня это будет значительно меньшей проблемой, чем раньше. Особенно если у вас есть достойная политика резервного копирования, если ваш вариант использования относится к типу, где эта файловая система дает выигрыш в скорости, то это может стоить возможного риска.
  • ZFS без ECC RAM по-прежнему имеет очень хорошую функциональность, но вы рискуете не заметить некоторые случаи плохих данных. Я использовал ZFS без ECC памяти в течение нескольких лет в домашней обстановке, похожей на ту, что вы описываете, и никогда не сталкивался с очевидной потерей данных, но, с другой стороны, я не хранил критически важные данные на этом томе. С тех пор я перешел на надлежащее серверное оборудование и теперь чувствую себя намного более комфортно, используя свое хранилище для важных вещей.
  • С ZFS вы должны просто иметь возможность добавить диск в однодисковый пул, чтобы создать зеркало. Я не пробовал это на практике, но я получаю несколько результатов поиска, утверждающих об успешном завершении при проверкеуткауткаидти. Я не уверен насчет других систем, но если у вас есть какой-то менеджер томов в вашей файловой системе, переход на RAID1 с одного диска должен быть тривиальным.
  • Файловые системы на базе CoW (zfs, btrfs) работают медленнее, чем системы с меньшим набором функций, и они в большей степени зависят от наличия достаточно мощного аппаратного обеспечения.

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

решение3

Я бы использовал любую журналируемую файловую систему, которую операционная система в данном случае предлагает по умолчанию, если только у меня нет очень веской причины не делать этого. В последний раз, когда я проверял Ubuntu, это была ext4.

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

Тем не менее, если вы собираетесь использовать диск «в разных» операционных системах, я бы рекомендовал приобрести два или, по крайней мере, разделить тот, который у вас есть, на два физических раздела, а затем использовать либо NTFS, либо exFAT на том, на котором находятся ваши носители.

решение4

Вы можете создать файловую систему в формате XFS на чем-то, что является зеркалом, созданным с помощью mdadm, не имея при этом настоящего зеркала.

Создайте раздел как зеркало с тремя зеркалами, но двумя отсутствующими. Позже вы сможете добавить два отсутствующих.

Связанный контент