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 aktuellen 2.2.13er Kernel zu verwenden,
kann man einfach den RAID-Patch für den 2.2.10er Kernel auf den Sourcetree des
2.2.13er Kernels 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.13er Kernel aus dem Internet besorgen:
ftp.kernel.org:/pub/linux/kernel/alan/
Der aktuelle Entwicklerkernel 2.3.99-pre3 beinhaltet bereits die neue RAID-Unterstützung. Dieser Kernel läßt sich mit den aktivierten RAID-Optionen einwandfrei kompilieren. Auch wenn das automatische Erkennen von RAID-Verbunden sich nicht explizit im Kernelauswahlmenü anwählen läßt, funktioniert es ebenso wie die Linear- und RAID-0 Unterstützung. Leider werden RAID-1, RAID-4 und RAID-5 noch nicht unterstützt. Ein zusätzliches Patchen des Kernels mit den 2.2.xer RAID-Patchen ist nicht nur unnötig, sondern aufgrund des geänderten Dateisystemcachings von vornherein zum Scheitern verurteilt. Hier hilft im Moment nur warten.
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.