Raid

Aus Store2 Wiki
Zur Navigation springen Zur Suche springen

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

yast2, neue Primärpartition mit Größe : 1000000000000 als Linux RAID, nicht formatieren oder einhängen
mdadm --add /dev/md127 /dev/sdg1
mdadm --grow --raid-devices=6 /dev/md127 --backup-file=/home/gagi/mda127backup

um zu sehen, wer/was gerade Zugriff nimmt:

lsof /data 

Unmounten:

umount /data 

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

Mounten:

mount /dev/mapper/cr_md127 /data

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  : 1SWX1JSK292509 (1.5T) 

08  : 9VS0CTFS (1.5T)
09  : 9VS0CWXA (1.5T)
10  : 9VS0HDNS (1.5T)
11  : W_-DCWUA54200342 (1.0T)
12  : W_-DCWUA54003755 (1.0T)
13  : 1SP31JQM041080 (1.0T)
14  : V91S44W6 (1.5T)
15  : WD-WMAM9DKR6107 (80G)

-------------------------------------------

16  :
17  :
18  :
19  :
20  :
21  :
22  : 1SWX1JSK2C4676 (1.5T)

23  : 1SWX1JSK2C4853 (1.5T)
24  : S1XWJ1KSC28441 (1.5T)
25  : 1SWX1JSL0C9558 (1.5T)
26  : 1SWX1JSK3C1125 (1.5T)
27  : 1SWX1JSL0C1584 (1.5T)
28  : S1XWJ1KSC26485 (1.5T, Ext4, Backup1)
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


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 /reiser

Umfachreicher Copy-Job mit tar und Buffer

(cd /reiser/ && tar pcf - *) | buffer -m 1g -p 100 | (cd /xfs/ && tar pxf -)

ODER : Umfangreicher Copy-Job mit Fortschritt über rsync

rsync -rpP /reiser/* /xfs

Test auf erfolgreiches Kopieren

xfs_check und manueller Filetest
umount /reiser
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

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