Sie befinden sich hier: Hilfe / Howtos / Hardware / Software RAID mit SATA Platten auf eisfair-1
Deutsch
2014-11-24

Content

Software RAID mit SATA-Platten unter eisfair-1

Vorlage ist mir das hervorragende Howto von Manfred N. Reiland gewesen.
http://www.eisfair.org/hilfe/howtos/hardware/icesync-software-raid/

Aufgabe:

Erstellung eines Software-RAID1 oder RAID5 mit SATA Platten

Vorgabe:

Die 1. Festplatte /dev/sda wurde mit 4 Partitionen erstellt d.h. eine "Extra"-Partition /data für die Daten

/dev/sda1 = /boot
/dev/sda2 = swap
/dev/sda3 = /
/dev/sda4 = /data


Die erforderlichen Raidtools sind "händisch" zu installieren. Zu finden unter:
http://ftp.thquast.de/linux/eisfair-1/pool/r/

Die 2. Platte (für ein RAID1 - für ein RAID5 sind 2 zusätzlich Platten erforderlich) ist /dev/sdb

Ich verwende den MidnightCommander und somit auch gern dessen Editor mcedit.
Es kann aber statt dessen auch z.B. joe benutzt werden.

Ändern in "Linux raid autodetect"

sfdisk --change-id /dev/sda 1 fd
sfdisk --change-id /dev/sda 2 fd
sfdisk --change-id /dev/sda 3 fd
sfdisk --change-id /dev/sda 4 fd

Partitionierung von /dev/sda komplett ausgelesen und anschließend auf /dev/sdb übertragen

sfdisk -d /dev/sda > /tmp/sda.part.tab
sfdisk -f /dev/sdb < /tmp/sda.part.tab


Überprüfen mit:

sfdisk -luS


/etc/raidtab erstellen/anpassen:

mcedit /etc/raidtab

#------------------------------------------------------------------------------
# /etc/raidtab - raiddev configuration file
#
# Creation:     03.02.2005 mnr
# Last Update:  28.02.2005 mnr
# Extended 2009 by Jürgen Witt
#
# Copyright (c) 2005 - Manfred N. Reiland - info[at]eis.it-reiland[dot]de
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#------------------------------------------------------------------------------

   # md1 is the /boot array
   #------------------------
   raiddev          /dev/md1
   raid-level              1
   nr-raid-disks           2
   chunk-size             32
   nr-spare-disks          0
   persistent-superblock   1

   device          /dev/sdb1
   raid-disk               0

   device          /dev/sda1
   failed-disk             1

   # md2 is the swap array
   #------------------------
   raiddev          /dev/md2
   raid-level              1
   nr-raid-disks           2
   chunk-size             32
   nr-spare-disks          0
   persistent-superblock   1

   device          /dev/sdb2
   raid-disk               0

   device          /dev/sda2
   failed-disk             1

   # md3 is the / array
   #------------------------
   raiddev          /dev/md3
   raid-level              1
   nr-raid-disks           2
   chunk-size             32
   nr-spare-disks          0
   persistent-superblock   1

   device          /dev/sdb3
   raid-disk               0

   device          /dev/sda3
   failed-disk             1

   # md4 is the /data array
   #------------------------
   raiddev          /dev/md4
   raid-level              1
   nr-raid-disks           2
   chunk-size             32
   nr-spare-disks          0
   persistent-superblock   1

   device          /dev/sdb4
   raid-disk               0

   device          /dev/sda4
   failed-disk             1



Erstellen der RAID Arrays:

mkraid --really-force /dev/md1
mkraid --really-force /dev/md2
mkraid --really-force /dev/md3
mkraid --really-force /dev/md4


Überprüfen mit:

cat /proc/mdstat

Die Multiple Devices /dev/md1, /dev/md3 und /dev/md4 werden File System ext3 formatiert und auf /dev/md2 eine swap Partition angelegt.

mkfs.ext3 /dev/md1
mkfs.ext3 /dev/md3
mkfs.ext3 /dev/md4
mkswap /dev/md2


Vorbereitung zum Übertragen der Daten:

mount /dev/md3 /mnt
mkdir /mnt/boot
mount /dev/md1 /mnt/boot


Abschaltung der Überprüfung des Root Filesystems:

sed -e 's/\/sbin\/fsck/#\/sbin\/fsck/g' \
          /etc/init.d/boot  > /tmp/boot && \
          cp /tmp/boot /etc/init.d/boot


Kopieren der Daten:

cd / && \
          find . -xdev | cpio -pmv /mnt && \
          cd /boot && \
          find . -xdev | cpio -pmv /mnt/boot


/mnt/etc/fstab wird an die neuen Einhängepunkte angepasst:

mcedit /mnt/etc/fstab

/dev/md3 / ext3 defaults,errors=remount-ro 0 1
/dev/md1 /boot ext3 defaults,errors=remount-ro 0 1
/dev/md2 none swap sw 0 0
/dev/md4 /data ext3 defaults 0 0
proc        /proc     proc     defaults                 0 0
/dev/fd0    /floppy   auto     defaults,user,noauto     0 0
/dev/cdrom  /cdrom    iso9660  defaults,ro,user,noauto  0 0
devpts      /dev/pts  devpts   defaults                 0 0



Aktuelle /boot Partition aushängen und statt dessen /dev/sda1 nach /mnt/boot einhängen. Grund dieser Aktion ist die korrekte Installation des Bootloaders Lilo

cd /
umount /boot             # das entspricht umount /dev/sda1
mount /dev/sda1 /mnt/boot



/mnt/etc/lilo.conf bearbeiten:

mcedit /mnt/etc/lilo.conf

lba32
disk = /dev/sda
  bios = 0x80
boot = /dev/sda
read-only
prompt
timeout = 50
vga = normal
image = /boot/kernel
root = /dev/md3
label = eis
initrd = /boot/initrd.gz


Die linuxrc in initrd.gz muss bearbeitet werden:

mkdir -p /x/x
cp -a /mnt/boot/initrd.gz /x
cd /x
gzip -d initrd.gz
modprobe loop
mount -o loop initrd /x/x
mcedit /x/x/linuxrc


So viele Zeilen, wie md's am Ende hinzu fügen:

/sbin/raidautorun /dev/md1
/sbin/raidautorun /dev/md2
/sbin/raidautorun /dev/md3
/sbin/raidautorun /dev/md4


Beispiel für geänderte linuxrc

#! /bin/sh
/bin/echo -e "\033[32m\033[49mloading Input/USB/SCSI/SATA/RAID drivers ...\033[0m"
/sbin/insmod.static input
/sbin/insmod.static keybdev
/sbin/insmod.static mousedev
/sbin/insmod.static usbcore
/sbin/insmod.static uhci
/sbin/insmod.static usb-ohci
/sbin/insmod.static usb-uhci
/sbin/insmod.static ehci-hcd.o
/sbin/insmod.static hid
/sbin/insmod.static scsi_mod
/sbin/insmod.static sd_mod
/sbin/insmod.static libata
/sbin/insmod.static ata_piix
echo "Waiting for devices coming up ..."
/bin/sleep 10
/sbin/raidautorun /dev/md1
/sbin/raidautorun /dev/md2
/sbin/raidautorun /dev/md3
/sbin/raidautorun /dev/md4

initrd wieder packen, zurück kopieren und lilo ausführen:

cd /x
umount /x/x
gzip -9 initrd
cp /x/initrd.gz /mnt/boot
lilo -r /mnt


Wenn dieser Schritt nicht gemacht wird, endet der nächste Start mit "kernel panic"

umount /dev/sda1
mount /dev/sda1 /boot
mount /dev/md1 /mnt/boot # ist noch eingehängt, war nur zwischenzeitlich /dev/sda1 (/boot) drüber gemount
cp -a /boot/initrd.gz /mnt/boot/


Jetzt neu starten:

reboot

/dev/sda wird mit raidhotadd in das RAID Array integriert:

raidhotadd /dev/md1 /dev/sda1
raidhotadd /dev/md2 /dev/sda2
raidhotadd /dev/md3 /dev/sda3
raidhotadd /dev/md4 /dev/sda4


Überprüfen mit:

cat /proc/mdstat

Anschalten der Überprüfung des Root Filesystems:

sed -e 's/#\/sbin\/fsck/\/sbin\/fsck/g' \
          /etc/init.d/boot  > /tmp/boot && \
          cp /tmp/boot /etc/init.d/boot


Booten von allen Platten ermöglichen:

mcedit /etc/lilo.conf

lba32
disk = /dev/sda
  bios = 0x80
boot = /dev/md1
raid-extra-boot=/dev/sda,/dev/sdb
read-only
prompt
timeout = 50
vga = normal
image = /boot/kernel
root = /dev/md3
label = eis
initrd = /boot/initrd.gz


MBR's neu schreiben:

lilo

Added eis *
The boot record of  /dev/md1  has been updated.
The boot record of  /dev/sda  has been updated.
Warning: /dev/sdb is not on the first disk
The boot record of  /dev/sdb  has been updated.

FERTIG!


Beispiel für eine /etc/raidtab für ein RAID5 (nur für /data) alle anderen (/, /boot, swap) sind RAID1

#-------------------------------------------------------------------------
# /etc/raidtab - raiddev configuration file
#
# Creation:     11.01.2007 mn
# Extended 2009 by Jürgen Witt
#
# Copyright (c) 2007 - Manfred N. Reiland - info [at] ice.it-reiland [dot] de
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#-------------------------------------------------------------------------
#
#-------------------------------------------------------------------------
# RAID 5 für /data RAID 1 für /, /boot und swap
#-------------------------------------------------------------------------

   # md1 is the /boot array
   #------------------------
   raiddev          /dev/md1
   raid-level              1      # RAID-Level 1!
   nr-raid-disks           3
   chunk-size             32
   nr-spare-disks          0
   persistent-superblock   1

   device          /dev/sdb1
   raid-disk               0

   device          /dev/sdc1
   raid-disk               1

   device          /dev/sda1
   failed-disk             2

   # md2 is the swap array
   #------------------------
   raiddev          /dev/md2
   raid-level              1      # RAID-Level 1!
   nr-raid-disks           3
   chunk-size             32
   nr-spare-disks          0
   persistent-superblock   1

   device          /dev/sdb2
   raid-disk               0

   device          /dev/sdc2
   raid-disk               1

   device          /dev/sda2
   failed-disk             2

   # md3 is the / array
   #------------------------
   raiddev          /dev/md3
   raid-level              1      # RAID-Level 1!
   nr-raid-disks           3
   chunk-size             32
   nr-spare-disks          0
   persistent-superblock   1

   device          /dev/sdb3


   device          /dev/sdc3
   raid-disk               1

   device          /dev/sda3
   failed-disk             2

   # md4 is the /data array
   #------------------------
   raiddev          /dev/md4
   raid-level              5      # RAID-Level 5!
   nr-raid-disks           3
   chunk-size             32
   nr-spare-disks          0
   persistent-superblock   1

   device          /dev/sdb4


   device          /dev/sdc4
   raid-disk               1

   device          /dev/sda4
   failed-disk             2



Viel Erfolg hiermit :-)

 

Jürgen Witt, eisfair Newsgroup, 04.09.2009