Pędź dysku mój, pędź
Czy kogoś trzeba przekonywać, że posiadanie szybkiego i sprawnego dysku bardzo umila korzystanie z komputera i systemu operacyjnego ? Pewnie nie, bo o tym każdy wie. Czy to Windows, czy to Linux, w dobrym tonie leży prawidłowe ustawienia parametrów posiadanego napędu – a to włączone DMA, czytanie z wyprzedzeniem, cache dla zapisu, właściwy tryb UDMA itp. Czy jednak poza wyciskaniem siódmych potów z samej elektroniki można coś więcej zrobić dla sprawności dostępu do danych na dysku?
A co powiecie na wyciśnięcie odrobiny potu z samego systemu plików ? Mówię o popędzaniu starego dobrego ext3 i każdego innego systemu korzystającego z journaling’u.
Koncepcja jest następująca. Zmienimy nieco parametry montowania dysków/partycji, wykorzystując swoją całą wiedzę nt. parametrów polecenia mount. Podobnie, zmienimy parametry kronikowania księgowania dla wybranych partycji/dysków za pomocą polecenia tune2fs.
Co tracimy kosztem zwiększonej prędkości i wydajności zapisywania/odczytywania/dostępu do danych ?
– parametr noatime w /etc/fstab – nie będzie można wyszukiwać plików wg. daty/czasu dostępu do pliku (dostępu, nie zapisu/modyfikacji)
– parametr nodiratime w /etc/fstab – jak wyżej, tylko dla katalogów
– kronikowanie księgowanie w trybie writeback – w przypadku awarii zachowana zostanie spójność systemu plików, lecz w plikach zapisywanych w momencie awarii na końcu mogą się pojawić losowe dane
– opcja dir_index dla systemu plików – same plusy
Na początek zajmijmy się plikiem /etc/fstab. Zróbmy jego kopię (użytkownicy Debiana pogradliwie prychając opuszczają polecenie sudo) – wszystko robimy rzecz jasna w konsoli :
sudo cp /etc/fstab /etc/fstab_bak
Teraz otwórzmy go do edycji swoim ulubiony edytorem czy to tekstowym czy graficznym :
sudo gedit /etc/fstab
Robimy poprawki – dla każdego dysku/partycji którą montujemy dodajemy parametry :
noatime,nodiratime,data=writeback
… czyli wpis dla np. /dev/hda5 nabiera takiej formy :
/dev/hda5 /home ext3 defaults,noatime,nodiratime,data=writeback 0 2
… lub :
# /dev/hda5 :
UUID=4abffdd1-b652-4091-b6a8-81c97f8f8f76 / home ext3 defaults,noatime,nodiratime,data=writeback 0 2
Robimy poprawki tylko dla dysków twardych (żadne tam cdrom’y i urządzenia wymienialne), oraz zastanawiamy się, czy na pewno chcemy takie parametry ustawić dla partycji / (root).
Jeżeli ustaliliśmy parametr data=writeback dla partycji /, musimy wykonać poprawkę w /boot/grub/menu.lst.
sudo gedit /boot/grub/menu.lst
W linii z opcjami dla kernela, dopisujemy rootflags=data=writeback :
kernel /boot/vmlinuz-2.6.22-1-686 root=/dev/hda1 rootflags=data=writeback ro
(nie przeklejać tej linijki, tylko wstawić parametr w swoim menu.lst w podobny sposób jak powyżej!)
Ważne ! Teraz uaktualnimy kronikę każdej partycji dla której wybraliśmy tryb writeback :
sudo tune2fs -o journal_data_writeback /dev/hda5
Powtarzamy polecenie, zmieniając tylko /dev/hda5 na numery partycji z /etc/fstab.
Dla wszystkich partycji z kroniką można jeszcze włączyć (jeżeli nie jest włączona) opcję dir_index – usprawni to wyświetlanie/przeszukiwanie katalogów z dużą liczbą plików (nie dotyczy to oczywiście generowania miniaturek w tych katalogach) :
sudo tune2fs -O dir_index /dev/hda5
I kolejne udogodnienie, jeżeli kogoś denerwuje częstotliwość sprawdzania dysku podczas startu systemu – ustawimy, aby sprawdzany był nie co 30-ści montowań, lecz co 100 :
sudo tune2fs -c 100
UWAGA – przy wpisywaniu poleceń w konsoli, proszę zwracać uwagę, czy wykonanie danego polecenia nie pokaże jakiegoś błędu – nie wklejać na ślepo wszystkich komend! W przypadku błędu trzeba ustalić o co komputerowi chodzi i poprawić się.
Po wprowadzonych zmianach resetujemy system – konieczne, ze względu na zmianę trybu kronikowania księgowania.
Czy wprowadzone zmiany są rewolucyjne ? Bardziej odczują to osoby z wolniejszymi dyskami. O ile w ogóle – generalnie ciężko przełożyć wzrost wydajności na konkretne cyferki – ma po prostu być nieco sprawniej i szybciej. Testy hdparm’em tego nie pokażą, zainteresowani mogą próbować wykonywać benchmarki za pomocą bonie++.