Hier finden sowohl Tips und Tricks Erwähnung, die teilweise selbst getest 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 nochmal gepatcht werden soll. Diese Fragen sollten
alle mit »no« beantwortet werden. Der Erfolg ist, daß 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.kernel.org:/pub/linux/kernel/people/alan/
Diese enthalten auch die jeweils aktuellen RAID-Treiber.
Auch in den aktuellsten 2.2.xer Linux Kerneln ist der aktuelle RAID-Patch noch nicht enthalten. Passende Patches hierfür findet man im Internet bei Ingo Molnar:
http://people.redhat.com/mingo/raid-patches/
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:
echo "scsi remove-single-device c b t l" > /proc/scsi/scsi
Die Optionen stehen für:
c = die Nummer des SCSI-Kontrollers
b = die Nummer des Busses oder Kanals
t = die SCSI ID
l = die SCSI LUN
Möchte man das 5. Device des 1. SCSI Kontrollers rausschmeißen, müßte der Befehl so aussehen:
echo "scsi remove-single-device 0 0 5 0" > /proc/scsi/scsi
Umgekehrt funktioniert das Hinzufügen einer so verbannten Festplatte natürlich auch:
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:
Mit einem
cat /proc/mdstat
haben wir uns auch bisher immer einen Überblick über den aktuellen Zustand des RAID-Systems verschafft.
Ist man an der fortlaufenden CPU und Speicher-Belastung sowie an der Festplatten I/O-Belastung interessiert, sollte man auf der Konsole einfach ein
vmstat 1
ausprobieren.
Wie üblich läßt 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äßt sich diese Information
dann als E-Mail schicken. Läßt 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:
grep '[\[U]_' /proc/mdstat
Die aktuelle Entwicklerversion dieses bekannten Überwachungsprogrammes enthält bereits eine Statussabfrage 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:
/* 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 muß 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:
raidreconf /etc/raidtab /etc/raidtab.neu /dev/md0
Hierbei muß 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.