Alte Kernel-Images, Header und Module mit nur einem Befehl entfernen

Weil eben sehr hilfreich, möchte ich mir das hier gleich merken:

dpkg -l 'linux-*' | sed '/^ii/!d;/'"$(uname -r | sed "s/\(.*\)-\([^0-9]\+\)/\1/")"'/d;s/^[^ ]* [^ ]* \([^ ]*\).*/\1/;/[0-9]/!d' | xargs sudo apt-get -y purge

Ich habe eben >1GB damit freigeschaufelt. Das Original gibts hier, gefunden bei Christoph.

 

Natürlich solltet ihr überprüfen, was apt-get entfernen wird! Z.B. kams bei mir schon vor dass er build-essential entfernte.

26.08.13 Update
Die Befehlszeile war falsch und hat so nicht funktioniert. Der Blog hatte einige Sonderzeichen verschluckt. Sollte jetzt korrigiert sein.

Advertisements

Ganz einfach ein Verzeichniss per http sharen

Ich nutze diesen Einzeiler zwar unter Linux, aber ich denke er müsste unter Mac OS X und Windows (sofern python installiert ist) auch funktionieren:

python -m http.server

Dieser Befehl startet einen einfachen HTTP Server, der das aktuelle Verzeichnis, in dem der Befehl ausgeführt wurde, mitsamt allen Unterverzeichnissen auf Port 8000 zur Verfügung stellt. Ich erinnere mich leider nicht mehr, woher ich das habe. Und noch etwas: Mit Python 3 wird es so nicht mehr funktionieren (vgl. hier: „The BaseHTTPServer module has been merged into http.server in Python 3.0„).

Regelmässige MySQL Backups erstellen

Nach dem ich an dieser Stelle schon über MySQL Dumps geschrieben habe, möchte ich euch mal noch ein kleines Script vorstellen, mit dem ich auf diversen Servern regelmässige MySQL-Dumps mache:

#!/bin/sh
BACKDIR="/export/backup/mysql"
BACKEXT="sql.bz2"
OLDEXT="sql.bz2.old"

BACKFILE=backup

for i in $(mysqlshow -u backup | grep -v "^+" | grep -v Databases | cut -d " " -f 2 | grep -v information_schema);
do
    mysqldump -u backup --opt -Q $i | bzip2 -c > $BACKDIR/$i.neu
    if [ -f $BACKDIR/$i.$BACKEXT ] ; then
        cmp $BACKDIR/$i.neu $BACKDIR/$i.$BACKEXT > /dev/null 2>&1
        if [ $? != 0 ] ; then
            mv $BACKDIR/$i.$BACKEXT $BACKDIR/$i.$OLDEXT
            chmod 600 $BACKDIR/$i.$OLDEXT
        fi
    fi
    mv $BACKDIR/$i.neu $BACKDIR/$i.$BACKEXT
    chmod 600 $BACKDIR/$i.$BACKEXT
done

Das Script macht einzelne Dumps jeder Datenbank auf dem Server. Es setzt voraus dass es einen User namens „Backup“ gibt, der die passenden Rechte hat, und macht die Backups in /export/backup/mysql. Die Backups werden mit Bzip2 komprimiert und man hat immer den aktuellen ump plus den davor vorrätig (das Script rotiert die Backups durch).

Nutzt es auf eigene Gefahr 😉

Linux: MySQL-Dumps erstellen und wieder laden

Weil ich’s diese Woche gerade gebraucht habe, und selber hier nachsehen musste:

Einen MySQL-Dump erstellen:
/pfad/zu/mysqldump -u$DBUSER -p$DBPASSWD -h$DBHOST $DATABASE > $FILENAME

Was ich diese Woche dann benötigte: Einen MySQL Dump auch wieder einlesen:
/pfad/zu/mysql -u $DBUSER -p$DBPASSWD --database=$DATABASE < $FILENAME

Mehr dazu (z.B. UTF8 und MySQLHotCopy) gibts unter obigem Link, oder im MySQL 5.1 Referenzhandbuch.

Linux: Partitionen oder ganze Festplatten über das Netzwerk klonen oder sichern

Heute war ich wieder einmal in der Verlegenheit, dass ich die Festplatte eines Laptops auf die Festplatte eines anderen klonen musste. Bei diesen Gelegenheiten nutze ich gerne dd durch eine SSH-Verbindung.

Also flugs auf beiden Laptops eine gute Live-CD gebootet, und auf dem Ziellaptop den SSH-Server gestartet (nicht vergessen dem User ein Passwort zu geben, sonst klappt es mit dem Login nicht 😉 ).

Auf dem Quellrechner dann diesen Befehl eintippen:

dd if=/dev/sda | ssh 192.168.11.11 dd of=/dev/sda

Das klont die Festplatte sda auf die gleiche Platte auf dem entfernten Laptop mit der IP 192.168.11.11.

Man könnte das ganze natürlich auch noch komprimieren, zum Beispiel mit gzip. Das erspart Traffic, erhöht aber die Last auf den beiden Rechnern. Aber nehmen wir mal, wir möchten den Laptop sichern und ein Backup in einem komprimierten Image auf dem Server ablegen. Das ginge dann in etwa so:

dd if=/dev/sda | gzip -c9 | ssh username@backupserver:/zielverzeichnis/filename.dd.gz

Um die komprimierten Daten statt ins Image auf die Platte zu schreiben müssen sie natürlich wieder ausgepackt werden. Und wenn man sich den SSH-Tunnel sparen will, mit netcat gehts auch, aber einfach unverschlüsselt. Das müsste (ungetestet) etwa so laufen:

Auf der Zielmaschine einen Port öffnen und lauschen:
nc -l -p 9000 | dd of=/dev/sda

Auf dem Quellrechner:
dd if=/dev/sda | nc 192.168.11.11 9000

Last, but not least: Die Zielfestplatte müsste eigentlich mind. gleich gross sein wie die Quellfestplatte. Ist sie es nicht, kann man die Partition der Quellplatte vor dem kopieren passend verkleinern, oder nur gewisse Partitionen kopieren. In dem Fall kann man sfdisk benutzen um die Partitionstabelle zu kopieren (und zwischendrin zu editieren). In dem Fall kann es auch hilfreich sein, den einzeln zu kopieren, damit das Betriebsystem auch wieder startet… Der MBR ist in den ersten 446 Bytes der Festplatte:

dd if=/dev/sda of=/dev/sdb bs=446 count=1

Auch hier kann man natürlich wieder das Netzwerkspielchen machen 😉

SoftwareRaid: Einfacher Reperaturversuch bei degraded Raid

Wir nehmen für diesen Artikel mal an, dass wir ein Software Raid auf /dev/md1 haben, das aus /dev/sda3 und /dev/sdb3 besteht

Wenn man unter Linux ein Software-RAID hat, kann es vorkommen dass eine Platte oder Partition aus dem Array rausfällt, ohne das eigentlich ein Problem besteht. Das äussert sich möglicherweise in Form dieser Meldung:

„DegradedArray event had been detected on md device /dev/md1“

Als erstes sollte man sich den aktuellen Status ansehen:

mdadm -D /dev/md1

Wenn die problematische Platte oder Partition noch da ist, dann sollte man sie mal entfernen und wieder hinzufügen:

mdadm /dev/md1 -r /dev/sdb3 -a /dev/sdb3

Sollte sie schon weg sein, reicht ein Hinzufügen:

mdadm /dev/md1 -a /dev/sdb3

Nun noch sehen, ob das Raid wieder aufgebaut wird:

mdadm -D /dev/md1

Wenn das geschieht, kann man wieder zur Tagesordnung übergehen (das Raid aber noch etwas im Auge behalten). Wenn das aber nicht klappt, sollte man die betroffene Platte möglichst rasch austauschen!