Usually when creating a RAID array, it is expected to transfer the data outside before creating the RAID array because creating a new RAID array is a destructive process. However, that does not necessarily apply to a RAID 1 (mirror) array that can be created using a drive with already existing data given that all the requirements for a RAID 1 array are satisfied.
A side-effect advantage of this procedure is that the data has to be copied only once after which the data can be used whilst the RAID array synchronises.
mdadm (install with aptitude or apt-get under Debian-like system).The tutorial is written under the following assumptions:
/dev/sda./dev/sdb
In order to copy over the existing partition table from the drive already containing the data (/dev/sda) to the spare drive (/dev/sdb) we issue:
sfdisk -d /dev/sda | sfdisk /dev/sdb
where:
-d tells sfdisk to dump the partition table/dev/sda is the drive containing the data/dev/sdb is the spare driveNext we create a RAID 1 array with two drives from the spare drive that does not contain any data:
mdadm --create /dev/md0 --level=mirror --raid-devices 2 /dev/sdb1 missing
where:
/dev/md0 is the RAID device to use--level=mirror is equivalent to RAID 1 mirror--raid-devices 2 specifies that the array will contain two devices/dev/sdb1 is the first partition of the spare drive that does not contain any datamissing tells mdadm to create the RAID 1 array with the second drive missing
Now we would have created a RAID 1 array referenced by the /dev/md0 device with only the spare drive /dev/sdb being a member. To confirm, issue:
cat /proc/mdstat
which should output something like:
md0 : active raid1 sdb1[0]
The next step is to format this RAID device with only one member. For instance, to use the Ext4 filesystem, we would issue:
mkfs.ext4 /dev/md0
Finally, what we are going to do is copy over the existing data from /dev/sda1 into the newly created RAID array with one missing drive. In order to do that, we mount /dev/md0 to a mount-point:
mount /dev/md0 /mnt/raid1
where:
/dev/md0 is the RAID array we just created/mnt/raid1 is a folder - can be any empty not-used folder
Then, we mount the drive that already contains data (/dev/sda1) to some other mount point:
mount /dev/sda1 /mnt/trans
And copy the data over from the drive already containing the data /dev/sda1 into the RAID array:
rsync -P -av /mnt/trans/ /mnt/raid1
which, depending on your situation, could take a while.
After all the data has been copied over, unmount all the mount points (/mnt/raid1 and /mnt/trans in this tutorial):
umount /mnt/raid1 umount /mnt/trans
and then add the drive from which we copied the data over (/dev/sda1) to the RAID 1 array:
mdadm --add /dev/md0 /dev/sda1
In order to watch the RAID array synchronising both drives you can issue:
cat /proc/mdstat
as well as get other details about the RAID array with:
mdadm --detail /dev/md0