
Я использую 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 выше? Применяется ли монтирование одного диска с помощью nodatacow
make 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].
[3]https://btrfs.wiki.kernel.org/index.php/Gotchas#Фрагментация