OpenWRT x86 Style Disks and Booting

Revision as of 19:58, 4 September 2023 by Root (talk | contribs)

For this experiment EXT 4 will be used (as opposed to SquashFS)

For Cloning a Drive

Copy the MBR (GRUB Stage 1 and Partition Table): dd if=/dev/sdX of=/dev/sdY bs=512 count=1

Copy the "MBR Gap" (GRUB Stage 1.5, containing the CORE.IMG file): dd if=/dev/sdX of=/dev/sdY bs=512 skip=1 count=511

Copy the First Partition (/boot Directory): dd if=/dev/sdX1 of=/dev/sdY1 bs=128M conv=noerror progress=status

Copy the Second Partition (/root equivalent): dd if=/dev/sdX2 of=/dev/sdY2 bs=128M conv=noerror progress=status

Flush any buffered information to disk: sync

Syntax Notes;

  • if: Input File (or Device)
  • of: Output File (or Device)
  • bs: "How much to copy from one device to another at a time"
  • conv=noerror: "Don't stop, just do what I told you to do, and don't give an excuse"
  • progress = status: Show the progress of the copy process (only for a certain version of DD and up)
  • sync: Write all buffered blocks to disk (just to be safe)

Other Notes

  • Copying the MBR and MBR Gap can be combined into a single step (it was done to clarify and make an explicit point that there is important code stored in the MBR Gap necessary to boot OpenWRT with GRUB): dd if=/dev/sdX of=/dev/sdY bs=512 count=512
  • The "MBR Gap" for OpenWRT's x86 "flavor" is 511 Sectors (Sectors 2 - 511, 512 is the beginning of the first partition, AKA /boot Partition). That's just how it is for OpenWRT because it is what they decided. And just as a historical note, the "MBR Gap" is almost twice as big as the entire capacity of a Commodore 1541 disk (single sided is 170K).
  • If conv=sync is used an out of space error will occur.