MBAのSDカードスロットを使ってRaspberryPI用のSDカードにGentooがインストールされたディスクイメージを書き込む方法
私のGentooマシンにはSDカードスロットがついてなくて,RaspberryPIのためだけに買ってくるのもなんなので,MBAについているSDカードスロットを使って書き込みを行おうと思った.しかしOSXの/sbin/fdiskはutil-linuxのそれとは全く使い方が違って使いたくなかったし,そもそもGentooマシンのほうがいろいろやりやすいので,OSX上でインストール作業をするのは諦めて,ディスクイメージを作ってからそれを丸っとSDカードに書き込む方法をとることにした.
# SDカードと同じサイズのディスクイメージを作る.512はセクタサイズ,30881792はセクタ数 $ dd if=/dev/zero of=sdcard.img bs=512 count=30881792 $ /sbin/fdisk sdcard.img # 普通にパーティショニングする.3番目のパーティションを30881758にしているのは,SDカードのlast usable sectorがそこまでだから. ... Command (m for help): p Disk sdcard.img: 15.8 GB, 15811477504 bytes, 30881792 sectors Units = sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0x9160bad5 Device Boot Start End Blocks Id System sdcard.img1 2048 835379 416666 c W95 FAT32 (LBA) sdcard.img2 835584 2932735 1048576 82 Linux swap / Solaris sdcard.img3 2932736 30881758 13974511+ 83 Linux # ディスクイメージの各パーティションをdevice-mapperでfsにマップしてやる.これで普通のブロックデバイスのパーティンションが如く扱える. $ sudo kpartx -a sdcard.img $ ls -l /dev/mapper total 0 crw------- 1 root root 10, 236 Apr 27 21:34 control lrwxrwxrwx 1 root root 7 Apr 30 13:23 loop0p1 -> ../dm-0 lrwxrwxrwx 1 root root 7 Apr 30 13:23 loop0p2 -> ../dm-1 lrwxrwxrwx 1 root root 7 Apr 30 13:23 loop0p3 -> ../dm-2 # 諸々physical fsを作ってやる sudo mkfs.vfat -F 16 /dev/mapper/loop0p1 sudo mkswap /dev/mapper/loop0p2 sudo mkfs.ext4 /dev/mapper/loop0p3 # mountする sudo mkdir -p /mnt/raspberrypi/boot sudo mount /dev/mapper/loop0p3 /mnt/raspberrypi sudo mount /dev/mapper/loop0p1 /mnt/raspberrypi/boot # 普通にGentooとRaspberryPIのファームウェア系をインストールする $ cd /mnt/raspberrypi/ ... # umountしてdevice-mapperの解放 sudo umount /mnt/raspberrypi/boot sudo umount /mnt/raspberrypi/ sudo kpartx -d /dev/loop0 # ループバックデバイスのアロケーションはkpartxが勝手にやってくれるが, # 解放はしてくれないので自分でやる. $ /sbin/losetup -a /dev/loop0: []: (/home/kawamuray/sdcard.img) $ sudo /sbin/losetup -d /dev/loop0 # SDカードにMBA経由で書き込む $ ssh -C <MBA address> sudo dd if=/dev/stdin of=/dev/disk2 bs=512 count=30881792 < sdcard.img
ちゃんと動いた.