單個目錄中是否有最大數量的inode?目錄中的inode的最大數量?
我有一個超過200萬個文件的目錄,無法使ls
命令對該目錄工作。所以現在我想知道我是否超過了Linux中inode的限制。 2^64數字限制之前是否有限制?
單個目錄中是否有最大數量的inode?目錄中的inode的最大數量?
我有一個超過200萬個文件的目錄,無法使ls
命令對該目錄工作。所以現在我想知道我是否超過了Linux中inode的限制。 2^64數字限制之前是否有限制?
你能得到真正的文件數量嗎?它是否接近2^n邊界?你可以簡單地用完RAM來保存所有的文件名嗎?
我知道在Windows中至少文件系統的性能會隨着文件夾中文件數量的增加而急劇下降,但我認爲linux並沒有遭受這個問題,至少如果你使用的是命令提示符。上帝幫助你,如果你試圖讓鸚鵡螺等東西打開一個文件夾與許多文件。
我也想知道這些文件來自哪裏。你能夠通過編程來計算文件名嗎?如果是這樣的話,你可以編寫一個小程序將它們分類到多個子文件夾中。通常列出特定文件的名稱將授予您訪問權限,因爲試圖查找名稱將失敗。例如,我在窗口中有一個文件夾,其中包含大約85,000個文件。
如果此技術成功,您可能會嘗試找到一種方法來使此類排序成爲永久性,即使它只是將該小程序作爲cron作業運行。如果您可以在某處按日期對文件進行排序,它將特別有效。
編號Inode限制是每個文件系統,並在文件系統創建時決定。你可能會遇到另一個限制,或者'ls'只是表現不佳。
試試這個:
tune2fs -l /dev/DEVICE | grep -i inode
它應該告訴你種種的inode相關信息。
除非您收到錯誤消息,否則ls正在運行,但速度很慢。你可以嘗試尋找在剛剛前十個文件是這樣的:
ls -f | head -10
如果你要需要看的,而文件的詳細信息,你可以把它們放在一個文件中的第一。您可能希望將輸出發送到目前不同的目錄中!
ls > ~/lots-of-files.txt
如果你想要做的事的文件,你可以使用xargs的。如果您決定編寫某種腳本來完成這項工作,請確保您的腳本將流式處理文件列表,而不是一次處理所有文件。以下是移動所有文件的示例。
ls | xargs -I thefilename mv thefilename ~/some/other/directory
你可以結合起來,與頭部移動的文件的數量較少。
ls | head -10000 | xargs -I x mv x /first/ten/thousand/files/go/here
你或許可以結合ls | head
成一個shell腳本,將文件分割成在每個文件的管理數量一堆目錄。
ls |頭-10不能立即得到結果,因爲ls正在排序 - 所以在它能打印任何東西之前它需要讀取所有東西。 – 2008-10-20 03:20:26
在這種情況下,請嘗試:ls -f |頭-10 – 2008-10-27 17:20:34
df -i
應該告訴你,使用和免費的文件系統上的inode數。
嘗試ls -U
或ls -f
。
ls
,默認情況下,字母順序排列的文件。如果您有200萬個文件,那麼這種排序可能需要很長時間。如果ls -U
(或可能是ls -f
),那麼文件名將立即打印。
最大目錄大小取決於文件系統,因此確切的限制會有所不同。但是,擁有非常大的目錄是一種不好的做法。
您應該考慮通過將文件分類到子目錄來縮小目錄。一種常見的方案是使用前兩個字符用於第一級子目錄,如下所示:
${topdir}/aa/aardvark ${topdir}/ai/airplane
此工作得特別好,如果使用UUID,的GUID或內容的散列值來命名。
正如Rob Adams所指出的那樣,ls在顯示文件之前對文件進行排序。請注意,如果您使用的是NFS,NFS服務器將在發送目錄之前排序該目錄,並且200萬條條目可能比NFS超時要長。這使得目錄無法通過NFS登錄,即使使用了-f標誌。
對於其他網絡文件系統也是如此。
雖然沒有強迫限制目錄中的條目數,這是很好的做法,有一些限制,你預料到的條目。
對於NetBackup,即分析客戶的目錄下的二進制文件執行某種類型的上市,通過文件的數量巨大超時的每個文件夾(約一百萬每個文件夾,SAP工作目錄)英寸
我的解決辦法(如在此線程查爾斯達菲寫),重組子文件夾中的文件夾用更少的檔案。
另一種選擇是find
:
find . -name * -exec somcommands {} \;
{}
是絕對的文件路徑。
優點/缺點是文件被一個接一個地處理。
find . -name * > ls.txt
將打印所有文件名中ls.txt
find . -name * -exec ls -l {} \; > ls.txt
將打印每個文件的所有信息形式LS在ls.txt
什麼你打是LS的內部限制。這裏是一篇文章,它很好地解釋它: http://www.olark.com/spw/2011/08/you-can-list-a-directory-with-8-million-files-but-not-with-ls/
你的意思是最大數條目在一個單一的目錄,對吧?畢竟,你可以在一個目錄中製作200萬個硬鏈接到同一個文件,這會導致同樣的問題。 – 2008-09-17 04:08:36