Dit alleen mogelijk met SlugOS versie 5.3 en hoger!

Als je niet deze RAID 1 configuratie wil gebruiken, ga dan naar het volgende artikel.

In deze beschrijving worden 2 externe USB harddisk van Western Digital (1TB) in RAID 1 geschakeld. Deze howto moet uitgevoerd voordat in een normale situatie met 1 USB harddisk, de disk geinitialiseerd zou worden (de-usb-harddisk-initialseren-op-de-nslu2). We uit van 2 identieke harddisks.

Stap 1: De USB harddisks aansluiten

Plug de 2 USB harddisks aan de NSLU2, deze worden nu automatisch gemount (meestal nog FAT32).

Wacht tot de lampjes op de beide disks in rust zijn, dan zijn ze eventueel gemount. Check dit met het volgende commando:

$ mount

rootfs on / type rootfs (rw)  
/dev/root on / type jffs2 (rw)  
proc on /proc type proc (rw)  
sysfs on /sys type sysfs (rw)  
/dev/root on /dev/.static/dev type jffs2 (rw)  
udev on /dev type tmpfs (rw,size=2048k,mode=755)  
tmpfs on /var/volatile type tmpfs (rw,mode=755)  
tmpfs on /dev/shm type tmpfs (rw,mode=777)  
usbfs on /proc/bus/usb type usbfs (rw)  
devpts on /dev/pts type devpts (rw,gid=5,mode=620)  
/dev/sda1 on /media/sda1 type vfat (rw,sync,fmask=0022,dmask=0022,codepage=cp437,iocharset=utf8) 
/dev/sdb1 on /media/sdb1 type vfat (rw,sync,fmask=0022,dmask=0022,codepage=cp437,iocharset=utf8)

De 2 onderste /dev/sda1 en /dev/sdb1 zijn de nieuw gemounte harddisks. Deze moeten met het umount commando afgekoppeld worden.

$ umount /dev/sda1  
$ umount /dev/sdb1

Controleer dat weer met het mount commando:

$ mount

rootfs on / type rootfs (rw)  
/dev/root on / type jffs2 (rw)  
proc on /proc type proc (rw)  
sysfs on /sys type sysfs (rw)  
/dev/root on /dev/.static/dev type jffs2 (rw)  
udev on /dev type tmpfs (rw,size=2048k,mode=755)  
tmpfs on /var/volatile type tmpfs (rw,mode=755)  
tmpfs on /dev/shm type tmpfs (rw,mode=777)  
usbfs on /proc/bus/usb type usbfs (rw)  
devpts on /dev/pts type devpts (rw,gid=5,mode=620)  

Nu zijn we klaar om de disken te koppelen.

Stap 2: De partities van de harddisk aanmaken op disk 1

De partities van de harddisk verwijderen.

$ fdisk /dev/sda

Druk op ‘p’ om de huidige partitie tabel te bekijken.
Druk op ‘d’ om een partitie te verwijderen.
Druk op ‘n’ om een partitie aan te maken.

Command (m for help): **p**  
Device Boot Start End Blocks Id System  
/dev/sda1 1 121601 976760001 c Win95 FAT32 (LBA)  

Command (m for help): d
Selected partition 1

Command (m for help): n
Command action  
e extended  
p primary partition (1-4)  
p  
Partition number (1-4): 1  
First cylinder (1-30401, default 1): <enter>  
Using default value 1  
Last cylinder or +size or +sizeM or +sizeK (1-30401, default 30401): +3000M
Command (m for help): n  
Command action  
e extended  
p primary partition (1-4)  
p  
Partition number (1-4): 2  
First cylinder (367-30401, default 367): <enter>  
Using default value 367  
Last cylinder or +size or +sizeM or +sizeK (367-30401, default 30401): +512M
Command (m for help): n  
Command action  
e extended  
p primary partition (1-4)  
p  
Partition number (1-4): 3  
First cylinder (430-30401, default 430): <enter>  
Using default value 430  
Last cylinder or +size or +sizeM or +sizeK (430-30401, default 30401): <enter>  
Using default value 30401

Command (m for help): t  
Partition number (1-4): 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-4): 2  
Hex code (type L to list codes): fd  
Changed system type of partition 2 to fd (Linux raid autodetect)
Command (m for help): t  
Partition number (1-4): 3  
Hex code (type L to list codes): fd  
Changed system type of partition 3 to fd (Linux raid autodetect)
Command (m for help): p
Disk /dev/sda: 1000.2 GB, 1000204886016 bytes  
255 heads, 63 sectors/track, 121601 cylinders  
Units = cylinders of 16065 * 512 = 8225280 bytes  
Device Boot Start End Blocks Id S ystem
/dev/sda1_ 1 366 2939863+ fd Linux raid autodetect
/dev/sda2_ 367 429 506047+ fd Linux raid autodetect_
/dev/sda3_ 430 121601 973314090 fd Linux raid autodetect_
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.  
Syncing disks.

Je kunt een eventuele error 16 negeren, dit komt waarschijnlijk door de automount van /media/sda1.

Stap 3: De partities van de harddisk aanmaken op disk 2

Doe voorgaande stap ook voor de 2e harddisk:

$ fdisk /dev/sdb

Zie stap 2.

Stap 4: De metadisk devices voor de root en swapspace aanmaken

De 2 harddisks moeten als 1 device worden gezien, een zogenaamde metadisk. Met het volgende commando wordt deze metadisk aangemaakt en de 2 partities op beide harddisks worden dan gekoppeld.

$ mdadm --create --auto=yes /dev/md1 --level=1 --raid-devices=2 /dev/sda1 /dev/sdb1
mdadm: /dev/sda1 appears to be part of a raid array:  
level=raid1 devices=2 ctime=Sun Apr 12 17:02:11 2009  
mdadm: /dev/sdb1 appears to be part of a raid array:  
level=raid1 devices=2 ctime=Sun Apr 12 17:02:11 2009  
Continue creating array? y
mdadm: array /dev/md1 started  

En voor de swap space op de partities /dev/sda2 en /dev/sdb2:

$ mdadm --create --auto=yes /dev/md2 --level=1 --raid-devices=2 /dev/sda2 /dev/sdb2
mdadm: /dev/sda2 appears to be part of a raid array:  
level=raid1 devices=2 ctime=Sun Apr 12 19:02:11 2009  
mdadm: /dev/sdb2 appears to be part of a raid array:  
level=raid1 devices=2 ctime=Sun Apr 12 19:02:11 2009  
Continue creating array? y
mdadm: array /dev/md2 started.  

Let op!! Nog niet het commando geven voor /dev/sda3 en /dev/sd3 ! Dit is het grote volume en daar wil je niet op wachten. (ongeveer 26 uur voor 1TB)

Stap 5: Het synchroniseren van de harddisks

Met het volgende commando kan de status van de metadisk worden opgevraagd:

$ cat /proc/mdstat
Personalities : [raid1]  
md2 : active raid1 sdb2[1] sda2[0]  
505920 blocks [2/2] [UU]  
resync=DELAYED  

md1 : active raid1 sdb1[1] sda1[0]  
2939776 blocks [2/2] [UU]  
[===>.................] resync = 17.8% (524672/2939776) finish=4.1min speed=9781K/sec  
unused devices: <none>

Let op!!! Wacht tot het synchroniseren klaar is! (Ongeveer 5 minuten)

Stap 6: Het root filesysteem en de swapspace op md1 en md2 zetten

Maak een root file system met:

$ mkfs.ext3 /dev/md1
mke2fs 1.38 (30-Jun-2005)  
Filesystem label=  
OS type: Linux  
Block size=4096 (log=2)  
Fragment size=4096 (log=2)  
368000 inodes, 734944 blocks  
36747 blocks (5.00%) reserved for the super user  
First data block=0  
23 block groups  
32768 blocks per group, 32768 fragments per group  
16000 inodes per group  
Superblock backups stored on blocks:  
32768, 98304, 163840, 229376, 294912  

Writing inode tables: done  
Creating journal (16384 blocks): done  
Writing superblocks and filesystem accounting information: done  

This filesystem will be automatically checked every 33 mounts or  
180 days, whichever comes first. Use tune2fs -c or -i to override.  

Maak een swap space met:

$ mkswap /dev/md2
Setting up swapspace version 1, size = 518057984 bytes_  

Aktiveer swap space met:

$ swapon /dev/md2  

Stap 7: Het data filesysteem op het op md3 zetten

Doe hetzelfde voor de /dev/sda3 en de /dev/sdb3 partities van beide harddisks:

$ mdadm --create --auto=yes /dev/md3 --level=1 --raid-devices=2 /dev/sda3 /dev/sdb3

Maak een data filesystem met:

$ mkfs.ext3 /dev/md3  

Let op!! Als je het home filesysteem /dev/md3 aanmaakt voordat je de swap op /dev/md2 aanmaakt, daarvoor is niet voldoende geheugen in de NSLU2 en krijg je de melding:

/dev/md3: Memory allocation failed while setting up superblock

Maak de mdadm.conf als volgt aan:

$ echo 'DEVICE /dev/sd*[0-9]' > /etc/mdadm.conf  
$ mdadm --detail --scan >> /etc/mdadm.conf
$ cat /etc/mdadm.conf
DEVICE /dev/sd*[0-9]  
ARRAY /dev/md0 level=raid1 num-devices=2 UUID=d0e1f7a6:32b1f749:04eec38f:1f5201fd  
ARRAY /dev/md3 level=raid1 num-devices=2 UUID=be1c239a:3d03e0b1:7ae947ed:fbbaac08  
ARRAY /dev/md2 level=raid1 num-devices=2 UUID=b0b5a006:9f4a3222:5bc4df4c:1270dd8a_  

Stap 8: Het kopieeren van root filesystem van flash naar harddisk

Het turnup commando installeert het root filesystem van de flash naar de harddisk, maar dit is nog niet mogelijk omdat het syncen van de RAID het root filesystem in gebruik houd. Hierdoor kan dit niet umounted worden. Dus stoppen we het syncen even, omdat dit een langdurig proces is.

Om het proces te versnellen, een disk van de RAID in fail zetten, zodat het syncen stopt:

$ mdadm /dev/md3 --fail /dev/sda3

Het turnup commando werkte niet voor een RAID device, maar er is een patch voor. Doe het volgende commando:

$ sed s/' UUID="$uuid" '/' "$device" '/ </sbin/turnup >/tmp/turnup-patched

Installeer nu het root filesystem met het gepatchte script en herstart het systeem daarna:

$ sh /tmp/turnup-patched disk -i /dev/md1 -t ext3
$ reboot

Stap 9: Het afronden van de RAID installatie

Check of het swap geheugen aanwezig is met:

$ free

Check met het volgende commando de status van de /dev/md3 RAID partitie:

$ mdadm --detail /dev/md3

Voeg de disk weer toe om het syncen te starten:

$ mdadm /dev/md3 --add /dev/sda3

In /etc/fstab moet de volgende regel worden toegevoegd:

/dev/md3 /opt ext3 defaults 0 0

Ook moet in fstab voor de ‘/’-directory noatime als optie gezet worden, dit om de harddisk eerder in spindown te laten gaan:

/dev/md1 / ext3 defaults,noatime 1 1

Stap 10: Swap op /dev/md2

Ik heb het niet voor elkaar gekregen om de swap zo te configureren dat het standaard op /dev/md2 werd gezet. Elke keer weer /dev/sda2 voor swap gekozen. Daarom heb ik in het een script gezet.

$ cd /etc/init.d  
$ vi mdadm_init

Zet in de mdadm_init file het volgende scriptje:

$ vi /etc/init.d/mdadm_init

#!/bin/sh  
#  
# mdadm_init  
#  
/sbin/swapoff /dev/sda2  
/sbin/mdadm --assemble /dev/md2 /dev/sda2 /dev/sdb2  
/sbin/mkswap /dev/md2  
/sbin/swapon /dev/md2  

Maak het script executeerbaar en laat het automatisch opstarten bij powerup.

$ chhmod +x mdadm_init  
$ cd /etc/rc3.d  
$ ln -s ../init.d/mdadm_init S97mdadm_init

Stap 11: Foutmeldingen van de RAID via de mail (optioneel)

Als je een mailtje wilt krijgen wanneer er een fout optreedt in de RAID, dan moet je het volgende doen.

Eerst de mail installeren als dat nog niet gebeurd is, zie: Versturen van mail vanaf de NSLU2, en dan de volgende commandos:

$ vi mdadm_init

Zet onderin de mdadm_init file het volgende commando erbij:

mdadm --monitor --scan --mail=arjan@gmail.com --daemonise > /var/run/mdadm

Zie voor tips en trucks op deze site: Tips en trucks voor Raid 1 (Mirroring) met de NSLU2 en SlugOS 5.3

Zie ook voor RAID 1 configuratie: www.nslu2-linux.org/wiki/SlugOS/TurnupToRAID