
我有一台包含 1 TB 空間的伺服器。我把它裝滿了;然後我想做一個符號連結。我刪除了一個不同的符號鏈接,但伺服器仍然不滿意 - 它說我沒有任何可用空間。我不是透過刪除最後一個符號連結來清理足夠的空間嗎?
檔案系統需要多少空間才能識別有足夠的空間來建立符號連結?
答案1
這取決於。大多數檔案系統以數千位元組的區塊來分配數據,因此人們可能會想像任何符號連結都適合單一區塊。但還有其他檔案系統元資料的問題,這取決於檔案系統。
特別是在 ext4(和類似的檔案系統)上:
小檔案需要一個索引節點、一個資料塊以及包含該檔案的目錄中目錄項目的空間。短符號連結可能完全儲存在索引節點內,因此它們可能根本不需要資料塊。 (IIRC 限制約為 60 位元組左右。)
刪除符號連結會釋放索引節點並釋放目錄項目以及資料塊(如果使用過)所使用的空間。在某些情況下,這可能不足以創建新的符號連結:
- 如果新的符號連結將在不同的目錄中創建,則該新目錄可能沒有空間用於新目錄條目,並且如果沒有空閒資料區塊,則無法擴展該目錄。
- 同樣,如果在同一目錄中建立新的符號連結但名稱較長,則該目錄可能會耗盡空間
- 如果舊的符號連結足夠短,可以完全儲存在 inode 中,但新連結足夠長,需要一個資料塊,且檔案系統上沒有空閒資料塊,則無法建立新的符號連結。
用完 inode 應該不是問題,因為刪除的符號連結必然只使用一個 inode,而新的符號連結將只需要一個 inode。
答案2
新連結比舊連結更大。
ls -l
將顯示符號連結有多少位元組,路徑越長,需要的位元組就越多。
它大致是目標檔案/目錄的完整路徑中的位元組數。在 debian 10 上使用 ext4 時,指向「/var/www/html」的連結為 13 個位元組。