2011-11-08 26 views
3

我有幾個關於如何在linux文件系統中使用inode數量的問題。這些問題可能是相關的,但爲了清楚起見,我會逐一問他們。 Q1:以EXT2/3爲例,從「Design and Implementation of the Second Extended Filesystem」我知道塊組中有inode表,並且我知道inode表示文件,但如果文件太多,但inode數不夠多,但inode數不足? 我最好的猜測是,如果文件系統的所有inode數字都用盡了,文件系統就不會執行任何操作。如果某個文件稍後被刪除,其inode可能會被回收。inode數如何分佈在Linux根文件系統中?

Q2:我在我的Linux服務器上運行的「DF -i」,我得到這個:

Filesystem   Inodes  IUsed IFree  IUse% Mounted on  
    /dev/sda1   1313280 7853 1305427 1% /
    devtmpfs     0  0  0    -  /dev 
    tmpfs     525298  4 525294  1% /dev/shm 
    /dev/sda2    65808  50 65758  1% /boot 
    /dev/sda5   1313280  146 1313134 1% /opt 
    /dev/sda6    655776  37 655739  1% /tmp 
    /dev/sda7    655776 5219 650557 1% /home 
    /dev/sda8   1313280  840 1312440 1% /var 
    /dev/sda9    655776 36529 619247 6% /usr 
    /dev/sda10    6432  11 6421  1% /crash 
    /dev/sda12   135488  11 135477  1% /usr/local/instances 
    tmpfs     525298  3 525295 1% /var/run/xenstored 
    tmpfs     525298  3 525295 1% /var/lib/xenstored 
    tmpfs     525298  3 525295 1% /var/lib/xend/socket 
    tmpfs     517536  3 517533 1% /var/run/libvirt/socket 

我看到每個文件系統都有自己的inode數量和這些文件系統(如devtmpfs和tmpfs的)都安裝到root file system。我猜每個文件系統都有自己的inode表,但是分佈在不同範圍內的不同文件系統的inode編號,如根文件系統是[0,N],tmpfs是[N + 1,M]?

如果不同文件系統的inode數量在不同的範圍內(我不這麼認爲),文件系統如何在範圍劃分上達成一致?

如果根據相同的規則(如從0開始)生成不同文件系統的inode編號,如果我們將它們安裝在一起,不同的文件系統會發生衝突嗎?據我所知,inode在運行的操作系統中提供文件,如果根文件系統中的文件的索引節點編號爲N,另一個文件系統中的另一個文件(如tmpfs)中的索引節點編號爲N,操作系統將執行什麼操作?

PS。我對Linux很陌生,我不是來自說英語的國家,如果我沒有明確表達,很抱歉。提前致謝。

+0

這聽起來像是對http://s.tk/unix更好的問題。 –

+0

嘗試詢問「unix」或「ubuntu」論壇之一。你會得到更好的答案: - }。我們只是這裏的編碼器,一般不關心「System.IO.WriteLine()」之後會發生什麼。 –

+0

這是很難說的其中一個問題。我會說它屬於這裏,因爲它是一個關於Unix一般有趣的實現細節。 – Omnifarious

回答

4

一個文件的完整唯一標識符是(st_dev, st_ino)。這意味着inode號碼不必在文件系統中是唯一的,並且每個文件仍然是唯一標識的。

這就是爲什麼你不能有硬件鏈接跨設備。目錄條目只包含一個inode號碼,而不是設備號碼。因此,目錄條目只能引用目錄所在文件系統上的文件。

即使您將設備字段添加到目錄條目中,當您添加或刪除驅動器時,設備號碼可能會變得無意義,並且只能在系統運行時引用特定設備。另外,你將如何唯一編號整個世界的所有設備。例如,使用USB驅動器,您可以將機器之間的指定設備連接起來。你如何確保設備號碼保持不變,以便鏈接仍然有效?

最後,並非所有文件系統類型都有固定數量的inode編號。 reiserfs和(我相信)btrfs根據需要動態分配新的inode,因此文件系統的總inodes字段並不真正反映任何有用的值。

+0

'(st_dev,st_ino)'這裏是相當有用的信息,也是硬鏈接的解釋。謝謝。 – xanpeng