我使用 Kazam 录制了一段 12 分钟的屏幕录像,不知怎么的,它竟然创建了一个 40 GB 的文件。这导致我的电脑(实际上是 Husky 机器人上的电脑)内存不足。我试图删除这些文件,但没有足够的内存来执行此操作。
我阅读了一些教程和 askubuntu 帖子,看到建议使用 Live USB 启动并以此方式删除文件。
我能够做到这一点,并且它sudo nautilus
能够让我删除大型视频文件。
但是,计算机仍然没有足够的内存来运行机器人的启动脚本。我能够通过 SSH 进入并运行sudo tune2fs -m 0 /dev/sda6
(如另一篇文章所建议的那样),并且我能够腾出足够的内存来完全启动计算机。然后我继续确保每个用户的所有垃圾文件夹都已完全清空,并手动执行了此操作rm -rf ~/.local/share/Trash/*
。
现在,df
仍然/dev/sda6
几乎已满:
eric@cpr-mic09:~$ df
Filesystem 1K-blocks Used Available Use% Mounted on
udev 4014820 0 4014820 0% /dev
tmpfs 807508 2892 804616 1% /run
/dev/sda6 114756748 109069280 5671084 96% /
我尝试du
查看是否有任何明显较大的文件,但看起来没有什么异常。我还尝试lsof
查找已删除的文件sudo lsof | grep deleted
(来源)。我甚至直接杀死了 lsof 返回的所有内容(来源):
$ kill -9 $(lsof -ti | awk "{print $2}")
到目前为止,我所做的一切都无法释放磁盘空间。我重启了好几次,但都无济于事。以下是一些相关的屏幕截图。我非常感谢任何建议。
编辑:
使用率inode
看起来还行。我检查了一下df -i
,/dev/sda6
只使用了 16%。
我使用的其他来源:
- 没有更多磁盘空间:如何找到占用空间的内容?
- df 和 du 之间差异很大
- https://serverfault.com/questions/62411/how-can-i-sort-du-h-output-by-size
- https://phoenixnap.com/kb/linux-check-disk-space
- df 显示所有已占用的空间,但 du 不累加
- https://unix.stackexchange.com/questions/182077/best-way-to-free-disk-space-from-deleted-files-that-are-held-open
- https://unix.stackexchange.com/questions/68523/find-and-remove-large-files-that-are-open-but-have-been-deleted
- https://unix.stackexchange.com/questions/34140/tell-fs-to-free-space-from-deleted-files-now
- 如何释放磁盘空间?
答案1
我花了很多很多时间才解决这个问题。这是由很多问题造成的。
问题 1:使用 Live USB 删除文件
我曾使用 Live USB 启动并尝试删除文件。事后看来,最好直接通过 SSH 登录并手动删除rm -rf
文件。
因为我使用 Live USB 启动来删除文件,所以文件没有被完全删除。相反,它们被移动到了一个文件/.Trash-0
。这是因为:
每当您安装外部磁盘时,“根”目录中都会创建一个 trash-* 目录,如果从 GUI 中删除文件,文件将被移动到该目录,就像桌面上的垃圾箱一样。
这是为了提高外部驱动器的文件恢复能力。(例如 USB 驱动器或 HDD)
总而言之,当使用 Live USB 删除文件时,文件实际上会被移入/.Trash-0
而不是真正被删除。
问题 #2:trash-cli
实验室里的某个人添加了别名:
alias rm = 'trash-put`
trash-put
是一款通过命令行将文件移至废纸篓文件夹的工具。与rm
立即永久删除文件的 不同,trash-put
它允许您从废纸篓文件夹恢复文件。
当该工具首次发布时,建议进行此更改。但是,作者现在强烈建议不要将此别名设为来源。
rm
如果有人已设置别名,则您可以通过执行\rm
而不是 来避免使用别名rm
。
我是如何想到这个的
我试图用它lsof
来查找某个进程保持打开状态且不允许删除的文件。但是,这并没有帮助我,因为该文件并没有保持打开状态。它只是放在另一个垃圾文件夹中。
我终于可以通过以下方式找到它的位置:
# Switch to the admin account
$ sudo su administrator
# Move into the root directory
$ cd /
# List the top ten largest files
$ sudo du . | sort -nr | head -n10
我这样做了,最大的文件./Trash-0
后面跟着./.Trash-0/files
。
我可以通过执行以下操作来删除文件sudo \rm -rf ./.Trash-0
(对于没有别名的人rm
,您只需执行sudo rm -rf ./.Trash-0
)。
总结
我从这次经历中得到了一些教训:
- 进行备份
- 不要使用 Kazam 进行屏幕录制
- 经过 8 小时的努力解决问题后,你应该重新开始
- 使用 Live USB 删除文件并不是最好的选择
- 不要建造一个只有 128 GB 内存、价值 30 万美元的研究机器人
- 为了给您提供足够的内存来执行基本功能,您可以使用保留的内存来执行基本功能。完成后,
sudo tune2fs -m 0 /dev/sda6
请确保恢复此内存。sudo tune2fs -m 5 /dev/sda6