簡體   English   中英

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?

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

要安全地刪除 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應該可以正常工作。

這個命令對我有用:

 apt-get -f autoremove

語境

我遇到了與 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。 但是,如果您首先運行推薦的命令,則該命令本身就應該釋放所有需要釋放的空間。

我用這個 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以查看將刪除的內容。

我首先使用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對我不起作用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM