Anleitung: Das Verzeichnis "/var" inkl. aller logs und/oder mehrere Verzeichnisse auf einen USB-Stick auslagern.

  • Das Verzeichnis VAR inkl. allen Logs auf einen USB-Stick auslagern.



    Jetzt werde sich sicher ein paar Leute fragen warum ich das machen sollte. Das wäre eine berichtigte Frage. Wirklich notwendig ist das nicht. Es geht mir nur darum wie man Lebensdauer der im Pi eingestzten SD-Karte verlängern kann. Wie sich die meisten wissen werden in dem "/var" Verzeichnis unter anderem alle Log Dateien geschrieben und zu viele Schreibvorgänge zerstören irgendwann die SD-Karte. Darum ist es sinnvoll die Dateien in denen wirklich viel geschrieben wir entweder auszulagern oder die Schreibvorgänge enorm zu reduzieren. Bei dem reduzieren habt Ihr natürlich den Nachteil das nicht alles protokolliert wird was eine Fehlersuche enorm erschwert bzw. unmöglich macht. Darum ist dann sinnvoll diese Dateien auszulagern.
    So nun aber genug geschrieben.



    1.) Als erstes müssen wir den Namen des USB-Sticks herausfinden.


    ls -Al /dev/disk/by-uuid


    Nun wissen wir das der Stick sda1 (Ich nehme jetzt einfach mal an der USB-Stick heißt "sda1") heißt. Zusätzlich sehen wir auch die UUID des Sticks, diese benötigen wir später noch.


    2.) Als nächstes formatieren wir den USB-Stick mit dem filesystem ext4


    sudo mkfs.ext4 /dev/sda1



    Variante1


    Als erstes wechseln wir zu dem Benutzer root.


    sudo su


    3.) Dann legen wir ein Verzeichnis an und mounten den USB-Stick auf diese Verzeichnis


    mkdir /mnt/var
    mount /dev/sda1 /mnt/var


    4.) Wenn das erledigt ist wechseln wir in den „single-user“ Modus. Damit verhindern wir das irgendetwas gerade in das Verzeichnis „var“ schreibt.


    init 1


    5.) Nun wechseln wir in das Verzeichnis „var“ und kopieren dies auf den USB-Stick.


    cd /var
    cp -ax * /mnt/var


    6.) Jetzt werden wir den Ordner „var“ umbenennen, damit wir eine Sicherungskopie dieses Ordners haben und erstellen hier wieder das Verzeichnis „var“ neu.


    cd


    sudo mv /var /var.old
    mkdir /var


    7.) Wir hängen den USB-Stick wieder aus und mounten als nächstes dann den Stick neu aber auf das neue "var" Verzeichnis.


    umount /dev/sda1
    mount /dev/sda1 /var


    8.) Damit das zukünftig automatisch nach jedem Bootvorgang passiert schreiben wir folgendes in die /etc/fstab:


    sudo nano /etc/fstab

    UUID=Hier muss Eure UUID stehen /var ext4 defaults,noatime,nodiratime,relatime 0 2


    Die UUID haben wir vorhin ausgelesen mit dem Befehl.


    ls -Al /dev/disk/by-uuid


    Ergänzt die Fehlenende UUID mit Eurer UUID in der /etc/fstab:


    9.) Als letztes starten wir den Pi neu.
    sudo reboot



    Eine kurze Erklärung warum ich hier die UUID nehme und nicht den Namen „sda1“.


    Der Laufwerksnamen „sda1“ ist dynamisch, das soll heißen wenn Ihr später mal noch einen USB-Stick an den Pi anschliest kann es passieren das der neue Stick den Laufwerksnamen „sda1“ bekommt. Das wäre fatal. Darum ist es immer besser man benennt den Stick mit der UUID. Diese UUID ist einmalig und kommt mit Sicherheit nicht ein zweites Mal vor.



    Das war es schon.


    P.S.
    Das kann man natürlich auch noch mit anderen Verzeichnissen machen.



    Variante2


    3.) Auch hier wechseln wir zu root.
    sudo su


    4.) Wir binden verschiedene Verzeichnisse auf der SD-Karte an verschiedene Verzeichnisse auf den USB-Stick.
    Wir verwenden die Schritte 1 und 2 von oben ebenfalls.


    5.) Dann legen wir ein Verzeichnis an und mounten den USB-Stick auf diese Verzeichnis


    mkdir /mnt/binds
    mount /dev/sda1 /mnt/binds


    6.) Wenn das erledigt ist wechseln wir in den „single-user“ Modus. Damit verhindern wir das irgendetwas gerade in das Verzeichnis „var“ schreibt während wir den Ordner kopieren und umbenennen.


    init 1


    7.) Nun kopieren wir das Verzeichnis "var" mitsamt dem Inhalt auf den USB-Stick.


    cd /var
    cp -ax * /mnt/binds


    8.) Jetzt werden wir den Ordner „var“ umbenennen, damit wir eine Sicherungskopie dieses Ordners haben und erstellen hier wieder das Verzeichnis „var“ neu.cd


    mv /var /var.old
    mkdir /var


    9.) Als letztes starten wir das System neu:


    reboot


    Das kann man dann auch mit anderen Verzeichnissen machen, tauscht dafür nur immer den Namen der Verzeichnisse hier aus der Anleitung aus.


    Hier mal ein Beispiel wie die /etc/fstab aussehen könnte:


    UUID=Hier muss Eure UUID stehen /mnt/binds ext4 noatime,nodiratime,relatime 0 2


    # Binds
    /mnt/binds/var var none bind 0 0
    /mnt/data/home home none bind 0 0
    /mnt/data/usr usr none bind 0 0


    Es gibt auch noch eine 3. Variante hier werden dann Symlinks gesetzt. Diese werde ich zu gegebener Zeit noch mit hier eintragen.
    Das war es auch schon wieder.


    Als Empfehlung für einen SLC USB-Stick kann ich Euch den Mach X-treme 8GB empfehlen.
    Mach-Xtreme


    Viel Spass.

  • Moin.


    Danke für die ausführliche Anleitung


    Funktioniert das auch mit dem Kernel Log? Bzw. was passiert mit /var/log/messages wenn der Stick verbunden wird? Wird die dann auf dem Stick weiter geschrieben?

  • Moin Andy,
    das Kernel log wird genauso wie alle anderen auf den USB Stick geschrieben. Hier ist das komplette Verzeichnis nur noch über den USB-Stick erreichbar somit wird nichts mehr statisch auf die SD-Karte geschrieben.


    Deine 2. Frage verstehe ich nicht ganz. Ich vermute das Du meinst ob das mounten des Sticks in das log massages geschrieben wird.
    Hmmm, das ist eine gute Frage. Ich bin mir nicht ganz sicher aber der Stick wird während dem Bootvorgang gemountet, den Dateisystemcheck habe ich durch die 0 2 in der fstab mit aktiviert. Währen dem Bootvorgang merkt man auch das der Stick gemountet und gleich fleißig beschrieben wird. Der Bootvorgang verzögert sich dann so um ca. 2 - 3 sek. Von daher nehme ich an das /var/log/massages und kern.log nur verzögert geschrieben wird. Ich schaue nochmal genau hin und schreibe dir es dann.


    Interesant fand ich heute Morgen das mir "blkid" eine andere UUID zeigte als "ls -Al /dev/disk/by-uuid" und ich habe natürlich die falsche UUID in der /fstab drin stehen gehabt und mein System ist natürlich hängen geblieben. Deswegen hatte ich die Anleitung kurz herausgenommen weil ich dachte das etwas mit der Anleitung nicht stimmt.
    Naja nun sollte alles laufen.


    @AndyGR42
    Ich habe dir mal mein massages log und kern.log mit angehängt.

  • Moin.


    Ok, ich hätte vermutet, vor dem mount wird auf die SD Karte und dann auf den Stick geschrieben. Das wäre jetzt kein Beinbruch gewesen, aber etwas unpraktisch bei der Fehlersuche. Wenn der IO gepuffert und nach dem mount geschrieben wird ist das natürlich umso besser. Ist ja auch einigermaßen logisch. Bei einem Read Only Datenträger (DVD boot) werden die Logs ja auch sauber in eine RAM Disk geschrieben. Die muss ja auch erst erstellt werden.