Mit einer CF-Karte kann man den Cop ohne Festplatte und damit meistens auch lüfterlos betreiben. Das Ergebnis ist ein absolut lautloser Rechner
CF-Karten haben aber leider nur eine begrenzte Anzahl von Schreibzugriffen (~ 100.000), daher sollte man die Schreibzugriffe so weit wie möglich reduzieren.
Durch mkflash wird eine Ramdisk unter /ram angelegt, die für häufige Schreibzugriffe verwendet wird. Hier liegen dann z.B. die Logdateien, die ständig im Schreibzugriff sind. Eine Ramdisk ist allerdings ein flüchtiger Speicher, d.h. wenn das System heruntergefahren wird, gehen alle Daten auf der Ramdisk verloren. Wichtige Daten müssen also regelmäßig auf die CF-Karte gesichert werden.
Nachdem man das System eine zeitlang mit der CF-Karte betrieben hat, sehen die Schreibzugriffe so aus:
Das sind zwar relativ wenige Zugriffe, man erkennt aber deutlich, dass die CF-Karte trotzdem ständig beschrieben wird und diesem Umstand wollte ich mal näher auf den Grund gehen.
Ein Blick in die crontab (fcrontab -l) zeigt folgendes:
Code:
#
# $Id: crontab,v 1.9.2.1 2004/09/22 08:35:15 riddles Exp $
#
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/
# Log rotation
01 * * * * /usr/sbin/logrotate /etc/logrotate.conf
# Backup logs to flashdisk
01 * * * * [ -f "/etc/FLASH" ] && /etc/rc.d/rc.flash.down
# Set time
*/5 * * * * /usr/local/bin/timecheck > /dev/null 2>&1
# Summarize ip accounting info:
2 1 * * * /usr/sbin/ipacsum -r -H `/bin/hostname` -t "the day 2 days ago" >/dev/null
3 1 * * 0 /usr/sbin/ipacsum -r -H `/bin/hostname` -t "the week 4 weeks ago" >/dev/null
4 1 1 2 * /usr/sbin/ipacsum -r -H `/bin/hostname` -t "the year 2 years ago" >/dev/null
# Make some nice graphs
*/5 * * * * /usr/local/bin/makegraphs >/dev/null
# Update the dynamic dns registration once a week
*/5 * * * * [ -f "/var/ipcop/red/active" ] && /usr/local/bin/setddns.pl >/var/log/dynupdate.log 2>&1
9 2 * * 0 [ -f "/var/ipcop/red/active" ] && /usr/local/bin/setddns.pl -f >/var/log/dynupdate.log 2>&1
# Logwatch
01 0 * * * /usr/local/bin/logwatch > /var/log/logwatch/`date -I -d yesterday`; \
LOGWATCH_KEEP=$(sed -ne 's/^LOGWATCH_KEEP=\([0-9]\+\)$/\1/p' /var/ipcop/logging/settings); \
find /var/log/logwatch/ -ctime +${LOGWATCH_KEEP=56} -exec rm -f '{}' ';'
# Backup logs to flash
02 * * * * /etc/rc.d/rc.flash.down
Mit dem Eintrag
Code:
# Backup logs to flashdisk
01 * * * * [ -f "/etc/FLASH" ] && /etc/rc.d/rc.flash.down
werden die Logdateien stündlich (xx:01 Uhr) von der Ramdisk auf die CF-Karte gesichert. Dies erkennt man in dem Diagramm sehr schön an den stündlich auftretenden Spitzen.
Ganz unten in der crontab finden wir diesen Eintrag:
Code:
# Backup logs to flash
02 * * * * /etc/rc.d/rc.flash.down
Hier wird das selbe nochmal stündlich um xx:02 Uhr gemacht (?!?), völlig unnötig. Diesen Eintrag kann man bedenkenlos löschen, damit reduzieren sich die im Diagramm sichtbaren Spitzen deutlich!
Der Eintrag
Code:
# Make some nice graphs
*/5 * * * * /usr/local/bin/makegraphs >/dev/null
aktualisiert alle 5 Minuten die Statistik-Grafiken im Verzeichnis home/httpd/html/graphs. Die werden allerdings direkt auf die CF-Karte geschrieben. Das wollen wir verbessern.
Die Idee ist, die Statistik-Grafiken ebenfalls auf der Ramdisk zu halten. Die Grafiken werden aus den Logdaten in /var/log/rrd erstellt, diese Dateien befinden sich ohnehin schon auf der Ramdisk und werden regelmässig auf die CF-Karte gesichert.
Zuerst legen wir auf der Ramdisk das Verzeichnis graphs an, sichern die Grafiken in einem gezippten tar-Archiv, verschieben die bisherigen Grafiken in die Ramdisk und ersetzen das Verzeichnis /home/httpd/html/graphs durch einen Symlink auf das neue Verzeichnis auf der Ramdisk:
Code:
mkdir /ram/graphs
cd /home/httpd/html
tar cvfz graphs.tgz graphs
mv graphs/* /ram/graphs
rmdir graphs
ln -s /ram/graphs graphs
Alle 5 Minuten läuft die Aktualisierung der Grafiken, die jetzt im Verzeichnis /ram/graphs erstellt werden.
In der IPCop Web-Oberfläche werden jetzt allerdings keine Grafiken mehr angezeigt, da der apache so konfiguriert ist, dass keine Symlinks benutzt werden dürfen. Um dies zu erlauben, muss eine kleine Änderung in der Apache-Konfigurationsdatei vorgenommen werden. Die Datei befindet sich in
Code:
/etc/httpd/conf/httpd.conf
und kann mit einem beliebigen Editor bearbeitet werden. Die entscheidende Stelle ist dieser Bereich:
Code:
<Directory /home/httpd/html>
Options ExecCGI
AllowOverride None
Order allow,deny
Allow from all
</Directory>
Hier muss die Option FollowSymlinks ergänzt werden, so dass der Bereich anschließend so aussieht:
Code:
<Directory /home/httpd/html>
Options ExecCGI FollowSymlinks
AllowOverride None
Order allow,deny
Allow from all
</Directory>
Nachdem die Datei so geändert wurde, muss der apache neu gestartet werden:
Code:
killall httpd
httpd
Damit werden die Grafiken wieder im Web-Interface angezeigt.
Nach dem Systemstart ist das Verzeichnis /ram/graphs natürlich nicht vorhanden und muss angelegt werden. Dies erfolgt in der Datei /etc/rc.d/rc.flash.up. Hier muss am Ende folgende Zeile eingefügt werden:
Code:
mkdir /ram/graphs
cd /home/httpd/html && ln -f -s /ram/graphs graphs
Fertig. Nachdem das System ein paar Stunden gelaufen ist, kann man in den Statistiken eine deutliche Abnahme der Plattenzugriffe sehen. Die CF-Karte wird's danken.
Modifiziertes mkflash: Ein modifiziertes mkflash, in das diese Änderungen bereits eingearbeitet sind, kann
hier heruntergeladen werden.
Wer seinen Cop bereits mit dem Original-mkflash laufen hat und sich nicht so detailliert auskennt, kann die oben beschriebenen Änderungen automatisch durchführen lassen. Dafür habe ich das Script
cf.sh geschrieben. Ist aber einfach "geradeaus programmiert" und legt zuvor keine Backups der zu ändernden Konfigurationsdateien an. Benutzung also auf eigenes Risiko
Dieses Script ist nicht nötig, wenn Ihr das oben verlinkte modifizierte mkflash benutzt habt
Anregungen und Anmerkungen sind jederzeit willkommen.