Le raid soft, est une technique de mirroring. Toutes les donnees ecrites sur un disque sont inscrites d'une facon similaire sur un autre. En cas de panne, les donnees seront lues depuis le second disque. Attention, il s'agit d'une technique visant a couvrir des risques de panne des disques et non du systeme.
Nous supposerons que le disque est decoupe de la maniere suivante :
/dev/hda1 /
/dev/hda2 SWAP
/dev/hda3 /home
/dev/hda5 /usr
/dev/hda6 /tmp
/dev/hda7 /var
Pour commencer, il faut installer les outils propres au Raid. Pour cela, executez la commande suivante si vous etes sous Debian:
apt-get install raidtools2
Les differents patch pour les kernels se situent sur ftp://ftp.kernel.org/pub/linux/daemons/raid/alpha ou http://download.unesp.br/linux/debian/pool/main/r/raidtools2/
Pour verifier si votre kernel supporte correctement le raid, vous pouvez visualiser le fichier /proc/mdstat qui contient toutes les informations relatives au raid. Actuellement, il ressemble a ceci :
Personalities : [raid1]
read_ahead not set
unused devices:
Il convient egalement de remplir le fichier /etc/raidtab qui contient toutes les informations necessaires a la construction du raid, comme indique ci-dessous:
# /
raiddev /dev/md0
raid-level 1
nr-raid-disks 2
chunk-size 32
nr-spare-disks 0
persistent-superblock 1
device /dev/hdb1
raid-disk 0
device /dev/hda1
failed-disk 1
# swap
raiddev /dev/md1
raid-level 1
nr-raid-disks 2
chunk-size 32
nr-spare-disks 0
persistent-superblock 1
device /dev/hdb2
raid-disk 0
device /dev/hda2
failed-disk 1
# /home
raiddev /dev/md2
raid-level 1
nr-raid-disks 2
chunk-size 32
nr-spare-disks 0
persistent-superblock 1
device /dev/hdb3
raid-disk 0
device /dev/hda3
failed-disk 1
# /usr
raiddev /dev/md3
raid-level 1
nr-raid-disks 2
chunk-size 32
nr-spare-disks 0
persistent-superblock 1
device /dev/hdb5
raid-disk 0
device /dev/hda5
failed-disk 1
# /tmp
raiddev /dev/md4
raid-level 1
nr-raid-disks 2
chunk-size 32
nr-spare-disks 0
persistent-superblock 1
device /dev/hdb6
raid-disk 0
device /dev/hda6
failed-disk 1
# /var
raiddev /dev/md5
raid-level 1
nr-raid-disks 2
chunk-size 32
nr-spare-disks 0
persistent-superblock 1
device /dev/hdb7
raid-disk 0
device /dev/hda7
failed-disk 1
Il faut maintenant activer les partitions Raid et les initialiser :
mknod /dev/md4 b 9 4
mknod /dev/md5 b 9 5
mkraid –really-force /dev/md0
mkraid –really-force /dev/md1
mkraid –really-force /dev/md2
mkraid –really-force /dev/md3
mkraid –really-force /dev/md4
mkraid –really-force /dev/md5
mke2fs /dev/md0
mkswap /dev/md1
mke2fs /dev/md2
mke2fs /dev/md3
mke2fs /dev/md4
mke2fs /dev/md5
Il faut maintenant monter toutes les partitions Raid pour y copier le contenu de /dev/hda
mkdir /mnt/md
mount -t ext2 /dev/md0 /mnt/md
mkdir /mnt/md/home
mount -t ext2 /dev/md2 /mnt/md/home
mkdir /mnt/md/usr
mount -t ext2 /dev/md3 /mnt/md/usr
mkdir /mnt/md/tmp
mount -t ext2 /dev/md4 /mnt/md/tmp
mkdir /mnt/md/var
mount -t ext2 /dev/md5 /mnt/md/var
mkdir /mnt/md/proc
mkdir /mnt/md/mnt
mkdir /mnt/md/mnt/cdrom
mkdir /mnt/md/mnt/floppy
cd /
tar zcvf /tmp/img.tar.gz bin boot dev etc home initrd lib root sbin usr var
cd /mnt/md
tar zxvf /tmp/img.tar.gz
chmod 777 /mnt/md/tmp
Il faut maintenant modifier le /etc/fstab et le /mnt/md/etc/fstab pour que le systeme puisse attaquer directement les partitions Raid.
# /etc/fstab: static file system information.
#
#
/dev/md0 / ext2 defaults,errors=remount-ro 0 1
/dev/md1 none swap sw 0 0
proc /proc proc defaults 0 0
/dev/fd0 /floppy auto defaults,user,noauto 0 0
/dev/cdrom /cdrom iso9660 defaults,ro,user,noauto 0 0
/dev/md2 /home ext2 rw 0 2
/dev/md3 /usr ext2 rw 0 2
/dev/md4 /tmp ext2 rw 0 2
/dev/md5 /var ext2 rw 0 2
Il faut maintenant remplacer le type de toutes les partitions de /dev/hdb ( 82 et 83 ), par FD , Linux raid autodetec, avec la commande cfdisk /dev/hdb.
Il est ensuite necessaire de creer une disquette de boot :
dd if=/boot/vmlinuz-2.4.9 of=/dev/fd0 bs=2k
rdev /dev/fd0 /dev/md0
rdev -r /dev/fd0 0
rdev -R /dev/fd0 1
Enfin, il faut demonter les partitions et arreter le Raid avant de rebooter la machine.
umount /mnt/md/var
umount /mnt/md/usr
umount /mnt/md/tmp
umount /mnt/md/home
umount /mnt/md
raidstop /dev/md5
raidstop /dev/md4
raidstop /dev/md3
raidstop /dev/md2
raidstop /dev/md1
raidstop /dev/md0
Maintenant que la machine a ete rebootee, il faut modifier le fichier /etc/raidtab et remplacer tous les failed- disk par raid-disk pour obtenir :
# /
raiddev /dev/md0
raid-level 1
nr-raid-disks 2
chunk-size 32
nr-spare-disks 0
persistent-superblock 1
device /dev/hdb1
raid-disk 0
device /dev/hda1
raid-disk 1
# swap
raiddev /dev/md1
raid-level 1
nr-raid-disks 2
chunk-size 32
nr-spare-disks 0
persistent-superblock 1
device /dev/hdb2
raid-disk 0
device /dev/hda2
raid-disk 1
# /home
raiddev /dev/md2
raid-level 1
nr-raid-disks 2
chunk-size 32
nr-spare-disks 0
persistent-superblock 1
device /dev/hdb3
raid-disk 0
device /dev/hda3
raid-disk 1
# /usr
raiddev /dev/md3
raid-level 1
nr-raid-disks 2
chunk-size 32
nr-spare-disks 0
persistent-superblock 1
device /dev/hdb5
raid-disk 0
device /dev/hda5
raid-disk 1
# /tmp
raiddev /dev/md4
raid-level 1
nr-raid-disks 2
chunk-size 32
nr-spare-disks 0
persistent-superblock 1
device /dev/hdb6
raid-disk 0
device /dev/hda6
raid-disk 1
# /var
raiddev /dev/md5
raid-level 1
nr-raid-disks 2
chunk-size 32
nr-spare-disks 0
persistent-superblock 1
device /dev/hdb7
raid-disk 0
device /dev/hda7
raid-disk 1
Il faut enfin changer le type de toutes les partitions de /dev/hda ( 82, 83 ) par FD (de la meme facon que pour /dev/hdb) grace a la commande cfdisk /dev/hda.
Il faut ensuite rebooter avec la disquette.
Il faut maintenant modifier le fichier etc/lilo.conf pour lui preciser qu'il doit attaquer les partitions Raid. Pour cela, il faut remplacer les lignes
boot=/dev/hda
root=/dev/hda1
par
boot=/dev/md0
root=/dev/md0
et activer le lilo par
lilo -v
Il est temps d'activer le Raid grace a:
raidhotadd /dev/md0 /dev/hda1
raidhotadd /dev/md1 /dev/hda2
raidhotadd /dev/md2 /dev/hda3
raidhotadd /dev/md3 /dev/hda5
raidhotadd /dev/md4 /dev/hda6
raidhotadd /dev/md5 /dev/hda7
Il convient egalement d'installer le MBR sur le deuxieme disque grace a la commande
install-mbr /dev/hdb