Wie funktioniert dd genau? Wie kann dd auf die Festplatte zugreifen und das Dateisystem dabei ignorieren?
-
Benutzt dd dazu Kernelaufrufe?
Wenn ja, welche sind das genau?Und braucht es dazu keine root Rechte?
-
Wie dein Name schon sagt, wird auf Dateien in /dev zugegriffen.
Jede Datei ist mit einem Gerätetreiber assoziiert. Im Falle von z.B. /dev/hda1 ist es ein Treiber für ein "character device", das eine gewünschte Anzahl von Bytes ab einem gewünschten Offset lesen oder schreiben kann. Die Rechte werden auch über die Zugriffsrechte für diese "Datei" bestimmt.Der Treiber weiß dann, was gemeint ist, wenn jemand 512 Bytes von der Datei "/dev/hda1" ausliest. Er weiß, dass er er das Auslesen des Bootblock von der Partition der ersten IDE Festplatte zu veranlassen und sie dem Aufrufer in den Buffer zu kopieren hat.
Die Aufrufe von Sicht des Userspace-Programms DD sind die normalen Lesebefehle der runtime library (z.B. der GNU libc).
-
GNU-Fan schrieb:
Wie dein Name schon sagt, wird auf Dateien in /dev zugegriffen.
Jede Datei ist mit einem Gerätetreiber assoziiert. Im Falle von z.B. /dev/hda1 ist es ein Treiber für ein "character device","block device".

GNU-Fan schrieb:
das eine gewünschte Anzahl von Bytes ab einem gewünschten Offset lesen oder schreiben kann. Die Rechte werden auch über die Zugriffsrechte für diese "Datei" bestimmt.
Der Treiber weiß dann, was gemeint ist, wenn jemand 512 Bytes von der Datei "/dev/hda1" ausliest. Er weiß, dass er er das Auslesen des Bootblock von der Partition der ersten IDE Festplatte zu veranlassen und sie dem Aufrufer in den Buffer zu kopieren hat.
Die Aufrufe von Sicht des Userspace-Programms DD sind die normalen Lesebefehle der runtime library (z.B. der GNU libc).
-
GNU-Fan schrieb:
Wie dein Name schon sagt, wird auf Dateien in /dev zugegriffen.
Jede Datei ist mit einem Gerätetreiber assoziiert. Im Falle von z.B. /dev/hda1 ist es ein Treiber für ein "character device", das eine gewünschte Anzahl von Bytes ab einem gewünschten Offset lesen oder schreiben kann. Die Rechte werden auch über die Zugriffsrechte für diese "Datei" bestimmt.Der Treiber weiß dann, was gemeint ist, wenn jemand 512 Bytes von der Datei "/dev/hda1" ausliest. Er weiß, dass er er das Auslesen des Bootblock von der Partition der ersten IDE Festplatte zu veranlassen und sie dem Aufrufer in den Buffer zu kopieren hat.
Die Aufrufe von Sicht des Userspace-Programms DD sind die normalen Lesebefehle der runtime library (z.B. der GNU libc).
Danke für die ausführliche Erklärung.
Aber jetzt habe ich doch noch ne Frage zum Zugriff über das Dateisystem.
Wenn es erst einen Charakterdevice Treiber (oder eben Blockdevice Treiber) gibt und dann oben drauf noch einen Dateisystemtreiber, wird dann der Dateizugriff darüber Programm -> Dateisystemtreiber -> Ch/Block-Devicetreiber dann nicht ausgebremst?
Das ist doch doppelt gemoppelt.Und ist ein Dateisystemtreiber dann ein Programm das im Userspace läuft?
Und wie kann ich meinen eigenen Dateisystemtreiber für Linux programmieren?
Und zum Schluß noch eine letzte Frage.
Wenn ich mit dd ein Backup von einer /dev/sda Datei mache.
Entspricht dieses Backup dann genau 1:1 den Nullen und Einsen, so wie sie auf der Festplatte sind oder kann es sein, daß dd eine Partition nur unvollständig kopiert?
-
Wenn es erst einen Charakterdevice Treiber (oder eben Blockdevice Treiber) gibt und dann oben drauf noch einen Dateisystemtreiber, wird dann der Dateizugriff darüber Programm -> Dateisystemtreiber -> Ch/Block-Devicetreiber dann nicht ausgebremst?
Ausgebremst nicht. Aber der Zugriff ist natürlich langsamer, wenn du das meinst. Dies ist aber klar, da das Dateisystem ja eine höhere Ordnungsstruktur darstellt, als das Blockdevice. Wenn es kein Dateisystemtreiber gäbe, dann müssten die meisten Programme diese Logik ja selbst implementieren.
Das ist doch doppelt gemoppelt.
Nein, das eine ist der physische Zugriff und das andere die Struktur des Dateisystems. Sind zwei verschiedene Sachen!
Und ist ein Dateisystemtreiber dann ein Programm das im Userspace läuft?
Unter Linux ist der Dateisystemtreiber in der Regel im Kernel. Aber mit Fuse ist es zB auch möglich Dateisystemtreiber für den Userspace zu schreiben.
Und wie kann ich meinen eigenen Dateisystemtreiber für Linux programmieren?
http://www.kernel.org/doc/htmldocs/filesystems.html
http://www.kernel.org/doc/
-
dd usw. schrieb:
Aber jetzt habe ich doch noch ne Frage zum Zugriff über das Dateisystem.Wenn es erst einen Charakterdevice Treiber (oder eben Blockdevice Treiber) gibt und dann oben drauf noch einen Dateisystemtreiber, wird dann der Dateizugriff darüber Programm -> Dateisystemtreiber -> Ch/Block-Devicetreiber dann nicht ausgebremst?
Das ist doch doppelt gemoppelt.
-
dd usw. schrieb:
Und zum Schluß noch eine letzte Frage.
Wenn ich mit dd ein Backup von einer /dev/sda Datei mache.
Entspricht dieses Backup dann genau 1:1 den Nullen und Einsen, so wie sie auf der Festplatte sind oder kann es sein, daß dd eine Partition nur unvollständig kopiert?DD kann zum Backup verwendet werden. Man kann also eine baugleiche, kauffrische Platte hernehmen und das Backup drüberbügeln und sollte dann einen 1:1 Kopie haben. (Hab ich nie probiert außer für eine CD, also Vorsicht
).Allerdings, wie gesagt, ist /dev/... eine gewisse Abstraktionsschicht. Denke z.B. an ein RAID0 System aus mehreren Festplatten. Die ersten 512 Bytes liegen auf der ersten Platte, die nächsten dann auf der zweiten, ...
Dann ist ja die Zuordnung nicht mehr wirklich 1:1.
-
Ok, habe verstanden.
Ich müßte also jede Partition einzeln Sichern und nach der Reihe wieder mit dd zurückspielen.
Aber wie greife ich auf den Bootsektor zu?
Der ist ja nicht auf der ersten Partition, z.b. /dev/sda1 sondern
IMO auf /dev/sdaMüßte ich dann nicht auf /dev/sda zugreifen?
Und wenn ich das tue, dann könnte ich doch auch genauso gut ein Backup von /dev/sda machen und hätte dann schon alle Partitionen.Die Frage wäre jetzt halt nur noch, was mache ich, wenn meine neue Festplatte viel größer ist als die alte?
Wie weiß das OS Bescheid, daß ich hinten noch mehr Platz habe?
-
dd usw. schrieb:
Müßte ich dann nicht auf /dev/sda zugreifen?
Und wenn ich das tue, dann könnte ich doch auch genauso gut ein Backup von /dev/sda machen und hätte dann schon alle Partitionen.Richtig.
dd usw. schrieb:
Die Frage wäre jetzt halt nur noch, was mache ich, wenn meine neue Festplatte viel größer ist als die alte?
Wie weiß das OS Bescheid, daß ich hinten noch mehr Platz habe?Deswegen gibt es ja die Dateisysteme. Damit man solchen Sachen abstrahiert. Man kann den Keks eben nicht essen und trotzdem behalten :xmas2:
-
dd usw. schrieb:
Wie weiß das OS Bescheid, daß ich hinten noch mehr Platz habe?
Das arme OS kriegt es in diesem Fall nicht mit, dass da noch mehr Platz wäre. Du musst dort manuell eine Partition anlegen, formatieren und in das Dateisystem einbinden.