Blockgeräte, die beispielsweise Partitionen darstellen, /dev/sda1werden vom Kernel so erstellt, dass über sie kein Zugriff auf benachbarten Speicher möglich ist (vorausgesetzt, die Partitionstabelle wurde nicht geändert, nachdem der Kernel sie das letzte Mal gelesen hat). Wenn Sie auf diese Weise auf den angrenzenden Speicher zugreifen könnten, wäre dies ein großer Fehler.
David Foerster
Antworten:
18
Überschreibe eine Partition mit dd
ddist ein sehr mächtiges aber auch gefährliches Werkzeug. Es macht, was Sie es sagen, ohne Fragen zu tun. Also, wenn Sie sagen, es soll die Familienbilder abwischen, ... und es ist ein kleiner Tippfehler weg.
Aber wenn Sie überprüfen und überprüfen, können Sie es verwenden.
dd if=/dev/zero of=somepartition bs=512
oder ich würde vorschlagen
dd if=/dev/zero of=/dev/sdxn bs=4096
Wo xist der Laufwerksbuchstabe und nist die Partitionsnummer und Blockgröße 4096 Bytes beschleunigt den Schreibvorgang.
In diesem Fall ist es wichtig, dass Sie auf eine Partition schreiben . Wenn Sie auf das gesamte Laufwerk (die Laufwerkskopfstelle) schreiben, wird das gesamte Laufwerk /dev/sdxüberschrieben. Das Schreiben auf die Partition wird jedoch am Ende der Partition unterbrochen und die dahinter liegenden Partitionen bleiben erhalten. (Ich habe es jetzt auf einem USB-Stick in Lubuntu 16.04 LTS getestet , also weiß ich, dass es so funktioniert.)
Ausnahme für eine erweiterte Partition
Es gibt eine Ausnahme für eine erweiterte Partition (die ein Container für logische Partitionen ist, um mehr als vier Partitionen in einer MSDOS-Partitionstabelle zu haben). Dies ist im folgenden Link beschrieben,
Es gibt aber auch ein anderes Problem. Ich habe Ihren Befehl in einer Testumgebung getestet und nur ein Kibibyte (1024 Byte) gelesen, als ich wollte, dass es ein Image einer erweiterten Partition erstellt.
Ich habe auch dies jetzt auf einem USB-Stick in Lubuntu 16.04 LTS getestet, und dies gilt sowohl für das Schreiben als auch für das Lesen. Nur das erste Kibibyte wird überschrieben.
Zusammenfassend funktioniert das Überschreiben von Primärpartitionen und logischen Partitionen entsprechend der Hauptbeschreibung in dieser Antwort. Verwenden Sie diese Methode jedoch nicht zum Überschreiben einer erweiterten Partition, da nur das erste Kibibyte überschrieben wird. Die logischen Partitionen der erweiterten Partition werden nicht mehr über die Partitionstabelle gefunden, die darin gespeicherten Daten sind jedoch noch vorhanden.
Ich habe bereits zugesagt, aber wenn dies so ist, sollte dies die richtige Antwort sein.
LogicBreaker
3
@LogicBreaker, Vielleicht kannst du die Annahme verschieben. Das ist aber nicht wichtig. Es ist wichtiger, dass Sie wissen, wie man es benutzt ddund dass es riskant ist, so dass Sie sehr vorsichtig sind, wenn Sie es benutzen. Viel Glück :-) Im Allgemeinen sollten Sie immer eine Sicherungskopie aller Dateien haben, die Sie sich nicht leisten können, zu verlieren.
Sudodus
1
Wenn Sie auf leere Partitionen schreiben, haben Sie nicht viele Alternativen. Ich bin umgezogen, sonst wäre es für andere irreführend.
LogicBreaker
1
Aus diesem Grund können Benutzer normalerweise nicht auf die "Dateien" / dev / * zugreifen.
Thorbjørn Ravn Andersen
1
Wenn dies die einzige Kopie Ihrer Familienfotos ohne Backup ist, können Sie sie jederzeit durch Diebstahl, Feuer, Unfall oder einfachen Hardwarefehler
verlieren
4
Schreibvorgänge auf ein Partitionsgerät werden nicht außerhalb dieser Partition mit dd oder etwas anderem geschrieben. Sie müssten ein Volldiskettengerät verwenden, um einen Effekt außerhalb einer einzelnen Partition zu erzielen.
(Vorsichtsmaßnahme: Es sei denn, Ihre Festplatte verfügt über eine Partitionstabelle mit überlappenden Partitionen. Dies sollte niemals passieren.)
Eine weitere Einschränkung: Wenn Sie so etwas wie LVM verwenden, kann das Schreiben auf ein physisches Volume natürlich viele logische Volumes betreffen.
Maxpm
4
Ich denke, Ihre Frage basiert auf einem grundlegenden Missverständnis darüber, wie dd(und tatsächlich Unix-ähnliche Betriebssysteme im Allgemeinen) funktionieren:
ddkann nicht überschreiben benachbarte Partitionen, einfach weil ddÜberschreiben nicht Partitionen, Periode .
ddschreibt einfach in dateien . Das ist es.
Nun, wenn Sie übergeben ddeine Datei , die darstellt , mehrere Partitionen, dann ddüberschreibt diese Datei . In diesem Fall wird jedoch nicht ddüber das Ende der Partition hinaus geschrieben. ddschreibt immer noch bis zum Ende der Datei und nur bis zum Ende der Datei.
Wenn Sie jedoch ddeine Datei übergeben, die nur eine Partition darstellt, ddwird nicht über das Ende dieser Partition hinaus geschrieben. Auch das hat nichts damit zu tun dd. ddschreibt einfach in die Datei, in die Sie schreiben möchten. Die Tatsache, dass diese Datei eine einzelne Partition darstellt, wird (in diesem Fall) vom Block-Gerätetreiber im Kernel sichergestellt. ddhat nichts damit zu tun.
Kurz gesagt: ddSchreibt in Dateien. Was diese Dateien darstellen, ist nicht von ddBelang. ddweiß nichts über Partitionen.
Mmh ... da dd nur in Dateien schreibt, konnten Sie es nicht zum Schreiben in unformatierte Partitionen verwenden.
LogicBreaker
1
Richtig. Sie können nicht ddzum Schreiben auf unformatierte Partitionen verwenden. Sie können nur in Dateien schreiben. Sie können natürlich Schreiben auf eine Block - Device - Datei , die repräsentiert eine Partition (wie /dev/sda1), aber Sie können nicht auf eine Raw - Partition schreiben. Und da Sie nur in eine Datei schreiben können, die eine Partition darstellt, können Sie nicht über das Ende der Partition hinaus schreiben, da die Datei nur die Partition darstellt und nicht die Partition und ein wenig über das Ende hinaus.
Jörg W Mittag
3
Jörg bezieht sich auf eine der Hauptideen der Unix-Philosophie - "Alles ist eine Datei". Als solches präsentiert der Kernel Patitionen, Geräte, Ports usw. als Dateien. Infolgedessen kann jedes Programm, das in eine Datei schreiben kann, zum Schreiben auf eine Partition oder ein Gerät verwendet werden. Es ist die Aufgabe des Kernels, die Partitionsgrenze durchzusetzen. Sie können /dev/sdain Ihrem Texteditor öffnen und die Daten ändern, ddunterscheidet sich von keinem anderen Programm in Bezug auf den Zugriff auf Partitionen. Sehr gute Antwort!
Sergey
1
Es gibt ein gefährliches, aber seltenes spezielles Szenario, in dem dies auch mit nicht fehlerhaften Block-Gerätetreibern passieren kann:
Die Partitionstabelle auf der Festplatte wird so geändert, dass die Größe von Partition x so geändert wird, dass sie an einer niedrigeren Grenze als zuvor endet. Entweder wird die Größe der dahinter liegenden Partition y von oben nach unten geändert, oder es wird eine neue Partition y in den Bereich eingefügt.
Partition y wird durch von der Partitionstabelle unabhängige Mittel mit relevanten Daten gefüllt, z. B. durch Verwendung von dd mit den Optionen "Überspringen / Zählen" auf dem Ganzplattenblockgerät (z. B. / dev / sda).
Das ioctl, das den Kernel anweist, die Partitionstabelle erneut zu lesen, wird nicht ausgegeben oder schlägt aufgrund ausgelasteter Geräte fehl
Partition x wird von jedem Prozess beschrieben, der versucht, darauf zu schreiben, bis eine Fehlerbedingung auftritt.
Sie müssen mit dd vorsichtig sein, denn wenn Sie einen Fehler machen, können Sie mehr überschreiben, als Sie erwartet haben, und das hängt davon ab, wofür Sie dd verwenden (das OP war in seiner Verwendung von dd und der genauen Syntax des dd vage Befehl).
Wenn Sie eine Partition angeben , wird in diese Partition geschrieben, bis die Partition voll ist.
Wenn Sie einen Fehler machen und das gesamte Laufwerk ablegen, z. B. = / dev / sda, schreibt dd anfangs auf das gesamte Laufwerk, um das Ignorieren (und Überschreiben) Ihrer Partitionstabelle zu beenden.
Sie können gelöschte Dateien auch mit dd auf einer Partition überschreiben (gelöschte Dateien verbleiben möglicherweise auf der Partition und werden von verschiedenen Wiederherstellungstools mit unterschiedlichem Erfolg erkannt, bis sie überschrieben werden. In diesem Fall können Sie mit dd den freien Speicherplatz füllen, indem Sie Schreiben in eine Datei.
Je nachdem, was Sie gerade tun, möchten Sie möglicherweise ein alternatives Tool zum sicheren Löschen von Dateien verwenden. Siehe Wie lösche ich Dateien auf sichere Weise? für optionen.
Wenn Sie in / dev / sdcX schreiben könnten und es schaffen würden, über eine Partitionsgrenze zu schreiben, wäre es nicht so, dass die Partitionstabelle ignoriert würde - es wäre der Blockgerätetreiber im Kernel, der fehlerhaft ist und die Partitionstabelle ignoriert.
Rackandboneman
1
@sudodus ddist nicht so niedrig. Tatsächlich hätten die meisten Dinge, mit denen die Leute arbeiten, ddgenauso gehandhabt werden können cat. Tatsächlich catist es etwas schneller, da es größere Blöcke als ddstandardmäßig verwendet. Der gesamte Low-Level-Code befindet sich im Kernel. Und dem Fahrer ist es eigentlich egal, ob Sie ddoder verwenden cat.
Kasperd
1
@sudodus - sorry für die verwirrung, ich war nicht so klar wie ich beabsichtigt hatte. dd kann sicher weiter schreiben, hängt davon ab, was du sagst. dd if=/dev/zero of=/dev/sda bs=512 count=1oder dd if=/dev/zero of=/dev/sda bs=512sind Beispiele. Mit dem zweiten Befehl wird das Schreiben fortgesetzt und die gesamte Festplatte gefüllt, wobei die Partitionstabelle ignoriert wird. Wenn Sie eine Partition angeben dd if=/dev/zero of=/dev/sda1, geht diese nicht über die Partition hinaus. Art hängt davon ab, was Sie mit dd tun möchten.
Panther
1
@Panther Die Frage besagt ausdrücklich of=somepartition, dass der Fall, in dem Sie auf das gesamte Festplattengerät schreiben, nicht zutrifft. ddkann die Einschränkungen des Gerätetreibers nicht umgehen.
Barmar
1
@Bamar nachlesen Ich habe das schon kommentiert. Ich habe viele Benutzer gesehen, die $ somepartition für / dev / sda
/dev/sda1
werden vom Kernel so erstellt, dass über sie kein Zugriff auf benachbarten Speicher möglich ist (vorausgesetzt, die Partitionstabelle wurde nicht geändert, nachdem der Kernel sie das letzte Mal gelesen hat). Wenn Sie auf diese Weise auf den angrenzenden Speicher zugreifen könnten, wäre dies ein großer Fehler.Antworten:
Überschreibe eine Partition mit
dd
dd
ist ein sehr mächtiges aber auch gefährliches Werkzeug. Es macht, was Sie es sagen, ohne Fragen zu tun. Also, wenn Sie sagen, es soll die Familienbilder abwischen, ... und es ist ein kleiner Tippfehler weg.Aber wenn Sie überprüfen und überprüfen, können Sie es verwenden.
oder ich würde vorschlagen
Wo
x
ist der Laufwerksbuchstabe undn
ist die Partitionsnummer und Blockgröße 4096 Bytes beschleunigt den Schreibvorgang.In diesem Fall ist es wichtig, dass Sie auf eine Partition schreiben . Wenn Sie auf das gesamte Laufwerk (die Laufwerkskopfstelle) schreiben, wird das gesamte Laufwerk
/dev/sdx
überschrieben. Das Schreiben auf die Partition wird jedoch am Ende der Partition unterbrochen und die dahinter liegenden Partitionen bleiben erhalten. (Ich habe es jetzt auf einem USB-Stick in Lubuntu 16.04 LTS getestet , also weiß ich, dass es so funktioniert.)Ausnahme für eine erweiterte Partition
Es gibt eine Ausnahme für eine erweiterte Partition (die ein Container für logische Partitionen ist, um mehr als vier Partitionen in einer MSDOS-Partitionstabelle zu haben). Dies ist im folgenden Link beschrieben,
Kann ich mit dd ein Image einer 'erweiterten' Partition erstellen?
Ich habe auch dies jetzt auf einem USB-Stick in Lubuntu 16.04 LTS getestet, und dies gilt sowohl für das Schreiben als auch für das Lesen. Nur das erste Kibibyte wird überschrieben.
Zusammenfassend funktioniert das Überschreiben von Primärpartitionen und logischen Partitionen entsprechend der Hauptbeschreibung in dieser Antwort. Verwenden Sie diese Methode jedoch nicht zum Überschreiben einer erweiterten Partition, da nur das erste Kibibyte überschrieben wird. Die logischen Partitionen der erweiterten Partition werden nicht mehr über die Partitionstabelle gefunden, die darin gespeicherten Daten sind jedoch noch vorhanden.
quelle
dd
und dass es riskant ist, so dass Sie sehr vorsichtig sind, wenn Sie es benutzen. Viel Glück :-) Im Allgemeinen sollten Sie immer eine Sicherungskopie aller Dateien haben, die Sie sich nicht leisten können, zu verlieren.Schreibvorgänge auf ein Partitionsgerät werden nicht außerhalb dieser Partition mit dd oder etwas anderem geschrieben. Sie müssten ein Volldiskettengerät verwenden, um einen Effekt außerhalb einer einzelnen Partition zu erzielen.
(Vorsichtsmaßnahme: Es sei denn, Ihre Festplatte verfügt über eine Partitionstabelle mit überlappenden Partitionen. Dies sollte niemals passieren.)
quelle
Ich denke, Ihre Frage basiert auf einem grundlegenden Missverständnis darüber, wie
dd
(und tatsächlich Unix-ähnliche Betriebssysteme im Allgemeinen) funktionieren:dd
kann nicht überschreiben benachbarte Partitionen, einfach weildd
Überschreiben nicht Partitionen, Periode .dd
schreibt einfach in dateien . Das ist es.Nun, wenn Sie übergeben
dd
eine Datei , die darstellt , mehrere Partitionen, danndd
überschreibt diese Datei . In diesem Fall wird jedoch nichtdd
über das Ende der Partition hinaus geschrieben.dd
schreibt immer noch bis zum Ende der Datei und nur bis zum Ende der Datei.Wenn Sie jedoch
dd
eine Datei übergeben, die nur eine Partition darstellt,dd
wird nicht über das Ende dieser Partition hinaus geschrieben. Auch das hat nichts damit zu tundd
.dd
schreibt einfach in die Datei, in die Sie schreiben möchten. Die Tatsache, dass diese Datei eine einzelne Partition darstellt, wird (in diesem Fall) vom Block-Gerätetreiber im Kernel sichergestellt.dd
hat nichts damit zu tun.Kurz gesagt:
dd
Schreibt in Dateien. Was diese Dateien darstellen, ist nicht vondd
Belang.dd
weiß nichts über Partitionen.quelle
dd
zum Schreiben auf unformatierte Partitionen verwenden. Sie können nur in Dateien schreiben. Sie können natürlich Schreiben auf eine Block - Device - Datei , die repräsentiert eine Partition (wie/dev/sda1
), aber Sie können nicht auf eine Raw - Partition schreiben. Und da Sie nur in eine Datei schreiben können, die eine Partition darstellt, können Sie nicht über das Ende der Partition hinaus schreiben, da die Datei nur die Partition darstellt und nicht die Partition und ein wenig über das Ende hinaus./dev/sda
in Ihrem Texteditor öffnen und die Daten ändern,dd
unterscheidet sich von keinem anderen Programm in Bezug auf den Zugriff auf Partitionen. Sehr gute Antwort!Es gibt ein gefährliches, aber seltenes spezielles Szenario, in dem dies auch mit nicht fehlerhaften Block-Gerätetreibern passieren kann:
quelle
Sie müssen mit dd vorsichtig sein, denn wenn Sie einen Fehler machen, können Sie mehr überschreiben, als Sie erwartet haben, und das hängt davon ab, wofür Sie dd verwenden (das OP war in seiner Verwendung von dd und der genauen Syntax des dd vage Befehl).
Wenn Sie eine Partition angeben , wird in diese Partition geschrieben, bis die Partition voll ist.
Wenn Sie einen Fehler machen und das gesamte Laufwerk ablegen, z. B. = / dev / sda, schreibt dd anfangs auf das gesamte Laufwerk, um das Ignorieren (und Überschreiben) Ihrer Partitionstabelle zu beenden.
Sie können gelöschte Dateien auch mit dd auf einer Partition überschreiben (gelöschte Dateien verbleiben möglicherweise auf der Partition und werden von verschiedenen Wiederherstellungstools mit unterschiedlichem Erfolg erkannt, bis sie überschrieben werden. In diesem Fall können Sie mit dd den freien Speicherplatz füllen, indem Sie Schreiben in eine Datei.
Je nachdem, was Sie gerade tun, möchten Sie möglicherweise ein alternatives Tool zum sicheren Löschen von Dateien verwenden. Siehe Wie lösche ich Dateien auf sichere Weise? für optionen.
quelle
dd
ist nicht so niedrig. Tatsächlich hätten die meisten Dinge, mit denen die Leute arbeiten,dd
genauso gehandhabt werden könnencat
. Tatsächlichcat
ist es etwas schneller, da es größere Blöcke alsdd
standardmäßig verwendet. Der gesamte Low-Level-Code befindet sich im Kernel. Und dem Fahrer ist es eigentlich egal, ob Siedd
oder verwendencat
.dd if=/dev/zero of=/dev/sda bs=512 count=1
oderdd if=/dev/zero of=/dev/sda bs=512
sind Beispiele. Mit dem zweiten Befehl wird das Schreiben fortgesetzt und die gesamte Festplatte gefüllt, wobei die Partitionstabelle ignoriert wird. Wenn Sie eine Partition angebendd if=/dev/zero of=/dev/sda1
, geht diese nicht über die Partition hinaus. Art hängt davon ab, was Sie mit dd tun möchten.of=somepartition
, dass der Fall, in dem Sie auf das gesamte Festplattengerät schreiben, nicht zutrifft.dd
kann die Einschränkungen des Gerätetreibers nicht umgehen.