Jak zatrzyma

Archiwalne, stare wpisy FAQ i HowTo Użytkowników
LiTE
Beginner
Posty: 208
Rejestracja: 25 marca 2008, 13:22
Lokalizacja: Nowa Ruda

Jak zatrzymać dysk w systemie Linux?

Post autor: LiTE »

Jak zatrzymać dysk w systemie Linux?

Wydaje się banalne, ale takie nie jest. Jak wiadomo system i działające aplikacje chcą coś zapisywać i odczytywać z dysku. Gdy wykorzystujemy laptopa pracując na baterii nie mile widziane są niepotrzebne straty energii. Więc do dzieła! Większość poleceń wymaga uprawnień root lub sudo.

Potrzebny nam jest program hdparm

Kod: Zaznacz cały

apt-get install hdparm
Zatrzymać dysk możemy poleceniem:

Kod: Zaznacz cały

hdparm -Y /dev/sda
Gdzie sda to dysk, który chcemy zatrzymać. Po takim zabiegu dysk powinien zwolnić. Niestety prawdopodobnie za momencik usłyszysz przyspieszenie obrotów talerzy dysku... NIESTETY, jakiś program zapragnął dostępu do dysku ;-)

Co możemy zrobić, aby to ograniczyć? Sprawdzić samemu kto potrzebuje dostępu do dysku. Wystarczy wydać polecenie:

Kod: Zaznacz cały

sysctl vm.block_dump=1
Następnie:

Kod: Zaznacz cały

dmesg | grep -e READ -e WRITE
Zobaczymy jakie procesy odczytują oraz zapisują dane.

Kod: Zaznacz cały

[ 6627.835410] loop0(3543): READ block 13793312 on sda5
[ 6627.835633] deluged(3627): READ block 48613400 on dm-0
[ 6627.835698] deluged(3627): READ block 48613552 on dm-0
[ 6627.840766] loop0(3543): READ block 13793568 on sda5
[ 6627.842378] deluged(3627): READ block 48613656 on dm-0
[ 6627.842400] deluged(3627): READ block 48613904 on dm-0
[ 6627.843391] loop0(3543): READ block 13793824 on sda5
Schemat jest taki [NUMER] [NAZWA_PROCESU]([PID]): [CO ROBI] [JAKI BLOK] [NA JAKIEJ PARTYCJI]
loop0(3543): READ block 13793312 on sda5
Czyli loop0 o PID 3543 odczytuje blok 13793312 na partycji sda5.

Według tego ręcznie możemy wyłączyć procesy, które korzystają z dysku. Poleceniem:

Kod: Zaznacz cały

kill [PID_PROCESU]
Rozwiązaniem również jest użycie lm-profiler. Jest on częścią pakietu laptop-mode-tools. Więc instalujemy:

Kod: Zaznacz cały

apt-get install laptop-mode-tools
Teraz wydajemy polecenie:

Kod: Zaznacz cały

lm-profiler
Teraz musimy poczekać 600 sekund. Program będzie monitorował użycie dysku, a na koniec zapyta nas czy chcemy wyłączyć pewne usługi przy starcie i podpowie, które programy korzystają z dysku. Jeżeli jesteśmy pewni, że chcemy wyłączyć usługę przy starcie wybieramy y i ENTER.

Już jesteśmy prawie na końcu, wyłączyłeś wszystko, ale dysk ciągle startuje? Normalne :) Ale i na to znajdziemy radę!
Prawdopodobnie procesy, które odwołują się do dysku to kjournald, syslogd i pdflush.

syslogd jest programem, który zapisuje logi systemowe co jakiś okres czasu, wyłączenie jego jest bardzo proste. Wystarczą dwa polecenia:

Kod: Zaznacz cały

/etc/init.d/klogd stop
/etc/init.d/sysklogd stop
pdflush - zrzuca obraz procesów. Nie wyłączymy go, ale można ograniczyć dostęp do dysku poprzez polecenie:

Kod: Zaznacz cały

echo 90000 > /proc/sys/vm/dirty_writeback_centisecs
Komenda ta powoduje zrzucanie obrazu procesów co 900 sekund (15 minut). Teoretycznie bezpieczne jest 15 sekund, ale ... :)

kjournald - no cóż tutaj już nie jest tak kolorowo. To jest proces, który jest odpowiedzialny za księgowanie. Najbardziej popularny teraz system plików ext3 posiada księgowanie zawartości partycji. Przez co możemy odzyskać dane przy twardym restarcie. Domyślnie odstęp czasu między zapisami to 5 sekund. Czyli proces co 5 sekund zapisuje coś na dysku. Rozwiązanie jest proste. Wystarczy zaaplikować poprawkę na źródła kernela. Do ściągnięcia tutaj:

Journal 15 minut patch

Patch powoduje zmianę odstępu czasowego między zapisem księgi na 900 sekund (15 minut). Jak zastosować to do swojego kernela?
Wchodzimy w źródła i wykonujemy polecenie:

Kod: Zaznacz cały

cd /usr/src/linux-[wersja]/
patch -p0 < journal.patch
Następnie wykonujemy kompilację i gotowe. Teraz możemy spróbować zatrzymać dysk i cieszyć się ciszą ;-)
Patch działa poprawnie na kernelu 2.6.27.7, na wcześniejszych też powinien działać!
Zablokowany