Konwersja z systemu plików ext3 do ext4 w Linuksie

Jest to czynność dość prosta. W moim przypadku przeprowadziłem ją na systemie operacyjnym Fedora 12 w wersji 64- bitowej. W przypadku świeżej instalacji system instaluje się już od razu na ext4. Jednak ja wykonałem podniesienie wersji z 11 na 12. W Fedorze 12 GRUB już obsługuje ten system plików i istnieje możliwość uruchomienia z niego Linuksa.
System najlepiej uruchomić w trybie pojedynczego użytkownika (parametr single). W pliku /etc/fstab dokonujemy małej zmiany na wzór poniżej:

/dev/dev-name / ext4 defaults 0 1

Następnie przemontowujemy system plików, aby był tylko do odczytu poleceniem:

mount -o remount,ro /


Sprawdzamy czy nie ma błedów:

fsck.ext3 -pf /dev/dev-name

Następnie włączamy wszystkie funkcjonalności ext4:

tune2fs -O extents,uninit_bg,dir_index /dev/dev-name

I koniecznie ponownie po wszystkiem sprawdzamy (obowiązkowo; inaczej po ponownym uruchomieniu zostaniemy poinformowani o błedach) czy system plików nie zawiera błędów:

fsck.ext4 -yfD /dev/dev-name


Najlepiej też dodać do grub.conf parametr uruchomienia kernela:

rootfstype=ext4

Zasadniczo to wszystko. Jednak pliki utworzone przed migracją nadal będą korzystały z bitmap mapping ext3, a nie z extens ext4. System zadba sobie o to sam zmieniając ten atrybut przy ponownytm zapisie danego pliku. Proces ten będzie raczej dość wolny, zwłaszcza gdy mamy duzo plików z których bardzo rzadko korzystamy. W przyszłości o proces ten będzie automatycznie dbało narzędzie e4defrag - jednak obecnie jest w fazie rozwojowej. Polecenie służące do sprawdzenia czy dany plik lub katalog posiada ten atrybut to: lsattr. Wydając polecenie: 

lsattr /home

możemy otrzymać wynik:

------------------- /home

gdzie kreski oznaczają to, że dany plik/katalog nie korzysta jeszcze z atrybótów ext4. Możemy mu je nadać poleceniem:

chattr +e /home

Ponownie listując otrzymamy wynik:

-----------------e- /home/user/foo/bar

gdzie e oznacza extens. Polecenie chattr może być wykonywane na wielu plikach jednocześnie, lecz nie jest możliwe jego wykonanie rekursywnie (przez strukturę plików i katalogów). Dlatego zaleca się wykorzystanie dwóch magicznych poleceń (pierwsze dla plików, drugie dla katalogów):

find /home -xdev -type f -print0 | xargs -0 chattr +e f
find /home -xdev -type d -print0 | xargs -0 chattr +e
 
Można je wykorzystać do konwersji wszystkich plików z poziomu katalogu głownego (ale po konwersji samego systemu plików). Najlepiej wykonywać te dwa polecenia w trybie pojedynczego użytkownika, ze względu na minimalizację zakłóceń podczas ich pracy i prawdopodbnie dużą ilość komunikatów generowanych do logów.

0 komentarze: