FreeBSDのRaspbery PI用イメージを1GBのSDカード用に変換する

やること

FreeBSDのRaspbery PI用イメージを1GBのSDカード用に変換する。 配布されているイメージは1GBなのだが、手元にあったSDカードは953MBとちょっと足りない。 そのため、実際のSDカードのサイズに合わせる。

方法

SDカードと同じサイズのファイルを作成する。 それに公式イメージの内容をdump&restoreする。

macでイメージを作成する。

dd if=/dev/disk2 of=sd.img bs=1m

dump & restore

コピー先の準備

mdconfig -x 63 -y 255 -f sd.img
gpart create -s MBR md0
gpart add -t '\!12'  -a 63 -s 64m md0
gpart set -a active -i 1 md0
newfs_msdos -L MSDOSBOOT -F 16 /dev/md0s1
gpart add -t freebsd md0
gpart create -s BSD md0s2
gpart add -t freebsd-ufs md0s2
newfs -U md0s2a
Tunefs -L roots /dev/md0s2a
mount /dev/md0s2a /var/tmp/sd

コピー

mdconfig -f FreeBSD-11.2-RELEASE-arm-armv6-RPI-B.img
echo '/dev/md1s2a         /var/tmp/src          ufs     rw      1       0' >> /etc/fstab
mount /var/tmp/src /dev/md1s2a
dump -0 -h 0 -f - /media | restore -x -f - -v
sync
umount /var/tmp/src
umount /var/tmp/sd

起動用パーティションもコピー

mount -t msdosfs /dev/md0s1 /var/tmp/sd
mount -t msdosfs /dev/md1s1 /var/tmp/src
cp -pRv /var/tmp/src/* /var/tmp/sd/.
sync
umount /var/tmp/src
umount /var/tmp/sd

mdconfig -d -u 0
mdconfig -d -u 1