Raid: Unterschied zwischen den Versionen
| Zeile 544: | Zeile 544: | ||
13 8 225 13 active sync /dev/sdo1 | 13 8 225 13 active sync /dev/sdo1 | ||
= Erfolgreiches Create am 6.2.2011 = | |||
mdadm --create /dev/md127 --chunk=64 --level=raid6 --layout=ls --raid-devices=18 --assume-clean /dev/sdc1 /dev/sdd1 /dev/sde1 /dev/sdf1 /dev/sdg1 /dev/sds1 /dev/sdq1 /dev/sdv1 /dev/sdp1 /dev/sdx1 /dev/sdn1 /dev/sdo1 /dev/sdm1 /dev/sdl1 /dev/sdw1 missing /dev/sdu1 missing | |||
= Mail-Benachrichtigung = | = Mail-Benachrichtigung = | ||
Version vom 7. Februar 2011, 19:44 Uhr
Raid nach Booten öffnen und mount
Cryptsetup:
cryptsetup luksOpen /dev/md125 cr_md125 cryptsetup luksOpen /dev/md127 cr_md127
Mounten:
mount /dev/mapper/cr_md125 /data2 mount /dev/mapper/cr_md127 /data
Raid-Status
mdadm --detail /dev/md127
Raid-Baustatus
cat /proc/mdstat
Raidgröße
1000000000000
als ext3
auch als ext3
Raid Baubefehl
mdadm --create /dev/md127 --level=raid6 --raid-devices=5 /dev/sdb1 /dev/sdc1 /dev/sdd1 /dev/sde1 /dev/sdf1
mdadm --create /dev/md127 --chunk=64 --level=raid6 --layout=ls --raid-devices=5 /dev/sdb1 /dev/sdc1 /dev/sdd1 /dev/sde1 /dev/sdf1
Verschlüssel von Hand (ohne Yast2)
Verschlüsseln:
cryptsetup -v --key-size 256 luksFormat /dev/md127
Öffnen:
cryptsetup luksOpen /dev/md127 cr_md127
Filesystem drauf:
mkfs.reiserfs /dev/mapper/cr_md127
Status:
cryptsetup luksDump /dev/md127
Grown
Festplatte vorbereiten
yast2, neue Primärpartition mit Größe : 1000000000000 als Linux RAID, nicht formatieren oder einhängen
Device zum Raid hinzufügen
mdadm --add /dev/md127 /dev/sdg1
Raid reshapen mit zusätzlichem Device (dauert ca. 2 volle Tage)
mdadm --grow --raid-devices=18 /dev/md127 --backup-file=/home/gagi/mda127backup
um zu sehen, wer/was gerade Zugriff nimmt:
lsof /data
Unmounten:
umount /data
ReiserFS (Data2)
Filesystem überprüfen:
reiserfsck --check /dev/mapper/cr_md127
(Falls nötig, mit dm_crypt öffnen:)
(cryptsetup luksOpen /dev/md127 cr_md127) (schließen übrigens mit cryptsetup luksClose)
Verschlüsselten Container wachsen:
cryptsetup --verbose resize cr_md127
Reiser-Filesystem wachsen:
resize_reiserfs /dev/mapper/cr_md127
Filesystem überprüfen:
reiserfsck --check /dev/mapper/cr_md127
XFS (Data)
XFS checken (ungemountet)
xfs_repair -n -o bhash=1024 /dev/mapper/cr_md127
Cryptcontainer wachsen
cryptsetup --verbose resize cr_md127
Mounten:
mount /dev/mapper/cr_md127 /data
XFS vergrößern
xfs_growfs /data
XFS checken (ungemountet)
xfs_repair -n -o bhash=1024 /dev/mapper/cr_md127
Read-Only Mounten:
mount -o ro /dev/mapper/cr_md127 /data
Mounten über Samba
mount //192.168.0.1/alte_Q /mnt
RAID6 aufblasen auf 1,5TB
Software-Raid-Dienst unster OpenSuse starten:
/etc/init.d/boot.md start
0. UUID kaputt machen und Partitionstabelle zerstören für 1TB Platteninhalt dd-t auf 1,5TB Platte
dd if=/dev/zero bs=1024 count=2000 of=/dev/sdi
1. Farbikneue Festplatten über MB-SATA-Anschluss in Opensuse mit Partition (komplette Platte) und Filesystem (RAID) versehen
Dann für jede Platte sukzessive:
2. Platte failed setzen und aus Raidverbund rausnehmen:
mdadm --set-faulty /dev/md127 /dev/sdo1 mdadm --remove /dev/md127 /dev/sdo1
3. Plattenpartition maximiert (komplette Platte) mit Yast2 -> Partitioner neu anlegen als Linux Raid FD (formatieren nicht nötig) -> Dieser Schritt DOCH nötig! -> Legacy
4. Wieder ins Raid reinnehmen
mdadm --add /dev/md127 /dev/sdo1 (mit "1", NICHT direkt als sdo)
5. Bauen lassen
6. Nächste Platte
7. Wenn die 5 1TB-Platten "befreit" sind, aus denen ein neues Raid5 aufsetzen (siehe Anleitung) und darauf das alte Raid5 verschieben.
8. Wenn alle 14 1,5TB Platten im Raid6 sind, dann das Raid6 grown lassen
mdadm --grow /dev/md127 --size=max
9. Unmounten, Filesystem-Check, Cryptcontainer wachsen, ReiserFS wachsen (wie sonst auch, siehe oben).
RAID Layout mit Serials
01 : 1SWX1JSK292519 (1.5T) 02 : 1S6Y1JSK175967 (1.5T) 03 : 1S6Y1JSK175957 (1.5T) 04 : WD-WCAU40406122 (1.0T) 05 : 9VS0CVSE (1.5T) 06 : WD-WCAU40497763 (1.0T) 07 : 08 : 9VS0CTFS (1.5T) 09 : 9VS0CWXA (1.5T) 10 : 9VS0HDNS (1.5T) 11 : W_-DCWUA54200342 (1.0T) 12 : W_-DCWUA54003755 (1.0T) 13 : S13PJ1MQ400108 (1.0T) 14 : V91S44W6 (1.5T) 15 : WD-WMAM9DKR6107 (80G) ------------------------------------------- 16 : 17 : 18 : WD-WCAZA2070995 (2.0T) 19 : S1VSJDWZ606579 (1.0T) 20 : 1SWX1JSK292509 (1.5T) 21 : 1SWX1JSK2C4676 (1.5T) 22 : 23 : 1SWX1JSK2C4853 (1.5T) 24 : S1XWJ1KSC28441 (1.5T) 25 : 1SWX1JSL0C9558 (1.5T) 26 : 1SWX1JSK3C1125 (1.5T) 27 : 1SWX1JSL0C1584 (1.5T) 28 : S1XWJ1KSC26485 (1.5T, Spare) 29 : 1SWX1JSK2C7604 (1.5T) 30 : 1SWX9JS00C7742 (1.5T)
Festplatten Seriennummern auslesen
/root/bin/diskserial.sh | sort +2 -3 -n
oder
/root/bin/diskserial_sort.sh
Serials auslesen
Für RAID-Stauts einer einzelnen Platte:
mdadm --examine /dev/sdi
Zum Serial auslesen:
udevadm info --query=all --name=/dev/sdi
bzw.
udevadm info --query=all --name=/dev/sdi | grep ID_SERIAL_SHORT
oder
hdparm -i /dev/sdi
HPT RAID Management Server
läuft auf Port 7402 (wegen Putty SSH Tunnel und so) -> https://localhost:7402/
Lokal: -> https://192.168.1.66:7402/arrman.cgi?userid=RAID_4ba433e6
Start: /etc/init.d/hptdaemon start
Login: RAID
Pass: hpt
Raid wieder assemblen
Raid5 (5 x 1TB)
mdadm --assemble /dev/md125 /dev/sda1 /dev/sdb1 /dev/sdq1 /dev/sdr1 /dev/sds1
Raid6 (14 x 1,5TB)
mdadm --assemble /dev/md127 /dev/sdc1 /dev/sdd1 /dev/sde1 /dev/sdf1 /dev/sdh1 /dev/sdi1 /dev/sdj1 /dev/sdk1 /dev/sdl1 /dev/sdm1 /dev/sdn1 /dev/sdo1 /dev/sdp1 /dev/sdt1
SMART Test
Starten
smartctl -t offline /dev/sda
Auslesen
smartctl -l selftest /dev/sda
Ideen
ddn von sdg (Platz 28, SC06051 oder verdreht) -> dd_rescue
SpinRite
reiserfsck evtl. mit badblocks liste, aber: dev sda ist Grundlage für badblocks-Liste, nicht md127!
mdadm --create zusammen mit "missing"'
In short: Especially if you run a RAID5 array, trigger an active bad block check on a regular basis, or there is a high chance of hidden bad blocks making your RAID unusable during reconstruction.
Normally, RAID passively detects bad blocks. If a read error occurs, the data is reconstructed from the rest of the array, and the bad block is rewritten. If the block can not be rewritten, the defective disk is kicked out of the active array.
Once the defective drive is replaced, reconstruction will cause all blocks of the remaining drives to be read. If this process runs across a previously undetected bad block on the remaining drives, another drive will be marked as failed, making RAID5 unusable. The larger the disks, the higher the odds that passive bad block detection will be inadaquate. Therefore, with today's large disks it is important to actively perform data scrubbing on your array.
With a modern (>=2.6.16) kernel, this command will initiate a data consistency and bad block check, reading all blocks, checking them for consistency, and attempting to rewrite inconsistent blocks and bad blocks.
echo check >> /sys/block/mdX/md/sync_action
You can monitor the progress of the check with:
watch -n .1 cat /proc/mdstat
You should have your array checked daily or weekly by adding the appropriate command to /etc/crontab.
If you find yourself needlessly checking your array (like I was) and want to stop it safely, you can either stop the entire array, or:
echo idle >> /sys/block/mdX/md/sync_action
mdadm --detail --scan --verbose > /etc/mdadm.conf
Force-Mount zum Wegkopieren
mdadm --assemble -f /dev/md127 /dev/sdc1 /dev/sdd1 /dev/sde1 /dev/sdf1 /dev/sdi1 /dev/sdk1 /dev/sda1 /dev/sdm1 /dev/sdn1 /dev/sdo1 /dev/sdp1 /dev/sdq1
cryptsetup luksOpen /dev/md127 cr_md127
mount -o ro /dev/mapper/cr_md127 /data
Bad Blocks
badblocks -vs -o sdy-badblock-test /dev/sdy
Identifikationen während Rettungsversuch
sda:
die mit ca. 1500 Bad Blocks; kann mit --update=summaries -f als 12. Platte reingeforced werden, hat aber bad blocks. nachh dd_rescue evtl. Reparaturversuch mit SpinRite
/dev/sda -> 28 : S1XWJ1LSC06051 (1.5T)
kommt auf
/dev/sdi -> 29 : S1XWJ1KSC31145 (1.5T)
sdn:
aus dem Raid rausgeflogen, war bis zur Hälfte gebaut, bis sda als 12. Platte flog -> Raid weg -> Rebuild abgebrochen
Superblock für mdadm auf sdl vorhanden, NICHT auf sdl1 -> evtl. auch mal ohne "1" eingebunden, aus Logfile aber nicht direkt nachvollziehbar
/dev/sdn -> 23 : 1SWX1JSK2C4853 (1.5T)
sdl:
war wohl als sdj nicht als sdj1 eingebunden (damals sdb statt sdb1); enthält evtl. noch sinnvolle Raid-Daten, könnte defekte sda als 12. Platte im Raid ersetzen, um wieder rebuilden zu können. Hat wohl ein Problem mit der Partitionsinfo/Superblock (Hexeditoraktion mit JoJo)
Superblock für mdadm auf sdj vorhanden, NICHT auf sdj1
/dev/sdl -> 25 : 1SWX1JSL0C9558 (1.5T)
kommt auf
/dev/sdw -> 26 : S1XWJ1KSC31152 (1.5T)
dd-Kopieraktion
L 25 nach W 26 (ohne Bad Blocks (hoffentlich)) :
dd if=/dev/sdl of=/dev/sdw bs=2k
A 28 nach I 29 (mit Bad Blocks)
dd_rescue -v -A -l logddav.log -o bbfileav.log /dev/sda /dev/sdi
pv (pipeviewer) zur Fortschrittsanzeige
pv /dev/sdl >/dev/sdw und pv /dev/sda >/dev/sdi
oder mit "echtem" Fortschrittsbalken bei bekannter Datengröße
dd if=/dev/sdl bs=2k | pv -s 1500G | dd of=/dev/sdw dd if=/dev/sdl | bar -s 1.5T | dd of=/dev/sdw
bei -v bei dd_rescue stehts auch direkt dabei, für dd gibts aus einer anderen Konsole noch:
pkill -USR1 dd pidof dd pkill -USR1 pid-von-dd sonst wird z.B. auch der dd_rescue abgeschossen, der startet dann aber nicht mehr :-(
oder automatisch alle 5 Sekunden aktualisieren lassen mit
watch --interval=5 "pkill -USR1 pid-von-dd"
RAID 5 Probem (schon wieder "no Superblock" *ARRRRRGH*)
Layout für Zuordnung
| Raiddevice | 14.3. 18:40 | Platz in Towern | 16.3. 23:50 |
|---|---|---|---|
| 0 | sdg1 | 04 | sdh1 |
| 1 | sdb1 | 06 | sdb1 |
| 2 | sdr1 | 11 | sdt1 |
| 3 | sds1 | 12 | sdu1 |
| 4 | sdt1 | 13 | sdv1 |
Superblock und Reihenfolge RAID6
Superblock am Ende der Partition?
| Raiddevice | 13.3. 18:16 | 19.3. 20:40, OK | Platz in Towern | Serial (evtl. twisted) | 20.3. 16:00 Full Rebuilt | Serial (evtl. twisted) | Towerplatz |
| 0 | sdc1 active | sdc1 | 05 | 9VS0CVSE (1.5T) | sdc1 | 9VS0CVSE (1.5T) | 05 |
| 1 | sdd1 active | sdd1 | 08 | 9VS0CTFS (1.5T) | sdd1 | 9VS0CTFS (1.5T) | 08 |
| 2 | sde1 active | sde1 | 09 | 9VS0CWXA (1.5T) | sde1 | 9VS0CWXA (1.5T) | 09 |
| 3 | sdf1 active | sdf1 | 10 | 9VS0HDNS (1.5T) | sdf1 | 9VS0HDNS (1.5T) | 10 |
| 4 | sdm1 active | sdp1 | 24 | S1XWJ1KSC28441 (1.5T) | sdp1 | S1XWJ1KSC28441 | 24 |
| 5 | sdi1 active | sdn1 | 23 | S1XWJ1KSC28435 (1.5T) | sdn1 | 1SWX1JSK2C4853 (1.5T) | 23 |
| 6 | sdk1 active | missing | 28 | S1XWJ1LSC06051 (1.5T) | sdl1 | 1SWX1JSL0C9558 (1.5T) -> 25 | 25 |
| 7 | sdj1 active | sdm1 | 27 | S1XWJ1LSC05148 (1.5T) | sdm1 | 1SWX1JSL0C1584 | 27 |
| 8 | sdt1 active | missing | 25 | S1XWJ1LSC05985 (1.5T) | sdw1 | 1SWX1JSK3C1125 (1.5T) -> 26 | 26 |
| 9 | sdp1 active | sds1 | 14 | 9VS1446W (1.5T) | sds1 | V91S44W6 | 14 |
| 10 | sdn1 active | sdq1 | 01 | S1XWJ1KS925291 (1.5T) | sdq1 | 1SWX1JSK292519 | 01 |
| 11 | sdo1 active | sdr1 | 03 | S1Y6J1KS719575 (1.5T) | sdr1 | 1S6Y1JSK175957 | 03 |
| 12 | sdh1 active | sdk1 | 07 | S1XWJ1KS925290 (1.5T) | sdk1 | 1SWX1JSK292509 | 07 |
| 13 | sdl1 active | sdo1 | 02 | S1Y6J1KS719576 (1.5T) | sdo1 | 1S6Y1JSK175967 | 02 |
Erfolgreiches Create am Freitag Abend mit JoJo
mdadm --create /dev/md127 --chunk=64 --level=raid6 --layout=ls --raid-devices=14 --assume-clean /dev/sdc1 /dev/sdd1 /dev/sde1 /dev/sdf1 /dev/sdp1 /dev/sdn1 missing /dev/sdm1 missing /dev/sds1 /dev/sdq1 /dev/sdr1 /dev/sdk1 /dev/sdo1
Version : 0.90
Creation Time : Fri Mar 19 20:20:57 2010
Raid Level : raid6
Array Size : 11718709248 (11175.83 GiB 11999.96 GB)
Used Dev Size : 976559104 (931.32 GiB 1000.00 GB)
Raid Devices : 14
Total Devices : 12
Preferred Minor : 127
Persistence : Superblock is persistent
Update Time : Fri Mar 19 20:31:46 2010
State : clean, degraded
Active Devices : 12
Working Devices : 12
Failed Devices : 0 Spare Devices : 0
Chunk Size : 64K
UUID : 214bffe6:d954a41b:5d29213a:eb263c81 (local to host store)
Events : 0.7
Number Major Minor RaidDevice State
0 8 33 0 active sync /dev/sdc1
1 8 49 1 active sync /dev/sdd1
2 8 65 2 active sync /dev/sde1
3 8 81 3 active sync /dev/sdf1
4 8 241 4 active sync /dev/sdp1
5 8 209 5 active sync /dev/sdn1
6 0 0 6 removed
7 8 193 7 active sync /dev/sdm1
8 0 0 8 removed
9 65 33 9 active sync /dev/sds1
10 65 1 10 active sync /dev/sdq1
11 65 17 11 active sync /dev/sdr1
12 8 161 12 active sync /dev/sdk1
13 8 225 13 active sync /dev/sdo1
Erfolgreiches Create am 6.2.2011
mdadm --create /dev/md127 --chunk=64 --level=raid6 --layout=ls --raid-devices=18 --assume-clean /dev/sdc1 /dev/sdd1 /dev/sde1 /dev/sdf1 /dev/sdg1 /dev/sds1 /dev/sdq1 /dev/sdv1 /dev/sdp1 /dev/sdx1 /dev/sdn1 /dev/sdo1 /dev/sdm1 /dev/sdl1 /dev/sdw1 missing /dev/sdu1 missing
Mail-Benachrichtigung
Beim mdadm Paket kann man zumindestins ins mdadm.conf eine mailadresse eintragen:
Code:
MAILADDR ghostadmin@irgendwo.net
Da werden dann Events an diese mailadresse gesendet. In Deinem Fall währe ein 'degraded raid' event mail an Dich gesendet worden.
Allerdings muss mdadm im monitor mode gestartet sein: z.B.: /sbin/mdadm --monitor --scan
ReiserFS -> XFS
partitionstabelle "erzeugen"
dd if=/dev/zero of=partitionstabelle bs=512 count=63
in table-test:
0 63 linear /dev/loop0 0
63 2930277168 linear /dev/sdt 0
losetup /dev/loop0 partitionstabelle
losetup /dev/loop1 raid-test
cryptsetup -v --key-size 256 luksFormat /dev/loop1
dmsetup -v create part-test table-test
fdisk /dev/mapper/cr_mdloop1 u p
fdisk p n w
( kpartx -a /dev/mapper/part-test oder
partprobe)
Wieder entfernen (falls nötig)
dmsetup remove part-test1
Anzahl der Sektoren rausbekommen
cfdisk -P s /dev/mapper/cr_sdv
366264048 blocks
resize_reiserfs 750108770304
Cryptcontainer-Größe cr_sdv 2930112504s
Cryptcontainer-Größe cr_md127 35047206392s -> 17944169672704 Bytes
parted /dev/mapper/cr_sdv
resize 1 63 1000000000
ReiserFS -> XFS actually done
Masterplan Nr. 4
Cryptcontainer nur für vorderes ReiserFS verkleinern
cryptsetup --verbose resize cr_md127 --size=21550000000 (in Sektoren)
raid6 Mapper-Device mit Partitionstabelle anlegen
dd if=/dev/zero of=partitionstabelle bs=512 count=63
touch table-test
darin Sektoren für md127 aus
fdisk /dev/mapper/cr_md127 u p
vi table-test und paste
0 63 linear /dev/loop0 0 63 43809010560 linear /dev/md127 0 43809010623 63 linear /dev/loop2 0
Loop-Device erzeugen, das Partitionstablle enthält
losetup /dev/loop0 partitionstabelle1 losetup /dev/loop2 partitionstabelle2
Zusammengesetztes Device erzeugen
dmsetup -v create raid6 table-test
Erzeugt Partitonseintrag für aktuelles ReiserFS (erstes FS in Raid6)
Mit Parted Partitionen für verschlüsselte Partition vorne und entschlüsselte Kopie hinten anlegen
parted /dev/mapper/raid6 mktable gpt unit s mkpart primary 63 21560000000 mkpart primary 21600000000 43200000000 (Start 63, Ende aus df von gemountetem /data df ergibt in 1K Blöcken: 10586246076 mal 2 + Reserve -> 21500000000 n (Start 21600000000 bis Ende für neue Partition für dd-job) w
Legt devices für Partitionen an raid61 und raid62
kpartx -a /dev/mapper/raid6
Verschlüsselte Partition öffnen
cryptsetup luksOpen /dev/mapper/raid6p1 cr_raid6p1
dd vom entschlüsselten cr_raid6p1 nach raid6p2
dd if=/dev/mapper/cr_raid6p1 of=/dev/mapper/raid6p2 bs=1G oflag=direct iflag=direct
__________________________________________________________________________________________________________________________________
ReiserFS auf raid6p2 checken
reiserfsck --check /dev/mapper/raid6p2 manueller Film-anschau-Check (minimum 2h, FullHD)
xfs auf Raid62
mkfs.xfs -f /dev/mapper/cr_raid6p1
Copy-Job vorbereiten
mount /dev/mapper/cr_raid6p1 /xfs mount /dev/mapper/raid6p2 /data
Umfachreicher Copy-Job mit tar und Buffer
(cd /data/ && tar pcf - *) | buffer -m 20m -p 99.999 | pv -s 11T | (cd /xfs/ && tar pxf -)
ODER : Umfangreicher Copy-Job mit Fortschritt über rsync (eher nur zum Abgleich/Synchronisation)
rsync -rpP /data/* /xfs rsync -rpP --times --size-only --block-size=128000 /data/ /xfs/
Test auf erfolgreiches Kopieren
umount /xfs
xfs_check /dev/mapper/cr_raid6p1 (sehr langsam und schnell "out of memory")
xfs_repair -n /dev/mapper/cr_raid6p1 ("-n" ist der "no-modify-mode")
und manueller Filetest
umount /data umount /xfs
Cryptcontainer für virtuelle Partitionen schließen
cryptsetup luksClose cr_raid6p1
Loopdevices platt machen
dmsetup remove raid6p1 dmsetup remove raid6p2 dmsetup remove raid6
Eigentlichen großen Cryptcontainer öffnen
cryptsetup luksOpen /dev/md127 cr_md127
Cryptcontainer wachsen auf 22TB
cryptsetup --verbose resize cr_md127
Fertiges XFS nach Data mounten
mount /dev/mapper/cr_md127 /data
Endlich, XFS groß machen (23TB)
xfs_growfs /data
XFS checken (ungemountet!)
umount /data xfs_repair -n -o bhash=1024 /dev/mapper/cr_md127
ReiserFS -> XFS alter Plan, hinfällig
dd if=/dev/zero of=partitionstabelle bs=512 count=63
touch table-test
darin Sektoren für md127 aus
fdisk /dev/mapper/cr_md127 u p
vi table-test und paste
0 63 linear /dev/loop0 0 63 43809008504 linear /dev/mapper/cr_md127 0
Loop-Device erzeugen, das Partitionstablle enthält
losetup /dev/loop0 partitionstabelle
Zusammengesetztes Device erzeugen
dmsetup -v create raid6 table-test
Erzeugt Partitonseintrag für aktuelles ReiserFS (erstes FS in Raid6)
fdisk /dev/mapper/raid6 u p n (Start 63, Ende aus df von gemountetem /data df ergibt in 1K Blöcken: 10586246076 mal 2 + Reserve -> 21500000000 n (Start 21600000000 bis Ende für neue Partition für dd-job) w
Legt devices für Partitionen an raid61 und raid62
kpartx -a /dev/mapper/raid6
1:1 Kopie des ReiserFS Raid6 nach hinten auf die anderen (restlichen) 11TB in der zweiten Partition
dd if=/dev/mapper/raid61 bs=4K | pv -s 10T | dd of=/dev/mapper/raid62 bs=4K
Check nach dd
reiserfs_check /dev/mapper/raid62
In Ursprungs-Partition xfs erzeugen
mkfs.xfs /dev/mapper/raid61