I recently had to create a number of bootable USB flash drives to install and update systems that don’t have local CD-ROM drives. Of course, I could’ve booted the systems using PXE, but thought using USB would be quicker… How wrong I was.

After struggling for several hours with a flash drive that refused to boot no matter what I did, I discovered an interesting fact – most bootloaders won’t boot from flash drives that have 2048-byte sectors. Of course, the flash drive I was using had 2048-byte sectors… Using a flash drive with 512-byte sectors worked perfectly first time.

Depending on operating system, it may not be that easy to tell the sector size of the flash drive. If using a Unix system, you should see something useful in the kernel ring buffer (displayed by dmesg) when you insert the drive.

A non-bootable drive will display something like:
sd 9:0:0:0: [sdh] 258687 2048-byte hardware sectors (530 MB)
or
sd0: 505 MB, 126 cyl, 64 head, 32 sec, 2048 bytes/sect x 258687 sectors

A bootable one will look something like:
sd 11:0:0:0: [sdh] 2061816 512-byte hardware sectors (1056 MB)
or
sd0: 1006 MB, 1006 cyl, 64 head, 32 sec, 512 bytes/sect x 2062328 sectors