Hier finden sowohl Tipps und Tricks Erwähnung, die teilweise selbst
getestet wurden, als auch Besonderheiten, die nicht direkt durch die
RAID-Kernelerweiterungen ermöglicht werden, sondern allgemeiner Natur
sind oder zusätzlich integriert werden müssen. Einige der hier
aufgelisteten Vorgänge sind mit allerhöchster Vorsicht zu genießen und
mehr oder minder ausdrücklich nicht für eine Produktionsumgebung
geeignet.
Drbd versteht sich als ein Block Device, um eine
Hochverfügbarkeitslösung unter Linux zu bieten. Im Prinzip ist es eine
Art RAID-1 Verbund, der über ein Netzwerk läuft. Nähere Informationen
hierzu gibt es unter:
http://www.complang.tuwien.ac.at/reisner/drbd/
|
Um Linux Software-RAID auch mit dem aktuelleren Kerneln zu verwenden,
kann man einfach den RAID-Patch für den 2.2.10er Kernel auf den
Sourcetree der 2.2.11er bis 2.2.13er Kernel anwenden. Zweimal kommt
vom patch die Frage, ob eine bereits gepatchte Datei noch mal gepatcht
werden soll. Diese Fragen sollten alle mit "no" beantwortet werden.
Der Erfolg ist, dass der so gepatchte Kernel nach dem Kompilierlauf
hervorragend mit allen RAID-Modi funktioniert. Wer sich den 2.2.10er
RAID-Patch ersparen möchte, kann sich einen Kernel-Patch von Alan Cox
für den 2.2.11er bis 2.2.13er Kernel aus dem Internet besorgen:
ftp://ftp.kernel.org:/pub/linux/kernel/people/alan/
Diese enthalten auch die jeweils aktuellen RAID-Treiber.
|
Alle aktuellen Kernel der 2.4.xer Reihe beinhalten bereits die neue
RAID-Unterstützung. Diese Kernel müssen nicht mehr gepatcht werden,
lassen sich mit den aktivierten RAID-Optionen einwandfrei kompilieren
und funktionieren problemlos.
|
Für SCSI Devices aller Art - also nicht nur Festplatten - gibt es
unter Linux die Möglichkeit, sie während des laufenden Betriebes quasi
vom SCSI Bus abzuklemmen; dies allerdings ohne Hand an den
Stromstecker oder Wechselrahmenschlüssel legen zu müssen. Möglich ist
dies durch den Befehl:
root@linux #
echo "scsi remove-single-device c b t l" > /proc/scsi/scsi
|
Die Optionen stehen für:
c = die Nummer des SCSI-Controllers
b = die Nummer des Busses oder Kanals
t = die SCSI ID
l = die SCSI LUN
Möchte man das 5. Device des 1. SCSI-Controllers rausschmeißen, müsste
der Befehl so aussehen:
root@linux #
echo "scsi remove-single-device 0 0 5 0" > /proc/scsi/scsi
|
Umgekehrt funktioniert das Hinzufügen einer so verbannten Festplatte
natürlich auch:
root@linux #
echo "scsi add-single-device c b t l" > /proc/scsi/scsi
|
|
Um einen überblick über den Zustand des RAID-Systems zu bekommen, gibt
es mehrere Möglichkeiten:
mdstat
Mit einem
root@linux ~#
cat /proc/mdstat
|
haben wir uns auch bisher immer einen überblick über den aktuellen
Zustand des RAID-Systems verschafft.
vmstat
Ist man an der fortlaufenden CPU und Speicher-Belastung sowie an
der Festplatten I/O-Belastung interessiert, sollte man auf der
Konsole einfach ein
ausprobieren.
Mit grep oder perl mdstat abfragen
Wie üblich lässt sich unter Linux auch eine Abfrage von
/proc/mdstat mit einem Skript realisieren. Hier könnte man z.B.
die Folge "[UUUU]" nach einem Unterstrich regelmäßig per cron
abfragen - der Unterstrich signalisiert ja eine defekte
RAID-Partition - und lässt sich diese Information dann als E-Mail
schicken. Lässt man sich allerdings schon eine E-Mail schicken,
kann man sich ebenso gut auch eine SMS an sein Handy schicken
lassen. Dieser Weg ist dann auch nicht mehr weit. Ein passendes
grep-Kommando zum Abfragen von /proc/mdstat könnte dieses
Aussehen haben:
root@linux ~#
grep '[\[U]_' /proc/mdstat
|
xosview
Die aktuelle Entwicklerversion dieses bekannten
überwachungsprogramms enthält bereits eine Statusabfrage für
RAID-1 und RAID-5 Verbunde. Für den ordnungsgemäßen Betrieb ist
ein weiterer Kernel-Patch notwendig, der jedoch im tar-Archiv
enthalten ist.
|
Um den read-ahead-Puffer jeglicher Major-Devices unter Linux einfach
ändern zu können, gibt es ein nettes kleines Programm:
read-ahead-Puffer
|
/* readahead -- set & get the read_ahead value for the specified device
*/
#include "stdio.h"
#include "stdlib.h"
#include "linux/fs.h"
#include "asm/fcntl.h"
void usage()
{
printf( "usage: readahead <device> [newvalue]\n" );
}/* usage() */
int main( int args, char **argv )
{
int fd;
int oldvalue;
int newvalue;
if ( args <= 1 ) {
usage();
return(1);
}
if ( args >= 3 && !isdigit(argv[2][0]) ) {
printf( "readahead: invalid number.\n" );
return(1);
}
fd = open( argv[1], O_RDONLY );
if ( fd == -1 ) {
printf( "readahead: unable to open device %s\n", argv[1] );
return(1);
}
if ( ioctl(fd, BLKRAGET, &oldvalue) ) {
printf( "readahead: unable to get read_ahead value from "
"device %s\n", argv[1] );
close (fd);
return(1);
}
if ( args >= 3 ) {
newvalue = atoi( argv[2] );
if ( ioctl(fd, BLKRASET, newvalue) ) {
printf( "readahead: unable to set %s's read_ahead to %d\n",
argv[1], newvalue );
close (fd);
return(1);
}
}
else {
printf( "%d\n", oldvalue );
}
close (fd);
return(0);
}/* main */
|
Damit kann man natürlich auch RAID-Devices tunen.
|
Um einen RAID-0 Verbund zu vergrößern, zu verkleinern oder aus einer
einzelnen Festplatte ein RAID-0 zu erstellen, gibt es von Jakob
Oestergaard einen Patch für die RAID-Tools:
http://ostenfeld.dk/~jakob/raidreconf/raidreconf-0.0.2.patch.gz
Dieser Patch muss in den Source der RAID-Tools eingearbeitet werden und
die RAID-Tools anschließend neu kompiliert und installiert werden. Das
Erweitern eines RAID-0 Verbundes funktioniert dann durch zwei
unterschiedliche /etc/raidtab Dateien, die miteinander verglichen
werden und eine zusätzliche Partition innerhalb desselben Verbundes
eingearbeitet wird. Nach dem stoppen des zu verändernden
RAID-Verbundes, erfolgt der Aufruf durch:
root@linux ~#
raidreconf /etc/raidtab /etc/raidtab.neu /dev/md0
|
Hierbei muss in der /etc/raidtab.neu für den Verbund /dev/md0 eine
weitere Partition im Gegensatz zu /etc/raidtab
eingetragen sein.
|
Einen bereits initialisierten und laufenden RAID-5 Verbund kann man
derzeit leider nicht mit weiteren Festplatten vergrößern. Die einzige
Möglichkeit besteht darin, die Daten zu sichern, den RAID-5 Verbund
neu aufzusetzen und die Daten anschließend zurück zu schreiben.
|
|