磁盘使用混乱:SSD 上的 Linux 主分区缺少 10G

tob*_*obi 15 linux ssd disk-usage

Linux Mint 告诉我,我只有 622 MB 的可用磁盘空间,但应该还有一些千兆字节。

查看分区,我被告知大约有 10 GB 未使用。我用谷歌搜索了这个问题并没有找到解决方案,但我确实找到了我应该使用df -h.

sudo df -h /home
Filesystem      Size  Used Avail Use% Mounted on
/dev/nvme0n1p8  189G  178G  622M 100% /home
Run Code Online (Sandbox Code Playgroud)

输出对我来说没有任何意义:Size和之间的差异Used是 11GB,但它只显示622M为可用。

SSD 不旧,所以我不希望有这样的差异。

我该怎么办?

A.B*_*A.B 22

如果文件系统是 ext4,则有保留块,主要用于帮助处理和帮助避免碎片,并且仅对 root 用户可用。对于此设置,可以使用tune2fs实时更改它(在挂载文件系统时,并非所有设置都可以这样处理):

-m 保留块百分比

设置只能由特权进程分配的文件系统的百分比。保留一定数量的文件系统块供特权进程使用是为了避免文件系统碎片化,并允许系统守护进程(例如 syslogd(8))在非特权进程被阻止写入文件系统后继续正常运行。通常,保留块的默认百分比为 5%。

因此,如果您想将预留降低到 1%(~ 2GB)从而获得约 8GB 的​​不再预留空间,您可以这样做:

sudo tune2fs -m 1 /dev/nvme0n1p8
Run Code Online (Sandbox Code Playgroud)

注意:该-m选项实际上接受一个十进制数作为参数。您可以使用-m 0.1仅保留约 200MB(并访问大部分以前不可用的 10GB)。您也可以使用该-r选项直接按块保留。可能不建议保留 0 个保留块。

  • 您的回答当然是正确的,但值得注意的是,在这种情况下,根保留空间的价值并不大。这是`/home`,并且为root 保留空间没有为文件系统的其他部分那么重要(例如,确保仍然可以写入系统日志)。此外,由于这是一个 SSD,防止碎片可能没有它在旋转金属磁盘上的优先级。 (4认同)
  • 用户没有“取回”8 GB。正在花费 8 GB。最好跟踪什么占用了所有磁盘空间,然后在适当的情况下对其进行清理,或者以其他方式将其移动到其他地方,或者扩大分区。 (3认同)

Cri*_*gie 10

删除的文件也可能导致“缺少空间”

lsof | grep deleted | grep /home
Run Code Online (Sandbox Code Playgroud)

为我返回这个输出

chrome    11181           criggie   15u      REG              254,0   
4194304  50651663 /home/criggie/.config/google-chrome/BrowserMetrics/BrowserMetrics-5D0236AF-2BAD.pma (deleted)
Run Code Online (Sandbox Code Playgroud)

这表明以 PID 11181 运行的 Chrome 打开了该 BrowserMetrics 文件,然后将其删除,并且仍然打开了文件句柄。这意味着该文件在目录列表中不可见,但仍在占用磁盘空间。

为什么程序要这样做?当正在运行的二进制文件终止时,操作系统将释放打开的文件句柄,磁盘上的文件将消失,而不会留下陈旧的临时文件。

我看不到该文件的磁盘使用量有多大。

  • @DrunkenCodeMonkey Dude - 它的 Chrome ......你是完全正确的。 (4认同)
  • @DrunkenCodeMonkey,很多*写得很好的*程序都这样做。在 \*nix 上创建临时文件的 open-delete-close 模式几乎是通用的,因为它保证在程序退出时文件将被删除,而不管它*如何*退出:正常终止,崩溃,用完被杀死内存,断电等。 (4认同)
  • @DrunkenCodeMonkey 那么,如果程序 _never_ 完成了怎么办? (3认同)
  • @DrunkenCodeMonkey:模式是打开-删除-*工作*-关闭。如果程序仍在处理临时文件的内容(例如将其用作磁盘缓存,或将遥测数据记录到其中),那么它当然必须保持打开状态。(当然,也有可能这确实是程序应该关闭但没有关闭的陈旧未关闭文件句柄。但鉴于只有一个这样的文件,并且没有其他明显的资源泄漏迹象,我首先假设该文件可能是故意保持打开状态。) (3认同)
  • 大多数*写得好的*程序不应该这样做。这是一个错误,应该报告,只是大多数这些晦涩的错误在您处于优化阶段之前不会真正出现,如果它是一个错误,它甚至可能在测试期间根本没有被真正检测到。请注意,他们这样做可能有特定的原因,可能有我不知道的将手柄保持打开这么长时间的基本原理。 (2认同)
  • 打开-删除-关闭很好,错误的是打开-删除然后保持句柄打开直到进程终止。这不是任何程序的正常行为。程序完成后,应立即释放句柄。 (2认同)