Warum conv = notrunc beim Klonen einer Platte mit dd verwenden?
Wenn man sich so Klonen Sie eine ganze Festplatte zu einer anderen auf dem web, finden Sie etwas wie das:
dd if=/dev/sda of=/dev/sdb conv=notrunc,noerror
Ich verstehe zwar die noerror
bin ich immer eine harte Zeit zu verstehen, warum Leute denken, dass notrunc
erforderlich ist, für die "Integrität der Daten" (wie ArchLinux Wiki Staaten, zum Beispiel).
In der Tat, ich bin damit einverstanden, dass, wenn Sie das kopieren einer partition auf eine andere partition auf einer anderen Festplatte, und Sie wollen nicht zu überschreiben die gesamte Festplatte, nur eine partition. In diese Fall notrunc
nach dd ' s manual-Seite, ist, was Sie wollen.
Aber wenn Sie das Klonen einer ganzen Festplatte, was bedeutet notrunc
für Sie ändern? Nur Zeit-Optimierung?
InformationsquelleAutor der Frage Undo | 2013-12-11
Du musst angemeldet sein, um einen Kommentar abzugeben.
TL;DR-version:
notrunc
ist nur wichtig, um zu verhindern, dass das abschneiden beim schreiben in eine Datei. Dies hat keine Auswirkung auf ein block-Gerät wiesda
odersdb
.Educational version
Schaute ich in das coreutils Quellcode enthält dd.c zu sehen, wie
notrunc
verarbeitet wird.Hier ist das segment der code, ich freu mich auf:
Wir können hier sehen, dass wenn
notrunc
ist nicht angegeben, dann wird die Ausgabedatei geöffnet mit O_TRUNC. Schauen Sie unten an, wieO_TRUNC
behandelt wird, können wir sehen, dass eine normale Datei wird abgeschnitten, wenn geschrieben.O_TRUNC
Auswirkungen der
notrunc
/O_TRUNC
ichIm folgenden Beispiel beginnen wir, indem Sie
junk.txt
Größe von 1024 bytes. Als Nächstes schreiben wir 512 bytes an den Anfang der es mitconv=notrunc
. Wir können sehen, dass die Größe gleich bleibt bei 1024 bytes. Schließlich versuchen wir es ohne dienotrunc
option, und wir können sehen, dass die neue Datei, Größe ist 512. Dies ist, weil es eröffnet, mitO_TRUNC
.Auswirkungen der
notrunc
/O_TRUNC
IIHabe ich noch nicht beantwortet deine ursprüngliche Frage, warum bei einer disk-to-disk Klonen, warum
conv=notrunc
ist wichtig. Nach der obigen definitionO_TRUNC
zu sein scheint, ignoriert beim öffnen von bestimmten Dateien, und ich würde erwarten, dass diese um wahr zu sein, für block-device-nodes zu. Aber ich will nicht zu übernehmen und alles versuchen wird, um es zu beweisen hier.openclose.c
Ich geschrieben habe ein einfaches C-Programm hier öffnet und schließt eine Datei als argument mitgegeben, mit der
O_TRUNC
Flagge.Normale Datei Test
Wir unten sehen können, dass der einfache Akt des öffnens und Schließens einer Datei mit
O_TRUNC
dazu, dass es nichts zu verlieren, das war es schon.Block Device File Test
Lassen Sie uns versuchen, einen ähnlichen test auf einem USB-flash-Laufwerk. Wir können sehen, dass wir beginnen mit einer einzigen partition auf dem USB-flash-Laufwerk. Wenn es 'abgeschnitten', vielleicht ist die partition Weg gehen wird (wenn man es definiert, die in den ersten 512 Byte der Festplatte)?
Es sieht aus wie es hat keinen Einfluss mehr zu öffnen, entweder die disk oder das disk partition 1 mit den
O_TRUNC
option. Was ich sagen kann, das Dateisystem ist noch montiert werden und die Dateien sind zugänglich und intakt.Auswirkungen der
notrunc
/O_TRUNC
IIIOkay, für meine Letzte Prüfung, die ich verwende
dd
auf meine flash-Laufwerk direkt. Ich werde anfangen, indem Sie schreiben 512 Byte zufällige Daten, dann Schreibe 256 bytes an Nullen am Anfang. Für den letzten test werden wir überprüfen, dass die letzten 256 bytes unverändert geblieben.Zusammenfassung
Durch die oben genannten Experimente, es scheint, dass
notrunc
ist nur wichtig, wenn Sie eine Datei, die Sie schreiben möchten, aber nicht wollen, um es abschneiden. Dies scheint keinen Einfluss auf ein block-Gerät wie sda oder sdb.InformationsquelleAutor der Antwort rkyser
Verwenden Sie niemals
conv=sync,noerror
oder nurconv=noerror
beim bereitstellen eines Abbilds auf einen Datenträger Speicher. In modernen linux-Umgebungen. Verwenden Sie immerconv=notrunc,noerror
Aufzeichnungen das Bild korrekt.InformationsquelleAutor der Antwort user5427505