共用方式為


瞭解 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

在此情況下,請考慮採取更正動作,例如移動或刪除檔案。

其他相關資訊