ubuntu-raid1-conversion
Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
ubuntu-raid1-conversion [2009/10/29 12:01] – snarg | ubuntu-raid1-conversion [2009/10/30 17:46] (current) – snarg | ||
---|---|---|---|
Line 1: | Line 1: | ||
=====Converting a single disk Ubuntu system to RAID1 (adding a second disk)===== | =====Converting a single disk Ubuntu system to RAID1 (adding a second disk)===== | ||
===Created for Phil, using Ubuntu 9.10 Karmic Koala=== | ===Created for Phil, using Ubuntu 9.10 Karmic Koala=== | ||
- | This Procedure will take a standard install of Ubuntu, and mirror it to a spare hard disk, forming a RAID-1 array. Ubuntu by default on a standard install has 2 partitions. One for the root (/) filesystem and one for swap space. This procedure sets up individual raid arrays for each of these (root filesystem and swap). This procedure makes heavy use of the linux shell (terminal). In Ubuntu you can load a terminal from the Applications menu, under Accessories. | + | This Procedure will take a standard install of Ubuntu, and mirror it to a spare hard disk, forming a RAID-1 array. Ubuntu by default on a standard install has 2 partitions. One for the root (/) filesystem and one for swap space. This procedure sets up individual raid arrays for each of these (root filesystem and swap). This procedure makes heavy use of the linux shell (terminal). In Ubuntu you can load a terminal from the Applications menu, under Accessories. |
+ | \\ | ||
+ | \\ | ||
+ | |||
+ | {{: | ||
==1. Determine device names to be used in the procedure.== | ==1. Determine device names to be used in the procedure.== | ||
Line 20: | Line 24: | ||
Command (m for help): p | Command (m for help): p | ||
- | Disk / | + | Disk / |
- | 255 heads, 63 sectors/ | + | 255 heads, 63 sectors/ |
Units = cylinders of 16065 * 512 = 8225280 bytes | Units = cylinders of 16065 * 512 = 8225280 bytes | ||
Disk identifier: 0xeea1cf79 | Disk identifier: 0xeea1cf79 | ||
Line 132: | Line 136: | ||
Note the " | Note the " | ||
- | ==6. Format the new arrays== | + | ==6. Update RAID UUIDs in config file (mdadm.conf) and create new initramfs.== |
+ | In this step we will edit the RAID config file to tell it in the bootup procedure that it needs to assemble a software raid array. First we need to find the UUIDs (unique identifier IDs) of the raid arrays. | ||
+ | < | ||
+ | sudo mdadm --query --detail /dev/md0 | grep UUID | ||
+ | </ | ||
+ | Repeat for /dev/md1: | ||
+ | < | ||
+ | sudo mdadm --query --detail /dev/md1 | grep UUID | ||
+ | </ | ||
+ | Open a new terminal window and type the following: | ||
+ | < | ||
+ | sudo nano / | ||
+ | </ | ||
+ | Nano is a simple text editor. Navigate down to the comment "# | ||
+ | < | ||
+ | # definitions of existing MD arrays | ||
+ | ARRAY /dev/md0 uuid=997fffd8: | ||
+ | ARRAY /dev/md1 uuid=02b854fd: | ||
+ | </ | ||
+ | Ensure that you've copy and pasted the RAID UUIDs precicely, and that you haven' | ||
+ | Press CTRL+X to save the file and exit the nano text editor. | ||
+ | We now run the following command to compile the initramfs - which is one of the first things that loads when you boot your pc (just after the kernel is loaded into memory) | ||
+ | < | ||
+ | sudo update-initramfs -u | ||
+ | </ | ||
+ | ==7. Format the new arrays== | ||
The first array (/dev/md0) will be formatted as ext4 filesystem, and the second array (/dev/md1) will be formatted as swap space. Here are the commands: | The first array (/dev/md0) will be formatted as ext4 filesystem, and the second array (/dev/md1) will be formatted as swap space. Here are the commands: | ||
< | < | ||
Line 141: | Line 170: | ||
The tune2fs command sets a couple of parameters on the filesystem (turns off " | The tune2fs command sets a couple of parameters on the filesystem (turns off " | ||
- | ==7. Mount the new root array to a mountpoint== | + | ==8. Mount the new root array to a mountpoint== |
We now need to mount the newly created ext4 filesystem in /dev/md0 to a mountpoint (which means we first need to make a mountpoint). A mountpoint is a location in which a filesystem is attached, very similar to the "drive letter" | We now need to mount the newly created ext4 filesystem in /dev/md0 to a mountpoint (which means we first need to make a mountpoint). A mountpoint is a location in which a filesystem is attached, very similar to the "drive letter" | ||
< | < | ||
Line 161: | Line 190: | ||
</ | </ | ||
- | ==8. Bind-mount the old partition to a mountpoint== | + | ==9. Bind-mount the old partition to a mountpoint== |
To help in the copy process (so we dont have recursive directories) we are going to bind-mount the current root filesystem to a new mountpoint, which we will first make. This step assumes we are still working in the /mnt directory (we changed to it in the prevous step). | To help in the copy process (so we dont have recursive directories) we are going to bind-mount the current root filesystem to a new mountpoint, which we will first make. This step assumes we are still working in the /mnt directory (we changed to it in the prevous step). | ||
< | < | ||
Line 169: | Line 198: | ||
You can confirm this has worked by typing "ls / | You can confirm this has worked by typing "ls / | ||
- | ==9. Copy the data from old root partition to new root array.== | + | ==10. Copy the data from old root partition to new root array.== |
Here's the command to copy data from the old (current) root filesystem to the new empty root filesystem on the RAID-1 array (/dev/md0). This assumes our current working directory is still /mnt. You probably want to close any open programs as much as possible before you copy all the files. | Here's the command to copy data from the old (current) root filesystem to the new empty root filesystem on the RAID-1 array (/dev/md0). This assumes our current working directory is still /mnt. You probably want to close any open programs as much as possible before you copy all the files. | ||
< | < | ||
Line 176: | Line 205: | ||
You should see a verbose display of files (thats what the -v is) copied. Wait for this to finish. | You should see a verbose display of files (thats what the -v is) copied. Wait for this to finish. | ||
- | ==10. Adjust UUIDs in /etc/fstab to point to the new arrays== | + | ==11. Adjust |
We now need to edit the linux file system table (fstab) in the NEW filesystem on the RAID array, so that when the system boots up, it will be mounting the RAID array (/dev/md0) and not the first hard disk (/dev/sda1) as the root filesystem (/). | We now need to edit the linux file system table (fstab) in the NEW filesystem on the RAID array, so that when the system boots up, it will be mounting the RAID array (/dev/md0) and not the first hard disk (/dev/sda1) as the root filesystem (/). | ||
Line 185: | Line 214: | ||
</ | </ | ||
Now go back to the original terminal window and type: | Now go back to the original terminal window and type: | ||
+ | < | ||
sudo nano / | sudo nano / | ||
</ | </ | ||
- | Nano is a simple text editor. | + | Navigate down to the first " |
< | < | ||
UUID=470118f4-59ec-466a-b8d4-ed46345b1aae / | UUID=470118f4-59ec-466a-b8d4-ed46345b1aae / | ||
Line 200: | Line 230: | ||
Use CTRL+W to save the fstab and exit nano text file editor. | Use CTRL+W to save the fstab and exit nano text file editor. | ||
- | ==11. Adjust UUID in / | + | ==12. Adjust UUID in / |
- | This is a temporary | + | This step will cause the bootloader to load up using the raid array (/dev/md0) instead of the old drive (/ |
- | ==12. Unmount filesystems, | + | < |
- | ==13. Change partition type labels on first drive to " | + | sudo nano / |
- | ==14. Add old drive root partition to the new root array - making it redundant.== | + | </ |
- | ==15. Add the second member (first drive) of the swap array, making it redundant.== | + | Look for the section that refers to the first boot menu entry. You're looking for a couple of lines that look like this: |
- | ==16. Watch some rebuild stats. - all done.== | + | < |
+ | | ||
+ | | ||
+ | </ | ||
+ | Replace the both the UUID's on those lines with the UUID for /dev/md0, as descovered in the previous steps, then save the file and exit with CTRL+X | ||
+ | ==13. Unmount filesystems, | ||
+ | We are now ready to unmount the new filesystem and reboot into it. Run this: | ||
+ | < | ||
+ | sudo umount / | ||
+ | sudo umount / | ||
+ | sudo reboot | ||
+ | </ | ||
+ | Which should, if you've done everything correctly, reboot into the new system. | ||
+ | Once booted, confirm you're running from the new RAID-1 array (/dev/md0) by going to a terminal and typing "df -h" and noting the root filesystem line should be pointing at /dev/md0: | ||
+ | < | ||
+ | ~$ df -h | ||
+ | Filesystem | ||
+ | / | ||
+ | udev 249M 252K 249M 1% /dev | ||
+ | none 249M 136K 249M 1% /dev/shm | ||
+ | none 249M 116K 249M 1% /var/run | ||
+ | none 249M | ||
+ | none 249M | ||
+ | </ | ||
+ | < | ||
+ | By typing "cat / | ||
+ | ~$ cat /proc/swaps | ||
+ | Filename | ||
+ | / | ||
+ | </ | ||
+ | |||
+ | ==14. Change partition type labels on first drive to "linux raid autodetect" | ||
+ | Almost There! Now that we are successfully booted up using the new array, we need to convert the old disk (/dev/sda) to become part of the RAID1 arrays, making them redundant. First of all, use fdisk to change the partition types to "Linux raid autodetect" | ||
+ | < | ||
+ | sudo fdisk /dev/sda | ||
+ | </ | ||
+ | Using the fdisk commands (which should be familiar by now), change the partition types labels, then save and exit: | ||
+ | < | ||
+ | Command (m for help): t | ||
+ | Partition number (1-5): 1 | ||
+ | Hex code (type L to list codes): fd | ||
+ | Changed system type of partition 1 to fd (Linux raid autodetect) | ||
+ | |||
+ | Command (m for help): t | ||
+ | Partition number (1-5): 5 | ||
+ | Hex code (type L to list codes): fd | ||
+ | Changed system type of partition 5 to fd (Linux raid autodetect) | ||
+ | |||
+ | Command (m for help): p | ||
+ | |||
+ | Disk /dev/sda: 40.0 GB, 40020664320 bytes | ||
+ | 255 heads, 63 sectors/ | ||
+ | Units = cylinders of 16065 * 512 = 8225280 bytes | ||
+ | Disk identifier: 0xdcf4dcf4 | ||
+ | |||
+ | | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | |||
+ | Command (m for help): w | ||
+ | The partition table has been altered! | ||
+ | |||
+ | Calling ioctl() to re-read partition table. | ||
+ | |||
+ | WARNING: Re-reading the partition table failed with error 16: Device or resource | ||
+ | busy. | ||
+ | The kernel still uses the old table. The new table will be used at | ||
+ | the next reboot or after you run partprobe(8) or kpartx(8) | ||
+ | Syncing disks. | ||
+ | </ | ||
+ | ==15. Add old drive root partition to the new root array - making it redundant.== | ||
+ | This is a one-liner: | ||
+ | < | ||
+ | sudo mdadm --manage /dev/md0 --add /dev/sda1 | ||
+ | </ | ||
+ | ==16. Add the second member (first drive) of the swap array, making it redundant.== | ||
+ | Also a one-liner: | ||
+ | < | ||
+ | sudo mdadm --manage /dev/md1 --add /dev/sda5 | ||
+ | </ | ||
+ | ==17. Watch some rebuild stats. Dont forget the important last step.== | ||
+ | |||
+ | Type "cat / | ||
+ | |||
+ | < | ||
+ | $ cat / | ||
+ | Personalities : [raid1] [linear] [multipath] [raid0] [raid6] [raid5] [raid4] [raid10] | ||
+ | md1 : active raid1 sda5[2] sdb5[0] | ||
+ | 1493888 blocks [2/1] [U_] | ||
+ | resync=DELAYED | ||
+ | | ||
+ | md0 : active raid1 sda1[2] sdb1[0] | ||
+ | 37583936 blocks [2/1] [U_] | ||
+ | [> | ||
+ | | ||
+ | unused devices: < | ||
+ | </ | ||
+ | |||
+ | ==18. Final update to the bootloader to account for the first drive being changed.== | ||
+ | Use nano to edit your / | ||
+ | < | ||
+ | sudo nano / | ||
+ | </ | ||
+ | And make sure it looks like this: (note this should be the same as your bios hard disk boot order) | ||
+ | < | ||
+ | (hd0) / | ||
+ | (hd1) / | ||
+ | </ | ||
+ | Type this to finalise the bootloader config and Master Boot Record on both hard disks: | ||
+ | < | ||
+ | sudo update-grub | ||
+ | sudo grub-install /dev/sda | ||
+ | sudo grub-install /dev/sdb | ||
+ | </ | ||
+ | \\ | ||
+ | ALL DONE!! | ||
+ | \\ | ||
+ | update- 20091030 - Please note that at time of writing there is a bug in GRUB 1.97 which causes a boot delay of about 10-20 seconds for boot partitions on RAID-1. This is a known problem and is being worked on. Please see: [[https:// |
ubuntu-raid1-conversion.1256788871.txt.gz · Last modified: 2009/10/29 12:01 by snarg