2012-12-16

Żywotność karty SD a Linux

Używanie karty SD w RPI ma sporo plusów, ale oczywiście karty te mają ograniczoną żywotność (np. ilość zapisów) . Dlatego ważne są backupy ważnych plików no i trzeba być przygotowanym, że za jakiś czas trzeba będzie kupić kolejną kartę.

Źródło: raspberrypi.org


Jak nieco opóźnić ten proces? 

Ważnym czynnikiem jest posiadanie, w miarę możliwości, sporej ilości wolnego miejsca, żeby zapisy nie były ciągle na tych samych sektorach.
Innym sposobem jest ograniczenie ilości zapisów na kartę. 
Co generuje największą ilość takich operacji?  
Najczęściej są to logi. 
Co możemy zatem zrobić?
Możemy /var/log umieścić na zewnętrznym dysku (lokalnym/sieciowym) albo utworzyć do tego celu mały ramdisk. 
Każde z rozwiązań ma swoje plusy i minusy - teraz opiszę ostatnią opcję.

Możemy utworzyć oczywiście ręcznie ramdisk i zamontować /var/log na nim, ale ja wykorzystam gotowe rozwiązanie LINK 

Wg dokumentacji pliki będą zapisywane na wygenerowanym ramdisku do momentu restartu systemu lub serwisu (wtedy pliki zostaną przeniesione na dysk (przez rsync)). Jeśli skończy się miejsce to serwer niestety zacznie swapować więc musimy albo wcześniej zrestartować serwis ramdisk albo usunąć pliki.

Instalacja jest prosta, najpierw należy pobrać pakiet lsof (zależność)
apt-get install lsof
następnie:
wget http://www.tremende.com/ramlog/download/ramlog_2.0.0_all.deb
sudo dpkg -i ramlog_2.0.0_all.deb
Jeszcze definiujemy ile pamięci ma być przeznaczone:
sudo vi /etc/default/ramlog
TMPFS_RAMFS_SIZE=25m
I restartujemy :
sudo reboot

Teraz cały katalog /var/log powinien znajdować się na ramdisku.
# df -h | grep ramlog

ramlog-tmpfs     25M  5.2M   20M  18% /var/log 

UPDATE.
W związku z tym, że uruchomiłem MRTG i wrzuciłem jeszcze parę dodatków do monitorowania (opis TUTAJ), postanowiłem rozszerzyć nieco ideę ramdisku i ograniczyć kolejne zapisy na kartę. Popracowałem bowiem z katalogiem /var/www/mrtg (w końcu to kilkanaście zapisów co 5 minut). 
Można oczywiście stworzyć oddzielny ramdisk (np wykorzystując TEN opis), ale należy pamiętać, że po reboocie stracimy wszystkie pliki, więc trzeba by było stworzyć skrypt synchronizujący pliki (np przez rsync). Jako, że mamy tu gotowe rozwiązanie - poszedłem drogą na skróty i utworzyłem link dla katalogu mrtg na /var/log. W ten sposób ramlog również zajmie się plikami mrtg.
Na szybko:
mkdir /var/log/mrtg_pliki

cp -rapv /var/www/mrtg /var/log/mrtg_pliki

cd /var/www

mv mrtg mrtg.BACKUP

ln -s /var/log/mrtg_pliki/mrtg/ /var/www/mrtg

UPDATE.2.
Po pewnym czasie dodałem wpis do cron-a
15 * * * * root /etc/init.d/ramlog reload
spowoduje to, że jeśli malinka straci dostęp do sieci lub się np zawiesi, nie stracimy zbyt dużej ilości danych. W ten sposób bowiem co godzinę logi z ramdisku będą zapisywane na karcie SD.

Tak tylko dodam, że ta idea przydatna jest również wtedy, gdy chcemy przyspieszyć odczyt często używanych plików - np przy udostępnianiu plików przez apache.

1 komentarz: