Letzte Aktualisierung:
Ich wusste bereits, was ich tun musste, um dieses Problem zu beheben. Ich wusste einfach nicht, wie ich es machen sollte. Ich hatte gehofft, dass es ein fertiges Tool geben würde, das das automatisch erledigt - aber ich konnte keines finden. Ich akzeptiere Rods Antwort, da sie, obwohl sie mein Problem nicht direkt löst, einen sehr guten Hintergrund zum Problem der Sektorgröße liefert und mir die Gewissheit gibt, dass das Problem wirklich die Ausrichtung und Adressierung der Partitionen war. Wenn Sie zu dieser Frage mit demselben Problem kommen, lesen Sie sie gründlich und sorgfältig durch, einschließlich Kommentaren, bevor Sie etwas unternehmen.
Am Anfang
Ich hatte einen Computer und brauchte mehr Platz. Ich habe ein neues 500-GB-Laufwerk und ein USB-Gehäuse gekauft. Bald habe ich festgestellt, dass wenn ich das Laufwerk im Gehäuse partitioniert und auf den Computer verschoben habe, es die Partitionen nicht erkennt (und umgekehrt). Ich nahm an, dass es ein Problem mit dem Gehäuse war und machte mir darüber keine Sorgen.
Dann die Tragödie
Ein wunderschöner Tag, mein Computer hat beschlossen, sich nicht mehr einzuschalten. Es stellt sich heraus, dass das Motherboard (ohne Marke, nur ein großer MADE IN CHINA-Aufdruck) tot ist. Ich habe es als Dateiserver verwendet und dieses 500-GB-Laufwerk ist jetzt voll mit Daten, die ich mir nicht leisten kann, zu verlieren. Ich bin jetzt pleite und kann mir keinen neuen Computer leisten, daher war meine einzige Hoffnung das "defekte" USB-Gehäuse.
Die Ermittlung
Ausgerüstet mit mehreren Linux-Distributionen, einem Laptop, VirtualBox und dem Gehäuse habe ich eine forensische Analyse zu diesem Thema durchgeführt. dmesg meldete, dass die Partitionsgröße das Laufwerksende überschritten hat. Also habe ich die Datenblätter der Festplatte durchgesehen, die Anzahl der Sektoren von Grund auf berechnet, die Laufwerksgrenzen manuell mit dd getestet und alles sah in Ordnung aus, bis ich fdisk gestartet habe und es stand:
Note: Sector size is 4096 (not 512).
Wie bescheiden von fdisk. Diese "Notiz" war die Wurzel aller Probleme. Nach einigem Hin und Her wurden folgende Schlussfolgerungen gezogen:
Das USB-Gehäuse ist nicht defekt.
Der SATA-Controller auf dem nun toten Motherboard war zumindest "komisch". Es wurden keine 4096-Byte-Sektoren an das Betriebssystem gemeldet, daher erstellte das Betriebssystem den MBR mit 512-Byte-Sektoradressen.
Wenn ich jetzt versuche, auf die Partition zuzugreifen, versucht das Betriebssystem, die 512-Byte-basierten Adressen auf einem 4096-Byte-Sektorenlaufwerk zu verwenden, und das wird natürlich nicht funktionieren.
Die Frage
Wie kann ich also die Adressen im MBR korrigieren, damit sie für eine Sektorgröße von 4096 Byte gültig sind, abgesehen von der manuellen Bearbeitung des MBR in einem Hex-Editor, und
Die Partitionen sind nicht für 4096-Byte-Sektoren ausgerichtet. Gibt es ein Werkzeug, um sie auszurichten, abgesehen vom Kopieren in und aus einem anderen Laufwerk? (Ich habe keine Ersatzlaufwerke), oder muss ich ein Tool erstellen, mit dem die Daten Stück für Stück zur Seite verschoben werden? Partitionen sind ext3.
Vielen Dank!
Aktualisieren:
In der folgenden Frage habe ich herausgefunden, dass es eine clevere Möglichkeit gibt, mit dd die Partition direkt zu verschieben: Wie verschiebe ich eine Partition unter GNU / Linux? Aber ich weiß nicht, ob es auf einem Sektorabschnitt funktionieren wird. Ich kann es momentan nicht testen, werde es aber tun, wenn ich etwas Zeit habe.
Update 2:
Also habe ich die Partition mit der obigen Methode erfolgreich ausgerichtet und den MBR auf einem Hex-Editor von Hand bearbeitet. Sobald ich die Festplatte wieder eingesteckt habe, wird die Auslegerpartition automatisch montiert! Ich kann dies jedoch nicht empfehlen, da während des Vorgangs E / A-Fehler aufgetreten sind und ich möglicherweise alles verloren habe (siehe Kommentar zu Rods Antwort). Für die andere Partition gehe ich kein Risiko ein und verwende eine alte Festplatte und richte die Blöcke nacheinander aus, indem ich die Daten kopiere und sie dann wieder an einer anderen Position einfüge.
quelle
fdisk
den MBR unter Linux bearbeiten (das habe ich später erfahren, es sind keine Hex-Editoren erforderlich :)). Sie können den Startpunkt und die Größe jedes Eintrags ändern und die Änderungen überprüfen, bevor Sie sie anwenden. Also: Startfdisk
, notieren Sie sich die aktuelle Konfiguration (oder sichern Sie den MBR mitdd
), multiplizieren Sie die Werte für Startadresse und Größe mit 8 und ändern Sie sie. Überprüfen Sie alles mit einem Taschenrechner und verstehen Sie, was die Werte bedeuten. Sie werden sehen, dass Size = End - Start + 1 ist und dassfdisk
die Größe in Einheiten von 1000 Sektoren angezeigt wird. Daher müssen Sie möglicherweise den Expertenmodus aktivieren, um den tatsächlichen Wert usw. zu sehen.Antworten:
Fragen der Branchengröße werden immer komplexer. Bis Ende 2009 verwendete die überwiegende Mehrheit der Festplatten 512-Byte-Sektoren, und das war es auch. Ende 2009 begannen die Plattenhersteller mit der Einführung von sogenannten Advanced Format (AF) -Datenträgern, die 4096-Byte-Sektoren verwenden. Diese ersten AF-Festplatten (und AFAIK, heute alle AF-Festplatten) bieten eine Schnittstelle zum Computer, auf der jeder physikalische Sektor mit 4096 Byte in acht logische Sektoren mit 512 Byte aufgeteilt ist. Diese Konvertierung ermöglicht, dass ältere Tools, einschließlich vieler BIOSes, die mit 512-Byte-Annahmen erstellt wurden, weiterhin funktionieren. Ich weiß nicht, ob Ihre Festplatte AF verwendet oder nicht, aber in beiden Fällen wird mit ziemlicher Sicherheit eine logische Sektorgröße von 512 Byte verwendet, was bedeutet, dass die Schnittstelle zum Betriebssystem 512-Byte-Sektoren verwenden sollte.
Komplizierende Faktoren sind bestimmte USB-Festplattengehäuse. Einige dieser Gehäuse machen das Gegenteil von dem, was AF macht: Sie nehmen acht Plattensektoren und bündeln sie in einen neuen 4096-Byte-Sektor. Ich bin mir nicht sicher, was die Gründe für diesen Schritt sind, aber ein praktischer Vorteil ist, dass Festplatten mit einer Größe von mehr als 2 TB mit dem alten MBR-Partitionierungssystem verwendet werden können. Ein großer Nachteil besteht darin, dass eine in einem dieser Gehäuse partitionierte Festplatte nicht direkt oder in einem Gehäuse verwendet werden kann, in dem diese Art der Übersetzung nicht möglich ist. Ebenso kann eine ohne diese Übersetzung vorbereitete Festplatte nicht verwendet werden, wenn sie in ein solches Gehäuse übertragen wird. Beachten Sie, dass dieses Problem weit über den MBR hinausgeht. Ihre Festplatte erkennt die erste Partition möglicherweise als den Beginn des Sektors 2048 (512 Byte), aber wenn Ihr Betriebssystem den Sektor 2048 (4096 Byte) verwenden würde,Finde den Anfang dieser Partition! Sie sind auf dieses Problem gestoßen. Als solches ist Ihre anfängliche Annahme, dass es der Fehler des USB-Gehäuses ist, näher an der Marke als Ihre neuere Annahme, dass Ihr Motherboard es durcheinander gebracht hat. Ich habe noch nie von einem Motherboard gehört, das die Sektorgröße auf diese Weise übersetzt. (Einige Hardware-RAID-Geräte tun dies jedoch.)
Ich kenne keine Möglichkeit, Linux zu zwingen, seine Idee der Sektorgröße anzupassen, aber wenn Sie über genügend Speicherplatz verfügen, kann es hilfreich sein, eine einfache Kopie auf eine andere Festplatte zu erstellen. Zum Beispiel:
Dadurch wird Ihre Festplatte von
/dev/sdb
(der USB-Festplatte; passen Sie sie nach Bedarf an) in die Datei kopiert~/image.img
. Sie können dann das folgende Skript verwenden, um die Partitionen des Images bereitzustellen:Speichern Sie das Skript wie folgt
mount_image
und verwenden Sie es:Dadurch wird Partition 2 von
image.img
auf gemountet/mnt
. Beachten Sie, dass das Skript auf GPT fdisk (gdisk
) basiert , das die meisten Distributionen in einem Paket mit dem Namengptfdisk
or enthaltengdisk
.Auf lange Sicht besteht eine bessere Lösung darin, einen Weg zu finden, um die Festplatte anzuschließen, die die Übersetzung in Sektorgröße nicht durchführt. Eine direkte Verbindung zu einem neuen Motherboard sollte den Trick tun. oder Sie finden wahrscheinlich ein externes Gehäuse, das die Übersetzung nicht durchführt. In der Tat führen einige Gehäuse die Übersetzung an USB-Anschlüssen durch, jedoch nicht an eSATA-Anschlüssen. Wenn Ihr Gehäuse über einen eSATA-Anschluss verfügt, können Sie dies versuchen. Mir ist klar, dass diese Lösungen wahrscheinlich alle Geld kosten, was Sie sagen, dass Sie nicht haben, aber vielleicht können Sie Ihr Übersetzungsgehäuse gegen eines eintauschen, das die Übersetzung nicht durchführt.
Eine andere Option, die mir einfällt, ist die Verwendung einer virtuellen Maschine wie VirtualBox. Solch ein Tool könnte eine Sektorgröße von 512 Byte annehmen, wenn auf das Plattengerät zugegriffen wird, wodurch die Übersetzung effektiv rückgängig gemacht wird. Möglicherweise können Sie den unformatierten Inhalt des Datenträgers (wie in
dd if=/dev/sdc of=/dev/sdb
) innerhalb der virtuellen Maschine kopieren, wodurch der Inhalt möglicherweise mit Komprimierung kopiert wird und das Image weniger Speicherplatz beansprucht als das Original.quelle
dd
! Wenn Sie nicht sehr vorsichtig sind und die Dinge nicht sehr gutverstehen(oder außerordentlich viel Glück haben), ist es wahrscheinlicher, dass Sie das Problem in den Müll werfen, als es zu beheben. Mir fällt ein, dass Sie möglicherweise die Partitionstabelle anpassen können, indem Siefdisk
Folgendesverwenden: Sichern Sie das Original und teilen Sie dann den Startpunkt jeder Partition durch 8 (und legen Sie die Endpunkte so fest, dass sie kurz vor dem Startpunkt der folgenden Partition enden). Dies hat nur dann eine Chance, wenn die Startpunktwerte der Partition ein Vielfaches von 8 sind.dd
Klon aus, der über USB angeschlossen war, und ich dachte, der Klon sei fehlgeschlagen. Aber als ich die SSD anstelle meiner alten Festplatte direkt mit meinem Motherboard verband, funktionierte alles einwandfrei!Dieses Skript verallgemeinert den Vorschlag von Rod Smith, wenn Sie einen Überfall oder eine Krypto haben. Keine Garantie. Fühlen Sie sich frei, es zu verbessern! (Aktualisiert mit neuesten Erkenntnissen über mdadm)
quelle
Ein anderer, recht einfacher Weg, dies zu tun, ist die Verwendung der Rettungsfunktion von parted. Hierfür müssen Sie jedoch ein neues Plattenetikett erstellen, was mit Risiken verbunden ist. Parted wird direkt auf der Festplatte ausgeführt. Erstellen Sie daher bei Bedarf Backups, bevor Sie Parted ausführen. Dann fang an:
parted sagt Ihnen etwas in diese Richtung, wenn Sie versuchen, eine Festplatte mit einer anderen Sektorgröße als der, mit der die Partitionstabelle erstellt wurde, zu lesen:
Verwenden Sie mklabel, um einen neuen MBR oder eine neue GPT gemäß Ihrer vorherigen Verwendung zu erstellen
Führen Sie dann rescue aus, um Ihre alte Partition zu finden
Wiederholen Sie den Rettungsvorgang, wenn Sie mehr Partitionen haben. Sie sind jetzt fertig.
quelle
Ich hatte dieses Problem, als ich eine 4-TB-Festplatte aus einem externen Gehäuse von WD My Book entfernte. Das Problem ist:
Lösung: Schreiben Sie die Partitionstabelle in eine GPT-Datei um und konvertieren Sie die Werte so, dass 512-Byte-Sektoren verwendet werden.
In meinem Fall begann die Partition mit einem Versatz von 1 MB und endete (~ 856 kB) vor dem Ende der Festplatte. Dies ist gut, da dann MBR + GPT (17408 Bytes) vor der Partition und GPT-Backup (16896 Bytes) am Ende des Datenträgers zulässig sind.
Ich habe für alle Fälle Bilder von beiden Regionen gemacht (mit dd).
Ich habe die Ausgabe von notiert
fdisk -l /dev/sde
.Ich habe gdisk verwendet, um die erste Partition zu löschen. Wenn Sie möchten, können Sie wie bisher vorgehen und den Ausrichtungswert in 8 (4096) ändern, um so viel Platz wie möglich zu belegen. Dann habe ich eine neue Partition mit dem Start um 2048 und dem Ende am Ende der Festplatte erstellt. Ich werde das Dateisystem später erweitern.
Glücklicherweise wirkt sich die Änderung der Sektorgröße nicht auf das Dateisystem, LVM oder LUKS aus.
quelle