Linux文件和目錄限制
前言
我看到有面試題問到Linux目錄個數和文件個數的限制,這裡總結記錄一下
目錄個數限制
這裡需要區分文件系統,Linux之前的ext3和ext4文件系統
ext3
ext3文件系統的一級子目錄的個數默認為32000個,可以通過查看源碼找到此規則:
find命令查找源代碼文件:
cat命令查看define常量:
ext4
ext3有32000最大目錄限制,ext4取消了這一限制
測試腳本:
[cpp]
#!/bin/bash
for index in `seq 1 40000`
do
mkdir $index
if [ $? -ne 0 ]; then
echo -e "創建目錄失敗\n"
fi
done
echo -e "創建目錄成功\n"
截圖:
文件個數限制
ext3、ext4系統下單個目錄的最大文件數無特別的限制,是受限於所在文件系統的inode數
文件存儲在硬盤上,硬盤的最小存儲單位叫做“扇區(Sector)”。每個扇區存儲512字節(相當於0.5KB)
操作系統讀取硬盤的時候,不會一個一個扇區的讀取,這樣效率太低,而是一次性連續讀取多個扇區,即一次性讀取一個“塊”(block)。這種由多個扇區組成的“塊”,是文件存取的最小單位。
文件數據都存儲在“塊“中,那麼很明顯,我們還必須找到一個地方存儲文件的元信息,比如文件的創建者、文件的創建日期、文件的大小等等。這種存儲文件元信息的區域就叫做inode,中文譯名為”索引節點“
inode內容
inode包含文件的元信息,具體說來有以下內容:
文件的字節數
文件擁有者的User ID
文件的Group ID
文件的讀、寫、執行權限
文件的時間戳,共用三個:ctime指inode上次變動時間,mtime指文件內容上次變動的時間,atime指文件上次打開的時間
連接數,即有多少文件名指向這個inode
文件block的位置
可以用stat命令查看某個文件的inode信息:
inode大小
inode也會消耗硬盤空間,所以硬盤格式化的時候,操作系統自動將硬盤分成兩個區域。一個是數據區,存放文件數據;另一個是inode區,存放inode所包含的信息
每個inode節點的大小,一般是128byte或者256byte。inode的節點總數,在格式化時就給定,一般是每1KB或2KB就設置一個inode。查看每個硬盤分區的inode總數和已經使用的數量,可以用df命令
由於每個文件都必須有一個inode,因為可能發生inode已經用光,但是硬盤還未存滿的情況,這時,就無法在硬盤上創建新文件
文件大小限制
現在ext3支持最大16TB的文件系統,單個文件最大2TB
Ext4增加了48位塊地址,最大支持1EB文件系統,和單個16TB的文件
換算:1EB=1024PB 1PB=1024TB 1TB=1024GB