我可以通過創建大量空文件來耗盡磁碟空間嗎?
眾所周知,空文本文件的字節數為零:
但是,它們中的每一個都包含元數據,根據我的研究,這些元數據儲存在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在對此答案的評論中