torsdag 4 juli 2013

btrfs-problem vid do-release-upgrade

När jag kör en do-release-upgrade får btrfs magiskt slut på utrymme, vilket resulterar i en avbruten do-release-upgrade och ett filsystem där jag inte kan utföra några operationer.

Mitt utgångssystem var Ubuntu Server 12.04 som uppdaterades till 12.10 via do-release-upgrade.

Anledningen till problemet?
btrfs lurar filsystemet om hur mycket ledigt utrymme det finns.
Om du jämför output från följande kommandon kan du också se detta:

df -h /
Size: 72G Used: 57G

sudo btrfs fi df /
total=63.23GB, used=50.43GB

sudo btrfs fi show
size 71.41GB used 54.44GB


Lösningen
Börja med att försöka köra btrfs balanseringskommando:
sudo btrfs balance /

I mitt fall var disken för full för att kunna köra en balansering, jag kunde inte heller ta bort mappar eller flytta filer. Jag började därför med att ta bort enstaka filer. Ibland fick jag försöka flera gånger, men för varje fil jag lyckades ta bort blev nästkommande ännu enklare. Till slut hade jag flyttat och tagit bort tillräckligt för att kunna starta btrfs balance.

När min balansering var slutförd var det dags att reparera min avbrutna do-release-upgrade:
sudo dpkg --configure -a
sudo apt-get update
sudo apt-get upgrade
sudo apt-get dist-upgrade
sudo apt-get autoremove
sudo reboot

Efter denna procedur skulle jag köra ännu ett steg av do-release-upgrade, döm av min förvåning då alla problem återuppstod igen.
Jag hade ju precis balanserat mitt filsystem?! Efter ett första balanseringsförsök hamnade disken i read only och gick inte att återmontera. Efter två omstarter fick jag till slut igång filsystemet. Dags för ännu en runda av att försöka flytta/slänga filer innan jag kunde starta balanseringen.

Efter denna sista balansering är filsystemet snabbare än någonsin. Ska man använda btrfs bör man inte köra på en äldre kernel än 3.6+!


Källor:
nican
ArchLinux BBS

Inga kommentarer:

Skicka en kommentar