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 中使用 aptdpkg 检查发生了什么。清除(删除)多余的是安全的。在您的情况下,我宁愿查看是否还有 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-imagelinux-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】:

我首先用dpkgapt-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磁盘空间不足怎么办磁盘清理方法

已解决Linux中buff/cache(磁盘写/读缓存)占用大量内存导致用户进程内存不足

Linux - df与du命令查看磁盘空间

nginx占用大量磁盘io分析解决

已解决Linux中buff/cache(磁盘写/读缓存)占用大量内存导致用户进程内存不足

新建一个空文件占用多少磁盘空间?