linux 标头占用了 EC2 机器上的大量磁盘空间。使用 rm 命令手动删除标题是不是安全?
Posted
技术标签:
【中文标题】linux 标头占用了 EC2 机器上的大量磁盘空间。使用 rm 命令手动删除标题是不是安全?【英文标题】:linux headers are consuming a lot of disk space on the EC2 machine. Is it safe to manually delete the headers with rm command?linux 标头占用了 EC2 机器上的大量磁盘空间。使用 rm 命令手动删除标题是否安全? 【发布时间】:2020-05-31 13:02:52 【问题描述】:aws 上的 EC2 机器充满了多个 linux 标头,当前 / 磁盘空间已 100% 满。我运行了apt-get autoremove
之类的命令,但它抛出了一个错误,说
No apport report written because the error message indicates a disk full error
dpkg-deb: error: subprocess paste was killed by signal (Broken pipe)
我可以通过 rm 命令删除旧的标头吗?安全吗?如果我使用 rm 命令删除,我应该在那之后进行任何清理吗? 以下是标题列表:
du -h -d1 /usr/src/ | sort -hr
2.8G /usr/src/
106M /usr/src/linux-aws-headers-4.4.0-1099
106M /usr/src/linux-aws-headers-4.4.0-1098
106M /usr/src/linux-aws-headers-4.4.0-1096
106M /usr/src/linux-aws-headers-4.4.0-1095
106M /usr/src/linux-aws-headers-4.4.0-1094
106M /usr/src/linux-aws-headers-4.4.0-1092
106M /usr/src/linux-aws-headers-4.4.0-1090
106M /usr/src/linux-aws-headers-4.4.0-1088
106M /usr/src/linux-aws-headers-4.4.0-1087
106M /usr/src/linux-aws-headers-4.4.0-1085
106M /usr/src/linux-aws-headers-4.4.0-1084
106M /usr/src/linux-aws-headers-4.4.0-1083
106M /usr/src/linux-aws-headers-4.4.0-1079
106M /usr/src/linux-aws-headers-4.4.0-1077
106M /usr/src/linux-aws-headers-4.4.0-1075
106M /usr/src/linux-aws-headers-4.4.0-1074
106M /usr/src/linux-aws-headers-4.4.0-1072
106M /usr/src/linux-aws-headers-4.4.0-1070
106M /usr/src/linux-aws-headers-4.4.0-1069
106M /usr/src/linux-aws-headers-4.4.0-1066
106M /usr/src/linux-aws-headers-4.4.0-1065
106M /usr/src/linux-aws-headers-4.4.0-1062
106M /usr/src/linux-aws-headers-4.4.0-1061
106M /usr/src/linux-aws-headers-4.4.0-1060
13M /usr/src/linux-headers-4.4.0-1100-aws
13M /usr/src/linux-headers-4.4.0-1099-aws
13M /usr/src/linux-headers-4.4.0-1098-aws
13M /usr/src/linux-headers-4.4.0-1096-aws
13M /usr/src/linux-headers-4.4.0-1095-aws
13M /usr/src/linux-headers-4.4.0-1094-aws
13M /usr/src/linux-headers-4.4.0-1092-aws
13M /usr/src/linux-headers-4.4.0-1090-aws
13M /usr/src/linux-headers-4.4.0-1088-aws
13M /usr/src/linux-headers-4.4.0-1087-aws
13M /usr/src/linux-headers-4.4.0-1085-aws
13M /usr/src/linux-headers-4.4.0-1084-aws
13M /usr/src/linux-headers-4.4.0-1083-aws
13M /usr/src/linux-headers-4.4.0-1079-aws
13M /usr/src/linux-headers-4.4.0-1077-aws
13M /usr/src/linux-headers-4.4.0-1075-aws
13M /usr/src/linux-headers-4.4.0-1074-aws
13M /usr/src/linux-headers-4.4.0-1072-aws
13M /usr/src/linux-headers-4.4.0-1070-aws
13M /usr/src/linux-headers-4.4.0-1069-aws
13M /usr/src/linux-headers-4.4.0-1066-aws
13M /usr/src/linux-headers-4.4.0-1065-aws
13M /usr/src/linux-headers-4.4.0-1062-aws
13M /usr/src/linux-headers-4.4.0-1061-aws
13M /usr/src/linux-headers-4.4.0-1060-aws
df 命令输出:
df -k
Filesystem 1K-blocks Used Available Use% Mounted on
udev 499316 0 499316 0% /dev
tmpfs 101444 10740 90704 11% /run
/dev/xvda1 8065444 8049060 0 100% /
tmpfs 507212 0 507212 0% /dev/shm
tmpfs 5120 0 5120 0% /run/lock
tmpfs 507212 0 507212 0% /sys/fs/cgroup
/dev/xvdf 5029504 10244 4740732 1% /data
tmpfs 101444 0 101444 0% /run/user/1000
【问题讨论】:
通常(在正确烘焙的发行版中)那些由包提供。您可以在 Ubuntu 中使用apt
或 dpkg
检查发生了什么。清除(删除)多余的包是安全的。在您的情况下,我宁愿查看是否还有 apt
缓存并从清理它开始(不使用 rm
命令)。
谢谢@0andriy,您知道检查apt
缓存并清理它的特定命令吗?
@hithyshi 安装apt-file
命令,然后运行apt-file search /usr/src/linux-aws-headers-4.4.0-1099
以查找负责这些文件的包。
感谢 @0andriy 和 Marco Bonelli。我做了一些事情,目前它有助于清理一些空间。我使用 rm 命令手动删除了 12 个冗余标题。然后运行清除命令:例如 - rm -rf linux-aws-headers-4.4.0-1060
,然后是 sudo apt-get purge linux-image-4.4.0-1060-aws
。我为 12 个冗余标题执行了上述操作。这已经清理了很多空间。必须采取措施确保这种情况不会重复
【参考方案1】:
要安全地删除 linux 头文件,请始终使用:
$ sudo apt-get autoremove
有时上面的命令会出现这样的错误:
Reading package lists... Error!
E: Could not create temporary file for /var/cache... (28: No space left on device)
E: The package lists or status file could not be parsed or opened.
在这种情况下,请手动删除一两个旧标题。
为此,首先转到/usr/src
文件夹并使用以下命令根据日期(最旧的最后一个)列出文件:
$ cd /usr/src
$ ls -lt
然后选择一个旧标题(例如linux-aws-headers-4.4.0-1067
)并使用以下命令将其删除:
$ sudo rm -r linux-aws-headers-4.4.0-1067
完成此操作后,命令sudo apt-get autoremove
应该可以正常工作。
【讨论】:
这很有帮助,因为我在运行 sudo apt autoremove 时遇到了一个特定标题的错误。我只是按照此处所述手动删除它,然后重新运行 autoremove 没有任何问题。【参考方案2】:这个命令对我有用:
apt-get -f autoremove
【讨论】:
【参考方案3】:上下文
我遇到了与 OP 相同的错误。为了能够运行 jpereira 的回答 (apt-get -f autoremove
) 中建议的命令,我首先必须释放大约 10MB 的空间。
但是当我运行它时,发生了一些奇怪的事情,apt-get 说它将删除所有linux-headers
(和其他一些)包,但它首先尝试安装另一个包(snapd
),但是因为没有空间安装它,进程失败。
下次我尝试运行该命令时,好像apt-get
忘记了linux-headers
(和其他)包。所以我继续尝试手动删除其中一个包:
sudo apt-get remove linux-aws-headers-4.4.0-1065
此命令成功地从/usr/src
目录中删除了2 个目录。它删除了与包同名的目录和同名但-aws
移动到末尾的包。
为了删除所有这些,我运行了这个命令,但不要使用它,因为我最终删除了一些不会被 autoremove
功能删除的包,而且我也没有删除autoremove
功能将删除的所有包。
cd /usr/src
while read pkg; do sudo apt-get -y remove $pkg; done < <(find . -maxdepth 1 -type d -name "linux*" -printf "%f\n")
推荐解决方案
完美的解决方案是运行以下命令,但您首先需要复制 autoremove
最初表示将要删除的模块列表:
echo "<PASTE COPIED LIST OF PACKAGES HERE>" | cut -c3- | tr " " "\n"
确保该命令的输出是一个包列表,其中每个包都在一行中。如果可行,请继续运行类似于我之前使用的命令的内容:
while read pkg; do sudo apt-get -y remove $pkg; done < <(echo "<PASTE COPIED LIST OF PACKAGES HERE>" | cut -c3- | tr " " "\n")
更多上下文
运行推荐的解决方案(在运行不推荐的解决方案之后)对我也有好处,因为它删除了一些 linux-image
和 linux-modules
包,它们也占用了大量空间,但在其他地方!
第一个命令(不推荐的)释放了大约 3.7G 的空间,第二个命令(推荐的)释放了额外的 1.7G。但是,如果您首先运行推荐的命令,则仅该命令就应该释放所有需要释放的空间。
【讨论】:
【参考方案4】:我用这个 shell 代码自动删除了不需要的目录:
sudo apt-get autoremove
cd /usr/src
sudo rm -r $(comm -23 <(ls /usr/src) <(apt-file search /usr/src/* | awk -F / 'print $4' | sort -u))
最后一行删除ls /usr/src
中存在但不在该目录中拥有的文件列表中的每个目录。该命令最终删除了除最新目录之外的所有目录。在真正运行之前,我建议将rm
更改为echo rm
以查看将删除的内容。
【讨论】:
【参考方案5】:我首先用dpkg
和apt-get -f install
修复了包状态。
然后我尝试按照apt-get autoremove
的建议删除旧内核。
但这只会删除一个内核。 我发现在那里安装了更多
dpkg --get-selections|grep linux-modules|grep -v deinstall
我必须明确删除这些内核:
apt-get remove linux-image-4.4.0-1123-aws linux-image-4.4.0-1121-aws linux-image-4.4.0-1119-aws linux-image-4.4.0-1114-aws ... linux-modules-4.4.0-1124-aws linux-modules-4.4.0-1121-aws linux-modules-4.4.0-1119-aws linux-modules-4.4.0-1114-aws ...
之后我可以使用删除标题的apt-get autoremove
进行清理。
报告了一些剩菜,所以我不得不手动清理它们:
cd /lib/modules
rm -rf 4.4.0-1124-aws 4.4.0-1123-aws 4.4.0-1122-aws 4.4.0-1121-aws4.4.0-1119-aws 4.4.0-1118-aws 4.4.0-1117-aws 4.4.0-1114-aws ...
我仍然不知道为什么 apt-get autoremove
对我不起作用。
【讨论】:
以上是关于linux 标头占用了 EC2 机器上的大量磁盘空间。使用 rm 命令手动删除标题是不是安全?的主要内容,如果未能解决你的问题,请参考以下文章
已解决Linux中buff/cache(磁盘写/读缓存)占用大量内存导致用户进程内存不足