Copie MBR y arranque la partición a un disco más pequeño

Estoy usando una tarjeta SD de 32GB para mi raspberry pi. He transferido con éxito el sistema operativo ( Archlinux ARM ) a un disco duro USB. Lo que significa que solo necesito la partición de arranque en la tarjeta SD.

Una tarjeta de 32GB que solo usa alnetworkingedor de 100MB es una terrible pérdida de espacio y tengo una tarjeta SD más pequeña con 4GB.

¿Cómo copio el MBR y la primera partición de la tarjeta de 32GB en la tarjeta de 4GB?

Intenté save el MBR y la primera partición de la tarjeta más grande con dd :

 dd if=/dev/sdb of=mbr_image bs=446 count=1 dd if=/dev/sdb1 of=boot_image 

Luego creé una nueva tabla de partición en la tarjeta más pequeña que se ve exactamente como la tabla en la tarjeta original de 32 GB:

 Device Boot Start End Blocks Id System /dev/sdc1 * 2048 194559 96256 c W95 FAT32 (LBA) 

Finalmente copié las imágenes previamente almacenadas en mi tarjeta más pequeña:

 dd if=mbr_image of=/dev/sdc bs=446 count=1 dd if=boot_image of=/dev/sdc1 

Todo se ve bien en fdisk pero no funciona. Mi raspberry no hace nada cuando bash arrancar desde la tarjeta más pequeña.

¿Dónde está el error?

En mi caso, he tenido problemas solo para copyr MBR. Para mí, los siguientes pasos funcionaron:

  1. fdisk la nueva tarjeta con las particiones que desee.

  2. Monta la nueva tarjeta y cp los files de partición que quieras (supongo que es solo una partición de arranque) desde el anterior al nuevo. Modifique (en caso de que esté utilizando grub2) /boot/grub/grub.cfg en la nueva tarjeta para que el UUID de la partición de arranque sea ahora el de su tarjeta de 4GB (use blkid para identificar el UUID).

  3. Arranque el sistema con la tarjeta de 32GB y monte la tarjeta de 4GB.
  4. mount --bind / dev, / proc y / sys de la tarjeta anterior a la nueva.
  5. chroot a la tarjeta de 4 GB montada.
  6. grub-install en su tarjeta de 4GB.

EDITAR: Los pasos 4-6 pueden ser reemplazados por grub-install --boot-directory=YourPathToMounted4GBBoot /dev/your4GBcard

De acuerdo con esta instrucción, al hacer una copy de security del MBR, desea usar bs=512 y luego bs=446 al copyrlo en la tarjeta más pequeña.

 dd if=/dev/mmcblk0 of=mbr_image bs=512 count=1 dd if=mbr_image of=/dev/mmcblk0 bs=446 count=1 

No tengo experiencia práctica con Raspberry Pi, así que no sé si la label del dispositivo importa. El sitio referencedo sugiere usar /dev/mmcblk0 para el MBR y /dev/mmcblk01 para la partición del dispositivo.

EDITAR:

Pasé por alto esto antes. Los pasos que probó y el enlace que mencioné parecen carecer del formatting del sistema de files. Después de crear /dev/sdc1 usando fdisk, tendrá que formatear el sistema de files para /dev/sdc1 usarlo.

 mkfs.vfat -F 32 /dev/sdc1 

Después de esto, ejecute dd if=boot_image of=/dev/sdc1 y debería funcionar.