Ziel
Um die Zugriffe auf die Festplatte/Flashkarte zu minimieren, soll das Log-Verzeichnis /var/log beim Starten in den RAM geschrieben werden.
Beim ausschalten und reboot muss mit der HD syncronisiert werden. Weiter muss es möglich sein in bestimmten Abständen und auch manuell bzw. per Script zu syncronisieren.
Mit tmpfs lässt sich das alles recht komfortabel umsetzen.
Vorbereitung
Kernel
Im Kernel muss FS Unterstützung im RAM aktiviert sein.
Symbol: TMPFS
Location:
-> File Systems
-> Pseudo Filesystems
Sync-Verzeichnis
Man muss ein Verzeichnis anlegen, in dass syncronisiert wird und aus dem beim Systemstart die Dateien in den RAM geladen werden.
mkdir /var/log.hd
fstab
Diese Zeile hinzufügen:
tmpfs /var/log tmpfs size=100M 0 0
Wir mounten damit /var/log in einen reservierten Bereich des Arbeitsspeichers.
init-Scipt
Folgendes Script unter /etc/init.d/varlogfs speichern:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
| #!/bin/sh
PATH=/bin:/usr/bin:/sbin:/usr/sbin
TMPFS_DIR="/var/log/"
HDD_DIR="/var/log.hd/"
case $1 in
start)
echo "sync hdd to tmpfs.."
/bin/cp -Rpv $HDD_DIR* $TMPFS_DIR
echo "done."
;;
sync)
echo "sync tmpfs to hdd.."
/bin/cp -Rpv $TMPFS_DIR* $HDD_DIR
echo "done."
;;
stop)
echo "sync tmpfs to hdd.."
/bin/cp -Rpv $TMPFS_DIR* $HDD_DIR
echo "done."
;;
*)
echo $"usage: $0 {start|sync|stop}"
exit 1
;;
esac
exit 0 |
Das init-Script sollte logischerweise vor allen Diensten gestartet werden, die nach /var/log schreiben. Außerdem muss es beim Herunterfahren am Schluss ausgeführt werden, um das das Dateisystem zu syncronisieren.
ln -s /etc/init.d/varlogfs /etc/rc2.d/S9varlogfs
ln -s /etc/init.d/varlogfs /etc/rc3.d/S9varlogfs
ln -s /etc/init.d/varlogfs /etc/rc5.d/S9varlogfs
ln -s /etc/init.d/varlogfs /etc/rc0.d/K99varlogfs
ln -s /etc/init.d/varlogfs /etc/rc1.d/K99varlogfs
ln -s /etc/init.d/varlogfs /etc/rc6.d/K99varlogfs
Unter Debian geht auch:
update-rc.d varlogfs defaults 9 99
Beim nächsten Neustart ist das Log-Verzeichnis im Arbeitsspeicher.
Manuell syncronisieren kann man mit:
/etc/init.d/varlogfs sync