Clonación de una memoria USB de arranque en una memoria de diferente tamaño

11

HARDWARE: 2 unidades flash USB de 8GB
DISTRO: Mint 9 Xfce persistente Live Cd

Una unidad flash USB tiene dos particiones:
1) FAT32 700MB Mint 9 partición
2) ext3 7.3GB casper-rwpartición

OBJETIVO:
Quiero hacer un duplicado de esa unidad flash USB porque no quiero pasar por el momento de instalar y configurar desde cero nuevamente.

EXPERIENCIA:
1) He descubierto que ddno funciona para este trabajo porque si una de mis unidades flash tiene incluso 1 MB de tamaño diferente, que a veces lo son, entonces la copia se corrompe.

2) Descubrí que usar gpartedy preformatear la segunda unidad como la primera y luego rsync'' crear cada partición individualmente no funciona porque, por alguna razón, algunos archivos no se copian y la unidad no se puede iniciar.

Quiero mantener mi bastón de trabajo y simplemente hacer copias del mismo y configurar los bastones para mis amigos. De esta manera, si tomo otro palo, siempre tendré mi palo base sentado esperando.

Joshua Robison
fuente
¿Qué gestor de arranque usas (syslinux?). Considera eliminar esa queja de tu publicación, ya que no agrega ningún valor a tu pregunta.
Mat
Utilicé el instalador usb mint live, así que todo fue automático. Estoy esperando que el proceso de clonación evitará trabajar con gestores de arranque y copiar mi actual conf gestor de arranque
Joshua Robison

Respuestas:

5

Introducción

Para una unidad con particiones de PC (que es lo que encontrará en la mayoría de las memorias USB), el gestor de arranque consiste en una pequeña parte al comienzo de la unidad (el gestor de arranque de la etapa 1, en el sector de arranque de la unidad) y un mayor parte en otro lugar (el gestor de arranque de la etapa 2, en un archivo). Los datos de la etapa 1 contienen la ubicación física de la etapa 2. Si copia todo el dispositivo (con lo que intentó dd), la parte de la etapa 1 está en la misma ubicación física y el dispositivo funciona, pero el dispositivo nuevo debe ser al menos igual que Grande como el original. Si recrea las particiones y copia los archivos, se está perdiendo la etapa 1 ya que no es un archivo.

Creo (pero no he comprobado) que la etapa 2 está en la primera partición (FAT32). Si es así, puede copiar esa partición al por mayor, y también copiar el sector de arranque, luego editar la tabla de particiones para que la segunda partición ocupe exactamente el espacio restante y copiar los archivos en la segunda partición. También podría mantener una imagen en bruto del sector de arranque y de la primera partición en un archivo en un disco duro (pero también puede clonarlos desde una memoria USB).

Hacer un clon de diferente tamaño

A continuación llamaré al dispositivo que contiene el dispositivo original /dev/sdby al dispositivo que contiene el clon /dev/sdc; sustituya los nombres según sea necesario. Crea puntos de montaje si es necesario. Supongo que la partición FAT32 (al comienzo del disco) está numerada 1 y la partición ext3 está numerada 2; sustituya diferentes números si es necesario.

Primera parte, si clona desde un palo:

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

Primera parte, si se clona desde archivos de imagen:

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

La llamada a partprobees necesaria para que el núcleo vuelva a cargar la tabla de particiones desde el disco (está en el sector de arranque, y el primer comando en cualquiera de los escenarios anteriores modifica el sector de arranque). Si lo omite, obtendrá errores o el núcleo escribirá basura silenciosamente en el palo.

Para hacer los archivos de imagen:

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

Ahora, una vez que tenga el sector de arranque y la primera partición, debe editar la tabla de particiones nuevamente para cambiar el tamaño de la segunda partición. Puede hacer esto automáticamente alimentando la entrada correcta a fdisk. Advertencia, esto es extremadamente propenso a errores, y no lo he probado. Si no se siente completamente cómodo con esta parte, hágalo 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

Finalmente, vuelva a cargar la tabla de particiones, cree un sistema de archivos ext3 y copie los archivos allí.

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

Método simplificado para hacer un clon más grande.

Si lo prefiere, puede almacenar una imagen de todo el palo. Podrá usar esa imagen directamente en cualquier dispositivo que sea al menos igual de grande: simplemente copie esa imagen en el dispositivo nuevo cat <whole.img >/dev/sdc, luego ejecute partprobe /dev/sdc(o desenchufe el dispositivo y vuelva a colocarlo) para volver a leer la tabla de particiones.

Luego, si lo desea, puede agrandar el clon. En este orden:

  1. Ampliar la partición. Desafortunadamente, no sé cómo hacer esto de una manera simple. partedpuede hacerlo con el movecomando (no resize, que cambia el tamaño del sistema de archivos), pero necesita descubrir los argumentos correctos: cambie a sectores ( unit s) para evitar errores de redondeo.
  2. Ampliar el sistema de archivos. Esa parte es fácil: simplemente ejecute resize2fs /dev/sdc2para hacer que el sistema de archivos use todo el tamaño de la partición.

Si está comenzando desde un dispositivo más grande de lo necesario, puede reducirlo siguiendo los pasos anteriores en el orden inverso (primero reduzca el sistema de archivos con resize2fs, luego reduzca la partición con parted).

Alternativamente, primero puede copiar el dispositivo a un archivo de imagen, luego trabajar en ese archivo de imagen. Para acceder a las particiones, use un dispositivo de bucle , que asocie específicamente una parte del archivo a un disco . Aquí hay un boceto de los pasos si desea reducir la imagen (advertencia, no probado, proceda con cuidado y vuelva a verificar las matemáticas).

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- deja de ser malvado'
fuente
hmm ¿No puedo usar head para copiar los primeros 300 mb de la segunda partición en un archivo img? ¿No cortará todo el espacio vacío / bloques vacíos al final del archivo?
Joshua Robison
1
@Joshua: No, porque no hay ninguna razón por la cual todos los datos del archivo estarían en los primeros 300 MB, e incluso si fuera así, no puedes simplemente formar parte de un sistema de archivos como ese. Debe crear un sistema de archivos válido del tamaño correcto. También necesita tener una partición del tamaño correcto; El tamaño de la partición se almacena en el sector de arranque. Si prefiere comenzar desde una imagen de tamaño mínimo y ampliarla si lo desea, he agregado una forma de hacerlo en mi respuesta.
Gilles 'SO- deja de ser malvado'
hmm Intenté copiar los archivos antes, pero por alguna razón no todo se copió. También probé rsync con sudo. y creo que probé su root y lo hice también ... Simplemente no funciona para mí. Estoy seguro de que las unidades no estaban montadas ... de todos modos. Decidí reducir el tamaño de la unidad en gparted y luego crear archivos img a partir de eso y luego restaurarlos en un disco más pequeño. La reducción previa en gparted fue la única solución simple que pude encontrar. Gracias por tu ayuda sin embargo.
Joshua Robison
Su respuesta probablemente sea correcta y probablemente hará lo que le pido. Es demasiado complicado para mí. Así que fui con el método de pre encogimiento separado.
Joshua Robison
¿hay algún error tipográfico en esta línea head -c 512 </dev/sdb >/bev/sdc?
antonio
3

~ $: sudo apt-get install gddrescue ddrescue

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

;

Sintaxis: utilidad / fuente / unidad / destino / unidad --verbose

Comentario: muestra el progreso y la comprobación de errores para que sepa si es aceptable o cuelga en algún lugar. También puede agregar b = cualquier tamaño de bloques que desee. "gddrescue" es una versión basada en gui de "ddrescue", pero solo uso el ddrescue como se escribió anteriormente, ya que funciona sin problemas.

SierraJuliet
fuente
2
Tenga en cuenta que el formato correcto es ddrescue -v /dev/sda /dev/sdb(las opciones aparecen antes que los nombres de los dispositivos / archivos). ¡Gracias por señalar esta herramienta! ¡Mucho más fácil que usar dd!
xmnboy
0

Recientemente había clonado mi persistencia encriptada en vivo Kali de un USB 3.0 de 16 GB a 64 GB, mi sistema operativo host es Windows 10 Pro. No había intentado clonar usando ninguna distribución de Linux, estoy seguro de que las respuestas anteriores son lo que necesita, pero para cualquier usuario de Windows; Había usado el asistente de partición de disco AOMEI. Súper simple de usar, lo usé para particionar mi SSD para que se ajuste a Ubuntu, pero estoy divagando.

Tenía que asegurarme de que el USB al que estaba clonando ya estaba formateado para el arranque en vivo. Enchufó ambos USB y simplemente hizo clic derecho en la unidad de 8GB; copyhaga clic en y luego seleccione la unidad de 64 GB, le preguntará un montón de cosas como "si está seguro de que esta es la unidad correcta, todo se borrará" todo ese jazz. Simplemente léalo y asegúrese de que todo esté en orden, realmente no tiene que hacer mucho.

Solo espere a que termine el proceso y ya está todo listo. Probado dijo USB y todo funcionó!

Descubrí que esta es la forma más fácil, al menos para mí, clonando distribuciones en vivo de USB a USB.

Soy nuevo aqui
fuente