2012-06-11

Recovery From Half An MD Mirrored Pair

In the process of decommissioning an old physical server I wanted to recover some data from the server's drives.  The failing server was configured with a SATA RAID1 pair that contained a logical volume group (LVM).  So I could either boot up the old server, change it's IP address, and recover the data over the network.... or I could just recover the data directly from one of the drives [they are a mirrored pair after all].   But only having a USB caddy for one SATA drive the trick was to get the RAID1 array to come up on my laptop with only one drive.

Step#1) Connect the drive.
beast:~ # fdisk -l
Disk /dev/sdd: 80.0 GB, 80026361856 bytes
Disk identifier: 0x0007236b
   Device Boot    Start       End   Blocks Id  System
/dev/sdd1   *        63    530144   265041 fd  Linux raid autodetect
/dev/sdd2        530145   8916074  4192965 fd  Linux raid autodetect
/dev/sdd3       8916075 156296384 73690155 fd  Linux raid autodetect
Text 1: Connect the drive and look at the partition table of the new SD device.
Yep.  There are three RAID partitions.  I know the first tiny one was for "/boot" and the second larger one was for swap - the one I wanted was the third, and largest, partition which was the physical volume group that contained the data I wanted to recover.

Step#2) Create a "new" RAID device.
beast:~ # mdadm --build --force --level=0 --raid-devices=1 /dev/md3 /dev/sdd3
mdadm: array /dev/md3 built and started.
Text 2: Create a new level 0 [no redundancy] RAID device with mdadm from a redundant portion of the previous RAID device.
The only gotcha here is to use an MD device that is not already in use.  Since I already have an md0, md1, and md2 on my laptop I create this new device as md3.

Step#3) Activate the volume group.
beast:/home/awilliam # vgchange -ay
  4 logical volume(s) in volume group "Beast" now active
  3 logical volume(s) in volume group "KPAYL17" now active
Text 3: Scan for and activate the old volume group.
vgchange -ay of course finds the volume group on my laptop "Beast" but also discovers and activates the volume group that existed on the LVM physical volume in the new/old RAID volume. 
Aside: Note that prior to this point I never wrote anything to the recovered volume, I'm just building up around and on top of it.   This is also a good point to point out why every server, SAN, or JBOD should use an LVM volume group with a unique name.  If every volume group is named "System" then recovery just becomes that much more tedious - trying to activate a "System" volume group on a host that already has a "System" volume group...
Step#4) Mount a recovered logical volume.
beast:/home/awilliam # mount /dev/KPAYL17/SRV /mnt
Text 4: Now I can mount the SRV logical volume from the recovered volume group from the physical volume on the new/old RAID device from the physical drive from the old server.  Whew!
Data recovered!  Have coffee.