Upgrading a RAID-5 Arrary

I’m in the beginning stages of upgrading my Linux software RAID-5 array that’s used to store all kinds of content.  I’ve currently got a 4 drive array (320G drives in a 3 drive array with a hot-spare) set up in my home server.  One of the drive finally died the other day (4 years old or so) and as expected, the hot-spare kicked into service.  I could lose another drive and things would be okay, but it’s not comforting to think about that as all the data isn’t backed up regularly (the important stuff is.)  The server runs an ASUS K8N-E Deluxe board and I happen to have a spare one of those that I use as my testing motherboard.  This gave me the opportunity to install Centos 5.4 on a spare drive to build the new array (1.5TB Samsung drives — well it will when the rest of the drives get here.)  The K8N-E Deluxe uses the Silicon Image 3114 chipset for on-board RAID.  I use it as a simple 4 port SATA controller since I much prefer using Linux software RAID since if the motherboard fails for any reason, the RAID array can be transferred to a new motherboard without any issues.  And the Sil 3114 chipset is where my problems began…

Upon plugging in the new drive into one of the Sil 3114 ports, the motherboard would hang on reading the drive size.  It turns out that the version of the Sil 3114 firmware in the K8N-E Deluxe BIOS is very, very old and will not recognize drives that are 750G and larger.  This post on the ASUS forums revealed that a guy put a later Sil 3114 BIOS into a K8N-E Deluxe BIOS image.  So, that saved me the trouble of having to figure out how to make a custom BIOS myself.  Yay.  Next hurdle, flashing the darn thing…

I have a spare floppy drive laying around.  The biggest problem is that I don’t have spare floppy disk (media).  What I do have are a lot of USB thumb drives.  Getting a boot image that I could do something with in Mac OS X was shall we say, “Challenging”.  I could have booted up my Windows installation in VMWare Fusion to do everything there, but there’s not much fun in that.  I read a post about using QEMU in Linux to accomplish the same thing.  I had never used QEMU before so it sounded like a great way to spend a Tuesday night.

The Mac version of QEMU is simply called Q and it’s a GUI front-end.  Unfortunately with the GUI, there is no way to make use of a RAW device which is what I need to use since I want to put the data on the physical USB drive.  Fortunately, there is a command line version of the emulator that the front-end simply calls.  So after downloading a Windows 98 SE floppy disk image I simply ran the following command line from iTerm:

/Applications/Q.app/Contents/MacOS/i386-softmmu.app/Contents/MacOS/i386-softmmu -hda /dev/diskX -fda ~/Downloads/Windows98_SE.img -boot a

In the above /dev/diskX is the device name of the USB drive.  The Windows98_SE.img is a 1.44MB floppy disk image.  -boot a tells the emulated BIOS to boot from the virtual floppy drive.

Then it was a matter of using FDISK to partition the USB drive, FORMAT it and copying the DOS system files to it (SYS C:).

From there, I could shut down QEMU and in Mac OS X’s Finder copy the BIOS update and updater to the USB drive.  Then I simply plugged it into the K8N-E Deluxe and booted off of the USB drive.  The BIOS update worked like a champ.  The 1.5TB drive is recognized by the Sil 3114 chipset and I’m currently running a badblocks test to exercise the one drive that I have so far.

The rest of the drive should be here tomorrow so I’ll run some of the drives through their paces and build the new array.  Then I need to do the whole process again on the production server.  Fun stuff! :-)

About this entry