apt-get installが動かないときの解決方法
原因はいくつかあると思いますが,中でもストレージに起因する場合の解決方法を紹介します.
エラー詳細
apt-get install
しようとしたときに,以下のような依存関係のあるパッケージが見つからないというエラーが出ることがあります.
E: Unmet dependencies. Try 'apt-get -f install' with no packages (or specify a solution).
この場合には apt-get -f install
すれば直りますが,このコマンド自体が動かないこともあります.
E: Sub-process /usr/bin/dpkg returned an error code (1)
私の場合,エラーをよく読んでみるとストレージが満杯になっており,ファイルが作成できないようでした.
terminal
Unpacking linux-modules-4.4.0-186-generic (4.4.0-186.216) ...
dpkg: error processing archive /var/cache/apt/archives/linux-modules-4.4.0-186-generic_4.4.0-186.216_amd64.deb (--unpack):
cannot copy extracted data for './boot/System.map-4.4.0-186-generic' to '/boot/System.map-4.4.0-186-generic.dpkg-new': failed to write (No space left on device)
No apport report written because the error message indicates a disk full error
ストレージ使用状況の確認
terminal
$ df -H
Filesystem Size Used Avail Use% Mounted on
udev 136G 0 136G 0% /dev
tmpfs 28G 95M 27G 1% /run
/dev/sda3 166G 24G 134G 15% /
tmpfs 136G 316k 136G 1% /dev/shm
tmpfs 5.3M 4.1k 5.3M 1% /run/lock
tmpfs 136G 0 136G 0% /sys/fs/cgroup
/dev/sda1 487M 480M 0 100% /boot
/dev/sda4 811G 265G 505G 35% /home
/dev/sdb2 3.1T 1.2T 1.9T 40% /media/...
tmpfs 28G 74k 28G 1% /run/user/1002
tmpfs 28G 0 28G 0% /run/user/1007
確かに /boot
が使用率 100% になっており,これが原因でエラーを起こしているようです.
不要なカーネルの削除方法
ここには今使っているもの以外のカーネルが保存されているらしく,以下のようにして検出できる不要なものを取り除くことで容量を空けることができます.
terminal
$ sudo dpkg --list 'linux-image*'| awk '{ if ($1=="ii") print $2}'| grep -v `uname -r`
linux-image-4.4.0-150-generic
linux-image-4.4.0-151-generic
linux-image-4.4.0-154-generic
linux-image-4.4.0-157-generic
linux-image-4.4.0-159-generic
linux-image-4.4.0-161-generic
linux-image-4.4.0-164-generic
linux-image-4.4.0-165-generic
linux-image-4.4.0-186-generic
linux-image-generic
apt-get
が動くのであれば purge
するべきですが,今は動かないので rm
で消す準備をします.
terminal
$ sudo rm -rf /boot/*-4.4.0-1{5{0,1,4,7,9},6{1,4,5},86}-*
$ sudo rm -rf /boot/linux-image-generic
これで boot
に余裕ができているはずです.
terminal
$ df -H
Filesystem Size Used Avail Use% Mounted on
udev 136G 0 136G 0% /dev
tmpfs 28G 95M 27G 1% /run
/dev/sda3 166G 24G 133G 16% /
tmpfs 136G 316k 136G 1% /dev/shm
tmpfs 5.3M 4.1k 5.3M 1% /run/lock
tmpfs 136G 0 136G 0% /sys/fs/cgroup
/dev/sda1 487M 86M 372M 19% /boot
/dev/sda4 811G 265G 505G 35% /home
/dev/sdb2 3.1T 1.2T 1.9T 40% /media/...
tmpfs 28G 82k 28G 1% /run/user/1002
tmpfs 28G 0 28G 0% /run/user/1007
あとは,先程同様に修正するためのコマンドを実行します.
terminal
$ sudo apt-get -f install
エラーが出ることなくすべて done
であればひとまず必要なパッケージは全て入っており,ここから関連する不要なパッケージを取り除きます.
terminal
$ sudo apt-get autoremove
最後に GRUB とパッケージを更新します.
terminal
$ sudo update-grub
$ sudo apt-get update
これで動くようになりました!
参考
Safest way to clean up boot partition - Ubuntu 14.04LTS-x64, Ubuntu 16.04LTS-x64 | GitHub Gist