CygwinのddでUSBメモリのMBRを読み書きする

自作OSなどをUSBメモリから起動するために、USBメモリMBRを読み書きする。FreeBSDLinuxなどの環境ならば普通にインストールされてるddを使えばいいが、Windowsにはddが無い。そこでCygwinのddを使う。

まずCygwin上でのUSBメモリのデバイスノード名を調べる。

$ cat /proc/partitions
major minor  #blocks  name

    8     0 117219767 sda
    8    16 244197527 sdb
    8    32 244194455 sdc
    8    48   7897088 sdd
    8    49   7895916 sdd1

これでデバイスノード名が分かる*1。#blocksからUSBメモリのデバイスノード名の見当を付ける。より確実に見当を付けるには、USBメモリを挿す前と後で見比べたり、dfコマンドの結果や、Windowsの「コンピュータの管理」の「ディスクの管理」を見ればいい。
ここではsddが目標のUSBメモリだ。これはもちろんUSBメモリに直にアクセスできるデバイスノードなので、ここからddでMBRを読み書きできる*2

$ dd if=/dev/sdd of=mbr count=1
$ dd if=mbr of=/dev/sdd count=1

おわり。

ところで次の方法ではUSBメモリ内のパーティションへのアクセスになってしまうので、MBRに触れない。ここでUSBメモリのドライブレターは「F」とする。

$ dd if=\\.\F: of=mbr count=1

まぁ、OSの自作やってるわけじゃないんだけどね。

*1:出力は環境によって異なる

*2:もしかしたらユーザがAdministrator権限持ってないと駄目かも