Fullbackup mit tar

12. Oktober 2008

Meinen Server sichere ich gerne vollständig, da ich so im Falle eines Ausfalls schnell wieder an die Daten komme. Sofern man keine Technologien wie Snapshot & Co nutzen kann, genügt hierzu auch ein einfaches tar.

Erstmal sollte man einige Verzeichnisse ausnehmen, z.B. /proc, /dev oder /sys. Auch können Temp-Verzeichnisse sowie /var/run und /var/lock ausgenommen werden. Je nachdem, wie wichtig die Logfiles sind, können die auch weg, brauchen sie doch nur viel Platz.

Die Spool-Files vom Mailserver sind oft auch unsinnig: Ein 6h altes Backup enthält viele Mails, die längst zugestellt sind, andererseits keine Mails der letzten 6 Stunden. Sowas lohnt im Backup nicht. Wer viel Wert auf das Mailbackup legt, könnte höchstens das aktuelle Spool-Verzeichnis sehr häufig per rsync anderswo sichern.

Datenbanken sollten nicht live weggezogen werden, besser ist eine vorher erstellte konsistente Kopie (z.B. ein MySQL Dump), die im Backup landet, während das Arbeitsverzeichnis der Datenbank ausgenommen wird. In meinem Fall ist das /var/lib/mysql.

Eine Sache ist für die Herstellung noch ganz wichtig: Es sollte nicht das Verzeichnis selbst vom Backup ausgenommen werden, sondern nur dessen Inhalt. Das Verzeichnis (samt zugehöriger Owner- und Rechteeingestellungen) sollte im Backup bleiben. In tar geht das so, dass man das Verzeichnis nicht mit ‘–exclude=pfad’ sondern mit ‘–exclude=pfad/*’ ausnimmt.

Zuletzt sollte man das Backup selbst auch noch ausnehmen – nicht wäre dümmer als eine rekursive Sicherung des Backups selbst. Das Ergebnis als Kommando sieht dann so aus:

tar czf /pfad/zum/backup.tgz
    --exclude=proc/*
    --exclude=dev/*
    --exclude=sys/*
    --exclude=tmp/*
    --exclude=var/tmp/*
    --exclude=var/run/*
    --exclude=var/lock/*
    --exclude=var/log/*
    --exclude=var/lib/mysql/*
    --exclude=var/spool/postfix/*
    --exclude=pfad/zum/backup.tgz
    /

Die am Ende der Zeilen zeigen der Bash an, dass die Zeile noch nicht abgeschlossen ist. So lassen sich mehrzeilige Kommandos eingeben, was der Übersichtlichkeit dient. Das / am Ende ist wichtig, es sagt tar, dass wir / sichern wollen, also die ganze Platte.

IT, LST , , ,

urldecode auf der Shell

21. September 2008

Wer hin und wieder schon mal in einem Apache-Log die Referer durchsucht hat, kennt das Problem mit der Zeichenkodierung: Sonderzeichen werden als zweistellige hexadezimale Zeichen mit vorangestelltem Prozentzeichen dargestellt. Aus ‘Wörter mit Äh, Üh und Öh’ wird so schnell ein ‘W%F6rter+mit+%C4h%2C+%DCh+und+%D6h’, was für den Admin wirklich schwer zu lesen sein dürfte.

Eine ganz einfache Möglichkeit der Umwandlung bietet Perl durch die Möglichkeit, die Suchergebnisse eines regulären Ausdrucks durch eine Callback-Funktion zu schicken:

echo 'W%F6rter+mit+%C4h%2C+%DCh+und+%D6h'
  | perl -pe 's/%([A-Fa-f0-9]{2})/pack("C", hex($1))/seg'

Nur die Pluszeichen (welche für Space eingesetzt werden) bleiben bestehen, das erschwert die Lesbarkeit jedoch kaum. Falls es doch stört, einfach das Ergebnis nochmal durch ‘tr‘ schicken…

IT, LST , , ,

Ein LKW voller Post-ITs…

20. September 2008

Meist ist der Zweck von Post-ITs ziemlich vorherbestimmt: Irgendwer schmiert was drauf und klebt es wohin. Dort verweilt es, bis es am Ende im Müll landet. Doch was macht man, wenn man einen ganzen LKW von diesen Klebezetteln hat? EepyBird zeigt, wie man sich mit 280.000 ‘Sticky Notes’ die Zeit vertreiben kann…

Fun

Albtraum eines Linux-Sysadmins…

18. September 2008

Manche träumen davon, von einem Hochhaus zu fallen oder einen Flugzeugabsturz mitzuerleben. Sysadmins träumen aber anders – hier ein Albtraum, den ein Kollege hatte:

user@host:~# apt-cache show sysvinit
Package: sysvinit
Essential: yes
Priority: required
Section: admin
Installed-Size: 220
Maintainer: Debian sysvinit maintainers
Architecture: i386
Version: 2.86.ds1-38+etchnhalf.1
Depends: libc6 (>= 2.3.6-6), php5-common (= 5.2.0-8+etch11)
Pre-Depends: initscripts, sysv-rc (>= 2.86.ds1-1.2), sysvinit-utils
Filename: pool/main/s/sysvinit/sysvinit_2.86.ds1-38+etchnhalf.1_i386.deb
Size: 108090
Description: System-V-like init utilities
 This package contains programs required for booting
 a Debian system and doing basic process management.
 .
 The most important program in the package is /sbin/init.
 It is the first process started on boot and continues
 to run as process number 1 until the system halts. All
 other processes are descended from it.

Fun, IT , , ,

Bash History mit Zeitstempel

17. September 2008

Seit Version 3 hat die Linux-Shell ‘Bash’ ein nettes Feature: Sie kann in der History nicht nur die eingegebenen Befehle speichern, sondern auch Datum und Uhrzeit dazu.

Für mich als Systems Engineer in einem RZ eine nette Sache. Bei einem Problem kann ich zwar per ‘history’ sehen, welches Kommando dazu führte und per ‘last’ finde ich schnell heraus, wer meiner Kollegen wann auf dem Server war, doch helfen beide Informationen meist nichts, wenn ich nicht feststellen kann, WANN das Kommando eingegeben wurde.

Das funktioniert ganz einfach: Die Umgebungsvariable HISTTIMEFORMAT muss gesetzt sein und zwar mit dem Datumsformat gemäß strftime(3). Die Manpage verrät, dass %F das Datum und %T die Uhrzeit ist. Man muss die Variable nun nur noch im File ~/.bashrc setzen, schon wird bei jedem Befehl die Zeit gespeichert:

export HISTTIMEFORMAT='%F %T '

Wichtig ist das Leerzeichen zwischen dem %T und dem schließenden Quote. Ohne dieses gibt der Befehl ‘history’ die Kommandos ohne Trennzeichen direkt hinter dem Datum aus.

Bedenken sollte man, dass dies weder das Manipulieren noch das Löschen der History verhindert. Man kann also damit keinen “Schutz” bieten, sondern es nur unter Kollegen etwas einfacher machen, den richtigen Ansprechpartner schnell zu finden.

IT, LST , , ,