Klonen eines bootfähigen USB-Sticks auf einen Stick anderer Größe

11

HARDWARE: 2 8 GB USB-
Sticks DISTRO: Mint 9 Xfce persistente Live-CD

Ein USB-Flash-Laufwerk verfügt über zwei Partitionen:
1) FAT32 700MB Mint 9-Partition
2) ext3 7,3 GB- casper-rwPartition

ZIEL:
Ich möchte ein Duplikat dieses USB-Flash-Laufwerks erstellen, da ich die Zeit der erneuten Installation und Konfiguration nicht von Grund auf neu durchlaufen möchte.

ERFAHRUNG:
1) Ich habe festgestellt, dass dddies für diesen Job nicht funktioniert, da die Kopie beschädigt wird, wenn eines meiner Flash-Laufwerke sogar 1 MB unterschiedlich groß ist, was manchmal der Fall ist.

2) Ich habe festgestellt, dass die Verwendung gpartedund Vorformatierung des zweiten Laufwerks wie des ersten und die anschließende rsyncindividuelle Partitionierung jeder Partition nicht funktioniert, da einige Dateien aus irgendeinem Grund nicht kopiert werden und das Laufwerk nicht mehr bootfähig ist.

Ich möchte meinen Arbeitsstick behalten und einfach Kopien davon erstellen und die Sticks für meine Freunde konfigurieren. Auf diese Weise wird mein Basis-Stick immer nur herumstehen und warten, wenn ich einen anderen Stock vermassle.

Joshua Robison
quelle
Welchen Bootloader verwenden Sie (Syslinux?). Bitte erwägen Sie, diese Beschimpfung aus Ihrem Beitrag zu entfernen, da sie Ihrer Frage keinerlei Wert hinzufügt.
Mat
Ich habe den Mint Live USB Installer verwendet, also war alles automatisch. Ich hoffe, dass der Klonprozess die Arbeit mit Bootloadern vermeidet und meine aktuelle Bootloader-Konfiguration kopiert
Joshua Robison

Antworten:

5

Einführung

Bei einem Laufwerk mit PC-Partitionen (wie es bei den meisten USB-Sticks der Fall ist) besteht der Bootloader aus einem winzigen Teil ganz am Anfang des Laufwerks (dem Bootloader der Stufe 1 im Bootsektor des Laufwerks) und a größerer Teil an anderer Stelle (der Stage 2-Bootloader in einer Datei). Die Daten der Stufe 1 enthalten den physischen Standort von Stufe 2. Wenn Sie das gesamte Gerät kopieren (was Sie versucht haben dd), befindet sich der Teil der Stufe 1 am selben physischen Ort und der Stick funktioniert, aber der neue Stick muss mindestens so sein groß wie das Original. Wenn Sie die Partitionen neu erstellen und die Dateien kopieren, fehlt Ihnen Stufe 1, da es sich nicht um eine Datei handelt.

Ich denke (aber ich habe nicht überprüft), dass sich die Stufe 2 in der ersten (FAT32) Partition befindet. In diesem Fall können Sie diese Partition im Großhandel und auch den Bootsektor kopieren, dann die Partitionstabelle so bearbeiten, dass die zweite Partition genau den verbleibenden Speicherplatz belegt, und die Dateien auf der zweiten Partition kopieren. Sie können auch ein Roh-Image des Bootsektors und der ersten Partition in einer Datei auf einer Festplatte speichern (Sie können sie jedoch auch von einem USB-Stick klonen).

Erstellen eines Klons einer anderen Größe

Im Folgenden werde ich das Gerät mit dem Original-Stick /dev/sdbund das Gerät mit dem Klon aufrufen /dev/sdc. Ersatznamen nach Bedarf. Erstellen Sie bei Bedarf Einhängepunkte. Ich gehe davon aus, dass die FAT32-Partition (am Anfang der Festplatte) mit 1 und die ext3-Partition mit 2 nummeriert ist. Ersetzen Sie bei Bedarf andere Nummern.

Erster Teil, wenn Sie von einem Stick klonen:

head -c 512 </dev/sdb >/dev/sdc
partprobe /dev/sdc
cat </dev/sdb1 >/dev/sdc1

Erster Teil beim Klonen aus Bilddateien:

cat boot_sector.img >/dev/sdc
partprobe /dev/sdc
cat first_partition.img >/dev/sdc1

Der Aufruf von partprobewird benötigt, damit der Kernel die Partitionstabelle von der Festplatte neu lädt (sie befindet sich im Bootsektor, und der erste Befehl in beiden oben genannten Szenarien ändert den Bootsektor). Wenn Sie es weglassen, werden entweder Fehler angezeigt oder der Kernel schreibt stillschweigend Müll auf den Stick.

So erstellen Sie die Bilddateien:

head -c 512 </dev/sdb >boot_sector.img 
cat /dev/sdb1 >first_partition.img

Nachdem Sie den Bootsektor und die erste Partition erhalten haben, müssen Sie die Partitionstabelle erneut bearbeiten, um die Größe der zweiten Partition zu ändern. Sie können dies automatisch tun, indem Sie den richtigen Eingang eingeben fdisk. Achtung, dies ist extrem fehleranfällig und ich habe es nicht getestet. Wenn Sie sich mit diesem Teil nicht ganz wohl fühlen, tun Sie es von Hand.

sed -e 's/ *#.*//' <<EOF | tr -s ' ' '\n' | tr -d _ | fdisk /dev/sdc
d 2         # delete partition 2
n p 2       # new primary partition 2...
_ _         # ... using all available space
w q         # write and quit
EOF

Laden Sie abschließend die Partitionstabelle erneut, erstellen Sie ein ext3-Dateisystem und kopieren Sie die Dateien dorthin.

partprobe /dev/sdc
mke2fs -j /dev/sdc2
mount /dev/sdc2 /media/sdc2
cp -a /media/sdb2/ /media/sdc2/
umount /media/sdc2

Vereinfachte Methode zum Erstellen eines größeren Klons

Wenn Sie möchten, können Sie ein Bild des gesamten Sticks speichern. Sie werden in der Lage, dieses Bild zu verwenden , um direkt auf jedem Stick , dass der mindestens so groß ist : gerade das Bild auf den neuen Stick kopieren mit cat <whole.img >/dev/sdc, dann laufen partprobe /dev/sdc(oder Auszugs - Stick und steckt es wieder in) , um wieder zu lesen die Partitionstabelle.

Wenn Sie möchten, können Sie den Klon vergrößern. In dieser Reihenfolge:

  1. Vergrößern Sie die Partition. Leider weiß ich nicht, wie ich das auf einfache Weise machen soll. partedkann dies mit dem moveBefehl tun (nicht resize, der die Größe des Dateisystems ändert), aber Sie müssen die richtigen Argumente herausfinden - wechseln Sie zu Sektoren ( unit s), um Rundungsfehler zu vermeiden.
  2. Vergrößern Sie das Dateisystem. Dieser Teil ist einfach: Führen Sie ihn einfach aus resize2fs /dev/sdc2, damit das Dateisystem die gesamte Partitionsgröße verwendet.

Wenn Sie von einem größeren Stick als erforderlich ausgehen, können Sie ihn verkleinern, indem Sie die obigen Schritte in umgekehrter Reihenfolge ausführen (verkleinern Sie zuerst das Dateisystem mit resize2fs, dann verkleinern Sie die Partition mit parted).

Alternativ können Sie den Stick zuerst in eine Bilddatei kopieren und dann an dieser Bilddatei arbeiten. Verwenden Sie für den Zugriff auf die Partitionen ein Schleifengerät , das speziell einen Teil der Datei einer Festplatte zuordnet . Hier ist eine Skizze der Schritte, wenn Sie das Bild verkleinern möchten (Warnung, ungetestet, vorsichtig vorgehen und die Mathematik überprüfen).

fdisk -lu whole.img  # note starting sector of partition 2: $S
losetup -fs -o $(($S * 512)) whole.img
# Let $D be the desired size of partition 2, in kB
resize2fs /dev/loop0 $  # replace /dev/loop0 by whatever losetup prints
losetup -d /dev/loop0
parted whole.img
# Use parted to resize the second partition
dd if=/dev/null of=/file/to/truncate seek=1 bs=$(($S/2+$D+1))k
Gilles 'SO - hör auf böse zu sein'
quelle
hmm. Kann ich nicht einfach head verwenden, um nur die ersten 300 MB der zweiten Partition in eine IMG-Datei zu kopieren? Wird das nicht alle leeren Stellen / leeren Blöcke am Ende der Datei abschneiden?
Joshua Robison
1
@Joshua: Nein, denn es gibt keinen Grund, warum alle Dateidaten in den ersten 300 MB liegen würden, und selbst wenn dies der Fall wäre, können Sie nicht einfach an einem solchen Dateisystem teilnehmen. Sie müssen ein gültiges Dateisystem mit der richtigen Größe erstellen. Sie benötigen außerdem eine Partition mit der richtigen Größe. Die Größe der Partition wird im Bootsektor gespeichert. Wenn Sie lieber von einem Bild mit minimaler Größe ausgehen und es bei Bedarf vergrößern möchten, habe ich in meiner Antwort eine Möglichkeit hinzugefügt, dies zu tun.
Gilles 'SO - hör auf böse zu sein'
hmm. Ich habe zuvor versucht, die Dateien zu kopieren, aber aus irgendeinem Grund wurde nicht alles kopiert. Ich habe auch rsync mit sudo versucht. und ich denke, ich habe su root ausprobiert und es auch getan ... Es funktioniert einfach nicht für mich. Ich bin sicher, die Laufwerke waren nicht montiert ... sowieso. Ich beschloss, das Laufwerk in gparted zu verkleinern und daraus IMG-Dateien zu erstellen und sie dann auf einer kleineren Festplatte wiederherzustellen. Das Vorschrumpfen in gparted war die einzige einfache Lösung, die ich finden konnte. Vielen Dank für Ihre Hilfe.
Joshua Robison
Ihre Antwort ist wahrscheinlich richtig und wird höchstwahrscheinlich das tun, was ich verlange. Es ist einfach zu kompliziert für mich. Also habe ich mich für die gparted Pre-Shrink-Methode entschieden.
Joshua Robison
Gibt es einen Tippfehler in dieser Zeile head -c 512 </dev/sdb >/bev/sdc?
Antonio
3

~ $: sudo apt-get installiere gddrescue ddrescue

~ $: ddrescue / dev / sda / dev / sdb -v

;;

Syntax: Dienstprogramm / Quelle / Laufwerk / Ziel / Laufwerk --verbose

Kommentar: Zeigt den Fortschritt und die Fehlerprüfung an, damit Sie wissen, ob dies akzeptabel ist oder irgendwo aufhängt. Sie können auch b = Blöcke beliebiger Größe hinzufügen . "gddrescue" ist eine GUI-basierte Version von "ddrescue", aber ich verwende nur ddrescue wie oben beschrieben, da es problemlos funktioniert.

SierraJuliet
quelle
2
Beachten Sie, dass das richtige Format ist ddrescue -v /dev/sda /dev/sdb(Optionen stehen an erster Stelle vor den Namen der Geräte / Dateien). Vielen Dank für den Hinweis auf dieses Tool! Viel einfacher als zu benutzen dd!
xmnboy
0

Ich hatte kürzlich meine Kali Live-verschlüsselte Persistenz von 16 GB auf 64 GB 3.0 USB geklont. Mein Host-Betriebssystem ist Windows 10 Pro. Ich hatte nicht versucht, mit einer Linux-Distribution zu klonen. Ich bin sicher, dass die obigen Antworten genau das sind, was Sie brauchen, aber für alle Windows-Benutzer. Ich hatte AOMEI Disk Partition Assistant verwendet. Super einfach zu bedienen, verwendet es für die Partitionierung meiner SSD, um Ubuntu zu passen, aber ich schweife ab.

Ich musste sicherstellen, dass der USB, auf den ich geklont habe, bereits für das Live-Booten formatiert war. Beide USB-Geräte angeschlossen und einfach mit der rechten Maustaste auf das 8-GB-Laufwerk geklickt. Wenn Sie auf copydas 64-GB-Laufwerk klicken und es dann auswählen, werden Sie nach einer Reihe von Dingen gefragt: "Sind Sie sicher, dass dies das richtige Laufwerk ist, wird alles gelöscht?" Lesen Sie es einfach durch und stellen Sie sicher, dass alles in Ordnung ist. Sie müssen wirklich nicht viel tun.

Warten Sie einfach, bis der Vorgang abgeschlossen ist und Sie fertig sind. Getestet sagte USB und alles hat funktioniert!

Ich fand, dass dies zumindest für mich der einfachste Weg ist, Live-Distributionen von USB auf USB zu klonen.

Ich bin neu hier
quelle