Red Hat Training
A Red Hat training course is available for Red Hat Enterprise Linux
章 7. 檔案系統
7.1. 檔案系統微調考量
7.1.1. 格式化選項
區塊大小可在進行 mkfs
時選擇。可用的區塊大小範圍取決於系統本身:最大上限為主機系統的最大分頁大小,而最小限制則取決於所使用的檔案系統。預設的區塊大小適用於大部份的情況。
若您的系統使用等量(striped)的儲存裝置(例如 RAID 5),您可在進行 mkfs
時,將資料和 metadata 與基礎儲存裝置幾何對稱,以改善效能。當使用軟體 RAID(LVM 或是 MD)和某些企業硬體儲存裝置時,這項資訊會被查詢並自動設置,不過在許多情況下,管理員必須在命令列上以 mkfs
來手動指定這項幾何分佈。
工作量若包含大量 metadata,即代表日誌檔案系統(例如 ext4 和 XFS)的記錄檔部分會時常更新。若要儘可能減少檔案系統搜尋日誌的時間,您可將日誌放置在專屬的儲存裝置上。然而請注意,若將日誌放置在速度比主要檔案系統還要慢的外部儲存裝置上,使用該外部儲存裝置所得到的結果可能會不甚理想。
警告
mkfs
時會建立外部日誌,掛載時會指定日誌裝置。欲取得更多資訊,請參閱 mke2fs(8)
、mkfs.xfs(8)
和 mount(8)
man page。
7.1.2. 掛載選項
「寫入屏障」(write barrier)是個用來確保檔案系統 metadata 正確寫入永續性儲存裝置,並正確排序的 kernel 機制;即使停電,揮發性寫入快取的儲存裝置亦能確保資料無誤。啟用了寫入屏障的檔案系統亦可確保任何透過 fsync()
傳輸的資料皆能保有永續性(預防停電的狀況發生)。預設上,RHEL 會在所有支援寫入屏障的硬體上啟用屏障。
fsync()
的應用程式,或是建立和刪除許多小型檔案的應用程式。如果您能接受沒有揮發性寫入快取的儲存裝置、或是因為停電而導致檔案不一致和資料遺失等情況,您可藉由使用 nobarrier
掛載選項來停用屏障。欲取得更多相關資訊,請參閱《儲存裝置管理指南》。
以前讀取檔案時,檔案的存取時間(atime
)必須更新於 inode metadata 中,這包含了額外的寫入 I/O。若不需要正確的 atime
metadata,請以 noatime
選項掛載檔案系統,以避免更新這些 metadata。然而在大部份情況下,基於 Red Hat Enterprise Linux 6 kernel 中的預設相對 atime(或是 relatime
)特性,atime
不會是個極大的額外負荷。relatime
特性僅會在先前的 atime
比修改時間(mtime
)或是狀態更改時間(ctime
)還要早的情況下更新 atime
。
注意
noatime
選項也會啟用 nodiratime
的特性;您無須同時設置 noatime
和 nodiratime
。
「預先讀取」(read-ahead)會透過事先讀取資料,並將之載入分頁快取中(讓這些資料能預先存在記憶體中,而不用再由硬碟存取),以提升檔案存取的速度。某些工作量(例如那些包含了大量循序 I/O 串流的工作量)能有效受益於高度的預先讀取值。
blockdev
指令來檢視並編輯預先讀取值。若要檢視某個區塊裝置目前的預先讀取值,請執行:
# blockdev -getra device
# blockdev -setra N device
blockdev
指令選擇的值不會保有永續性。我們建議您建立一份 runlevel init.d
script,以在開機時設置這個值。
7.1.3. 檔案系統維護
「批次清除」與「線上清除」皆為已掛載之檔案系統,用來清除未使用之區塊所進行的作業。這些作業亦適用於固態硬碟和精簡佈建的儲存裝置。
fstrim
指令來執行「批次清除作業」(batch discard operation)。這項指令會清除檔案系統中,所有符合使用者指定條件的未使用區塊。只要檔案系統下的區塊裝置支援實體清除作業,RHEL 6.2 以上版本搭配 XFS 與 ext4 檔案系統就支援這兩項作業類型。若 /sys/block/device/queue/discard_max_bytes
的值非零的話,即代表實體清除作業受支援。
-o discard
選項(在 /etc/fstab
中或是作為 mount
指令的一部分)來指定,並在無使用者互動的情況下即時執行。線上清除作業僅會清除狀態由「已使用」切換為「可用」的區塊。線上清除作業在 RHEL 6.2 以上版本的 ext4 檔案系統上受到支援,並且也在 RHEL 6.4 以上的 XFS 檔案系統上受到支援。
7.1.4. 應用程式考量
ext4、XFS 和 GFS2 檔案系統皆支援透過 fallocate(2)
glibc 呼叫,來進行高效率的空間預先分配功能。在某些情況下,檔案可能會因為寫入模式而過度分散,並間接影響讀取效能,這時空間預先分配就會是一項非常有幫助的技巧。預先分配功能會標記磁碟空間,在不寫入任何資料的情況下,使該空間猶如早已分配給了某個檔案。直到真實的資料寫入某個預先分配的區塊之前,讀取作業所回傳的值將會是零。