Ubuntu

磁碟已滿但找不到是已用空間(Ubuntu)

  • October 29, 2021

我有一個帶有 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看看他們的文件系統來自哪裡…… /

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