2016-08-15

Shell: 如何刪除無用的 Ubuntu modules ?

如何刪除無用的 Ubuntu modules ?

結論:

> dpkg -l linux-image-[0-9]*-generic | awk '/^ii/{ print $2}' | grep -v -e `uname -r` | sort -V | head -n -1 | xargs apt-get purge -y 
> dpkg -l linux-headers-[0-9]*-generic | awk '/^ii/{ print $2}' | grep -v -e `uname -r` | sort -V | head -n -1 | xargs apt-get purge -y 

廢話:

好意也時會帶來惡果.

正文:

當你安裝完 Ubuntu Server 後, 如果沒有關掉自動更新, ubuntu 會很貼心的將他每一次的 release 都放一份映象檔到你的 Server 上. 但可喜可賀的, 假如你從不需要關機(也沒有當機), 當然你用的還是你原先安裝的那個版本. 但不幸的事總是會伴隨好意來到. 雖然每個映象檔大約也不過 200M(目前, 誰都知道系統是會胖的), 但以每個月更新 1 到 2 次的頻率, 不到半年就佔去你 1G 的空間了, 因為自動更新雖然會幫你自動安裝, 但不會幫你自動清理用不著的檔案. 下載的檔案一般會放在 /lib/modules 目錄下.
> du -hd1 /lib/modules
du -hd1 /lib/modules
// 197M    /lib/modules/3.19.0-65-generic
// 197M    /lib/modules/3.19.0-64-generic
// 197M    /lib/modules/3.19.0-66-generic
// 197M    /lib/modules/3.19.0-61-generic
// 788M    /lib/modules
但更大的不幸是你非常有專業水準的為系統分割了磁區或限定了容量, 或本來你的硬碟就不怎麼大. 所以, 準備好你的杯子, 因為悲劇發生了.
> df -h
// Filesystem      Size  Used Avail Use% Mounted on
// /dev/sda1       9.9G  3.7G  5.7G  40% /
以三個月使用 1G 來計算, 悲劇將在一年後發生.
你可以選擇直接刪除 /lib/modules 下用不著的檔案. 但你最好還是先看看你目前使用的系統模組是哪個版本. 使用 uname -r. 記得到Ubuntu release 看一下你用的版本(version)跟核心(kernel)對照. 也可以順便看一下詳細有哪些分支.
>  uname -r
// 3.19.0-65-generic
以這個例子來說, 3.19.0-64-generic 和 3.19.0-61-generic 是舊的. 通常我們會保留前一個版本, 也不安裝最新的版本, 再加上目前使用的版本, 一共有三個版本.
雖然直接刪除 /lib/modules 下用不著的檔案不失為一個簡單的方法. 但還是有很多不需要的安裝檔在其他地方. 使用 apt-get remove是比較好的方式.
> sudo apt-get remove -y --purge 3.19.0-61-generic*
// or 
> sudo apt-get purge -y 3.19.0-61-generic*
// 簡化的參數
要移除前, 先找出目前安裝過的版本.
> dpkg --list | grep  linux-image-.*-generic | awk '{print $2}'
// or
> dpkg -l | grep  linux-image-.*-generic | awk '{print $2}'
linux-image-3.19.0-61-generic
linux-image-3.19.0-64-generic
linux-image-3.19.0-65-generic
linux-image-3.19.0-66-generic
linux-image-extra-3.19.0-61-generic
linux-image-extra-3.19.0-64-generic
linux-image-extra-3.19.0-65-generic
linux-image-extra-3.19.0-66-generic
再移除,
> apt-get purge -y 3.19.0-61-generic*
// 選擇要移除的
// 或
> dpkg -l linux-image-[0-9]*-generic | awk '/^ii/{ print $2}' | grep -v -e `uname -r` | sort -V | head -n -1 | xargs apt-get purge -y 
// 使用 grep -v -e `uname -r` 去掉"目前的版本"
// 使用 sort -V 依版本先後排序
// 使用 head -n -1 去掉"最後的版本"
如果不需要 “header”, 也可以移除
> dpkg -l linux-headers-[0-9]*-generic | awk '/^ii/{ print $2}' | grep -v -e `uname -r` | sort -V | head -n -1 | xargs apt-get purge -y 
要裝回來, 就用 apt-get install,
> apt-get install linux-image-3.19.0-61-generic
最後你可以將他寫成 script, 放到開機啟動或 crontab 去執行.

沒有留言:

張貼留言