I’ve received some hits on my blog of people looking how to write the FreeBSD memstick.img image to a USB flash drive under Windows. The official FreeBSD procedure works great, but only applies if you already have access to a FreeBSD box. Accomplishing the same under Windows is more of a hassle, but not too much.
The solution: download John’s Newbigin’s dd for Windows. This is an enhanced version of dd which also lets you list off raw devices in Windows — including USB sticks.
In the below example, I have a 4GB USB flash drive (HP, model v100w) connected on a USB port, under Windows XP SP3. This is the drive I want 8.0-RC2-amd64-memstick.img written to. Bolded text is used for denoting commands I’ve typed, as well as the device strings associated with the USB flash drive:
C:\>dd --list
rawwrite dd for windows version 0.5.
Written by John Newbigin <jn@it.swin.edu.au>
This program is covered by the GPL. See copying.txt for details
Win32 Available Volume Information
\\.\Volume{1ff1b266-ab71-11de-b1e8-806d6172696f}\
link to \\?\Device\HarddiskVolume1
fixed media
Mounted on \\.\c:
\\.\Volume{808faa36-bdbc-11de-a116-806d6172696f}\
link to \\?\Device\HarddiskVolume2
fixed media
Mounted on \\.\d:
\\.\Volume{1ff1b262-ab71-11de-b1e8-806d6172696f}\
link to \\?\Device\CdRom0
CD-ROM
Mounted on \\.\e:
\\.\Volume{3794d0ff-abb4-11de-9377-00221578190a}\
link to \\?\Device\CdRom1
CD-ROM
Mounted on \\.\f:
\\.\Volume{ec4923e1-c907-11de-a118-00221578190a}\
link to \\?\Device\Harddisk1\DP(1)0-0+12
removeable media
Mounted on \\.\g:
NT Block Device Objects
\\?\Device\CdRom0
size is 2147483647 bytes
\\?\Device\CdRom1
size is 2147483647 bytes
\\?\Device\Harddisk0\Partition0
link to \\?\Device\Harddisk0\DR0
Fixed hard disk media. Block size = 512
size is 300069052416 bytes
\\?\Device\Harddisk0\Partition1
link to \\?\Device\HarddiskVolume1
\\?\Device\Harddisk0\Partition2
link to \\?\Device\HarddiskVolume2
\\?\Device\Harddisk1\Partition0
link to \\?\Device\Harddisk1\DR17
Removable media other than floppy. Block size = 512
size is 4009754624 bytes
\\?\Device\Harddisk1\Partition1
link to \\?\Device\Harddisk1\DP(1)0-0+12
Removable media other than floppy. Block size = 512
size is 4009730048 bytes
...
The device string we want is the NT Block Device, not the Win32 Volume, and we’re interested in the Partition0 entry. Now that we know the device path, we can write memstick.img directly to that, using the exact same block size as what the official FreeBSD procedure recommends.
Note that the conv=sync parameter has been removed (not needed here, and this version of dd doesn’t understand it anyway), and I’ve added the --progress flag which indicates how many bytes have been written in real-time (useful).
Finally: please be sure you pick the correct device string! I won’t be held accountable if you screw this up and destroy your Windows machines’ hard disk. :-)
C:\>dd if=8.0-RC2-amd64-memstick.img of=\\?\Device\Harddisk1\Partition0 bs=10240 --progress rawwrite dd for windows version 0.5. Written by John Newbigin <jn@it.swin.edu.au> This program is covered by the GPL. See copying.txt for details 1,044,858,880 102037+0 records in 102037+0 records out
Voilà.
2009/12/15 at 09:16
That’s a very helpful article, many thanks for making it available :o)