磁碟已滿但找不到是已用空間(Ubuntu)
我有一個帶有 30GB 驅動器的小型英特爾 NUC。我的問題是這個驅動器已滿,但找不到原因。
df
報告以下Filesystem 1K-blocks Used Available Use% Mounted on udev 899412 0 899412 0% /dev tmpfs 189284 2676 186608 2% /run /dev/sda2 28414508 27751116 0 100% / tmpfs 946404 0 946404 0% /dev/shm tmpfs 5120 4 5116 1% /run/lock tmpfs 946404 0 946404 0% /sys/fs/cgroup /dev/loop0 128 128 0 100% /snap/bare/5 /dev/loop1 56832 56832 0 100% /snap/core18/2128 /dev/loop2 56832 56832 0 100% /snap/core18/2246 tmpfs 946404 0 946404 0% /tmp /dev/loop3 314880 314880 0 100% /snap/makemkv/381 /dev/loop4 66688 66688 0 100% /snap/gtk-common-themes/1515 /dev/loop5 63360 63360 0 100% /snap/core20/1169 /dev/loop6 63360 63360 0 100% /snap/core20/1081 /dev/loop7 33280 33280 0 100% /snap/snapd/13270 /dev/loop8 317184 317184 0 100% /snap/makemkv/385 /dev/loop9 33280 33280 0 100% /snap/snapd/13640 /dev/loop10 66816 66816 0 100% /snap/gtk-common-themes/1519 /dev/sda1 306584 5356 301228 2% /boot/efi tmpfs 189280 4 189276 1% /run/user/1000
計算它會提供大約 14GB 的已用磁碟空間。
跑步
sudo lsof | grep REG | grep -v "stat: No such file or directory" | grep -v DEL | awk '{if ($NF=="(deleted)") {x=3;y=1} else {x=2;y=0}; {print $(NF-x) " " $(NF-y) } }' | sort -n -u | numfmt --field=1 --to=iec | tail -10
給了我一個列表,其中包含幾個重要的過程:
5,5M /usr/lib/php/20190902/fileinfo.so 6,8M /usr/lib/jellyfin/bin/libcoreclr.so 8,0M /var/log/journal/6296b00d07874d0a9533eed0efb81840/user-1000.journal 8,2M /usr/lib/jellyfin/bin/System.Private.Xml.dll 8,3M /usr/lib/locale/locale-archive 8,9M /usr/lib/jellyfin/bin/System.Private.CoreLib.dll 10M /usr/lib/udev/hwdb.bin 24M /snap/snapd/13640/usr/lib/snapd/snapd 27M /usr/lib/x86_64-linux-gnu/libicudata.so.66.1 64M /memfd:pulseaudio
執行
sudo du -sh / --exclude=disks --total
總共給了我 13GB。所以,基本上我不知道如何找出系統報告的失去的 ~16GB 是否在某個地方填充了我的驅動器。
報告實際上是這樣執行的
cd ~/ && touch example && echo "FooBar" > example -bash: echo: write error: No space left on device
提前謝謝你,而且,任何想法都是一個好想法,基本上有一個設備,目前無法使用,我的選擇很少(基本上是一個乾淨的重新安裝/為不應該使用更多的設備購買更大的 ssd超過 20GB)
嘗試找到填充“/”分區的東西的一些可能性:
lsof -nP +L1
# 應該列出所有被刪除(未連結)但仍被程序打開並因此仍佔用 dist 的文件另請參閱該答案:https ://unix.stackexchange.com/a/68532/27616它提供了一些附加資訊和嘗試的東西
另一種可能性:檢查(用
df -ih /
)如果您在該文件系統中沒有“數百萬”個小文件/
:每個文件至少佔用“少量”磁碟(通常是因為它至少佔用 1 個 inode,其大小取決於文件大小和文件系統)。這可以加起來……如果占用的最小磁碟空間是 512 字節,那麼擁有 100 萬個每個 1 字節的文件仍將佔用 5.12 億字節而不是 100 萬字節。df
將顯示佔用的磁碟空間(已計算的完整 inode 空間),而du
將顯示添加的文件大小(即,僅顯示這些文件的內容,而不是包含此內容的 inode 佔用的空間)另一種可能性:掛載的文件系統可能隱藏了一些大文件。即,某些文件可能位於已安裝文件系統的“下方”(也許您將大量大文件放在
/tmp
目錄中(文件系統中的/
文件系統,然後用作安裝/tmp
文件系統的安裝點)?這可以如果你在/tmp
文件系統沒有掛載的情況下把東西放在那裡,就會發生這種情況。要檢查這一點,你可以在 linux 中重新掛載/
(使用自由循環設備)作為只讀某處(例如:將其掛載在/mnt/readonlyroot/
掛載點下),然後瀏覽使用du -hs /mnt/readonlyroot
, 並與du -hxs /
#比較可以-x
防止 du 下降到安裝在下面的另一個文件系統/
,例如/tmp
文件系統)。
在某個掛載點下以只讀方式掛載(第二次)的命令
/
:您可以(根據我的記憶……我現在無法在 linux 上檢查):
mkdir -p /mnt/rootreadonly/
創建目錄掛載點(具有諷刺意味的是,它將在“/”文件系統內……)mount -o loop -o ro /dev/sda2 /mnt/rootreadonly
(使“/”文件系統在那裡顯示為只讀。我在此處指定 sda2,因為您在問題中顯示“/”文件系統位於“/dev/sda2”中。閱讀此答案的其他人應首先檢查輸出mount
看看他們的文件系統來自哪裡……/
)