Как опция монтирования btrfs nodatacow влияет на 3 диска в этом сценарии?

Как опция монтирования btrfs nodatacow влияет на 3 диска в этом сценарии?

Я использую Arch Linux с BTRFS. На этом компьютере 3 физических HDD (и нет RAID и т.п.). У меня есть диск, смонтированный в /, один в /cowи один в /nocow. Вот fstab:

# /etc/fstab
# <file system> <dir>   <type>  <options>       <dump>  <pass>
UUID=a101       /               btrfs           rw,noatime,nodiratime,compress=lzo,space_cache,subvol=/@ 0 0
UUID=b202       /cow            btrfs           rw,noatime,nodiratime,compress=lzo,space_cache,subvol=/@cow 0 0
UUID=c303       /nocow          btrfs           rw,noatime,nodiratime,compress=lzo,space_cache,nodatacow,subvol=/@nocow 0 0

Я понимаю, что nodatacowэтофайловая системавариант монтирования и, следовательно, он будетприменить ко всем смонтированным подтомам этой файловой системы, когда используется. Но у меня нет четкого определения файловой системы. Иногда файловая система может охватывать несколько дисков. Это то, что происходит с fstab выше? Применяется ли монтирование одного диска с помощью nodatacowmake this option квсе тримоих физических дисков? Или, поскольку я отформатировал каждый диск отдельно и на каждом диске была создана файловая система BTRFS, у меня есть 3 отдельные файловые системы?

По смежной теме, я понимаю, что когда nodatacow включен, сжатие отключено. Я предполагаю, что это означает, что я должен удалить compress=lzoиз опций монтирования моего 3-го диска, как это:

UUID=c303 /nocow btrfs rw,noatime,nodiratime,space_cache,nodatacow,subvol=/@nocow 0 0

Самый важный вопрос заключается в том, nodatacowвлияет ли монтирование этого третьего диска с опцией на всю файловую систему (все 3 диска и все каталоги в /) или только на (ее часть) файловой системы в точке монтирования /nocow.

Будет ли лучше использовать chattr +C /nocow? Я этого не сделал, потому что не уверен, влияет ли этот атрибут на файловую систему, которая позже монтируется в этом каталоге (и монтируется без этой nodatacowопции).

/nocowсодержит несколько баз данных MySQL.

решение1

Я понимаю, что nodatacow — это опция монтирования файловой системы, и, следовательно, она будет применяться ко всем смонтированным подтомам этой файловой системы при использовании. Но у меня нет четкого определения файловой системы. Иногда файловая система может охватывать несколько дисков. Это то, что происходит с fstab выше?

Поскольку вы монтируете три разных UUID, я подозреваю, что у вас действительно три отдельные файловые системы.

Однако вы также указываете подтома в своих монтированиях. Это показывает мне, что у вас, вероятно, следующая схема:

HDD1
└──── Filesystem 1 (a101)
      └──── Subvolume /@ mounted at /
HDD2
└──── Filesystem 2 (b202)
      └──── Subvolume /@cow mounted at /cow
HDD3
└──── Filesystem 3 (c303)
      └──── Subvolume /@nocow mounted at /nocow

У вас есть три отдельные файловые системы, каждая с одним подтомом. В этом случае nodatacowпараметр монтирования может быть применен к каждой из трех файловых систем по отдельности.

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

HDD1 [...HDDn]
└──── Filesystem 1
      ├──── Subvolume /@ mounted at /
      ├──── Subvolume /@cow mounted at /cow
      └──── Subvolume /@nocow mounted at /nocow

В этом случае nodatacowпараметр монтирования будет применяться ко всем подтомам, поскольку они находятся в одной файловой системе.

Применяется ли эта опция ко всем трем моим физическим дискам при монтировании одного диска с помощью nodatacow?

Нет.

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

Да.

По смежной теме, я понимаю, что при включении nodatacow сжатие отключается.

Это правда [1], и вы можете удалить эту опцию монтирования при монтировании /nocow. Но поскольку у вас есть три отдельные файловые системы, другие две (/ и /cow) по-прежнему можно монтировать с включенным сжатием, если хотите.

Будет ли лучше использовать chattr +C /nocow?

Использование расширенных атрибутов файла, подобных этому, для достижения операции nocow является возможной альтернативой.но:

  • chattr +CЕсли папки все еще пусты, вам придется их очистить!
  • Вам придется либо создавать новые файлы только в уже существующих папках, chattr +Cлибо сначала touchсоздавать их, а затем копировать в них содержимое (подробности в [2]).

Таким образом, может быть проще использовать nodatacowопцию монтирования и отдельную файловую систему для файлов виртуальной машины или базы данных, как вы уже делали. (Вы можете подумать, стоит ли вообще использовать Btrfs для этой файловой системы, поскольку в этом варианте использования она не имеет особых преимуществ.)

Обычно при хранении файлов виртуальной машины или базы данных в Btrfs следует также учитывать autodefragопцию монтирования, поскольку в противном случае большие файлы виртуальной машины или базы данных с большим количеством случайных записей могут быстро фрагментироваться и снижать производительность [3].

[1]https://btrfs.wiki.kernel.org/index.php/Compression#Как_сжатие_взаимодействует_с_прямым_вводом_выводом_или_COW.3F

[2]https://btrfs.wiki.kernel.org/index.php/FAQ#Можно ли отключить_копирование_при_записи_для_блоков_данных.3F

[3]https://btrfs.wiki.kernel.org/index.php/Gotchas#Фрагментация

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