Linux

I/O Analyse

Die Festplatten in meinem Dateiserver sind so eingestellt, dass sie nach einer bestimmten Dauer an Inaktivität (60 Sekunden5 Minuten) in Standby wechseln. Seit einiger Zeit sind sie jedoch sehr häufig aktiv bzw. fahren gar nicht mehr herunter. Und da auf dem Server einige Dienste und VMs laufen, konnte ich nicht gleich den Übeltäter finden.
Dann habe ich aber herausgefunden, dass iotop auch einen Batchmodus besitzt, um das I/O Verhalten mitzuloggen:

iotop -tobqqq

(Standardmäßig überwacht es das ganze System, man kann damit aber auch einzelne Prozesse oder nur bestimmte Benutzer beobachten)

Es hat sich herausgestellt, dass Samba (bzw. der nmbd) verantwortlich für die vielen Zugriffe war (der noch gar nicht lange darauf läuft, hätte ihn schon früher verdächtigen müssen Eye-wink). Mit strace -p $pid und /proc/$pid/fd/ konnte ich dann genau feststellen, auf welche Dateien nmbd ständig zugreift. Da es nur ein paar unwichtige Datenbanken in /var/run/samba waren, habe ich das Verzeichnis einfach in den RAM verschoben. Problem gelöst! Smiling

EncFS automatisch mounten

EncFS verschlüsselt Verzeichnisse über FUSE. Es ermöglicht normalen Benutzern Dateien an beliebigen Orten sicher abzulegen, ohne dass eine verschlüsselte Partition vorhanden sein muss.

Wie man ein Verzeichnis aber über /etc/fstab automatisch einhängen und dabei eine Schlüsseldatei zum Entschlüsseln verwenden kann war etwas schlecht dokumentiert.
Deshalb hier kurz zusammengefasst:

  1. Schlüssel generieren:
    dd if=/dev/urandom of=/path/to/keyfile bs=1k count=2
  2. EncFS anlegen:
    encfs --extpass="cat /path/to/keyfile" /encrypted /decrypted
  3. Wrapperscript anlegen:
    #!/bin/sh
    KEYFILE=/path/to/keyfile
    /usr/bin/encfs --extpass="cat $KEYFILE" $*

    (es können auch weitere Parameter wie --public angegeben werden)

  4. In /etc/fstab eintragen:
    /path/to/encfs_wrapper.sh#/encrypted /decrypted fuse defaults,kernel_cache 0 0

Wichtig: Der Schlüssel sollte natürlich an einer sicheren Stelle gespeichert werden, sonst macht das EncFS wenig Sinn. Bei mir liegt er auf einer verschlüsselten Partition, die vorher schon per Passphrase entsperrt wurde.

SSHFS

OpenSSH ist ja bekanntlich ein ziemlich cooles Werkzeug. Mit scp / sftp lassen sich darüber sogar auf sichere Weise Dateien übertragen.
SSHFS ist eine darauf aufbauende Erweiterung von FUSE, die es ermöglicht, entfernte Verzeichnisse lokal einzubinden ohne dass der Server speziell konfiguriert werden muss (es wird nur OpenSSH mit aktiviertem sftp-Subsystem benötigt, was standardmäßig der Fall ist). Es ist damit eine gute Alternative zu NFS, die auch problemlos über das Internet funktioniert und Authentifizierung und Verschlüsselung gleich mitliefert.

Ein Verzeichnis einzubinden ist relativ einfach (wobei der ausführende Benutzer FUSE-Rechte benötigt):

sshfs user@server:/absolute/remote/path /local/path -o options

Der Parameter -o ist optional und gibt einem feinere Einstellungsmöglichkeiten wie z.B. schreibgeschütztes Einbinden (ro) oder performantere/schwächere Datenverschlüsselung (Cipher=arcfour).
Das Verzeichnis lässt sich mit fusermount -u /local/path wieder aushängen.

Probleme hatte ich damit bisher nur, wenn die Verbindung abgebrochen ist und trotzdem noch aufs Verzeichnis zugegriffen wurde (was zum Glück nicht oft passiert), dann blockieren die Prozesse für längere Zeit oder werden zu Zombies Smiling (ähnliche Probleme gibt es aber auch bei NFS).

Debian Kernelpakete erstellen

Anstatt einen selbstkonfigurierten Kernel über den üblichen Weg (make && make modules_install) zu installieren, kann man sich mit make deb-pkg ein Debianpaket bauen lassen. Das erspart einem auch noch weiteren Aufwand wie die Erzeugung des initramfs und dem Anlegen von Bootmanagereinträgen, da sich dann dpkg darum kümmert.

Wake on LAN unter Debian

Vor einiger Zeit hat Wake on LAN (WoL) unter Debian problemlos funktioniert. Anscheinend gab es aber Änderungen am Powermanagement, sodass die Netzwerkkarte beim Herunterfahren jetzt auch komplett abgeschaltet wird.
Um die Netzwerkkarte aktiv zu halten genügt der folgende Eintrag in der Datei /etc/default/halt:

NETDOWN=no

Die Netzwerkkarte selbst bringt man mit ethtool in den WoL-Modus. Damit lässt sich auch einstellen ob der Rechner bei beliebiger Netzwerkaktivität hochgefahren wird oder nur bei Empfang eines Magic Packets. Mit folgendem Eintrag in der /etc/network/interfaces wird WoL (mit Magic Packet Trigger) für das angegebene Device aktiviert:

iface eth0 inet dhcp
        pre-down ethtool -s eth0 wol g

Danke ans VDR-Wiki für die Hinweise [1] [2].

Inhalt abgleichen