[英]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-image
和linux-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
以查看將刪除的內容。
我首先使用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
對我不起作用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.