How do I remove old kernels despite 100% inode use in /usr?
I was trying to update my packages today:
$ sudo apt-get upgrade
Reading package lists... Done
Building dependency tree
Reading state information... Done
You might want to run 'apt-get -f install' to correct these.
The following packages have unmet dependencies:
linux-headers-3.16.0-44-generic : Depends: linux-headers-3.16.0-44 but it is not installed
E: Unmet dependencies. Try using -f.
So, I went ahead and tried apt-get -f install
:
$ sudo apt-get -f install
Reading package lists... Done
Building dependency tree
Reading state information... Done
Correcting dependencies... Done
The following extra packages will be installed:
linux-headers-3.16.0-44
The following NEW packages will be installed:
linux-headers-3.16.0-44
0 upgraded, 1 newly installed, 0 to remove and 3 not upgraded.
3 not fully installed or removed.
Need to get 0 B/9,101 kB of archives.
After this operation, 64.5 MB of additional disk space will be used.
Do you want to continue? [Y/n] y
(Reading database ... 688666 files and directories currently installed.)
Preparing to unpack .../linux-headers-3.16.0-44_3.16.0-44.59_all.deb ...
Unpacking linux-headers-3.16.0-44 (3.16.0-44.59) ...
dpkg: error processing archive /var/cache/apt/archives/linux-headers-3.16.0-44_3.16.0-44.59_all.deb (--unpack):
unable to create `/usr/src/linux-headers-3.16.0-44/scripts/genksyms/Makefile.dpkg-new' (while processing `./usr/src/linux-headers-3.16.0-44/scripts/genksyms/Makefile'): No space left on device
dpkg-deb: error: subprocess paste was killed by signal (Broken pipe)
Errors were encountered while processing:
/var/cache/apt/archives/linux-headers-3.16.0-44_3.16.0-44.59_all.deb
E: Sub-process /usr/bin/dpkg returned an error code (1)
It's complaining saying No space left on device
. df -Th
tells me that there's sufficient space:
$ df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda6 3.3G 2.5G 571M 82% /
udev 2.0G 0 2.0G 0% /dev
tmpfs 395M 11M 384M 3% /run
tmpfs 2.0G 28M 1.9G 2% /dev/shm
tmpfs 2.0G 0 2.0G 0% /sys/fs/cgroup
tmpfs 100M 72K 100M 1% /run/user
tmpfs 5.0M 8.0K 5.0M 1% /run/lock
/dev/sda7 9.3G 7.6G 1.3G 87% /usr
/dev/sda8 188G 176G 3.0G 99% /home
/dev/sda1 945M 394M 487M 45% /boot
/dev/sda9 256G 9.6G 233G 4% /var
However, df -i
tells me /usr
has used up all the inodes.
These are the dirs and their inode usage:
/usr/bin = 2846
/usr/etc = 1
/usr/games = 8
/usr/include = 3204
/usr/lib = 42317
/usr/local = 105
/usr/lost+found = 1
/usr/sbin = 306
/usr/share = 228141
/usr/src = 348704
So, if I can clear out /usr/src
(which contains the current and old kernels), I can probably resolve the issue. But, I keep running into the first error:
$ sudo apt-get purge linux-image-3.8.0-35-generic
Reading package lists... Done
Building dependency tree
Reading state information... Done
You might want to run 'apt-get -f install' to correct these:
The following packages have unmet dependencies:
linux-headers-3.16.0-44-generic : Depends: linux-headers-3.16.0-44 but it is not going to be installed
linux-image-extra-3.8.0-35-generic : Depends: linux-image-3.8.0-35-generic but it is not going to be installed
E: Unmet dependencies. Try 'apt-get -f install' with no packages (or specify a solution).
Any suggestions on how I can remove my old kernels? Thanks!
I was running out of options and time so I tried this and it worked:
I figured out what kernel I was using:
$ uname -r
3.16.0-44-generic
I decided to move the really old kernels to my external storage:
sudo mv linux-headers-3.8* /media/housni/linux-headers
df -i
then showed that a significant amount of inodes have been freed so I quickly uninstalled the headers I knew I wouldn't need:
sudo apt-get purge linux-headers-3.8*
After which, I updated grub and rebooted
sudo update-grub2 && sudo shutdown now -r
I then did some extra clean up like cleaning up my cache (sudo apt-get clean
) and running autoremove (sudo apt-get autoremove
) just to be safe and now everything seems to be back to normal :)