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