跳至內容跳至頁面導覽:上一頁 [access key p]/下一頁 [access key n]
documentation.suse.com / SUSE Linux Enterprise Server 文件 / 儲存管理指南 / 檔案系統和掛接 / Linux 中檔案系統的綜覽
適用範圍 SUSE Linux Enterprise Server 15 SP4

1 Linux 中檔案系統的綜覽

SUSE Linux Enterprise Server 隨附了不同的檔案系統供您選擇,包括 Btrfs、Ext4、Ext3、Ext2 和 XFS。每個檔案系統都有其各自的優點和缺點。如需 SUSE Linux Enterprise Server 中主要檔案系統的並排功能比較,請參閱 https://www.suse.com/releasenotes/x86_64/SUSE-SLES/15-SP3/#file-system-comparison (支援的檔案系統比較)。本章包含有關這些檔案系統的工作方式及其優點的綜覽。

在 SUSE Linux Enterprise 12 中,Btrfs 是作業系統的預設檔案系統,XFS 是所有其他使用案例的預設檔案系統。此外,SUSE 仍繼續支援 Ext 系列的檔案系統和 OCFS2。依預設,Btrfs 檔案系統將設定為使用子磁碟區。對於使用 snapper 基礎架構的根檔案系統,將會自動啟用快照。如需 snapper 的詳細資訊,請參閱第 10 章 「使用 Snapper 進行系統復原和快照管理

專業的高效能設定可能需要高可用儲存系統。為符合高效能叢集案例的要求,SUSE Linux Enterprise Server 在 High Availability Extension 附加產品中加入了 OCFS2 (Oracle Cluster File System 2) 與 Distributed Replicated Block Device (DRBD)。本指南中將不會介紹這些先進的儲存系統。如需資訊,請參閱 《SUSE Linux Enterprise High Availability Extension 管理指南》

請記住,沒有一種檔案系統能夠完美適合所有類型的應用程式,這點非常重要。每一種檔案系統都有自己特殊的優、缺點,必須考慮在內。此外,即使是最頂級的檔案系統,也無法取代合理的備份策略。

本節中使用的資料完整性資料一致性這兩個詞彙,並不表示使用者空間資料 (應用程式寫入其檔案中的資料) 的一致性。這項資料是否一致必須由應用程式本身控制。

除非在本節中特別指明,否則設定或變更分割區以及檔案系統所需進行的一切步驟,都可以使用 YaST 磁碟分割程式 (也強烈建議使用它) 來執行。如需更多資訊,請參閱第 10 章 「專家分割程式

1.1 術語

中繼資料

資料結構屬於檔案系統的內部結構。它可確保磁碟上的所有資料都組織有序並可進行存取。。幾乎每一種檔案系統都有自己的中繼資料結構,這也是檔案系統展現出不同效能特性的原因所在。它對於維護中繼資料的完整極為重要,因為要不是如此,檔案系統上所有資料便無法存取。

inode

檔案系統的資料結構包含檔案的各種資訊,包括大小、連結數量、實際儲存檔案內容之磁碟區塊的指標、建立、修改和存取的日期與時間。

日誌

在檔案系統的內容中,日誌是一種磁碟上的結構,包含了檔案系統用於儲存有關檔案系統之中繼資料變更資訊的一種記錄。日誌記錄可大大降低檔案系統的復原時間,因為有了它就不需要在系統啟動時執行檢查整個檔案系統這一冗長的搜尋程序。而是只重複檢查日誌。

1.2 Btrfs

Btrfs 是 Chris Mason 開發的「寫時複製」(copy-on-write,COW) 檔案系統。它以 Ohad Rodeh 開發的支援 COW 的 B 樹為基礎。Btrfs 是記錄樣式的檔案系統。它不會記錄區塊變更,而是將它們寫入新位置,然後將變更連結起來。直到最後一次寫入時才會提交新變更。

1.2.1 主要功能

Btrfs 提供容錯、修復與簡易管理功能,例如:

  • 可寫入快照,可讓您在套用更新之後有需要時輕鬆地復原系統,或者可讓您備份檔案。

  • 子磁碟區支援:Btrfs 會在為其指定的空間池中建立預設子磁碟區。它可讓您建立其他子磁碟區,做為同一個空間池內的不同檔案系統。子磁碟區的數量僅受為池配置的空間限制。

  • Btrfs 指令行工具中提供了線上檢查和修復功能 scrub。它會在假設樹狀結構沒有問題的前提下,驗證資料和中繼資料的完整性。您可以在掛接的檔案系統上定期執行 scrub;在一般操作過程中,該指令會做為背景程序執行。

  • 中繼資料和使用者資料分別使用不同的 RAID 層級。

  • 中繼資料和使用者資料分別使用不同的檢查總數,可提高錯誤偵測效率。

  • 與 Linux 邏輯磁碟區管理員 (LVM) 儲存物件整合。

  • SUSE Linux Enterprise Server 上的 YaST 磁碟分割程式及 AutoYaST 整合。這也包括在多個裝置 (MD) 和裝置對應程式 (DM) 儲存組態上建立 Btrfs 檔案系統。

  • 從現有的 Ext2、Ext3 和 Ext4 檔案系統進行離線移轉。

  • /boot 的開機載入程式支援,如此即允許從 Btrfs 分割區開機。

  • SUSE Linux Enterprise Server 15 SP4 中的 RAID0、RAID1 和 RAID10 組態檔案支援多磁碟區 Btrfs。尚不支援更高的 RAID 層級,但安裝未來發佈的 Service Pack 後可能會支援。

  • 使用 Btrfs 指令設定透明壓縮。

1.2.2 SUSE Linux Enterprise Server 上的根檔案系統設定

依預設,SUSE Linux Enterprise Server 設定為對根分割區使用 Btrfs 和快照。快照可讓您在套用更新之後有需要時輕鬆地復原系統,或者可讓您備份檔案。快照可透過 SUSE Snapper 基礎架構輕鬆管理,如第 10 章 「使用 Snapper 進行系統復原和快照管理中所述。如需 SUSE Snapper 專案的一般資訊,請參閱 OpenSUSE.org (http://snapper.io) 上的 Snapper 入口 Wiki。

使用快照復原系統時,必須確保在復原期間,資料 (例如使用者的主目錄、Web 和 FTP 伺服器內容或記錄檔案) 不會遺失或被覆寫。這一點透過使用根檔案系統上的 Btrfs 子磁碟區來實現。子磁碟區可從快照中排除。安裝期間,根據 YaST 建議,SUSE Linux Enterprise Server 上的預設根檔案系統設定包含下列子磁碟區。由於下述原因,它們會從快照中排除。

/boot/grub2/i386-pc/boot/grub2/x86_64-efi/boot/grub2/powerpc-ieee1275/boot/grub2/s390x-emu

不支援對開機載入程式組態進行復原。上面列出的目錄是架構專屬目錄。前兩個目錄位於 AMD64/Intel 64 機器上,後兩個目錄分別位於 IBM POWER 和 IBM Z 上。

/home

如果 /home 不在獨立的分割區上,系統會將其排除以避免在復原時發生資料遺失。

/opt

協力廠商產品通常會安裝到 /opt。系統會將該目錄排除以避免在復原時解除安裝這些應用程式。

/srv

包含 Web 和 FTP 伺服器的資料。系統會將該目錄排除以避免在復原時發生資料遺失。

/tmp

包含暫存檔案和快取的所有目錄均會從快照中排除。

/usr/local

在手動安裝軟體時會用到此目錄。系統會將該目錄排除,以免在復原時解除安裝這些安裝的軟體。

/var

此目錄包含許多變數檔案 (包括記錄、暫時快取、/var/opt 中的協力廠商產品),是虛擬機器影像和資料庫的預設位置。因此,建立此子磁碟區是為了從快照中排除所有這些變數資料,且已停用「寫入時複製」。

警告
警告:復原支援

僅當您未移除任何預先設定的子磁碟區時,SUSE 才支援復原。不過,您可以使用 YaST 磁碟分割程式新增子磁碟區。

1.2.2.1 掛接壓縮的 Btrfs 檔案系統

Btrfs 檔案系統支援透明壓縮。如果啟用,Btrfs 將在寫入時壓縮檔案資料,並在讀取時解壓縮檔案資料。

使用 compresscompress-force 掛接選項,並選取壓縮演算法 zstdlzozlib (預設)。zlib 壓縮的壓縮率更高,而 lzo 的壓縮速度更快,並且佔用的 CPU 負載更小。zstd 演算法提供了一種新式折衷方法,其效能接近 lzo,而壓縮率與 zlib 類似。

例如:

# mount -o compress=zstd /dev/sdx /mnt

如果您建立了一個檔案並在其中寫入資料,而壓縮後的結果大於或等於未壓縮時的大小,則將來針對此檔案執行寫入操作後,Btrfs 會一直跳過壓縮。如果您不希望有這種行為,請使用 compress-force 選項。對於包含一些初始未壓縮資料的檔案而言,此選項可能很有用。

請注意,壓縮只會作用於新檔案。如果使用 compresscompress-force 選項掛接檔案系統,則在未壓縮情況下寫入的檔案將不會壓縮。此外,永遠不會壓縮包含 nodatacow 屬性之檔案的內容:

# chattr +C FILE
# mount -o nodatacow  /dev/sdx /mnt

加密與任何壓縮操作無關。在此分割區中寫入一些資料後,請列印詳細資料:

# btrfs filesystem show /mnt
btrfs filesystem show /mnt
Label: 'Test-Btrfs'  uuid: 62f0c378-e93e-4aa1-9532-93c6b780749d
        Total devices 1 FS bytes used 3.22MiB
      devid    1 size 2.00GiB used 240.62MiB path /dev/sdb1

如果您希望此設定是永久性的,請在 /etc/fstab 組態檔案中新增 compresscompress-force 選項。例如:

UUID=1a2b3c4d /home btrfs subvol=@/home,compress 0 0

1.2.2.2 掛接子磁碟區

SUSE Linux Enterprise Server 上,從快照進行系統復原的程序透過先從快照開機來執行。如此,您便可在執行復原之前,在系統執行時檢查快照。透過掛接子磁碟區,可實現從快照開機的目的 (一般不需要如此)。

除了第 1.2.2 節 「SUSE Linux Enterprise Server 上的根檔案系統設定」中列出的子磁碟區之外,系統中還存在一個名為 @ 的磁碟區。這是預設子磁碟區,將掛接為根分割區 (/)。其他子磁碟區將掛接到此磁碟區中。

從快照開機時,使用的不是 @ 子磁碟區,而是快照。快照中包括的檔案系統部分將以唯讀方式掛接為 /。其他子磁碟區將以可寫入方式掛接到快照中。依預設,此狀態為臨時狀態,下次重新開機時將還原先前的組態。若要使它成為永久狀態,請執行 snapper rollback 指令。這將使目前開機的快照成為新的預設子磁碟區,在重新開機之後將會使用它。

1.2.2.3 檢查可用空間

通常可以執行 df 指令來檢查檔案系統的使用量。在 Btrfs 檔案系統上,df 的輸出可能有誤導性,因為除了原始資料配置的空間以外,Btrfs 檔案系統也會配置並使用中繼資料的空間。

因此,即使看上去仍有大量的可用空間,Btrfs 檔案系統也可能會報告空間不足。在這種情況下,為中繼資料配置的所有空間均會用盡。使用以下指令來檢查 Btrfs 檔案系統上已用和可用的空間:

btrfs filesystem show
> sudo btrfs filesystem show /
Label: 'ROOT'  uuid: 52011c5e-5711-42d8-8c50-718a005ec4b3
        Total devices 1 FS bytes used 10.02GiB
        devid    1 size 20.02GiB used 13.78GiB path /dev/sda3

顯示檔案系統的總大小及其使用量。如果最後一行中的這兩個值相符,則表示檔案系統上的全部空間都已分配出去。

btrfs filesystem df
> sudo btrfs filesystem df /
Data, single: total=13.00GiB, used=9.61GiB
System, single: total=32.00MiB, used=16.00KiB
Metadata, single: total=768.00MiB, used=421.36MiB
GlobalReserve, single: total=144.00MiB, used=0.00B

顯示檔案系統的已配置 (總計) 空間和已用空間值。如果中繼資料的總計已用空間值大致相等,則表示中繼資料的所有空間均已配置。

btrfs filesystem usage
> sudo btrfs filesystem usage /
Overall:
    Device size:                  20.02GiB
    Device allocated:             13.78GiB
    Device unallocated:            6.24GiB
    Device missing:                  0.00B
    Used:                         10.02GiB
    Free (estimated):              9.63GiB      (min: 9.63GiB)
    Data ratio:                       1.00
    Metadata ratio:                   1.00
    Global reserve:              144.00MiB      (used: 0.00B)

             Data     Metadata  System
Id Path      single   single    single   Unallocated
-- --------- -------- --------- -------- -----------
 1 /dev/sda3 13.00GiB 768.00MiB 32.00MiB     6.24GiB
-- --------- -------- --------- -------- -----------
   Total     13.00GiB 768.00MiB 32.00MiB     6.24GiB
   Used       9.61GiB 421.36MiB 16.00KiB

顯示類似前兩個指令合併輸出結果的資料。

如需詳細資訊,請參閱 man 8 btrfs-filesystemhttps://btrfs.wiki.kernel.org/index.php/FAQ

1.2.3 從 ReiserFS 和 ext 檔案系統移轉至 Btrfs

您可以使用 btrfs-convert 工具,將資料磁碟區從現有 ReiserFS 或 Ext (Ext2、Ext3 或 Ext4) 移轉至 Btrfs 檔案系統。該過程允許您對未掛接的 (離線) 檔案系統執行就地轉換,執行此操作可能需要包含 btrfs-convert 工具的可開機安裝媒體。該工具會在原始檔案系統的可用空間內建構 Btrfs 檔案系統,並直接連結至其中包含的資料。裝置上必須有足夠用於建立中繼資料的可用空間,否則轉換將失敗。原始檔案系統將保持不變,Btrfs 檔案系統不會佔用任何可用空間。所需的空間大小取決於檔案系統的內容,可能會因其中包含的檔案系統物件 (例如檔案、目錄、延伸屬性) 數量而異。由於系統會直接參考資料,檔案系統上的資料數量不會影響轉換所需的空間,但使用檔尾壓縮且大小超過 2 KiB 的檔案除外。

警告
警告:不支援根檔案系統轉換

不支援將根檔案系統轉換為 Btrfs,且不建議這樣做。由於需要根據您的特定設定量身訂做各個步驟,因此無法自動完成此類轉換 — 該程序需要經過複雜的組態設定才能提供正確的復原,/boot 必須在根檔案系統上,並且系統必須包含特定的子磁碟區,等等。請保留現有的檔案系統,或者從頭開始重新安裝整個系統。

若要將原始檔案系統轉換為 Btrfs 檔案系統,請執行:

# btrfs-convert /path/to/device
重要
重要:檢查 /etc/fstab

轉換後,需確定 /etc/fstab 中對原始檔案系統的所有參考已進行調整,現指示裝置包含 Btrfs 檔案系統。

轉換後,Btrfs 檔案系統的內容將反映來源檔案系統的內容。來源檔案系統將一直保留,直到您移除了在 fs_root/reiserfs_saved/image 中建立的相關唯讀影像為止。該影像檔案實際上是轉換前 ReiserFS 檔案系統的一個「快照」,修改 Btrfs 檔案系統時不會對其進行修改。若要移除該影像檔案,請移除 reiserfs_saved 子磁碟區:

# btrfs subvolume delete fs_root/reiserfs_saved

若要將檔案系統回復到原始檔案系統,請使用以下指令:

# btrfs-convert -r /path/to/device
警告
警告:變更遺失

您在檔案系統掛接為 Btrfs 檔案系統時所做的任何變更都將遺失。切勿在此期間執行任何平衡操作,否則將無法正常還原檔案系統。

1.2.4 Btrfs 管理

Btrfs 已整合到 YaST 磁碟分割程式和 AutoYaST 中。安裝期間可以使用它來設定根檔案系統的解決方案。安裝之後,您可以使用 YaST 磁碟分割程式來檢視和管理 Btrfs 磁碟區。

Btrfs 管理工具提供於 btrfsprogs 套件中。如需使用 Btrfs 指令的資訊,請參閱 man 8 btrfsman 8 btrfsckman 8 mkfs.btrfs 指令。如需 Btrfs 功能的資訊,請參閱 http://btrfs.wiki.kernel.org 上的 Btrfs Wiki

1.2.5 Btrfs 子磁碟區配額支援

Btrfs 根檔案系統子磁碟區 (例如 /var/log/var/crash/var/cache) 在正常運作期間可能會使用所有可用的磁碟空間,這會導致系統功能發生問題。為避免出現此狀況,SUSE Linux Enterprise Server 提供了 Btrfs 子磁碟區配額支援。只需依據 YaST 建議設定根檔案系統,便可啟用和設定子磁碟區配額。

1.2.5.1 使用 YaST 設定 Btrfs 配額

若要使用 YaST 為根檔案系統的子磁碟區設定配額,請執行下列步驟:

  1. 啟動 YaST 並選取系統 › 磁碟分割程式,然後按一下確認警告。

  2. 在左側窗格中,按一下 Btrfs

  3. 在主視窗中,選取要為其啟用子磁碟區配額的裝置,然後按一下底部的編輯

  4. 編輯 Btrfs 視窗中,啟用啟用子磁碟區配額核取方塊,然後按一下下一步進行確認。

    啟用 Btrfs 配額
    圖 1.1︰ 啟用 Btrfs 配額
  5. 從現有子磁碟區清單中,按一下要依配額限制大小的子磁碟區,然後按一下底部的編輯

  6. 編輯 Btrfs 的子磁碟區視窗中,啟用限制大小並指定最大參考大小。按一下接受進行確認。

    設定子磁碟區配額
    圖 1.2︰ 設定子磁碟區配額

    新的大小限制將顯示在子磁碟區名稱旁:

    裝置的子磁碟區清單
    圖 1.3︰ 裝置的子磁碟區清單
  7. 按一下下一步套用變更。

1.2.5.2 在指令行上設定 Btrfs 配額

若要在指令行上設定根檔案系統的子磁碟區配額,請執行下列步驟:

  1. 啟用配額支援:

    > sudo btrfs quota enable /
  2. 取得子磁碟區清單:

    > sudo btrfs subvolume list /

    只能為現有子磁碟區設定配額。

  3. 為上一步中所列的其中一個子磁碟區設定配額。子磁碟區可以透過路徑識別 (例如 /var/tmp),也可以透過 0/子磁碟區 ID 識別 (例如 0/272)。以下範例為 /var/tmp 設定 5 GB 配額。

    > sudo btrfs qgroup limit 5G /var/tmp

    大小單位可以是位元組 (5000000000)、KB (5000000K)、MB (5000M) 或 GB (5G)。以位元組為單位產生的值略有不同,因為 1024 位元組 = 1 KiB,1024 KiB = 1 MiB,等等

  4. 若要列出現有配額,請使用以下指令。max_rfer 欄以位元組為單位顯示配額。

    > sudo btrfs qgroup show -r /
提示
提示:取消配額

如果您要取消現有配額,請將配額大小設定為 none

> sudo btrfs qgroup limit none /var/tmp

若要停用某個分割區及其所有子磁碟區的配額支援,請使用 btrfs quota disable

> sudo btrfs quota disable /

1.2.5.3 更多資訊

如需詳細資料,請參閱 man 8 btrfs-qgroupman 8 btrfs-quota。Btrfs Wiki (https://btrfs.wiki.kernel.org/index.php/UseCases) 上的 UseCases 頁面也提供了更多資訊。

1.2.6 Btrfs 上的交換

重要
重要:啟用交換建立快照

如果來源子磁碟區包含任何已啟用的交換檔案,則您無法建立快照。

如果滿足與產生的交換檔案相關的以下準則,則 SLES 支援在 Btrfs 檔案系統上的檔案交換:

  • 交換檔案必須具有 NODATACOWNODATASUM 掛接選項。

  • 不得壓縮交換檔案,您可以透過設定 NODATACOWNODATASUM 掛接選項來確保滿足此準則。兩個選項都會停用交換檔案壓縮。

  • 在執行獨佔操作 (例如裝置調整大小、新增、移除或取代) 時,或在執行平衡操作時,不能啟用交換檔案。

  • 交換檔案不能是疏鬆檔案。

  • 交換檔案不能是內嵌檔案。

  • 交換檔案必須位於單個配置設定檔檔案系統上。

1.2.7 Btrfs 傳送/接收

Btrfs 允許產生快照來擷取檔案系統的狀態。例如,在系統變更之前和之後,Snapper 可以使用此功能來建立快照,以便進行復原。但是,將快照與傳送/接收功能結合使用,可以在遠端位置建立和維護檔案系統的副本。例如,此功能可用於執行增量備份。

btrfs 傳送操作可計算同一個子磁碟區中兩個唯讀快照之間的差異,並將這種差異傳送到某個檔案或 STDOUT。btrfs receive 操作會接收 send 指令的結果,並將其套用至快照。

1.2.7.1 先決條件

若要使用傳送/接收功能,需要滿足以下要求:

  • 來源端 (傳送) 和目標端 (接收) 各有一個 trfs 檔案系統。

  • Btrfs 傳送/接收將對快照執行,因此,相應的資料需要位於 Btrfs 子磁碟區中。

  • 來源端中的快照需是唯讀的。

  • SUSE Linux Enterprise 12 SP2 或更高版本。早期版本的 SUSE Linux Enterprise 不支援傳送/接收。

1.2.7.2 增量備份

以下程序說明 Btrfs 傳送/接收操作的用法,其中示範了如何在 /backup/data (目標端) 建立 /data (來源端) 的增量備份。/data 需為子磁碟區。

程序 1.1︰ 啟始設定
  1. 在來源端建立啟始快照 (在本範例中名為 snapshot_0),並確定將其寫入磁碟:

    > sudo btrfs subvolume snapshot -r /data /data/bkp_data
    sync

    新的子磁碟區 /data/bkp_data 隨即建立。該子磁碟區將用做後續增量備份的基礎,應將其保留以供參考。

  2. 將啟始快照傳送至目標端。由於這是啟始的傳送/接收操作,因此需要傳送整個快照:

    > sudo bash -c 'btrfs send /data/bkp_data | btrfs receive /backup'

    在目標端建立新子磁碟區 /backup/bkp_data

完成啟始設定後,可以建立增量備份,並將目前快照與先前快照之間的差異傳送至目標端。程序永遠是相同的:

  1. 在來源端建立新快照。

  2. 將差異傳送至目標端。

  3. 選擇性:重新命名和/或清理兩端中的快照。

程序 1.2︰ 執行增量備份
  1. 在來源端建立新快照,並確定將其寫入磁碟。在以下範例中,快照名為 bkp_data_目前日期

    > sudo btrfs subvolume snapshot -r /data /data/bkp_data_$(date +%F)
    sync

    建立新子磁碟區,例如 /data/bkp_data_2016-07-07

  2. 將先前快照與您建立的快照之間的差異傳送至目標端。為此,可以使用選項 -p SNAPSHOT 指定先前的快照。

    > sudo bash -c 'btrfs send -p /data/bkp_data /data/bkp_data_2016-07-07 \
    | btrfs receive /backup'

    建立新子磁碟區 /backup/bkp_data_2016-07-07

  3. 因此存在四個快照,每端各有兩個:

    /data/bkp_data
    /data/bkp_data_2016-07-07
    /backup/bkp_data
    /backup/bkp_data_2016-07-07

    現在,您可以使用三個選項繼續操作:

    • 保留兩端中的所有快照。如果使用此選項,您可以復原到兩端中的任意快照,同時可以複製所有資料。不需採取任何動作。執行後續增量備份時,請記得使用倒數第二個快照做為傳送操作的父代。

    • 僅保留來源端中的最後一個快照,並保留目標端中的所有快照。此外,允許復原到兩端中的任意快照 - 若要復原到來源端中的特定快照,請針對整個快照,執行從目標端到來源端的傳送/接收操作。在來源端執行刪除/移動操作。

    • 僅保留兩端中的最後一個快照。如此即可在目標端建立一個備份,該備份代表來源端中產生之最後一個快照的狀態。無法復原到其他快照。在來源端和目標端執行刪除/移動操作。

    1. 如果只想保留來源端中的最後一個快照,請執行以下指令:

      > sudo btrfs subvolume delete /data/bkp_data
      > sudo mv /data/bkp_data_2016-07-07 /data/bkp_data

      第一條指令刪除先前快照,第二條指令將目前快照重新命名為 /data/bkp_data。如此可確定備份的最後一個快照永遠命名為 /data/bkp_data。因此,您也可以永遠使用此子磁碟區名稱做為增量傳送操作的父代。

    2. 如果只想保留目標端中的最後一個快照,請執行以下指令:

      > sudo btrfs subvolume delete /backup/bkp_data
      > sudo mv /backup/bkp_data_2016-07-07 /backup/bkp_data

      第一條指令刪除先前備份快照,第二條指令將目前備份快照重新命名為 /backup/bkp_data。如此可確定最新的備份快照永遠命名為 /backup/bkp_data

提示
提示:傳送至遠端目標端

若要將快照傳送至遠端機器,請使用 SSH:

> btrfs send /data/bkp_data | ssh root@jupiter.example.com 'btrfs receive /backup'

1.2.8 重複資料刪除支援

Btrfs 支援重複資料刪除功能,具體方式為以指向公用儲存位置中之區塊單一副本的邏輯連結取代檔案系統中完全相同的區塊。SUSE Linux Enterprise Server 提供了 duperemove 工具,可掃描檔案系統中有無完全相同的區塊。在 Btrfs 檔案系統上使用時,也可以用來刪除這些重複的區塊,從而節省檔案系統上的空間。系統上預設不會安裝 duperemove。若要使它可用,請安裝套件 duperemove

注意
注意:刪除重複的大型資料集

如果您要刪除重複的大量檔案,請使用 --hashfile 選項:

> sudo duperemove --hashfile HASH_FILE file1 file2 file3

--hashfile 選項會將所有指定檔案的雜湊儲存到 HASH_FILE (而不是 RAM 中),防止耗盡 RAM。HASH_FILE 可重複使用 - 完成產生基線雜湊檔案的初始執行後,可立即刪除對大型資料集的重複變更。

duperemove 可以針對一系列檔案操作,也可以以遞迴方式掃描某個目錄:

> sudo duperemove OPTIONS file1 file2 file3
> sudo duperemove -r OPTIONS directory

它有兩種運作模式:唯讀和重複資料刪除。以唯讀模式執行時 (即不使用 -d 參數),它會掃描給定檔案或目錄中的重複區塊,並將其列印出來。此模式適用於所有檔案系統。

以重複資料刪除模式執行 duperemove 僅在 Btrfs 檔案系統上受支援。掃描給定檔案或目錄之後,它會提交重複的區塊以進行重複資料刪除。

如需詳細資訊,請參閱 man 8 duperemove

1.2.9 從根檔案系統中刪除子磁碟區

出於特定目的,您可能需要從根檔案系統中刪除某個預設的 Btrfs 子磁碟區。目的之一是將某個子磁碟區 (例如 @/home@/srv) 轉換成獨立裝置上的檔案系統。以下程序說明如何刪除 Btrfs 子磁碟區:

  1. 確定需要刪除的子磁碟區 (例如 @/opt)。請注意,根路徑永遠使用子磁碟區 ID「5」。

    > sudo btrfs subvolume list /
    ID 256 gen 30 top level 5 path @
    ID 258 gen 887 top level 256 path @/var
    ID 259 gen 872 top level 256 path @/usr/local
    ID 260 gen 886 top level 256 path @/tmp
    ID 261 gen 60 top level 256 path @/srv
    ID 262 gen 886 top level 256 path @/root
    ID 263 gen 39 top level 256 path @/opt
    [...]
  2. 尋找代管根分割區的裝置名稱:

    > sudo btrfs device usage /
    /dev/sda1, ID: 1
      Device size:            23.00GiB
      Device slack:              0.00B
      Data,single:             7.01GiB
      Metadata,DUP:            1.00GiB
      System,DUP:             16.00MiB
      Unallocated:            14.98GiB
  3. 在獨立的掛接點 (例如 /mnt) 上掛接根檔案系統(ID 為 5 的子磁碟區):

    > sudo mount -o subvolid=5 /dev/sda1 /mnt
  4. 從掛接的根檔案系統中刪除 @/opt 分割區:

    > sudo btrfs subvolume delete /mnt/@/opt
  5. 卸載之前掛接的根檔案系統:

    > sudo umount /mnt

1.3 XFS

1990 年代早期,SGI 開始對原先要當成 IRIX OS 的檔案系統 XFS 進行研發。XFS 隱含的目標是建立高效能 64 位元日誌記錄檔案系統,以滿足嚴格的計算挑戰。XFS 對於操控大型檔案以及執行高階硬體,具備良好功能。XFS 是 SUSE Linux Enterprise Server 中資料分割區的預設檔案系統。

以下是 XFS 主要功能的快速回顧,這些正是為什麼它在高階計算中比其他日誌記錄檔案系統更具競爭力的證明。

高延展性

XFS 使用配置群組來提供高延展性

建立 XFS 檔案系統時,檔案系統所屬的區塊裝置,會分割成 8 或更多等同大小的線性區域。這些區域稱為配置群組。每一個配置群組管理自己的 inode 以及可用的磁碟空間。事實上,配置群組可以看成是檔案系統中的檔案系統。因為配置群組彼此各自獨立,所以核心可以同時處理一個以上的配置群組。此功能是 XFS 具備優良延展性的關鍵。當然,獨立配置群組的概念符合多處理器系統的需求。

高效能

XFS 透過有效管理磁碟空間來提供高效能

可用空間和 inode 是由配置群組裡面的 B+ 樹處理。使用 B+ 樹可大大增強 XFS 的效能和延展性。XFS 使用延遲配置,透過將程序分為兩個部分來處理配置。待處理的交易會儲存在 RAM 並保留適當的空間。XFS 仍然沒有決定資料儲存的確切位置 (在檔案系統區塊中)。此決策會盡量延緩至最後時刻。部分暫時資料永遠不會儲存至磁碟,因為當 XFS 決定了其實際儲存位置時,它早已過時了。採用這種方式,XFS 將增加寫入效能並減少檔案系統片段。因為延緩的配置會造成寫入事件比其他檔案系統要來得少,因此寫入情況較嚴重時,發生損毀之後,有可能會遺失資料。

預先配置來避免檔案系統片段化

寫入資料至檔案系統前,XFS 會保留 (預先配置) 檔案需要的可用空間。因此,可大幅降低檔案系統零散化。因為檔案的內容是分佈在檔案系統中,所以效能就會提高。

1.3.1 XFS 格式

SUSE Linux Enterprise Server 支援 XFS 檔案系統的磁碟上格式(v5)。這種格式的主要優點包括,自動獲取所有 XFS 中繼資料的檢查總數、檔案類型支援以及支援檔案更多數量的存取控制清單。

請注意,以下元件不支援此格式:低於 3.12 版的 SUSE Linux Enterprise 核心、低於 3.2.0 版的 xfsprogs,以及在 SUSE Linux Enterprise 12 之前發佈的 GRUB 2 版本。

重要
重要:V4 已棄用

XFS 即將棄用採用 V4 格式的檔案系統。此檔案系統格式是由以下指令建立:

mkfs.xfs -m crc=0 DEVICE

該格式在 SLE 11 和更低版本中使用,目前它透過 dmesg 建立警告訊息:

Deprecated V4 format (crc=0) will not be supported after September 2030

如果您在 dmesg 指令的輸出中看到上述訊息,建議將檔案系統更新至 V5 格式:

  1. 將資料備份至另一部裝置。

  2. 在該裝置上建立檔案系統。

    mkfs.xfs -m crc=1 DEVICE
  3. 從已更新裝置上的備份還原資料。

1.4 Ext2

Ext2 的起源要回到 Linux 歷史的古早年代。它的前輩 - 延伸檔案系統,是在 1992 年 4 月落實並整合至 Linux 0.96c。延伸檔案系統已經過多次修改,而到了 Ext2,成為多年來最受歡迎的 Linux 檔案系統。若建立了檔案系統的日誌記錄,因其復原快速,Ext2 就顯得不再那麼重要了。

簡短的 Ext2 功能摘要可以協助瞭解它曾是 (在某些領域依然是) 很多 Linux 使用者最喜愛的 Linux 檔案系統的原因所在。

穩固性和速度

Ext2 經過多次改良和密集測試,已經算是老前輩了。這可能是為什麼人們通常稱它堅如磐石的原因所在。在檔案系統無法完全取消掛接而導致系統中斷後,e2fsck 會開始分析檔案系統資料。中繼資料會進入一致性狀態,而待處理的檔案或資料區塊會寫入指定的目錄 (稱為 lost+found)。與日誌記錄檔案系統相比,e2fsck 會分析整個檔案系統,而不僅僅是中繼資料中最近修改的位元。這比檢查日誌記錄檔案系統的記錄資料,要花費更多時間。按照檔案系統大小,此程序會花半小時或更長的時間。因此,不要為任何需要高可用性的伺服器選擇 Ext2。不過,因為 Ext2 不會維護日誌,而且使用的記憶體更少,因此有時候比其他檔案系統較快速一些。

升級容易

因為 Ext3 是以 Ext2 程式碼為基礎,而且共用它的磁碟上格式和中繼資料格式,所以從 Ext2 升級至 Ext3 十分容易。

1.5 Ext3

Ext3 是由 Stephen Tweedie 設計。不像其他所有下一代檔案系統,Ext3 不依循全新的設計原則。它是以 Ext2 為基礎。這兩個檔案系統彼此關係十分密切。Ext3 檔案系統可以輕易地建立在 Ext2 檔案系統的最上層。Ext2 和 Ext3 最重要的差別是 Ext3 支援日誌記錄。簡而言之,Ext3 提供三個主要優點:

1.5.1 可輕易從 ext2 升級,並具有高可靠性

Ext2 的程式碼為 Ext3 奠定了堅實的基礎,使後者成為受到高度評價的下一代檔案系統。在 Ext3 中完美融合了 Ext2 的可靠性和穩固性特點,同時具備日誌記錄檔案系統的優點。不像轉換至其他日誌記錄檔案系統 (例如 XFS) 那麼費時 (備份整個檔案系統,然後從頭開始重新建立),轉換至 Ext3 僅需數分鐘。它還非常安全,因為從頭開始重新建立整個檔案系統,並不能確保萬無一失。考慮一下等候升級至日誌記錄檔案系統的現有 Ext2 系統數量,您可以輕易瞭解為什麼 Ext3 對很多系統管理員都具有一定重要性。從 Ext3 降級至 Ext2 就和升級一樣容易。將 Ext3 檔案系統乾淨地取消掛接,然後重新掛接成 Ext2 檔案系統即可。

1.5.2 將 ext2 檔案系統轉換成 ext3

若要將 Ext2 檔案系統轉換為 Ext3,請執行下列步驟:

  1. root 使用者身分執行 tune2fs -j 來建立 Ext3 日誌。

    這樣會以預設參數建立 Ext3 日誌。

    若要指定日誌的大小以及存放它的裝置,請執行 tune2fs -J,不要同時使用需要的日誌選項 size=device=。如需 tune2fs 程式的詳細資訊,請參閱 tune2fs 線上文件。

  2. root 使用者身分編輯檔案 /etc/fstab,將為對應分割區指定的檔案系統類型從 ext2 變更為 ext3,然後儲存變更。

    這可確保 Ext3 檔案系統會被識別為 Ext3 檔案系統。完成的變更會在下次啟動時生效。

  3. 若要將設定為 Ext3 分割區的根檔案系統開機,請在 initrd 中新增模組 ext3jbd。操作步驟如下:

    1. 開啟或建立 /etc/dracut.conf.d/filesystem.conf 並新增以下行 (請注意前置空格):

      force_drivers+=" ext3 jbd"
    2. 然後執行 dracut -f 指令。

  4. 重新啟動系統。

1.6 Ext4

2006 年,Ext4 做為 Ext3 的衍生部份面市。它是延伸檔案系統版本中的最新檔案系統。Ext4 最初旨在增大儲存大小,它支援最大大小為 1 EiB 的磁碟區、最大大小為 16 TiB 的檔案和數量不受限制的子目錄。Ext4 使用範圍 (而不是傳統的直接和間接區塊指標) 來對應檔案內容。使用範圍可以改善在磁碟中存儲資料以及從中擷取資料的功能。

Ext4 還引入了許多效能加強功能,例如延遲區塊配置和速度大幅加快的檔案系統檢查例行工作。Ext4 還支援日誌檢查總數,並可提供以奈秒為單位測量的時間戳記,因而更加可靠。Ext4 完全反向相容於 Ext2 和 Ext3,後兩個檔案系統都可以做為 Ext4 掛接。

注意
注意:Ext4 上的 Ext3 功能

Ext4 核心模組中的 Ext4 驅動程式完全支援 Ext3 功能。

1.6.1 可靠性和效能

其他日誌記錄檔案系統,有些會依照僅中繼資料日誌記錄方法。這表示您的中繼資料會始終維持一致的狀態,但這並不能自動保證檔案系統資料本身的一致性。Ext4 的設計是妥善管理中繼資料和資料二者。管理的程度可以自訂。以 data=journal 模式掛接 Ext4 可提供最大的安全性 (資料整合性),不過因為中繼資料和資料會寫入日誌,所以系統速度會減慢。另一種方法是使用 data=ordered 模式,這樣可以確定資料和中繼資料整合性,不過僅限中繼資料使用日誌。檔案系統驅動程式會收集所有對應至某一中繼資料更新的所有資料區塊。更新中繼資料前,這些資料區塊會寫入硬碟。如此一來便可以達到中繼資料和資料的一致性,不會犧牲效能。第三個可用的掛接選項是 data=writeback,它允許資料在其中繼資料已經提交至日誌後再寫入主要檔案系統。一般認為此選項的效能最好。不過,它可以允許在損毀和復原舊資料後,重新顯示舊資料,同時又維護內部檔案系統整合性。Ext4 使用 data=ordered 選項做為預設值。

1.6.2 Ext4 檔案系統 inode 大小和 inode 數量

Inode 會儲存檔案及其在檔案系統中之區塊位置的相關資訊。為了在 Inode 中留出空間用於延伸的屬性和 ACL,預設的 inode 大小已增大至 256 位元組。

當您建立新的 Ext4 檔案系統時,系統將根據可建立的 Inode 總數預先配置 Inode 表格中的空間。每 Inode 的位元組數比率和檔案系統的大小決定了可以建立的 Inode 數。檔案系統建立後,將會為每一個每 Inode 的位元組數位元組空間建立一個 Inode:

number of inodes = total size of the file system divided by the number of bytes per inode

Inode 數控制了檔案系統中可容納的檔案數:一個檔案對應一個 Inode。

重要
重要:無法變更現有 Ext4 檔案系統的 inode 大小

配置 Inode 之後,您無法變更 Inode 大小或每 Inode 的位元組數比率的設定。如果不使用其他設定重新建立檔案系統,或不延伸檔案系統,則無法新增 Inode。當超出最大 Inode 數時,除非刪除某些檔案,否則無法在檔案系統上建立新的檔案。

建立新的 Ext4 檔案系統時,您可以指定 Inode 大小和每 Inode 的位元組數比率來控制 Inode 空間使用量以及檔案系統上所允許的檔案數。如果不指定區塊大小、Inode 大小和每 Inode 的位元組數比率值,則會套用 /etc/mked2fs.conf 檔案中的預設值。如需詳細資訊,請參閱 mke2fs.conf(5) man 頁面。

使用下列準則:

  • Inode 大小:: 預設 Inode 大小為 256 位元組。以位元組為單位指定一個值,該值是 2 的冪且大於或等於 128 位元組 (最大為區塊大小),例如 128、256、512 等。僅當不在 Ext4 檔案系統上使用延伸的屬性或 ACL 時,方可使用 128 位元組。

  • 每 Inode 的位元組數比率:: 每 Inode 的位元組數比率預設值為 16384 位元組。有效的每 Inode 的位元組數比率值必須是 2 的幂且大於或等於 1024 位元組,例如 1024、2048、4096、8192、16384、32768 等。此值不應小於檔案系統的區塊大小,因為區塊大小是用於儲存資料的最小空間區塊。Ext4 檔案系統的預設區塊大小為 4 KiB。

    此外,請考量需要儲存的檔案數和檔案大小。例如,如果檔案系統將儲存許多小型檔案,您可以指定一個較小的每 Inode 的位元組數比率,這樣可增加 Inode 數。如果檔案系統將儲存超大型檔案,您可以指定一個較大的每 Inode 的位元組數比率,這樣可減少可能的 Inode 數量。

    一般而言,最好準備充足的 Inode,而不是將其耗盡。如果 Inode 太少且檔案也很小,則在實際上為空的磁碟上,您可能已經達到最大檔案數。如果 Inode 太多且檔案也很大,則您可能會被告知存在可用空間但卻無法使用,因為您無法在為 Inode 保留的空間中建立新檔案。

使用下列任一種方法來設定 Inode 大小和每 Inode 的位元組數比率:

  • 修改所有新 Ext4 檔案系統的預設設定:: 在文字編輯器中,修改 /etc/mke2fs.conf 檔案的 defaults 區段,以將 inode_sizeinode_ratio 設為所需的預設值。這些值會套用至所有新的 Ext4 檔案系統。例如:

    blocksize = 4096
    inode_size = 128
    inode_ratio = 8192
  • 在指令行中:: 當建立新的 Ext4 檔案系統時,將 Inode 大小 (-I 128) 和每 Inode 的位元組數比率 (-i 8192) 傳遞至 mkfs.ext4(8) 指令或 mke2fs(8) 指令。例如,使用下列任一個指令:

    > sudo mkfs.ext4 -b 4096 -i 8092 -I 128 /dev/sda2
    > sudo mke2fs -t ext4 -b 4096 -i 8192 -I 128 /dev/sda2
  • 在使用 YaST 進行安裝期間:: 在安裝期間建立新的 Ext4 檔案系統時,傳遞 Inode 大小和每 Inode 的位元組數比率值。在進階磁碟分割程式中選取分割區,然後按一下編輯。在格式化選項下,選取格式化裝置Ext4,然後按一下選項。在格式化選項對話方塊中,從區塊大小 (位元組)每 Inode 的位元組數Inode 大小下拉式方塊中選取所需的值。

    例如,從區塊大小 (位元組) 下拉式方塊中選取 4096,從每 Inode 的位元組數下拉式方塊中選取 8192,從 Inode 大小下拉式方塊中選取 128,然後按一下確定

    Image

1.6.3 升級至 Ext4

重要
重要:備份資料

在對檔案系統執行任何更新之前,請備份檔案系統上的所有資料。

程序 1.3︰ 升級至 ext4
  1. 若要從 Ext2 或 Ext3 升級,必須啟用以下功能:

    Ext4 所需的功能
    extents

    硬碟上的連續區塊,用於使檔案彼此相連並防止出現片段

    unint_bg

    惰性 inode 表啟始化

    dir_index

    針對大目錄的雜湊 b 樹查詢

    在 Ext2 上:as_journal

    在 Ext2 檔案系統上啟用日誌。

    若要啟用這些功能,請執行:

    • 在 Ext3 上:

      # tune2fs -O extents,uninit_bg,dir_index DEVICE_NAME
    • 在 Ext2 上:

      # tune2fs -O extents,uninit_bg,dir_index,has_journal DEVICE_NAME
  2. root 身分編輯 /etc/fstab 檔案:將 ext3ext2 記錄變更為 ext4。完成的變更會在系統下次重新開機時生效。

  3. 若要將 Ext4 分割區上設定的根檔案系統開機,請在 initramfs 中新增模組 ext4jbd。開啟或建立 /etc/dracut.conf.d/filesystem.conf 並新增以下行:

    force_drivers+=" ext4 jbd"

    需要執行以下指令來覆寫現有的 dracut initramfs

    dracut -f
  4. 將系統重新開機。

1.7 ReiserFS

SUSE Linux Enterprise Server 15 中完全移除了 ReiserFS 支援。若要將現有分割區移轉至 Btrfs,請參閱第 1.2.3 節 「從 ReiserFS 和 ext 檔案系統移轉至 Btrfs」

1.8 OpenZFS 和 ZFS

OpenZFS 和 ZFS 檔案系統均不受 SUSE 支援。ZFS 是一個閉源檔案系統,因此不可由 SUSE 使用。OpenZFS 的 CDDL 授權與 GPL 授權不相容。但是,Btrfs 相應地為 OpenZFS 提供了一個優異的替代方案。ZFS 完全受 SUSE 支援。

1.9 其他受支援的檔案系統

表格 1.1 「Linux 中的檔案系統類型」 彙整 Linux 支援的其他檔案系統。支援它們主要是確定不同媒體或外來作業系統中,資料交換的相容性。

表 1.1︰ Linux 中的檔案系統類型

檔案系統類型

描述

iso9660

CD-ROM 的標準檔案系統。

msdos

fat 最早源自 DOS 的檔案系統,現在各種作業系統均使用之。

nfs

網路檔案系統:使用這種檔案系統,資料可以儲存在網路中的任何機器上,而且可以經由授權從網路存取。

ntfs

Windows NT 檔案系統;唯讀。

exfat

為使用快閃記憶體 (例如 USB 隨身碟和 SD 卡) 而最佳化的檔案系統。

smbfs

有些產品 (例如 Windows) 會使用伺服器訊息區塊,透過網路來存取檔案。

ufs

由 BSD、SunOS 和 NextStep 使用。僅支援唯讀模式。

umsdos

MS-DOS 上的 Unix:套用於標準 fat 檔案系統的最上層,透過建立特殊檔案來實現 Unix 功能 (權限、連結、長檔案名稱)。

vfat

虛擬 FAT:fat 檔案系統的副檔名 (支援長檔名)。

1.10 已阻擋的檔案系統

出於安全原因,已阻擋某些檔案系統自動掛接。這些檔案系統通常不再接受維護,並且不太常用。但是,可以載入這些檔案系統的核心模組,因為核心中 API 仍然相容。將使用者可掛接的檔案系統和抽取式裝置上自動掛接的檔案系統結合使用可能會導致非特權使用者觸發核心模組自動載入,並可能導致抽取式裝置儲存潛在惡意的資料。

若要取得不允許自動掛接的檔案系統清單,請執行以下指令:

> sudo rpm -ql suse-module-tools  | sed -nE 's/.*blacklist_fs-(.*)\.conf/\1/p'

如果您嘗試使用 mount 指令掛接包含已阻擋檔案系統的裝置,該指令將輸出錯誤訊息,例如:

mount: /mnt/mx: unknown filesystem type 'minix' (hint: possibly blacklisted, see mount(8)).

若要允許掛接檔案系統,需要從阻擋清單中移除特定的檔案系統。每個已阻擋的檔案系統具有自身的組態檔案,例如,efs 的組態檔案是 /lib/modules.d/60-blacklist_fs-efs.conf。但是,請不要編輯這些檔案,因為每次更新套件 suse-module-tools 時,就會覆寫這些檔案。若要允許自動掛接已阻擋的檔案系統,可使用以下選項:

  • 建立指向 /dev/null 的符號連結,例如,為 efs 檔案系統建立以下符號連結:

    > sudo ln -s /dev/null /etc/modules.d/60-blacklist_fs-efs.conf
  • 將組態檔案複製到 /etc/modprobe.d

    > sudo cp /lib/modules.d/60-blacklist_fs-efs.conf /etc/modprobe.d/60-blacklist_fs-efs.conf

    將組態檔案中的以下陳述式設定為備註:

    # blacklist omfs

即使無法自動掛接某個檔案系統,您也可以直接使用 modprobe 載入該檔案系統的相應核心模組:

> sudo modprobe FILESYSTEM

例如,對於 cramfs 檔案系統,輸出如下所示:

unblacklist: loading cramfs file system module
unblacklist: Do you want to un-blacklist cramfs permanently (<y>es/<n>o/n<e>ver)? y
unblacklist: cramfs un-blacklisted by creating /etc/modprobe.d/60-blacklist_fs-cramfs.conf

如果您選取 yes,則 modprobe 指令會呼叫一個程序檔,來建立從所提供檔案系統的組態檔案指向 /dev/null 的符號連結。因此,會從阻擋清單中移除該檔案系統。

1.11 Linux 中的大型檔案支援

一開始,Linux 支援的檔案大小最大為 2 GiB (231 位元組)。除非檔案系統隨附大型檔案支援,否則 32 位元系統上的最大檔案大小為 2 GiB。

目前,我們所有的標準檔案系統都具有 LFS (大型檔案支援),理論上可以支援最大為 263 位元組的檔案大小。表格 1.2 「檔案和檔案系統的最大大小 (磁碟格式,4 KiB 區塊大小)」 概述了 Linux 檔案和檔案系統的目前磁碟格式限制。表格中的數字假設檔案系統使用 4 KiB 區塊大小 (此為常用標準)。使用不同的區塊大小時,結果將會不同。使用疏鬆區塊時,表格 1.2 「檔案和檔案系統的最大大小 (磁碟格式,4 KiB 區塊大小)」 中的最大檔案大小可以大於檔案系統的實際大小。

注意
注意:二進位倍數

在本文件中:1024 位元組 = 1 KiB;1024 KiB = 1 MiB;1024 MiB = 1 GiB;1024 GiB = 1 TiB;1024 TiB = 1 PiB;1024 PiB = 1 EiB (另請參閱《NIST: Prefixes for Binary Multiples》(NIST:二倍數的字首)

表 1.2︰ 檔案和檔案系統的最大大小 (磁碟格式,4 KiB 區塊大小)

檔案系統 (4 KiB 區塊大小)

檔案系統的最大大小

最大檔案大小

Btrfs

16 EiB

16 EiB

Ext3

16 TiB

2 TiB

Ext4

1 EiB

16 TiB

OCFS2 (High Availability Extension 中可使用之支援叢集的檔案系統)

16 TiB

1 EiB

XFS

16 EiB

8 EiB

NFSv2 (用戶端)

8 EiB

2 GiB

NFSv3/NFSv4 (用戶端)

8 EiB

8 EiB

重要
重要:限制

表格 1.2 「檔案和檔案系統的最大大小 (磁碟格式,4 KiB 區塊大小)」會說明磁碟上 (On-Disk) 格式的限制。Linux 核心會強制其處理的檔案和檔案系統依循自身大小限制。限制如下:

檔案大小

在 32 位元系統上,檔案不能超過 2 TiB (241 位元組)。

檔案系統大小

檔案系統大小最大可達 273 位元組。不過,此限制仍然跟不上目前可用的硬體。

1.12 Linux 核心儲存限制

表格 1.3 「儲存限制」 總結了與 SUSE Linux Enterprise Server 相關聯之儲存的核心限制。

表 1.3︰ 儲存限制

儲存功能

限制

支援的最大 LUN 數

每個目標 16384 個 LUN。

每個 LUN 的最大路徑數

預設無限制。每個路徑都視為一個一般 LUN。

實際限制由每個目標的 LUN 數和每個 HBA 的目標數 (對於光纖通道 HBA 為 16777215) 指定。

最大 HBA 數

無限制.實際限制由系統的 PCI 插槽數決定。

每個作業系統使用 device-mapper-multipath 的最大路徑數 (總計)

大約為 1024。實際數量取決於每個多重路徑裝置的裝置號碼字串長度。它是 multipath-tools 中的一個編譯時間變數,如果此限制會導致問題,可以提高其值。

每一區塊裝置的最大大小

最大 8 EiB。

1.13 釋放未使用的檔案系統區塊

在固態硬碟 (SSD) 和簡易佈建的磁碟區中,釋放檔案系統未使用的區塊會很有幫助。對於支援 unmapTRIM 操作的所有檔案系統,SUSE Linux Enterprise Server 完全支援在其上執行這些操作。

有兩種常用的 TRIM 操作 — 線上 TRIM 和定期 TRIM。釋放裝置的最合適方法取決於您的使用案例。一般情況下,建議使用定期 TRIM,尤其是當裝置具有足夠的可用區塊時。如果裝置經常接近容量已滿狀態,則最好是使用線上 TRIM。

重要
重要:裝置對 TRIM 操作的支援

在嘗試使用 TRIM 操作之前,請始終驗證您的裝置是否支援該操作。否則,您可能會遺失該裝置上的資料。若要驗證是否支援 TRIM 操作,請執行以下指令:

> sudo lsblk --discard

該指令會輸出關於所有可用區塊裝置的資訊。如果 DISC-GRANDISC-MAX 欄的值不為零,則表示裝置支援 TRIM 操作。

1.13.1 定期 TRIM

定期 TRIM 由 systemd 定期呼叫的 fstrim 指令處理。您也可以手動執行該指令。

若要排程定期 TRIM,請如下所示啟用 fstrim.timer

> sudo systemctl enable fstrim.timer

systemd/usr/lib/systemd/system 中建立一個單位檔案。依預設,該服務每週執行一次,這種頻率通常已足夠。但是,您可以將 OnCalendar 選項設定為所需值來變更頻率。

fstrim 的預設行為是丟棄檔案系統中的所有區塊。您可以在呼叫該指令時使用選項來修改此行為。例如,可以傳遞 offset 選項來定義釋放程序的開始位置。如需詳細資料,請參閱 man fstrim

fstrim 指令可對儲存在 /etc/fstab 檔案中的,支援 TRIM 操作的所有裝置執行釋放 — 為此,請在呼叫該指令時使用 -A 選項。

若要停用特定裝置的釋放,請如下所示將選項 X-fstrim.notrim 新增至 /etc/fstab 檔案中:

UID=83df497d-bd6d-48a3-9275-37c0e3c8dc74  /  btrfs  defaults,X-fstrim.notrim                      0  0

1.13.2 線上 TRIM

每次向裝置寫入資料時,都會對該裝置執行線上 TRIM。

若要啟用裝置的線上 TRIM,請如下所示將 discard 選項新增至 /etc/fstab 檔案中:

UID=83df497d-bd6d-48a3-9275-37c0e3c8dc74  /  btrfs  defaults,discard

或者,在 Ext4 檔案系統上,可以使用 tune2fs 指令在 /etc/fstab 中設定 discard 選項:

> sudo tune2fs -o discard DEVICE

如果裝置是結合 discard 選項透過 mount 掛接的,則也要將 discard 選項新增至 /etc/fstab 中:

> sudo mount -o discard DEVICE
注意
注意:線上 TRIM 的缺點

使用 discard 選項可能會縮短某些品質不佳的 SSD 裝置的使用壽命。線上 TRIM 還可能會影響裝置的效能,例如,在刪除大量資料的情況下。在這種情況下,可能會重新配置一個去除區塊,並在短時間後,再次將同一去除區塊標示為未使用。

1.14 檔案系統疑難排解

本節說明檔案系統的一些已知問題和可能的解決方案。

1.14.1 Btrfs 錯誤:裝置上已無空間

使用 Btrfs 檔案系統的根 (/) 分割區停止接受資料。您收到錯誤裝置上已無空間

請參閱下列各節,瞭解有關此問題的可能原因和預防措施的資訊。

1.14.1.1 Snapper 快照使用的磁碟空間

如果 Snapper 是針對 Btrfs 檔案系統執行的,則裝置上已無空間問題通常是由於系統上做為快照儲存的資料過多所致。

您可以從 Snapper 中移除一些快照,不過,快照不會立即刪除,可能不能釋放您需要的空間容量。

若要從 Snapper 中刪除檔案:

  1. 開啟終端機主控台。

  2. 在指令提示符處,輸入 btrfs filesystem show,例如:

    > sudo btrfs filesystem show
    Label: none uuid: 40123456-cb2c-4678-8b3d-d014d1c78c78
     Total devices 1 FS bytes used 20.00GB
     devid 1 size 20.00GB used 20.00GB path /dev/sda3
  3. 輸入

    > sudo btrfs fi balance start MOUNTPOINT -dusage=5

    此指令會嘗試將資料重新放置在空的或接近空的資料區塊中,從而允許收回空間並將空間重新指定給中繼資料。此操作可能需要一些時間 (1 TB 資料可能需要很多小時),不過,在此期間系統仍可以使用。

  4. 列出 Snapper 中的快照。輸入

    > sudo snapper -c root list
  5. 從 Snapper 中刪除一或多個快照。輸入

    > sudo snapper -c root delete SNAPSHOT_NUMBER(S)

    務必先刪除最舊的快照。快照越舊,它佔用的磁碟空間就越多。

為了避免此問題發生,您可以變更 Snapper 清理演算法。如需詳細資料,請參閱第 10.6.1.2 節 「清理演算法」。控制快照清理的組態值為 EMPTY_*NUMBER_*TIMELINE_*

如果在檔案系統磁碟上將 Snapper 與 Btrfs 結合使用,建議您保留兩倍於標準儲存建議的磁碟空間容量。YaST 磁碟分割程式會自動在 Btrfs 儲存建議中為根檔案系統建議標準磁碟空間的兩倍容量。

1.14.1.2 記錄、當機和快取檔案使用的磁碟空間

如果系統磁碟中填滿了資料,您可以嘗試從 /var/log/var/crash/var/lib/systemd/coredump/var/cache 中刪除檔案。

Btrfs root 檔案系統子磁碟區 /var/log/var/crash/var/cache 可能會在執行一般操作過程中使用所有可用的磁碟空間,因而導致系統功能出現問題。為避免出現此狀況,SUSE Linux Enterprise Server 提供了 Btrfs 子磁碟區配額支援。如需詳細資料,請參閱第 1.2.5 節 「Btrfs 子磁碟區配額支援」

在測試和開發機器上,尤其是當應用程式頻繁當機時,您也可能想查看 /var/lib/systemd/coredump,磁心傾印就儲存在其中。

1.14.2 Btrfs:跨裝置平衡資料

btrfs balance 指令是 btrfs-progs 套件的一部分。它可以在以下範例情況下平衡 Btrfs 檔案系統上的區塊群組:

  • 假設您有一個 1 TB 磁碟機,其中的 600 GB 被資料佔用,然後您又新增了另一個 1 TB 磁碟機。理論上,平衡後將導致每個磁碟機上各有 300 GB 的已用空間。

  • 您的裝置上有大量接近空的資料區塊。在執行平衡清除這些區塊之前,它們的空間都將不可用。

  • 您需要依據其使用百分比壓縮半空的區塊群組。以下指令將平衡使用率等於或小於 5% 的區塊群組:

    > sudo btrfs balance start -dusage=5 /
    提示
    提示

    /usr/lib/systemd/system/btrfs-balance.timer 計時器負責每月清理未使用的區塊群組。

  • 您需要清除區塊裝置的未滿部分,更均勻地分散資料。

  • 您需要在不同的 RAID 類型之間移轉資料。例如,若要將一組磁碟上的資料從 RAID1 轉換至 RAID5,請執行以下指令:

    > sudo btrfs balance start -dprofiles=raid1,convert=raid5 /
提示
提示

若要微調 Btrfs 檔案系統上平衡資料的預設行為 (例如,平衡的頻率或掛接點),請檢查並自訂 /etc/sysconfig/btrfsmaintenance。相關選項以 BTRFS_BALANCE_ 開頭。

如需 btrfs balance 指令用法的詳細資料,請參閱其手冊頁 (man 8 btrfs-balance)。

1.14.3 不要在 SSD 中進行磁碟重組

Linux 檔案系統包含相應的機制用於避免資料分散,因此通常沒有必要執行磁碟重組。但在某些使用場合下,資料分散不可避免,而對硬碟進行磁碟重組可以顯著提高效能。

這種做法僅適用於常設硬碟。在使用快閃記憶體儲存資料的固態硬碟 (SSD) 中,韌體提供的演算法可以確定要將資料寫入哪些晶片。資料通常散佈在裝置的各個位置。因此,對 SSD 進行磁碟重組並不能取得所需的效果,反而會因為寫入不必要的資料而縮短 SSD 的壽命。

出於上述原因,SUSE 明確建議不要對 SSD 進行磁碟重組。某些廠商還會警告對其固態硬碟進行磁碟重組所產生的後果。這些品牌包括但不限於:

  • HPE 3PAR StoreServ All-Flash

  • HPE 3PAR StoreServ Converged Flash

1.15 更多資訊

請造訪上述每種檔案系統專案維護的專屬首頁,找出的郵件清單資訊、詳盡文件以及常見問題:

Wikipedia 專案上的「Comparison of File Systems」(檔案系統比較,網址為 http://en.wikipedia.org/wiki/Comparison_of_file_systems#Comparison) 中提供了對各種檔案系統 (不僅僅是 Linux 檔案系統) 更深入的比較。