Some Crucial SSDs have a bug that causes them to be unstable. Fortunately there’s a firmware upgrade available. Even more fortunately, in addition to the usual Windows updaters, Crucual kindly makes a version available that’s an ISO image so it’s OS independent.
Great, right? Except the ISO doesn’t actually work when you dd it to a drive. Ugh. I spent a few hours on this and finally figured out how to make this work.
First, write the ISO to your USB drive as normal (I’ll assume your USB drive is /dev/sde):
$ sudo dd bs=512k if=/tmp/crucial-m4-070h-07-00.iso of=/dev/sde
$ sudo sync
A filesystem and the data is now on your USB drive, but there’s no valid partition table and a corrupt MBR. You can see this by using fdisk:
$ sudo fdisk -l /dev/sde
Disk /dev/sde: 4048 MB, 4048551936 bytes
125 heads, 62 sectors/track, 1020 cylinders, total 7907328 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: 0x00000000
Disk /dev/sde doesn't contain a valid partition table
Ooops! However, on the ISO is a copy of the MBR that should be on the drive. Mount the drive and grab that:
$ sudo mount /dev/sde /mnt
$ cp /mnt/boot/isolinux/boot2880.img /tmp
$ sudo umount /mnt
Now, write that boot sector to your USB drive:
$ sudo dd if=/tmp/boot2880.img of=/dev/sde
Almost done. Now you can see there’s a mostly-valid partition table:
$ sudo fdisk -l /dev/sde
Disk /dev/sde: 4048 MB, 4048551936 bytes
125 heads, 62 sectors/track, 1020 cylinders, total 7907328 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: 0xc9d0c9d0
This doesn't look like a partition table
Probably you selected the wrong device.
Device Boot Start End Blocks Id System
/dev/sde1 ? 28886110 638537311 304825601 c4 DRDOS/sec (FAT-16 < 32M)
/dev/sde2 ? 1183556331 4412578037 1614510853+ 30 Unknown
/dev/sde3 ? 1325451862 2509223114 591885626+ 46 Unknown
/dev/sde4 ? 1394614348 1394635684 10668+ 45 Unknown
Better, but not quite right. The only change we need to make is to set that first partition to be bootable. Modify the disk by running fdisk without -l:
$ sudo fdisk /dev/sde
Command (m for help):
You want the a command, then when it asks for a partition, type 1:
Command (m for help): a
Partition number (1-4): 1
But that will have set it to non-bootable, so do that again:
Command (m for help): a
Partition number (1-4): 1
Then print the table to be sure:
Command (m for help): p
Disk /dev/sde: 4048 MB, 4048551936 bytes
125 heads, 62 sectors/track, 1020 cylinders, total 7907328 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: 0xc9d0c9d0
This doesn't look like a partition table
Probably you selected the wrong device.
Device Boot Start End Blocks Id System
/dev/sde1 * 28886110 638537311 304825601 c4 DRDOS/sec (FAT-16 < 32M)
/dev/sde2 ? 1183556331 4412578037 1614510853+ 30 Unknown
/dev/sde3 ? 1325451862 2509223114 591885626+ 46 Unknown
/dev/sde4 ? 1394614348 1394635684 10668+ 45 Unknown
You’re looking for that * under Boot for the first partition. Now write your changes:
Command (m for help): w
The partition table has been altered!
Calling ioctl() to re-read partition table.
Syncing disks.
$
And now your drive is ready – it should boot.