Es geht voran…

Der lernstick wird immer häufiger auch auf älteren Computern eingesetzt. Eine Herausforderung bei älteren Geräten ist der meist sehr kleine Arbeitsspeicher. Wenn der zu klein ist und grössere Programme gestartet werden, kann es passieren, dass der Computer einfach hängenbleibt oder komplett abstürzt. Um das zu verhindern, habe ich vor kurzem ein kleines Startskript erstellt, das beim Hochfahren überprüft, ob das System genügend Hauptspeicher hat und im Notfall eine Auslagerungsdatei erstellt. Damit es optisch auch etwas ansprechend aussieht, wollte ich, dass bei der Erstellung der Auslagerungsdatei dem Benutzer via dialog eine Fortschrittsanzeige präsentiert wird.

Das war deutlich schwieriger als ich zunächst vermutete. Das Programm der Wahl für die Erstellung einer Auslagerungsdatei ist dd. Leider bietet dd keine einfache Schnittstelle, um dessen Fortschritt abzufragen. Auch Google half nicht viel weiter. Alle Beispiele, die ich im Netz zu dem Thema gefunden hatte, funktionierten nicht. Also habe ich mich selbst in die Materie vertieft und eine funktionierende Variante erstellt:

#!/bin/bash
COUNT=500000
(
LC_ALL=C dd if=/dev/zero of=/dev/null bs=1M count=${COUNT} 2>&1 | while read LINE
do
    echo ${LINE} | grep -q "records out$"
    if [ $? -eq 0 ]
    then
        echo "$((${LINE%+*}*100/${COUNT}))" | dialog --gauge "dd progress..." 6 45
    fi
done
)&
sleep 1
DD_PID=$(pidof dd)
while kill -USR1 ${DD_PID} 2>/dev/null
do
    sleep 1
done

Falls jemand irgendwann über das gleiche Problem stolpert, darf er sich also gerne an obigem Beispiel bedienen.

Schreibe einen Kommentar

Trage deine Daten unten ein oder klicke ein Icon um dich einzuloggen:

WordPress.com-Logo

Du kommentierst mit Deinem WordPress.com-Konto. Abmelden / Ändern )

Twitter-Bild

Du kommentierst mit Deinem Twitter-Konto. Abmelden / Ändern )

Facebook-Foto

Du kommentierst mit Deinem Facebook-Konto. Abmelden / Ändern )

Google+ Foto

Du kommentierst mit Deinem Google+-Konto. Abmelden / Ändern )

Verbinde mit %s

%d Bloggern gefällt das: