Software Raid 1???

Software besorgen und anwenden
Post Reply
Message
Author
nostrike
Posts: 15
Joined: 31. Oct 2003 8:23
Location: 82178 Puchheim

Software Raid 1???

#1 Post by nostrike »

Hallo Linuxer,

also nachdem ich nun in diesem Forum schon viel gelesen habe, bin ich nun total verwirrt und möchte erst mal ein paar Profis fragen bevor ich an diese Geschichte gehe. Habe zwar in der Vergangenheit schon einige Hardware Raids eingerichtet und sogar zum laufen gebracht, aber noch nie unter Linux und auch kein Software Raid.

Ich habe vier neue Festplatten in mein System eingebaut. Habe nun also fünf.



1. IDE 12 GB Bootplatte = /dev/hda. Ist die alte Platte und bleibt auch so.

2. SCSI 4 GB Seagate ST34371 an Symbios Logic 53c875 SCSI Controller SCSI-ID 0 = sda partitioniert in sda1 + sda2
3. SCSI 4 GB Seagate ST34371 an Symbios Logic 53c875 SCSI Controller SCSI-ID 1 = sdb
4. SCSI 4 GB Quantum Atlas II an Symbios Logic 53c875 SCSI Controller SCSI-ID 2 = sdc partitioniert in sdc1 + sdc2
5. SCSI 4 GB Quantum Atlas II an Symbios Logic 53c875 SCSI Controller SCSI-ID 3 = sdd

Nun habe ich 4 User angelegt und die sollen jeweils eine halbe SCSI Platte bekommen und das ganze soll mit Software Raid 1 gespiegelt werden.

So nun brauch ich Euren Rat wie ich das aufteilen soll????

Ich möchte nun die Platten:
sda1 mit sdb1
sda2 mit sdb2
sdc1 mit sdd1
sdc2 mit sdd2

spiegeln:

so hat jeder User 2 GB gespiegelt.

Meine User sind
sito
utag
peme
hama

Alle User sind unter dem /home Directory gemountet. Das soll auch so bleiben, nur eben auf den neuen Platten.

Wie muß ich nun vorgehen, damit ich das Raid 1 installieren kann ohne die bereits vorhandenen Daten zu verlieren? Sind nur ganz wenige, kann also in ein anderes Ersatzdirectory gespeichert werden auf der IDE Festplatte.

Welche Partitions muß ich anlegen mit welchem System - reiser / ext2-3/ usw.

Wie geht das mit dem Raid anlegen???
Hab das noch nie gemacht und hab mich auch nicht unter Yast in Raid reingetraut.

Ich hoffe da kennt sich jemand gut aus.

Danke schon mal

Peter

pingu_
Posts: 58
Joined: 13. Mar 2004 22:02

#2 Post by pingu_ »

Mit RedHat funktioniert's folgendermassen (unter SuSE ist es sicherlich ähnlich):

Unbedingt vorher noch ein Backup machen....

Zuerst ist folgendes Tool notwendig (wenn nicht vorhanden mit YAST oder RedHat Package Manager nachinstallieren):
raidtools-1.00.3-*.*
Dann werden die RAID- Partitionen erstellt: (wenn die Partitionen schon erstellt sind muss der Partitionstyp geändert werden.)

Wechseln des Typs:
fdisk /dev/sda
Partitionstyp von /dev/sda1 ändern:
Command (m for help): t
Partition Number: 1
Hex code (type L to list codes): fd
Partitionstyp von /dev/sda2 ändern:
Command (m for help): t
Partition Number: 2
Hex code (type L to list codes): fd
Command (m for help):wq

Dann wird für jede RAID- Partition (sdb1/sdb2; sdc1/sdc2 & sdd1/sdd2) das gleiche wie oben beschrieben gemacht. (/dev/sdb /dev/sdc /dev/sdd)

Dann wird die Datei /etc/raidtab erstellt, um das RAID zu konfigurieren:

>> # vi /etc/raidtab (root rechte)
>> editiere die Datei folgendermassen:

i (insert)

raiddev /dev/md0
raid-level 1
nr-raid-disks 1
nr-spare-disks 0
persistent-superblock 1
chunk-size 4

device /dev/sda1
raid-disk 0
device /dev/sdb1
raid-disk 1

raiddev /dev/md1
raid-level 1
nr-raid-disks 1
nr-spare-disks 0
persistent-superblock 1
chunk-size 4

device /dev/sda2
raid-disk 0
device /dev/sdb2
raid-disk 1

raiddev /dev/md2
raid-level 1
nr-raid-disks 1
nr-spare-disks 0
persistent-superblock 1
chunk-size 4

device /dev/sdc1
raid-disk 0
device /dev/sdd1
raid-disk 1

raiddev /dev/md3
raid-level 1
nr-raid-disks 1
nr-spare-disks 0
persistent-superblock 1
chunk-size 4

device /dev/sdc2
raid-disk 0
device /dev/sdd2
raid-disk 1

Speichere die Datei ab:

drücke die ESC- taste dann: :wq


Dann:
mkraid /dev/md0
mkraid -f /dev/md0
raidstart /dev/md0
mk2fs /dev/md0
erstellen eines Verzeichnis um das RAID- device zum ersten mal zu mounten:
mkdir /mnt/raid_ab1
RAID- Device mounten:
mount /dev/md0 /mnt/raid_ab1
Dann alle Daten vom ersten user: sito in dieses neu erstellte RAID- Device kopieren:
cp -r /home/sito /mnt/raid_ab1
Dann das RAID- device unmounten:
umount /mnt/raid_ab1

mkraid /dev/md1
mkraid -f /dev/md1
raidstart /dev/md1
mk2fs /dev/md1
erstellen eines Verzeichnis um das RAID- device zum ersten mal zu mounten:
mkdir /mnt/raid_ab2
RAID- Device mounten:
mount /dev/md0 /mnt/raid_ab2
Dann alle Daten vom ersten user: utag in dieses neu erstellte RAID- Device kopieren:
cp -r /home/utag /mnt/raid_ab2
Dann das RAID- device unmounten:
umount /mnt/raid_ab2

nun noch das gleiche für die restlichen zwei RAID- device (md2 & md3).. andere mount- Verzeichnisse (/mnt/raid_cd1 für peme und /mnt/raid_cd2 für hama).

Dann muss noch gewährleistet werden, dass die Verzeichnisse beim starten von Linux automatisch gemounted werden: (zuerst noch backup machen !!!)
cp /etc/fstab /root/fstab.backup
dann:
>> vi /etc/fstab
>> editiere die Datei folgendermassen:

i (insert
/dev/md0 /home/sito ext3 defaults 1 2
/dev/md1 /home/utag ext3 defaults 1 2
/dev/md2 /home/peme ext3 defaults 1 2
/dev/md3 /home/hama ext3 defaults 1 2

Speichere die Datei ab:

drücke die ESC- taste dann: :wq

>> PC rebooten: reboot

Dann Kontrolle: mount
nun sollten die oben erstellen RAID- Device automatisch gemounted sein :

das dort stehen dann u.a folgende Aussagen:
....
/dev/md0 on /home/sito type ext3 defaults
/dev/md1 on /home/utag type ext3 defaults
/dev/md2 on /home/peme type ext3 defaults
/dev/md3 on /home/hama type ext3 defaults
....

erst wenn ALLE Daten im /home/... verfügbar sind können nun die mount- point- Verzeichnisse /mnt/raid_*** gelöscht werden.

rm -fr /mnt/raid_***

it works very well...


:)

nostrike
Posts: 15
Joined: 31. Oct 2003 8:23
Location: 82178 Puchheim

#3 Post by nostrike »

Hallo pingu_

Super Dankeeeeee,

hab das ganze schon mal angelegt. sieht nun so aus.

fstab

/dev/hda2 / reiserfs defaults 1 1
/dev/hda1 swap swap pri=42 0 0
devpts /dev/pts devpts mode=0620,gid=5 0 0
proc /proc proc defaults 0 0
/dev/cdrom /media/cdrom auto ro,noauto,user,exec 0 0
/dev/fd0 /media/floppy auto noauto,user,sync 0 0
/dev/md0 /home/utag reiserfs defaults 1 2
/dev/md1 /home/ito reiserfs defaults 1 2
usbdevfs /proc/bus/usb usbdevfs noauto 0 0
/dev/md3 /home/daten reiserfs defaults 1 2
/dev/md2 /home/server/HEL_MUN reiserfs defaults 1 2


raidtab


raiddev /dev/md0
raid-level 1
nr-raid-disks 2
nr-spare-disks 0
persistent-superblock 1
chunk-size 4
device /dev/sda1
raid-disk 0
device /dev/sdb1
raid-disk 1

raiddev /dev/md1
raid-level 1
nr-raid-disks 2
nr-spare-disks 0
persistent-superblock 1
chunk-size 4
device /dev/sda2
raid-disk 0
device /dev/sdb2
raid-disk 1

raiddev /dev/md2
raid-level 1
nr-raid-disks 2
nr-spare-disks 0
persistent-superblock 1
chunk-size 4
device /dev/sdc1
raid-disk 0
device /dev/sdd1
raid-disk 1


raiddev /dev/md3
raid-level 1
nr-raid-disks 2
nr-spare-disks 0
persistent-superblock 1
chunk-size 4
device /dev/sdc2
raid-disk 0
device /dev/sdd2
raid-disk 1


Funktioniert auch alles ganz gut - bis auf:

Nun ist mir eine Idee gekommen und da steige ich nicht ganz durch.
Vielleicht kannst Du mir helfen.

Angenommen die Disk2 SCSI-ID 1 steigt aus.

Habe das ganze mal simuliert, da ich die Disks im externen SCSI Chasis mit Wechselrahmen habe, habe ich einfach Disk2 ausgeschaltet:

Normal sieht das so aus :

Disk 1 / SCSI-ID 0 / sda
Disk 2 / SCSI-ID 1 / sdb
Disk 3 / SCSI-ID 2 / sdc
Disk 4 / SCSI-ID 3 / sdd

sda = sda1 + sda2
sdb = sdb1 + sdb2
sdc = sdc1 + sdc2
sdd = sdd1 + sdd2

md0 = sda1 + sdb1
md1 = sda2 + sdb2
md2 = sdc1 + sdd1
md3 = sdc2 + sdd2

Nachdem Disk 2 aus ist, sieht es aber dann so aus :

Disk 1 / SCSI-ID 0 / sda
Disk 2 / failed
Disk 3 / SCSI-ID 2 / sdb
Disk 4 / SCSI-ID 3 / sdc

sda = sda1 + sda2
sdb = sdb1 + sdb2
sdc = sdc1 + sdc2
sdd = entfällt

Das Raid besteht nun aus:

md0 = sda1 + sdb1 ------- aber in echt vom letzten Boot ist es so ------- md0 = sda1 + sdc1
md1 = sda2 + sdb2 ------- aber in echt vom letzten Boot ist es so ------- md1 = sda2 + sdc2
md2 = sdc1 + entf ------- aber in echt vom letzten Boot ist es so ------- md2 = sdd1 + entf
md3 = sdc2 + entf ------- aber in echt vom letzten Boot ist es so ------- md3 = sdd2 + entf

nachdem Disk 2 wieder aktiviert war, hatte ich auf HEL_MUN, wo bereits Daten waren,
keine Daten mehr.
Also überschreibt das Raid bei einem Diskausfall die gesamte Disk, oder?
Auch bekam ich keine Meldung, das eine Disk fehlt.
Ich hab das ganze mit Yast angelegt und danach die Einträge überprüft - alles OK.

Hab ich da irgend etwas falsch gemacht?
Gibt es einen Mechanismus, der schon beim Startup prüft ob alle Disken da sind oder kann das Suse 9.0 Software-Raid nicht.
Dieser Mechanismus müßte die SCSI-ID prüfen um feststellen zu können ob alle Disken da sind. Anders ist das nicht möglich und dann darf er selbstverständlich sdb in meinem Fall nicht vergeben.

Ich hoffe Du kannst mir da weiterhelfen!!!!!


Gruß Peter

pingu_
Posts: 58
Joined: 13. Mar 2004 22:02

#4 Post by pingu_ »

Hallo nostrike,
sorry, ich arbeite nur versuchsweise auf SuSe normalerweise bevorzuge ich RedHat. Beim Start von RedHat Linux und der Fedora Versionen wird die Raidkonfiguartion vor dem mounten der FS geprüft. Ich muss Deine Konfig mal auf einem Suse testen. Ich werde das sobald wie möglich kontollieren.
Wie wurde die Disk 2 ausgeschaltet?? wurde der PC/server hierfür ausgeschaltet. Wenn ja (so wie ich die konfig ansehe:
Disk 1 / SCSI-ID 0 / sda
Disk 2 / failed
Disk 3 / SCSI-ID 2 / sdb
Disk 4 / SCSI-ID 3 / sdc
wurde der PC nur mit 3 stat 4 disks gebootet und desshalb wurde die Disk 2 nicht als instaliert angommen (von BIOS und dem Linux start). Desshalb ist die Disk 3 nun sdb.... anstelle von der Disk2.
Um zu überprüfen, ob ds Raid funktioniert, sollte mit hotswapable SCSI- Disk der RADI- Test während dem laufenden Betrieb geprüft werden.
So ist wahrscheinlich auch der Verlust der Daten von dem user HEL_MUN zu erklären:
Zuerst war alles OK:
sda = sda1 + sda2
sdb = sdb1 + sdb2
sdc = sdc1 + sdc2
sdd = sdd1 + sdd2

md0 = sda1 + sdb1
md1 = sda2 + sdb2
md2 = sdc1 + sdd1
md3 = sdc2 + sdd2

Dann wurde die Disk 2 entfernt/ abgeschaltet:
Disk 1 / SCSI-ID 0 / sda
Disk 2 / failed
Disk 3 / SCSI-ID 2 / sdb
Disk 4 / SCSI-ID 3 / sdc

Beim erneuerten Linux- start wurde das Raid neu konfiguriert, da die Disk2 nicht mehr vorhanden war :
md0 = sda1 + sdb1 (sda + sdb) war aber vorher SCSI 0 + 1 jetzt 0 +2
md1 = sda2 + sdb2 (sda + sdb) war aber vorher SCSI 0 + 1 jetzt 0 +2
md2 = sdc1 + sdd1 (sdc + sdd) war aber vorher SCSI 2 + 3 jetzt 3 + ??
md3 = sdc2 + sdd2 (sdc + sdd) war aber vorher SCSI 2 + 3 jetzt 3 + ??
Dann wurde die Disk 2 wieder aktiviert. So kam es wie es schon am Anfang war.

Ich bin mir sicher, dass diese veränderungen im RAID- System den Verlust der Daten zu verursachen hat.
So wurde nach dem Entferne verschiedene Partitionen miteinder verglichen, die daten waren nicht gleich und so sind sicher die daten verloren gegangen.

Ich komme wieder zurück wenn ich mehr weiss....

greet pingu_

pingu_
Posts: 58
Joined: 13. Mar 2004 22:02

#5 Post by pingu_ »

Hi,
ich bin im Moment immer noch am installieren von Suse unter vmware.....
Zur Info!!!!!!!
zuerst mal hab ich da eine fehlerhafte Konfig geschrieben:

Die Einträge: nr-raid-disks 1 in der raidtab- datei müssen flogender massen gändert werden:
nr-raid-disks 2 (somit sind 2 anstelle nur einer disk) im Raid-Device (md0 - md3) sorry, ist mein fehler........

:?

Aber in Deiner Config hab ich gesehen, dass der Eintrag richtig war... dies wurde sicher durch die config durch YAST richtig gestellt....... hat also nichts mit Deinem Problem zu tun...

pingu_
Posts: 58
Joined: 13. Mar 2004 22:02

#6 Post by pingu_ »

Hi hostrike,
Es ist nun wirklich so, dass Dein Raid nach dem Entfernen der sdb total verschoben wurde.
Eine Möglichkeit, das Raid zu testen ist: wenn Du den PC abstelltst, dann eine SCSI- disk entfernst, dann eine andere (neue oder defekte) SCSI- Disk in diesen slot einschibst und erst dann den PC wieder hochfährst....wird beim start des Raid ein sichtbar sein, ob das RAID funktioniert.... cat /proc/mdstat
Die Kontrolle, ob alle SCIS- DIsk angeschlossen sind, kann sicher mit einem scrpt, dass vor dem initialisieren des RAID, gestartet wird überprüft werden.
Ich versuch mal ob ich ein derartiges script erstellen kann.....

:wink:

pingu_
Posts: 58
Joined: 13. Mar 2004 22:02

#7 Post by pingu_ »

Hallo,
hier ist nun ein script- Versuch, um das problem mit der SCSI- ID zu beheben:

Das Script muss noch an die jeweilige Konfiguration der Hardware und des RAIDs angepasst werden!!!!!!


ps. Ein "Profi" sieht an diesem Script sicher, dass ich keine grosse Ahnung vom Erstellen von Scripts habe, aber es funktioniert.... (RedHat) auf SUSE sollte es auch funktionieren

1. Füge das folgende Script in eine Datei ein.
z.B. /home/USER/scsiscript

2. mit chmod 700 /home/USER/scsiscript wird die das file mit executable rechten verändert

3. alle RAID- Device stoppen.
als root:
init 3
umount /dev/mdx (x=anzahl RAIDDEVICE; command muss für jedes RAIDDEVICE ausgeführt werden)
raidstop /dev/mdx (x=anzahl RAIDDEVICE; command muss für jedes RAIDDEVICE ausgeführt werden

4. Das File: /home/USER/scsiscript ausführen:
./scsiscript
Nun sollten alle RAIDDEVICE wieder gestartet sein

Wenn der obige test funktioniert, können die RAID- DEVICE wieder gemounted werden:
mount /dev/md0 /xxx/yyy (siehe config fstab)
Wenn dies auch ok ist dann:

5. Backup der Datei: /etc/init.d/boot.md (SUSE !!!)

BEISPIEL: cp /etc/init.dboot.md /etc.init.d/boot.md.backup
(bei RedHat & Fedora muss das file: /etc/rc.d/rc.sysinit angepasst werden)

6. Kopiere das folgende Script in die Datei /etc/init.d/boot.md (der Original- Inhalt MUSS gelöscht werden......... (BACKUP!!!!!!!)

7. PC rebooten

SCRIPT:

Code: Select all

#!/bin/bash
#
# script zur Kontrolle von Partitionen und SCSI-Disc's vor dem Start des 
# SW- RAID
# Ueberprüfen, ob die SCSI- Device detected wurden und ob die Datei  
# /etc/raidtab vorhanden ist.
# SCSIIDn: diese ID muss mit cat /proc/scsi/scsi ermittelt werden
# RAIDDISCn: hier sind die Disk's, die für die RAID- config (/etc/raidtab)
# benutzt werden. 
#(Nur physische Disk's... keine Partitionen!!)
SCSIID0=00
SCSIID1=01
SCSIID2=02
SCSIID3=03
SCSIID4=04
RAIDDISC0=sda
RAIDDISC1=sdb
RAIDDISC2=sdc
RAIDDISC3=sdd
RAIDDISC4=sde

cat /procs/partitions | egrep -wc hda[1234567890]

cat /proc/scsi/scsi | grep Id > /root/scsiid
awk '{ print $6 }' /root/scsiid > /root/idlog
if [ -f /etc/raidtab ] ; then
	echo "Die Datei: /etc/raidtab (raid- configdatei) ist vorhanden."

# Ueberprüfen wieviel SCSI- Partitionen / Disc in der Datei /etc/raidtab 
# für das Raid configurierd sind


# Überprüfen der installierten Disks
	DISC1=`cat /root/idlog | grep -w $SCSIID1`
	DISC2=`cat /root/idlog | grep -w $SCSIID2`
	DISC3=`cat /root/idlog | grep -w $SCSIID3`
	DISC4=`cat /root/idlog | grep -w $SCSIID4`
	echo "SCSI-ID: "$DISC1
	echo "SCSI-ID: "$DISC2
	echo "SCSI-ID: "$DISC3
	echo "SCSI-ID: "$DISC4

# Überprüfen ob mehrere Partitionen auf einer SCSI- Disc vorhanden sind
	LPAR1=`cat /proc/partitions | egrep -c sdb[1234567890]`
	LPAR2=`cat /proc/partitions | egrep -c sdc[1234567890]`
	LPAR3=`cat /proc/partitions | egrep -c sdd[1234567890]`
	LPAR4=`cat /proc/partitions | egrep -c sde[1234567890]`

	if [[ $DISC1 == $SCSIID1 ]] ; then
	 	echo "Es wurde(n) $LPAR1 Partition(en) auf $RAIDDISC1 gefunden."
	else
		echo " Auf $RAIDDISC1 wurden keine Partititonen gefunden."
	fi

	if [[ $DISC2 == $SCSIID2 ]] ; then
		echo "Es wurde(n) $LPAR2 Partition(en) auf $RAIDDISC2 gefunden."
        else
                echo " Auf $RAIDDISC2 wurden keine Partititonen gefunden."
	fi

        if [[ $DISC3 == $SCSIID3 ]] ; then
                echo "Es wurde(n) $LPAR3 Partition(en) auf $RAIDDISC3 gefunden."
        else
                echo " Auf $RAIDDISC4 wurden keine Partititonen gefunden."
        fi

	if [[ $DISC4 == $SCSIID4 ]] ; then
                echo "Es wurde(n) $LPAR4 Partition(en) auf $RAIDDISC4 gefunden."
        else
                echo " Auf $RAIDDISC4 wurden keine Partititonen gefunden."
        fi


# Check der SCSI- Disc's mit der /etc/raidtab
      DISCTAP1=`cat /proc/partitions | grep -w sdb | cut -c 23,24,25`
	DISCTAP2=`cat /proc/partitions | grep -w sdc | cut -c 23,24,25`
	DISCTAP3=`cat /proc/partitions | grep -w sdd | cut -c 23,24,25`
	DISCTAP4=`cat /proc/partitions | grep -w sde | cut -c 23,24,25`
	LPARTAP1=`cat /etc/raidtab | egrep -c sdb[1234567890]`
	LPARTAP2=`cat /etc/raidtab | egrep -c sdc[1234567890]`
	LPARTAP3=`cat /etc/raidtab | egrep -c sdd[1234567890]`
      LPARTAP4=`cat /etc/raidtab | egrep -c sde[1234567890]`

                                                                                                              echo " --- Check der Partitionen auf $DISCTAP1 mit der /etc/raidtab."
		if [[ "$LPAR1" != "$LPARTAP1" ]] ; then
        	        echo "!!! --- Das RAID kann nicht initialisiert werden da die Anzahl Partitionen ($LPAR1) nicht mit der config- Datei /etc/inittab ($LPARTAP1) überein stimmt!"
			exit
		else
                	echo " Das Raid (/dev/md0) wird initialisiert."
			/sbin/raidstart /dev/md0
		fi	
                
	echo " --- Check der Partitionen auf $DISCTAP2 mit der /etc/raidtab."
		 if [[ "$LPAR2" != "$LPARTAP2" ]] ; then
                        echo "!!! --- Das RAID kann nicht initialisiert werden da die Anzahl Partitionen ($LPAR2) nicht mit der config- Datei /etc/inittab ($LPARTAP2) überein stimmt!"
                	exit
		else
                        echo " Das Raid (/dev/md1) wird initialisiert."
			/sbin/raidstart /dev/md1
                fi
                
	echo " --- Check der Partitionen auf $DISCTAP3 mit der /etc/raidtab."
                 if [[ "$LPAR3" != "$LPARTAP3" ]] ; then
                        echo "!!! --- Das RAID kann nicht initialisiert werden da die Anzahl Partitionen ($LPAR3) nicht mit der config- Datei /etc/inittab ($LPARTAP3) überein stimmt"
			exit
		else
			echo " Das RAID (/dev/md2) wird initialisiert."
			/sbin/raidstart /dev/md2
		fi	
	
	echo " --- Check der Partitionen auf $DISCTAP4 mit der /etc/raidtab."
                 if [[ "$LPAR4" != "$LPARTAP4" ]] ; then
                        echo "!!! --- Das RAID kann nicht initialisiert werden da die Anzahl Partitionen ($LPAR4) nicht mit der config- Datei /etc/inittab ($LPARTAP4) überein stimmt"
			exit
		else
                        echo " Das RAID (/dev/md3) wird initialisiert."
			/sbin/raidstart /dev/md3	
	        fi
	cat /proc/mdstat	
else	
	echo "Die Datei /etc/raidtab ist nicht vorhanden. Raid wird nicht gestartet!"
fi

pingu_
Posts: 58
Joined: 13. Mar 2004 22:02

#8 Post by pingu_ »

Gib einen Feedback ob es bei Dir funktioniert hat oder nicht...
Thanks and regads

pingu_

:wink:

Post Reply