在這種情況下,btrfs nodatacow 掛載選項如何影響 3 個磁碟?

在這種情況下,btrfs nodatacow 掛載選項如何影響 3 個磁碟?

我正在使用 BTRFS 運行 Arch Linux。這台計算機有 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是一個檔案系統mount 選項,因此,它將適用於該檔案系統的所有已安裝子卷,使用時。但我對檔案系統沒有明確的定義。有時,檔案系統可以跨越多個磁碟。上面的 fstab 就是這樣嗎?安裝一張磁碟是否nodatacow使該選項適用於三個全部我的物理磁碟?或者,因為當我單獨格式化每個磁碟並在每個磁碟上建立 BTRFS 檔案系統時,我是否有 3 個獨立的檔案系統?

在相關主題上,我了解到當啟用 nodatacow 時,壓縮將被停用。我認為這意味著我應該compress=lzo從安裝第三個磁碟的選項中刪除,如下所示:

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,您也可以只有一個檔案系統(可能跨越多個 HDD,並且可能但不一定使用某種形式的 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 上儲存 VM 或 DB 檔案時,也應考慮包含autodefrag掛載選項,因為否則具有許多隨機寫入的大型 VM 或 DB 檔案可能會快速產生碎片並降低效能 [3]。

[1]https://btrfs.wiki.kernel.org/index.php/Compression#How_does_compression_interact_with_direct_IO_or_COW.3F

[2]https://btrfs.wiki.kernel.org/index.php/FAQ#Can_copy-on-write_be_turned_off_for_data_blocks.3F

[3]https://btrfs.wiki.kernel.org/index.php/Gotchas#Fragmentation

相關內容