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/sdb
y 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 partprobe
es 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:
- Ampliar la partición. Desafortunadamente, no sé cómo hacer esto de una manera simple.
parted
puede hacerlo con el move
comando (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.
- Ampliar el sistema de archivos. Esa parte es fácil: simplemente ejecute
resize2fs /dev/sdc2
para 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