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