carlmfischer.com gmirror rebuild - FreeBSD server

My decommissioned Freebsd file server was a Dell Dimension 4550 - 2.5GHz Pentium4, 384MB RAM, with 2 160GB ATA HDs. The hard drives are ad0 and ad1.

One day, I noticed a message in the /var/log/messages stated that kernel: subdisk0: detached
kernel: ado: detached
kernel: GEOM_MIRROR: Device gm0: provider ad0 disconnected.
kernel: unknown: TIMEOUT - READ_DMA retrying (1 retry left) LBA=4841935
kernel: unknown: timeout waiting to issue command
kernel: unknown: error issueing READ_DMA command
kernel: GEOM_MIRROR: Request failed (error=5). ad0[READ(offset=2479070720, length=4096)]

After troubleshooting a bit, it was obvious that ad0 had failed - a Samsung SP1604N ATA 160GB drive.
A subsequent reboot tried to rebuild the gmirror, but it was not successful.
I use smartctl to monitor the drives, but unfortunately, when the drive failed it locked the machine, and smartd did not yield any clues.
kernel: GEOM_MIRROR: Device gm0: rebuilding provider ad0.
kernel: GEOM_MIRROR: Device gm0: rebuilding provider ad0 finished.
kernel: GEOM_MIRROR: Device gm0: provider ad0 activated.
kernel: GEOM_MIRROR: Device gm0: provider ad0 disconnected.
kernel: unknown: TIMEOUT - READ_DMA retrying (1 retry left) LBA=4841935
kernel: unknown: timeout waiting to issue command
kernel: unknown: error issueing READ_DMA command
kernel: GEOM_MIRROR: Request failed (error=5). ad0[READ(offset=2479070720, length=4096)]

I issued the following command:
gmirror forget gm0
where gm0 is my gmirror label.
I then shut the machine down and removed the ad0 drive.
Replaced the ad0 drive with a Seagate 160gb hd (the ad1 disk is the same drive).
Rebooted the machine, but the machine did not recognize the new disk.
I entered the bios, disabled the disk0, and rebooted again.
The machine booted using the good ad1 disk, and when booted, I issued the following command:
gmirror insert gm0 ad0

The /var/log/messages yielded the following:
kernel: ad0: 152627MB Seagate ST3160812A 3.AAH at ata0-master UDMA33
kernel: ad1: 152627MB Seagate ST3160023A 8.01 at ata0-slave UDMA100
kernel: GEOM_MIRROR: Device gm0 created (id=295566574).
kernel: GEOM_MIRROR: Device gm0: provider ad1 detected.
kernel: GEOM_MIRROR: Device gm0: provider ad1 activated.
kernel: GEOM_MIRROR: Device gm0: provider mirror/gm0 launched.
kernel: GEOM_MIRROR: Device gm0: provider ad0 detected.
kernel: GEOM_MIRROR: Device gm0: rebuilding provider ad0.

After the rebuild, messages looked like:
kernel: GEOM_MIRROR: Device gm0: rebuilding provider ad0 finished.
kernel: GEOM_MIRROR: Device gm0: provider ad0 activated.

Once again, I rebooted the machine, went back into the bios and activated disk0. Then proceeded to boot FreeBSD, and everything looks good:
kernel: ad0: 152627MB Seagate ST3160812A 3.AAH at ata0-master UDMA100
kernel: ad1: 152627MB Seagate ST3160023A 8.01 at ata0-slave UDMA100
kernel: GEOM_MIRROR: Device gm0 created (id=295566574).
kernel: GEOM_MIRROR: Device gm0: provider ad0 detected.
kernel: GEOM_MIRROR: Device gm0: provider ad1 detected.
kernel: GEOM_MIRROR: Device gm0: provider ad1 activated.
kernel: GEOM_MIRROR: Device gm0: provider ad0 activated.
kernel: GEOM_MIRROR: Device gm0: provider mirror/gm0 launched.

All seems to be working. I set my cron to monitor both ad0 and ad1 drives with smartd, and I'll have to keep an eye on the logs.