“No space left on device”, od innej strony…

Problem:
Podczas instalacji Linuksa (Gentoo) na maszynie wirtualnej VirtualBox, podczas rozpakowywania portage-latest.tar.bz2 , zaczęły pojawiać się błędy związane z brakiem miejsca na dysku:

tar: portage/(...)/metadata.xml: Cannot open: No such file or directory
tar: Error exit delayed from previous errors
emergelog(): [Errno 28] No space left on device: '/var/log/emerge.log'

Dodatkowo, ilość wolnych MB na dysku jest oczywiście znacznie większa niż 0, 10, 100 czy nawet 1000. Skoro więc jest miejsce na dysku, to dlaczego go brakuje?

Problemem nie jest miejsce mierzone w MB, tylko w inode-ach. W inode-ach zapisywane są informacje o plikach, jeśli więc wszystkie inode-y są już zapełnione, nie można zapisać więcej plików mimo iż na dysku, fizycznie znalazło by się jeszcze miejsce.
Ilość wszystkich inode-ów oraz ilość tych zajętych można poznać wydając polecenie:

df -i

W moim przypadku wynik był następujący:

livecd usr # df -i
Filesystem            Inodes   IUsed   IFree IUse% Mounted on
tmpfs                  64076    1517   62559    3% /
/dev/sr0                   0       0       0    -  /mnt/cdrom
/dev/loop0            117204  117204       0  100% /mnt/livecd
udev                   64076     805   63271    2% /dev
tmpfs                  64076      41   64035    1% /mnt/livecd/lib/firmware
tmpfs                  64076       3   64073    1% /mnt/livecd/usr/portage
tmpfs                  64076       4   64072    1% /boot
/dev/sda3             147168  147168       0  100% /mnt/gentoo
/dev/sda1               4016      13    4003    1% /mnt/gentoo/boot

… Jak widać przy /dev/sda3 wykorzystany został już cały dostępny zasób inode-ów.
Niestety ich ilość zmienić/ustawić można tylko w trakcie tworzenia filesystemu.

By w końcu zainstalować system, musiałem od nowa sformatować dysk.
Do standardowej komendy dodałem argument: -i 8192

mkfs.ext2 -j -L ROOT -i 8192 /dev/sda3

Zauważyłem, że problem pojawia się głównie po instalacji drzewa portów (portage), które to składa się z bardzo dużej ilości malutkich plików. Więc gdy po stworzeniu docelowego obrazu maszyny virtualnej, będę miał problemy z “miejscem”, pewnie je usunę.


About this entry