Transfer OpenBSD from one disk to another
364 words, 2 minutes
For some reason, I need to switch my main (and only) disk running OpenBSD. As it is a production machine, I want to do it fast and painless.
The system will go from the internal SSD disk to an external USB FlashVoyagerGT stick. Yeah, quite weird, but this is temporary :) Anyway, here are the directions.
Connect the second disk to the machine, check its name, initialize the MBR, create the partition and the filesystem(s):
# fdisk -i sd1
Do you wish to write new MBR and partition table? [n] y
Writing MBR at offset 0.
# disklabel -E sd1
Label editor (enter '?' for help at any prompt)
> a c
(...)
> a b
(...)
> w
> q
# newfs sd1a
/dev/rsd1a: 15287.9MB in 31309568 sectors of 512 bytes
(...)
# shutdown -h now
Shutdown NOW!
Now boot your system in single-user mode and clone the data from the initial disk to the second one:
boot> boot -s
(...)
Enter pathname of shell or RETURN for sh: /bin/ksh
# mount /dev/sd1a /mnt
# mount_mfs -s 4096m swap /tmp
# cd /mnt
# dump -0f - /dev/sd0a | restore -rf -
Another option is to use the tar
command:
# mount /dev/sd1a /mnt
# tar cpzXf - / | tar xpzf - -C /mnt
Note that, in some case, you may get an error such as “tar: Link name too long for ustar usr/local/lib/GNUstep/SOGo/(...)
”. AFAIK, this is a limitation of
the OpenBSD tar implementation which limits a filename at 100 characters.
We can now check that both disk have the same content and reboot (to install the MBR) properly:
# df -h
# shutdown -h now
Reboot the system and, in the OpenBSD loader, force to boot on the secondary disk:
boot> boot hd1a:/bsd -s
(...)
Enter pathname of shell or RETURN for sh: /bin/ksh
# /usr/mdec/installboot -n -v /boot /usr/mdec/biosboot sd0
# shutdown -h now
The primary disk can now be removed and the system will boot on the previously “secondary disk” ; as soon as the bios is configured to ;-)
If everything went well, you now run the system from the new system.
Source: Adding extra disks in OpenBSD