it's turtles all the way down
Ubuntu
Images erstellen mit ddrescue
05. Jul
Einige Klassiker und ihre Schwächen
Nicht regelmäßig aber doch immer mal wieder ist man in der unschönen Situation, eine defekte CD, DVD oder gar Festplatte kopieren zu müssen. Wenn man ein Image des ganzen Mediums anlegen möchte, gibt es zunächst einmal das Tool dd. Von der Sicherung defekter Medien mit dd ist allerdings abzuraten: Zum einen ist dd nur sinnvoll zu verwenden, wenn verschiedene Parameter richtig gesetzt werden – ansonsten bricht dd beim ersten Fehler ab oder schreibt unbrauchbare Images. Zum anderen bietet dd aber schlicht einige Features nicht, die man bei der Datenrettung haben möchte: So lässt sich zwar angeben, wie viele Bytes jeweils in einem Rutsch gelesen werden sollen – wenn die Quelle aber defekte Sektoren hat, wird man diese Zahl eher gering ansetzen wollen. Dies führt aber dazu, dass der Auslesevorgang unnötig verlangsamt wird. Setzt man die Anzahl der gelesenen Bytes aber zu hoch, wird im Falle eines Lesefehlers auch gleiche diese (hohe) Anzahl an Bytes als defekt behandelt – es werden somit weniger Daten gerettet als möglich wäre. dd kann also nur schnell oder langsam – eine Unterscheidung zwischen defekten und lesbaren Sektoren gibt es nicht (ich bitte im Zweifelsfall um Verbesserung).
Eine Lösung ist das Programm dd_rescue (der Name des Paketes in den Paketquellen lautet ddrescue). Dieses Programm kopiert ein Medium, indem es zunächst große Blöcke einliest und kopiert – das ist schnell. Tritt nun ein Fehler auf, fällt dd_rescue in den Fehler-Modus zurück, in welchem lediglich kleine Blöcke gelesen werden – das ist langsamer, stellt aber sicher, dass nicht unnötig Daten als “defekt” verworfen werden. Treten über längere Zeit keine Fehler mehr auf, setzt dd_rescue die Blockgröße wieder hoch und beschleunigt somit die Datenrettung erneut. Damit eignet sich dd_rescue schon deutlich besser zur Rettung defekter Medien, ist aber – für sich genommen – noch nicht ganz optimal: Stellt man sich vor, dass eine Festplatte in der Mitte eine große Anzahl defekter Sektoren enthält, wird dd_rescue zunächst die lesbaren Daten am Anfang der Platte kopieren und dann viel Zeit dafür aufwenden, die defekten Sektoren in der Mitte im langsamen Fehler-Modus zu kopieren. Erst danach werden die lesbaren Daten am Ende der Platte kopiert. Es wird also viel Zeit dafür aufgewendet, möglicherweise ohnehin nicht mehr verwertbare Daten aus defekten Sektoren zu kopieren. Auf Grund der mechanischen Beanspruchung wird die Platte aber vielleicht schon beim aufwändigen und kleinteiligen Kopieren der defekten Sektoren endgültig das Zeitliche segnen. Die lesbaren Daten am Ende einer defekten Platte werden so unnötig gefährdet. Diese konzeptionelle Schwäche können erfahrene Nutzer eventuell umgehen, indem sie dd_rescue händisch mehrere Male laufen lassen und jeweils unterschiedliche Start-Positionen angeben oder die Rettung u.a. rückwärts laufen lassen. Auch zusätzliche Skripte wie dd_rhelp könnten das Verhalten von dd_rescue in dieser Hinsicht optimieren. Selbst der Autor von dd_rhelp empfiehlt aber inzwischen ein anderes Tool:
Antonio Diaz’ Programm ddrescue (ohne Unterstrich) aus dem Paket gddrescue ist eigentlich nichts anderes als eine konsequente Neukonzeption von dd_rescue, die die Funktionalität bietet, die dd_rescue nur in Ergänzung mit dem Skript dd_rhelp hatte: ddrescue liest zunächst das defekte Medium in großen Blöcken aus und schreibt die ausgelesenen Daten in das angegebene Ziel. Anders als dd_rescue liest ddrescue aber zunächst schnell über die defekten Sektoren hinweg und notiert das in einer Logdatei. Erst nachdem das ganze Medium so durchlaufen wurde, schaut sich ddrescue die defekten Sektoren erneut an: Es unterteilt die großen defekten Bereiche in mehrere kleine Bereiche und versucht dann diese kleinen “Häppchen” zu kopieren.
Durch dieses Vorgehen verwendet ddrescue zunächst seine Zeit darauf, die noch vorhandenen und lesbaren Daten eines Mediums zu retten. Erst am Ende dieses Vorgangs schaut sich ddrescue die womöglich ohnehin nicht mehr zu rettenden Daten an. Dieses Vorgehen kann gerade beim Kopieren defekter Festplatten ein enormer Vorteil sein: Jede Lesevorgang beansprucht die Mechanik zusätzlich und vermindert die Chance, wirklich die gesamte Festplatte auslesen zu können. Daher bietet es sich an, statt lange über defekte Sektoren zu rödeln zunächst die lesbaren Daten zu kopieren!
ddrescue hat aber noch andere Vorteile: Durch die Log-Datei kann eine Rettung jeder Zeit einfach abgebrochen und später fortgesetzt werden. Richtig genial (wenn auch sicher eher selten benötigt) ist dabei der Umstand, dass ddrescue auch ein funktionsfähiges Images aus mehreren defekten Datenträgern erstellen kann: Aus zwei DVDs mit identischem Inhalt kann ddrescue also ein funktionsfähiges Image erstellen! Auch im Alltag ist diese Funktion aber durchaus hilfreich: So kopiere ich meine defekten und verschmutzten DVDs zunächst mit ddrescue auf die Festplatte. Wenn dabei einige Datenbereiche nicht gelesen werden konnten, kann man seine DVD jetzt aus dem Laufwerk nehmen, (aggressiver) reinigen und es erneut versuchen: Durch die Logdatei “weiß” ddrescue genau, welche Daten beim ersten Durchlauf nicht kopiert werden konnten und schaut sich nur diese Bereiche auf der DVD erneut an. Bevor man seine DVD also mit Gewalt, Wasser und Schmierlappen bearbeitet: Erstmal das auslesen, was noch da ist und in einem zweiten Durchlauf die Lücken füllen.
Benutzung
ddrescue ist denkbar einfach zu benutzen. Beachten sollte man nur, dass man die Log-Datei bei jeder Verwendung selbst angeben muss. Gibt man keine Log-Datei an, wird auch keine angelegt und viele nützliche Features von ddrescue bleiben unzugänglich. Einen einfach Durchlauf startet man wie folgt:
sudo ddrescue -n /dev/sr0 rettungsimage.iso logdatei.log
/dev/sr0 ist dabei durch das zu rettende Laufwerk / Medium zu ersetzen. Das Image wird (naheliegend) in die Datei “rettungsimage.iso” geschrieben, das Log in “logdatei.log”. Dabei ist natürlich darauf zu achten, dass für jede Rettung eine eigene Logdatei verwendet wird.
Da ddrescue in seinem Log notiert, welche Blöcke defekt sind und welche defekten Blöcke nicht kopiert werden konnten, würde ddrescue bei einem weiteren Durchlauf erstmal gar nichts machen – im Log steht ja, dass die verbliebenen Blöcke nicht kopiert werden konnten. Um ddrescue zu einem neuen Versuch zu bewegen, müssen zunächst die defekten Sektoren als “ungetestet” markiert werden, um im Anschluss alle ungetesteten Blocks einem erneuten Test zu unterziehen:
sudo ddrescue -RT /dev/sr0 rettungsimage.iso logdatei.log
Jetzt wird ddrescue nur die vormals defekten Blöcke neu auslesen – und vielleicht retten können.
Fazit
Sicher lassen sich viele der beschriebenen Funktionen auch mit dd_rescue, dd_rhelp und sogar dd erreichen, wenn man die Tools gut zu bedienen weiß, viel Erfahrung im Umgang damit hat oder sich entsprechende Skripte geschrieben hat. ddrescue besticht aber dadurch, dass es all dies aus einer Hand bietet und keine (u.U. langsamen) Skript-Erweiterungen benötigt. Für eine einfache Datenrettung sind keine zusätzlichen Angaben durch den Benutzer nötig und die Überlegung, zunächst erstmal alle lesbaren Daten zu retten bevor man die defekten Sektoren auf Überlebende abklopft, ist sicher in sehr vielen Fällen die sinnvollere Strategie als das sequentielle Vorgehen.
Weitere Informationen
gibt es…
- …auf der sehr ausführlichen Info-Seite von ddrescue,
- …in diesem Artikel,
- …auf der Seite von dd_rhelp und
- …in diesem Foren-Beitrag.
Hinweis
stfischr hat mich auf meine vorschnelle Editierung des Artikels hingewiesen, weswegen ich die ursprüngliche Version wiederhergestellt habe.
In der vorherigen Version des Artikels hatte ich behauptet, dass eine Rettung zunächst mit dem Schalter “-n” angestoßen werden sollte und erst in einem zweiten Durchgang darauf verzichtet werden könne. So wie sich die Sache mir jetzt darlegt, ist das nicht zutreffend und ein Durchlauf ohne irgendwelche Schalter erfüllt bereits seinen Zweck. An dieser Stelle nochmal besten Dank an stfischr für die Korrektur!
Archos Vision und Ubuntu
07. Jun
Der neue MP3-Player im Hause hört auf den schönen Namen “Archos Vision A14VG” und ist ein eher kleiner und leichter Vertreter seiner Zunft. Nachdem mir im Laden versichert wurde, dass sich das Gerät ganz normal ins Dateisystem einbindet, musste ich hier aber feststellen, dass genau das nicht der Fall ist.
Allerdings wurde das Gerät prinzipiell als Laufwerk erkannt, es gab einen neuen Eintrag unter “/dev/sdb” was darauf schließen ließ, dass etwas mit der Formatierung / Partitionierung des Players nicht stimmte. GParted bestätigte diese Vermutung, so dass ich mit dd eine Sicherheitskopie von /dev/sdb angefertigt und den Archos Vision mit Fat32 neu formatiert habe.
Wie erwartet legt das Gerät beim nächsten Start automatisch die erforderliche Verzeichnisruktur an, so dass in dieser Hinsicht keine Probleme entstehen. Danach wurde der Archos ohne Probleme eingebunden und ließ sich mit Musik bespielen.
Ich übernehme natürlich keine Gewähr dafür, dass Neuformatierung euren Player nicht in einen (sehr leichten) Briefbeschwerer verwandelt. Aber für mich war das Problem damit behoben.
Abstürzende Mediaplayer
10. Apr
Unter verschiedenen Linux-Distributionen kann es unter bestimmten Umständen dazu kommen, dass Mediaplayer abstürzen, wenn sie in den Vollbildmodus geschaltet werden. Teilweise passiert das sogar, wenn man das Fenster des Mediaplayer nur vergrößert.
Üblicherweise spuckt die Konsole eine Fehlermeldung wie diese aus:
BadAlloc (insufficient resources for operation)
Das Problem tritt anscheinend nur in Verbindung mit Compiz auf: Das Abschalten der Fenstereffekte kann das Problem also beheben. Wer auf wackelige Fenster & Co nicht verzichten möchte, kann das Problem beheben, indem er die Videoausgabe verändert.
Für den VLC:
Unter Extras->Einstellungen->Video die Option Ausgabe auf “X11-Videoausgabe” ändern.
Für Totem und viele mehr:
Programme, die auf GStreamer basieren (Totem etwa), lassen sich über das Programm gstreamer-properties konfigurieren. Im Reiter Video wählt man als Plugin im Bereich Default Output “X Window System (Kein XV)”.
Danach sollten die Videos in den genannten Programmen problemlos mit Compiz harmonieren.
Upload aus dem Kontext-Menü
05. Apr
Dieses Skript lädt die ausgewählten Dateien auf einen FTP Server. Angepasst werden müssen:
FTP-Server: Der zu nutzende FTP-Server
Server: Der gleiche Server – über HTTP
sowie
BENUTZERNAME (selbsterklärend).
Das Passwort wird jeweils vorher abgefragt. Wie zuvor wird das Paket zenity benötigt, ebenso das Paket wput.
#!/bin/sh paths=$NAUTILUS_SCRIPT_SELECTED_FILE_PATHS selected=$NAUTILUS_SCRIPT_SELECTED_URIS cur=$NAUTILUS_SCRIPT_CURRENT_URI if ! PASS=$(zenity --entry --hide-text --text "Bitte geben Sie das Passwort ein:" --title "Und das Passwort?"); then exit; fi for x in $selected do name=$(echo $x|sed 's/file:\/\///') timestamp=$(date +%s.%N) #lastchar=$(echo $name|tail -c 5) nn=$(echo $name|awk -F/ '{print $NF}') output="$timestamp-$nn" wput "$name" ftp://BENUTZERNAME:$PASS@FTP-SERVER/bilder/$output error=$? uri=http://SERVER/bilder/$output if [ $error != 0 ] then zenity --info --text "Fehler beim Hochladen der Datei $name" --title "Fehler" else zenity --info --text "Datei $name erfolgreich hochgeladen\nUrl:\t $uri" --title "Abgeschlossen" fi done
Wie schon zuvor gilt: Abzulegen ist das Ganze in einer ausführbaren Datei im Verzeichnis ~/.gnome2/nautilus-scripts.
FourCC mit Nautilus-Skript ändern
04. Apr
#!/bin/sh paths=$NAUTILUS_SCRIPT_SELECTED_FILE_PATHS selected=$NAUTILUS_SCRIPT_SELECTED_URIS cur=$NAUTILUS_SCRIPT_CURRENT_URI fourcc=$(zenity --entry --text "Geben sie den neuen FOURCC ein") for x in $selected do name=$(echo $x|sed 's/file:\/\///') cfourcc -u $fourcc $name done
Abzulegen ist das Ganze in einer ausführbaren Datei im Verzeichnis ~/.gnome2/nautilus-scripts. Benötigt werden die Pakete cfourcc und zenity
pyConnect
03. Apr
Da ich in letzter Zeit doch öfter mal meinen Router neu starten musste, habe ich mich nach Möglichkeiten umgesehen, dies automatisiert zu tun. Auf dieser Seite finden sich dazu sehr einfache Skripte für dutzende von Routern.
Mit etwas Python drumherum erhält man auch direkt Rückmeldung darüber, in welchem Zustand sich die Verbindung gerade befindet:
#!/usr/bin/env python # coding:utf-8 import subprocess from pynotify import init, Notification import sys IP="192.168.2.123" pwd="PASSWORD" user="USERNAME" # For information how to restart your router, # visit: # # http://www.paehl.de/reconnect init("PyConnect") class main(object): def __init__(self): self.notification = None def go(self): self.notify(message="Loging in") subprocess.Popen('curl -sS "http://%s/cgi-bin/login.exe" -d "user=%s&pws=%s" 1>/dev/null' % (IP, user, pwd), shell=True).wait() self.notify(message="Disconnecting") subprocess.Popen('curl -sS "http://%s/cgi-bin/statusprocess.exe" -d "pvc=0&cur_if=11&disconnect.x=102&disconnect.y=5&disconnect=Reconnect" 1>/dev/null' %IP , shell=True).wait() self.notify(message="Connecting") subprocess.Popen('curl -sS "http://%s/cgi-bin/statusprocess.exe" -d "pvc=0&cur_if=3&connect.x=47&connect.y=10&connect=+Verbinden+" 1>/dev/null' % (IP), shell=True).wait() self.notify(message="Done") def notify(self, title="pyConnect", message=""): if not self.notification: self.notification = Notification(title, message) else: self.notification.update(title, message) self.notification.show() prog = main() prog.go()
GStreamer-Videorekorder
15. Mrz
Ich beschäftige mich gerade wieder etwas eingehender mit GStreamer (Eintrag dazu folgt noch). Dabei reizt mich vor allem die Idee, ein kleines TV-Programm (wie xdtv oder xawtv) mit GStreamer und Python zu implementieren.
Um mir keine unnötige Arbeit zu machen, habe ich mich erstmal umgesehen, ob es derartiges schon gibt – und tatsächlich: GStreamer selbst listet auf seiner Seite ein Programm namens “Cupid” auf, das bereits einen TV-Rekorder auf GStreamer-Basis umsetzt. Allerdings ist der dort gesetzte Link tot und auch auf der Seite des Autoren gibt es keinen Hinweis mehr auf das Programm. Cupid 0.2 war wohl die letzte veröffentlichte Version, sie kompiliert auf meinem Ubuntu 9.10 allerdings nicht mehr und scheint noch von GStreamer 0.8 abzuhängen – keine Ahnung, ob das einfach anpassbar ist. Hier gibt es ein kleines aber verheißungsvolles Bildschirmfoto des Programms.
Also bleibt das Vorhaben “PyTV” weiterhin reizvoll – oder kennt jemand bereits Umsetzungen davon?
Update:
Ein interessantes Python/GStreamer-Projekt habe ich noch entdeckt: LightMyth – der Versuch, MythTV “leichtgewichtig” zu gestalten.
Ubuntu “light” Thema
09. Mrz
Das neue Ubuntu Theme “Light” ist mittlerweile als Update für Lucid verfügbar. Wer schon mit Karmic einen Blick riskieren möchte, sollte die folgenden beiden Pakete herunterladen und installieren:
http://packages.ubuntu.com/de/lucid/light-themes
http://packages.ubuntu.com/de/lucid/ubuntu-mono
Danach ist das neue Thema verfügbar. Ich kann natürlich nicht gewährleisten, dass ihr damit nicht versehentlich euren Rechner schrottet
.
Letzte Kommentare