I failed to setup bootable software RAID1 array on my debian server. The array itself worked ok - I successfuly created working and synchronized two-disk array. I updated grub configuration, rebooted, and bah:
Error: unknown filesystem.
grub rescue>
Any attempt to ls or insmod ended up with Error: unknown filesystem.
Take step back
After some attempts to make it work, I decided that I want to take step back, remove raid and get back to single disk solution. I booted linux mint live cd.
In order to do any raid-related actions mdadm is needed:
apt-get install mdadm
I was able to assemble and mount the array, and browse the files:
mdadm --assemble /dev/md0 /dev/sda1 /dev/sdb1
Where sda1 and sdb1 are the two raided partitions.
I could mount the array and check that it works, and contains all the files:
mkdir /mnt/raid
mount /dev/md0 /mnt/raid
cat /proc/mdstat
Removing one drive from the array
However, what I need was remove one disk from the array, and restore it to old setup. To remove a disk from array:
mdadm /dev/md0 --fail /dev/sda1
mdadm /dev/md0 --remove /dev/sda1
Then I changed its partition type to Linux:
fdisk /dev/sda
Then in fdisk shell hit t (for change type), 1 (for partition number), 83 (for Linux partition type) and in the end w for write the changes.
I tried to mount it..
mkdir /mnt/noraid
mount /dev/sda1 /mnt/noraid
But failed:
mount: unknown filesystem type 'linux_raid_member'
Tried to explicity set type to ext4:
mount -t ext4 /dev/sda1 /mnt/noraid
But got:
mount: mount /dev/sda1 on /mnt/noraid failed: Structure needs cleaning
I run fsck to clean it up:
fsck.ext4 /dev/sda1
It found several errors, and warned me that if I will continue to fix it, then several data loss is possible. It wiped all the data, which was not a problem since there was still second disk in the array.
Afterwords I had clean, ext4 partition that could be mounted:
mount /dev/sda1 /mnt/noraid
Copy system from raided disk to standard Linux ext4 partition
Next step was restoring the contents of sda1. I assembled and mounted the degradated array:
mdadm --assemble /dev/md0 /dev/sdb1
mkdir /mnt/raid
mount /dev/md0 /mnt/raid
And copied all the files to clean sda1 disk:
cp -dpRx /mnt/raid/* /mnt/noraid
Swap partition
I had also swap partition raided, partitions /dev/sda2 and /dev/sdb2. I removed sda2 from the array in the same way as sda1, changed its partition type to Linux, and make it swap:
mkswap /dev/sda2
Install grub
To install the boot loader I needed to chroot to the sda1:
mount -t proc /proc /mnt/noraid/proc
mount --rbind /sys /mnt/noraid/sys
mount --make-rslave /mnt/noraid/sys
mount --rbind /dev /mnt/noraid/dev
mount --make-rslave /mnt/noraid/dev
chroot /mnt/noraid /bin/bash
Then I reconfigured the grub:
dpkg-reconfigure grub-pc
And choosed /dev/sda to install the bootloader.
Also I had to edit /etc/fstab and change all mdX entires to point to sdaX, so it looked like this:
/dev/sda1 / ext4 errors=remount-ro 0 1
/dev/sda2 none swap sw 0 0
Then I rebooted. Grub showed up, I choosed system to run.. and black screen. The system did not start. Ok, so again, booted live cd, chroot into sda1. I thought that maybe initramfs needs update:
update-initramfs -u -k `uname -r`
Got warnings:
W: initramfs-tools configuration sets RESUME=UUID=xxxxxxxxxxxxxxxxxxxxx
W: but no matching swap device is available.
I had to remove the file with old swap uuid:
rm /etc/initramfs-tools/conf.d/resume
And update initramfs again. Rebooted, and it worked. Debian started without problems.