瞭解 Azure NetApp Files 中的目錄大小
在目錄中建立檔案時,專案會新增至 Azure NetApp Files 磁碟區內的隱藏索引檔案。 此索引檔案可協助追蹤目錄中現有的 inode,並協助加速具有大量檔案之目錄的查閱要求。 隨著專案新增至此檔案,檔案大小會根據檔名的長度,以大約每個專案的 512 位元組速率增加(但永遠不會降低)。 較長的檔名會將更多大小新增至檔案。 符號連結也會將專案新增至此檔案。 這個概念稱為目錄大小,這是所有以 Linux 為基礎的文件系統中的通用元素。 目錄大小不是單一 Azure NetApp Files 磁碟區中檔案總數上限。 該值是由 maxfiles
值所決定。
根據預設,建立新的目錄時,它會取用 4 KiB(4,096 個字節)或 8 個 512 位元組區塊。 您可以使用 stat 命令,從 Linux 用戶端檢視新建立目錄的大小。
# mkdir dirsize
# stat dirsize
File: ‘dirsize’
Size: 4096 Blocks: 8 IO Block: 32768 directory
目錄大小是單一目錄特有的,而且不會結合大小。 例如,如果磁碟區中有10個目錄,則每個目錄都可以在單一磁碟區中接近320-MiB目錄大小限制。
確認目錄是否接近限制大小
對於 320-MiB 目錄,區塊數目為 655360,每個區塊大小為 512 個字節。 (也就是 320x1024x1024/512.此數位會轉譯為 320-MiB 目錄的大約 4-500 萬個檔案。 不過,實際的檔案上限數目可能會較低,視目錄中含有非 ASCII 字元的檔案數目等因素而定。
您可以從用戶端使用 stat
命令,查看目錄是否接近目錄中繼資料的大小上限 (320 MB)。 若達到 Azure NetApp Files 單一目錄的大小上限,則會發生錯誤 No space left on device
。
320 MB 目錄的區塊數目為 655,360,每個區塊的大小為 512 個位元組。 (即 320x1024x1024/512。)此數字大約可將 320 MB 的目錄轉換為最多 400 萬個檔案。 不過,實際的檔案上限數目可能會較低,視目錄中含有非 ASCII 字元的檔案數目等因素而定。 如需如何監視 maxdirsize 的資訊,請參閱 監視 maxdirsize
。
目錄大小考慮
處理高檔案計數環境時,請考慮下列建議:
- Azure NetApp Files 磁碟區最多支援 320 MiB 的目錄大小。 此值無法增加。
- 超過磁碟區的目錄大小之後,即使磁碟區中有可用的可用空間,用戶端仍會顯示空間不足的錯誤。
- 針對一般磁碟區,320 MiB 目錄大小相當於單一目錄中大約 4-500 萬個檔案。 此值取決於檔名長度。
- 大型磁碟 區的結構與一般磁碟區不同。
- 單一目錄中的高檔案計數在搜尋時可能會顯示效能問題。 可能的話,需要經常搜尋時,將單一目錄的總大小限製為 2 MiB(大約 27,000 個檔案)。
- 如果在單一目錄中需要更多檔案,請據以調整搜尋效能預期。 雖然 Azure NetApp Files 會編制目錄檔案清單的索引以取得效能,但搜尋可能需要一些時間,且檔案計數很高。
- 設計檔案系統時,請避免一般目錄配置。 如需目錄配置不同方法的相關信息,請參閱 關於目錄配置。
- 若要解決已超過目錄大小且無法建立新檔案的問題,請刪除或將檔案移出相關的目錄。
關於目錄配置
maxdirsize
當您使用一般目錄結構時,此值可能會造成疑慮,其中單一資料夾包含單一層級的數百萬個檔案。 插入檔案、資料夾和子資料夾的資料夾結構對的影響 maxdirsize
很低。 有數種目錄結構方法。
一般 目錄結構 是單一目錄,其中有許多檔案位於相同目錄下方。
寬 目錄結構 包含許多最上層目錄,檔案分散到所有目錄。
深層目錄結構包含具有許多子目錄的最上層目錄較少。 雖然這個結構提供每個資料夾的檔案較少,但如果目錄配置太深,檔案路徑變得太長,檔案路徑長度可能會變成問題。 如需檔案路徑長度的詳細資訊,請參閱 瞭解 Azure NetApp Files 中的檔案路徑長度。
Azure NetApp Files 中一般目錄結構的影響
一般目錄結構(單一或少數目錄中的許多檔案)會對各種文件系統、Azure NetApp File 磁碟區或其他專案產生負面影響。 潛在問題包括:
- 記憶體壓力
- CPU 使用率
- 網路效能/延遲(特別是在大量查詢檔案、
GETATTR
作業、READDIR
作業期間)
由於 Azure NetApp Files 的設計很大,因此的影響 maxdirsize
是獨一無二的。 Azure NetApp Files 大型磁碟 maxdirsize
區會因為其設計而獨一無二地受到影響。 不同於一般磁碟區,大型磁碟區會使用 Azure NetApp Files 內的遠端硬連結,協助將流量重新導向到不同的記憶體裝置,以提供更大的規模和效能。 使用一般目錄時,內部遠端硬式連結與本機檔案的比例較高。 這些遠端硬連結會計入總 maxdirsize
值,因此大型磁碟區可能會比一般磁碟區快到其 maxdirsize
限制。
例如,如果單一目錄有數百萬個檔案,而且為文件系統產生大約85%的遠端硬連結,您預期 maxdirsize
會用盡幾乎兩倍的量,就像一般磁碟區一樣。
如需 Azure NetApp Files 中目錄大小的最佳結果:
- 避免 Azure NetApp Files 中的一般目錄結構。 如果檔案或資料夾的路徑長度未超過 NAS 通訊協定標準,寬目錄結構或深度目錄結構效果最好。
- 如果一般目錄結構是不可避免的,請監視
maxdirsize
目錄的 。
監控 maxdirsize
針對單一目錄,使用 stat
命令來尋找目錄大小。
# stat /mnt/dir_11/c5
stat
雖然命令可用來檢查特定目錄的目錄大小,但對單一目錄個別執行可能沒有效率。 若要查看從最大到最小排序的最大目錄大小清單,下列命令會提供 ,同時省略查詢中的快照集目錄。
# find /mnt -name .snapshot -prune -o -type d -ls -links 2 -prune | sort -rn -k 7 | head | awk '{print $2 " " $11}' | sort -rn
注意
stat 命令所報告的目錄大小是以位元組為單位。 find 命令中所報告的大小位於KiB中。
範例
# stat /mnt/dir_11/c5
File: ‘/mnt/dir_11/c5’
Size: 322396160 Blocks: 632168 IO Block: 32768 directory
# find /mnt -name .snapshot -prune -o -type d -ls -links 2 -prune | sort -rn -k 7 | head | awk '{print $2 " " $11}' | sort -rn
316084 /mnt/dir_11/c5
3792 /mnt/dir_19
3792 /mnt/dir_16
在先前的目錄中,目錄大小 /mnt/dir_11/c5
為 316,084 KiB(308.6 MiB),接近 320-MiB 的限制。 這相當於大約 410 萬個檔案。
# ls /mnt/dir_11/c5 | wc -l
4171624
在此情況下,請考慮採取更正動作,例如移動或刪除檔案。