Disk-Usage

我可以通過創建大量空文件來耗盡磁碟空間嗎?

  • January 17, 2019

眾所周知,空文本文件的字節數為零:

在此處輸入圖像描述

但是,它們中的每一個都包含元數據,根據我的研究,這些元數據儲存在inode中,並且確實使用了空間

鑑於此,對我來說,通過純粹創建空文本文件來填充磁碟似乎是合乎邏輯的。它是否正確?如果是這樣,我需要多少個空文本文件來填充一個 1GB 的磁碟?


為了進行一些檢查,我執行了df -i,但這顯然顯示了正在使用的 inode 的百分比(?)而不是它們的重量。

Filesystem             Inodes  IUsed    IFree IUse% Mounted on
udev                   947470    556   946914    1% /dev
tmpfs                  952593    805   951788    1% /run
/dev/sda2            28786688 667980 28118708    3% /
tmpfs                  952593     25   952568    1% /dev/shm
tmpfs                  952593      5   952588    1% /run/lock
tmpfs                  952593     16   952577    1% /sys/fs/cgroup
/dev/sda1                   0      0        0     - /boot/efi
tmpfs                  952593     25   952568    1% /run/user/1000
/home/lucho/.Private 28786688 667980 28118708    3% /home/lucho

此輸出建議28786688總體上是 inode,之後在根文件系統(設備)中創建文件的下一次嘗試/dev/sda2將返回ENOSPC(“設備上沒有剩餘空間”)。

說明:在最初的 *nix 文件系統設計中,最大 inode 數是在文件系統創建時設置的。為它們分配了專用空間。您可以在數據空間用完之前用完 inode,反之亦然。最常見的預設 Linux 文件系統ext4仍然有這個限制。有關 ext4 上的 inode 大小的資訊,請查看 mkfs.ext4 的聯機幫助頁。

Linux 支持沒有此限制的其他文件系統。On btrfs,空間是動態分配的。“inode 結構比較小,不會包含嵌入文件數據或擴展屬性數據。” (ext3/4在 inode 內為擴展屬性分配一些空間)。當然,您仍然可以通過創建過多的元數據/目錄條目來耗盡磁碟空間。

想想看,tmpfs 是另一個動態分配 inode 的例子。很難知道所報告的最大 inode 數量df -i在實踐中對這些文件系統意味著什麼。我不會對顯示的值附加任何含義。


“XFS 還動態分配 inode。JFS 也是如此。reiserfs 也是如此。F2FS 也是如此。傳統的 Unix 文件系統在 mkfs 時間靜態分配 inode,像 ext4 這樣的現代 FS 也是如此,它們的傳統可以追溯到它,但現在就是這樣例外,而不是規則。

“順便說一句,XFS 確實允許您對 inode 使用的空間的最大百分比設置限制,因此您可以在達到無法附加到現有文件的地步之前用完 inode。(FSes 的預設值為 25%低於 1TB,5% 到 50TB 的文件系統,大於 1%。)無論如何,元數據(inode 和範圍映射)上的空間使用將反映在正常中df -h“ – Peter Cordes在對此答案的評論中

引用自:https://unix.stackexchange.com/questions/378148