Clonazione di una chiavetta USB avviabile su una chiavetta di dimensioni diverse


11

HARDWARE: 2 unità flash USB da 8 GB
DISTRO: Mint 9 Xfce persistente Live Cd

Un'unità flash USB ha due partizioni:
1) FAT32 700MB Mint 9 partition
2) ext3 7.3GB casper-rwpartition

OBIETTIVO:
Voglio fare un duplicato di quella chiavetta USB perché non voglio ripetere il tempo di installazione e configurazione da zero.

ESPERIENZA:
1) Ho scoperto che ddnon funziona per questo lavoro perché se una delle mie unità flash ha dimensioni diverse anche di 1 MB, che a volte lo sono, la copia si corrompe.

2) Ho scoperto che l'utilizzo gpartede la preformattazione della seconda unità come la prima e quindi rsyncogni partizione singolarmente non funzionano perché per qualche motivo alcuni file non vengono copiati e l'unità rimane non avviabile.

Voglio mantenere il mio bastone funzionante e semplicemente fare copie di esso e configurare i bastoncini per i miei amici. In questo modo, se tiro su un altro bastoncino, avrò sempre la mia base ferma semplicemente in attesa.


quale bootloader usi (syslinux?). Ti preghiamo di considerare di rimuovere quel rant dal tuo post, non aggiunge alcun valore alla tua domanda.
Mat

Ho usato il nuovo programma di installazione USB live, quindi è stato tutto automatico. Spero che il processo di clonazione eviterà di lavorare con i bootloader e di copiare la mia configurazione attuale del bootloader
Joshua Robison,

Risposte:


5

introduzione

Per un'unità con partizioni PC (che è ciò che troverai sulla maggior parte delle chiavette USB), il bootloader consiste in una piccola parte all'inizio dell'unità (il bootloader di livello 1, nel settore di avvio dell'unità) e un parte più grande altrove (il bootloader fase 2, in un file). I dati dello stage 1 contengono la posizione fisica dello stage 2. Se copi l'intero dispositivo (cosa hai provato con dd), la parte dello stage 1 si trova nella stessa posizione fisica e lo stick funziona, ma il nuovo stick deve essere almeno grande come l'originale. Se si ricreano le partizioni e si copiano i file, manca la fase 1 poiché non è un file.

Penso (ma non ho verificato) che lo stadio 2 sia nella prima partizione (FAT32). In tal caso, puoi copiare quella partizione all'ingrosso e copiare anche il settore di avvio, quindi modificare la tabella delle partizioni in modo che la seconda partizione occupi esattamente lo spazio rimasto e copiare i file sulla seconda partizione. Potresti anche conservare un'immagine non elaborata del settore di avvio e della prima partizione in un file su un disco rigido (ma puoi clonarli anche da una chiavetta USB).

Creazione di un clone di dimensioni diverse

Di seguito chiamerò il dispositivo contenente lo stick originale /dev/sdbe il dispositivo contenente il clone /dev/sdc; sostituire i nomi secondo necessità. Creare punti di montaggio, se necessario. Presumo che la partizione FAT32 (all'inizio del disco) sia numerata 1 e la partizione ext3 sia numerata 2; sostituire numeri diversi, se necessario.

Prima parte, se la clonazione da un bastone:

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

Prima parte, se la clonazione da file di immagine:

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

La chiamata a partprobeè necessaria affinché il kernel ricarichi la tabella delle partizioni dal disco (si trova nel settore di avvio e il primo comando in uno dei due scenari sopra modifica il settore di avvio). Se lo ometti, otterrai errori o il kernel scriverà silenziosamente spazzatura sul bastone.

Per creare i file di immagine:

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

Ora dopo aver ottenuto il settore di avvio e la prima partizione, è necessario modificare nuovamente la tabella delle partizioni, per ridimensionare la seconda partizione. Puoi farlo automaticamente fornendo il giusto input a fdisk. Attenzione, questo è estremamente soggetto a errori e non l'ho testato. Se non ti senti completamente a tuo agio con questa parte, fallo a mano.

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

Alla fine ricaricare nuovamente la tabella delle partizioni, creare un filesystem ext3 e copiarvi i file.

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

Metodo semplificato per creare un clone più grande

Se preferisci, puoi memorizzare un'immagine dell'intero stick. Sarai in grado di utilizzare quell'immagine direttamente su qualsiasi stick che sia almeno altrettanto grande: basta copiare quell'immagine sul nuovo stick con cat <whole.img >/dev/sdc, quindi eseguire partprobe /dev/sdc(o scollegare il stick e rimetterlo dentro) per rileggere la tabella delle partizioni.

Quindi, se lo desideri, puoi ingrandire il clone. In questo ordine:

  1. Ingrandisci la partizione. Sfortunatamente, non so come farlo in modo semplice. partedpuoi farlo con il movecomando (no resize, che ridimensiona il filesystem), ma devi capire gli argomenti giusti - passa a settori ( unit s) per evitare errori di arrotondamento.
  2. Ingrandisci il filesystem. Quella parte è semplice: basta eseguire resize2fs /dev/sdc2per fare in modo che il filesystem utilizzi l'intera dimensione della partizione.

Se stai iniziando da uno stick più grande del necessario, puoi ridurlo seguendo i passaggi sopra nell'ordine inverso (prima riduci il filesystem con resize2fs, quindi riduci la partizione con parted).

In alternativa, puoi prima copiare lo stick in un file di immagine, quindi lavorare su quel file di immagine. Per accedere alle partizioni, utilizzare un dispositivo loop , associando in modo specifico una parte del file a un disco . Ecco uno schizzo dei passaggi se desideri ridurre l'immagine (avviso, non testato, procedi con attenzione e ricontrolla la matematica).

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

hmm. Non posso semplicemente usare head per copiare la prima 300mb circa della seconda partizione in un file img? Non taglierà tutto lo spazio vuoto / i blocchi vuoti alla fine del file?
Joshua Robison,

1
@Joshua: No, perché non c'è motivo per cui tutti i dati dei file siano nei primi 300 MB, e anche se fosse così non puoi semplicemente prendere parte a un filesystem del genere. Devi creare un filesystem valido della giusta dimensione. È inoltre necessario disporre di una partizione della dimensione corretta; la dimensione della partizione è memorizzata nel settore di avvio. Se preferisci iniziare da un'immagine di dimensioni minime e ingrandirla, se lo desideri, ho aggiunto un modo per farlo nella mia risposta.
Gilles 'SO- smetti di essere malvagio' il

hmm. Ho provato a copiare i file prima, ma per qualche motivo non è stato copiato tutto. Ho provato anche rsync con sudo. e penso di aver provato su root e l'ho fatto anche io .... Non funziona proprio per me. Sono sicuro che le unità non sono state montate ... comunque. Ho deciso di ridurre l'unità in gparted e quindi creare file img da quello e quindi ripristinarli su un disco più piccolo. Il pre-restringimento in gparted è stata l'unica soluzione semplice che ho trovato. Grazie per l'aiuto però.
Joshua Robison,

La tua risposta è probabilmente corretta e molto probabilmente farà quello che ti sto chiedendo. È troppo complicato per me. Quindi sono andato con il metodo pre restringimento gparted.
Joshua Robison,

c'è un refuso in questa riga head -c 512 </dev/sdb >/bev/sdc?
antonio,

3

~ $: sudo apt-get install gddrescue ddrescue

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

;

Sintassi: utility / source / drive / destination / drive --verbose

Commento: mostra i progressi e il controllo degli errori in modo da sapere se è accettabile o riattaccare da qualche parte. Puoi anche aggiungere b = blocchi di qualsiasi dimensione desideri. "gddrescue" è la versione basata su gui di "ddrescue" ma io uso solo ddrescue come scritto sopra poiché funziona senza problemi.


2
Si noti che il formato corretto è ddrescue -v /dev/sda /dev/sdb(le opzioni vengono prima dei nomi dei dispositivi / file). Grazie per aver segnalato questo strumento! Molto più facile dell'uso dd!
xmnboy,

0

Di recente avevo clonato la mia persistenza crittografata live Kali da un 16 GB a un 64 GB USB 3.0, il mio sistema operativo host è Windows 10 Pro. Non avevo tentato di clonare usando alcuna distro Linux, sono sicuro che le risposte sopra sono ciò di cui hai bisogno, ma per tutti gli utenti di Windows; Avevo usato l'assistente di partizione del disco AOMEI. Super semplice da usare, l'ho usato per partizionare il mio SSD per adattarsi a Ubuntu, ma sto divagando.

Ho dovuto assicurarmi che l'USB con cui stavo clonando fosse già stato formattato per l'avvio live. Collegato a entrambi gli USB e semplicemente cliccato con il tasto destro sull'unità da 8 GB; cliccato su copyquindi selezionato l'unità da 64 GB, ti chiederà un sacco di cose come "sei sicuro che questa sia l'unità giusta, tutto verrà cancellato" tutto quel jazz. Basta leggerlo e assicurarsi che tutto sia in ordine, in realtà non devi fare molto.

Aspetta che il processo sia finito e sei pronto. Testato ha detto USB e tutto ha funzionato!

Ho scoperto che questo è il modo più semplice almeno per me, clonare distro dal vivo da USB a USB.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.