Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
Beide Seiten der vorigen Revision Vorhergehende Überarbeitung Nächste Überarbeitung | Vorhergehende ÜberarbeitungLetzte ÜberarbeitungBeide Seiten der Revision | ||
server:raid [2012/07/31 16:08] – [Beispiel: Raid 1 mit 1 defekter Platte] st | server:raid [2021/10/29 20:27] – [Beispiel: Raid stoppen / entfernen] st | ||
---|---|---|---|
Zeile 1: | Zeile 1: | ||
+ | ====== RAID ====== | ||
+ | [[wpde> | ||
+ | |||
+ | RAID kann sowohl in Hardware als auch in Software erfolgen. | ||
+ | Hardwarecontroller entlasten die CPU, da sie eine eigene haben, dafür kosten sie aber auch einiges. Mainboard-RAID-chips sind oft billig (und laufen manchmal nur unter einem Betriebsystem wie [[windows: | ||
+ | |||
+ | Idealerweise (im professionellen Bereich) ist ein [[wpde> | ||
+ | |||
+ | Das alleinige Durchreichen einer oder mehrerer Festplatten bezeichnet man als [[wpde> | ||
+ | Oft wird auch die Zusammenfassung zu einer (virtuelle) großen Festplatte so bezeichnet. Dabei entsteht kein RAID und auch keine erhöhte Datensicherheit/ | ||
+ | |||
+ | Ordentliche RAID-Controller haben eine schnelle bzw. spezialisierte CPU und einen internen [[wpde> | ||
+ | |||
+ | :!: **RAID ist kein Ersatz für Backups**, da | ||
+ | - ein RAID nur gegen Festplattenausfall absichert, | ||
+ | - andere logische Fehler wie fehlerhafte Daten/ | ||
+ | - und bei größeren physikalischen Schäden (Brand, ...) die zusätzliche Redundanz nichts nützt. | ||
+ | |||
+ | Außerdem ist der Ausfall des Controller ein Schwachpunkt (" | ||
+ | |||
+ | :!: Auf jeden Fall sollte man den Ausfall einer Festplatte schon einmal simuliert haben, damit ist der Stress beim realen Ausfall geringer und man bekommt ein Gefühl für die zu erwartende Rebuild-Zeit (die Zeit bis das RAID wieder komplett berechnet ist). | ||
+ | |||
+ | Zur **Geschwindigkeit** lässt sich allgemein sagen, dass je mehr Festplatten die Schreibzugriffe teilen, desto schneller ist es (außer im Fall das die Berechnung der Parity/ | ||
+ | |||
+ | ===== Vergleich Software zu Hardware-RAID ===== | ||
+ | |||
+ | |||
+ | ^ Vergleich Software zu Hardware-RAID | ||
+ | ^ Kriterium ^ Software-RAID ^ Hardware-Raid ((mit extra Controller)) ^ | ||
+ | ^ Kosten | ||
+ | ^ Komplexität | mittel bis hoch da keine Status-LEDs den Ausfall einzelner Platten anzeigen, man muss i.d.R. nach den Seriennummern gehen | niedrig, Verwaltungsoberfläche hilft, Status-LEDs helfen, Automatiken (auto-rebuild etc.) | | ||
+ | ^ Batteriepufferung (mit Herstellerspezifischer BBU oder NAND-Flash) verhindert verlorene Daten bei Schreibzugriff | ||
+ | ^ Schreibcache "Write back caching" | ||
+ | ^ Performance | sehr gut wenn Prozessor nicht am Limit gefahren wird | gut bis sehr gut | | ||
+ | ^ Overhead (CPU, RAM etc): | Je nach Nutzung, i.d.R. wenig wenn Server ausreichend dimensioniert | Nein, CPU und RAM wird nicht belastet | ||
+ | ^ Austausch defekter Datenträger im laufenden Betrieb ("hot swapping" | ||
+ | ^ Datenträger im stand-by der bei Ausfall sofort einspringt ((um die Wiederherstellzeit zu verringern, Rebuild beginnt sofort und nicht erst nach Austausch defekter Datenträger durch das Personal)) ("Hot spare" | ||
+ | ^ Berücksichtigung des RAID im Betriebssystem nötig, ((z.B. bei [[linux: | ||
+ | ^ Wiederherstellung ohne laufendes Betriebssystem | ||
+ | ^ RAID einbauen in anderes System | ||
+ | ^ als Backup tauglich | ||
+ | ^ Verwaltung | Reguläre Programme des Betriebssystems, | ||
+ | ^ Zusammenfassung | ||
+ | ===== Links ===== | ||
+ | * [[http:// | ||
+ | * [[http:// | ||
+ | |||
+ | |||
+ | ===== RAID-Level ===== | ||
+ | |||
+ | ^^ verbreitete RAID Level ^^^^^^ | ||
+ | ^ Merkmale ^ **Level 0** (Striping) ^ **Level 1** (Drive Mirroring) | ||
+ | ^ Abbildungen | {{server: | ||
+ | ^ Funktionsweise |Aufteilung der Daten in Blöcke (4-128 KB groß, üblicherweise 64 KB), Verteilung auf die Festplatten | ||
+ | ^ primäre Verwendung|temporäre Daten (Auslagerungsdatei / Swap-Partition) | ||
+ | ^ Kapazitätsverlust/ | ||
+ | ^ Minimum Anzahl Festplatten | ||
+ | ^ Geschwindigkeitsvorteil allgemein | **sehr hoch** (lesen+schreiben) | ||
+ | | lesen sequentiell | ++ | + | ++ | ++ | ? | | ||
+ | | lesen zufällig | ? | + | ++ | + | ? | | ||
+ | | schreiben sequentiell | ++ | ? | ++ | ? | ? | | ||
+ | | schreiben zufällig | ? | ? | ? | -- | ? | | ||
+ | ^ Sicherheit vor Datenverlust | ||
+ | ^ RAID-Verhalten beim Ausfall | ||
+ | ^ verkraftet den Ausfall von | keiner Festplatte| alle bis auf eine Festplatte| allen stripesets bis auf eins | einer Festplatte | zwei beliebigen Festplatten | | ||
+ | |||
+ | ====== Software-RAID ====== | ||
+ | |||
+ | Software-RAID kostet etwas CPU-Leistung, | ||
+ | |||
+ | ^ Betriebssystem ^ RAID-Level ^ | ||
+ | |Windows 2000 oder Windows XP Pro |RAID 0 | | ||
+ | |Server-Versionen (2000, 2003) |RAID 0, RAID 1 | | ||
+ | | Linux | mindestens RAID 0, 1, 5 (+ mehr?) | | ||
+ | |||
+ | '' | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | ===== Software RAID mit Linux ===== | ||
+ | |||
+ | Software RAID unter [[linux: | ||
+ | |||
+ | dpkg-reconfigure mdadm | ||
+ | |||
+ | ==== Links ==== | ||
+ | |||
+ | * [[http:// | ||
+ | |||
+ | ==== Informationen anzeigen ==== | ||
+ | |||
+ | |||
+ | * **Übersicht über vorhandene RAIDs**:< | ||
+ | * **Details zu einem bestimmten SW-Raid anzeigen**< | ||
+ | Version : 1.2 | ||
+ | Creation Time : Sat Aug 27 04:51:31 2011 | ||
+ | Raid Level : raid1 | ||
+ | Array Size : 1465134841 (1397.26 GiB 1500.30 GB) | ||
+ | Used Dev Size : 1465134841 (1397.26 GiB 1500.30 GB) | ||
+ | Raid Devices : 2 | ||
+ | Total Devices : 2 | ||
+ | Persistence : Superblock is persistent | ||
+ | |||
+ | Update Time : Sat Aug 27 04:51:31 2011 | ||
+ | State : clean, resyncing | ||
+ | | ||
+ | Working Devices : 2 | ||
+ | | ||
+ | Spare Devices : 0 | ||
+ | |||
+ | | ||
+ | |||
+ | Name : server1: | ||
+ | UUID : 12f8f3bd: | ||
+ | | ||
+ | |||
+ | Number | ||
+ | | ||
+ | | ||
+ | * **Details zu einem bestimmten Datenträger anzeigen** (Beispiel ''/ | ||
+ | Magic : a92b4efc | ||
+ | Version : 1.2 | ||
+ | Feature Map : 0x0 | ||
+ | Array UUID : a2c97c53: | ||
+ | Name : storage: | ||
+ | Creation Time : Sat Oct 12 02:37:44 2013 | ||
+ | Raid Level : raid1 | ||
+ | Raid Devices : 2 | ||
+ | |||
+ | Avail Dev Size : 5860529039 (2794.52 GiB 3000.59 GB) | ||
+ | Array Size : 2930264383 (2794.52 GiB 3000.59 GB) | ||
+ | Used Dev Size : 5860528766 (2794.52 GiB 3000.59 GB) | ||
+ | Data Offset : 2048 sectors | ||
+ | Super Offset : 8 sectors | ||
+ | State : clean | ||
+ | Device UUID : c6cfec2d: | ||
+ | |||
+ | Update Time : Tue Oct 15 17:00:06 2013 | ||
+ | | ||
+ | | ||
+ | |||
+ | |||
+ | | ||
+ | Array State : AA (' | ||
+ | |||
+ | ==== manuelle Überprüfung starten ==== | ||
+ | |||
+ | Soll ein Software-Raid auch ohne zwingenden Grund (wie Ausfall eines Mitglieds) überprüft werden, dann reicht ein einfacher Aufruf (Beispiel für '' | ||
+ | |||
+ | <code bash> | ||
+ | Alternativ: | ||
+ | <code bash>/ | ||
+ | |||
+ | Falls die Fehlermeldung " | ||
+ | <code bash> | ||
+ | |||
+ | ==== Überprüfung stoppen ==== | ||
+ | |||
+ | <code bash> | ||
+ | |||
+ | Falls sofort wieder ein resync startet, hilft möglicherweise <code bash>/ | ||
+ | <code bash> | ||
+ | |||
+ | ==== Datenträger aus einem RAID entfernen ==== | ||
+ | |||
+ | Beispiel: Die Festplatte /dev/sdf soll präventiv ausgetauscht werden. Sie enthält die Partitionen /dev/sdf2 und /dev/sdf3 die Mitglied in /dev/md1 bzw. /dev/md2 sind. | ||
+ | |||
+ | Ein einfaches entfernen von /dev/sdf2 schlägt fehl weil diese Partition noch vollwertiges Mitglied im Raid ist und auch /dev/sdf3 noch Teil eines Raid ist. | ||
+ | |||
+ | <code bash> | ||
+ | < | ||
+ | |||
+ | Die korrekte Vorgehensweise ist also **zuerst die Partitionen als fehlerhaft zu kennzeichnen**: | ||
+ | |||
+ | <code bash> | ||
+ | < | ||
+ | |||
+ | <code bash> | ||
+ | < | ||
+ | |||
+ | Nun werden sie als " | ||
+ | <code bash>cat / | ||
+ | < | ||
+ | |||
+ | md2 : active raid6 sdc3[8] sda3[0] sdg3[6] sdf3[7](F) sde3[4] sdd3[3] sdb3[1] | ||
+ | 52421120 blocks super 1.2 level 6, 512k chunk, algorithm 2 [7/6] [UUUUU_U] | ||
+ | | ||
+ | md1 : active raid1 sdc2[8] sda2[0] sdg2[6] sdf2[7](F) sde2[4] sdd2[3] sdb2[1] | ||
+ | 524276 blocks super 1.2 [7/6] [UUUUU_U] | ||
+ | | ||
+ | unused devices: < | ||
+ | |||
+ | **Anschließend können diese Partitionen vollständig aus dem Raid entfernt werden**: | ||
+ | <code bash> | ||
+ | < | ||
+ | <code bash> | ||
+ | < | ||
+ | |||
+ | Die Integrationen einer neuen Festplatte ist nun möglich, das Raid kann damit wieder zusammengesetzt werden (siehe nächster Abschnitt). | ||
+ | |||
+ | |||
+ | ==== Mailbenachrichtigung ==== | ||
+ | |||
+ | Die Mailbenachrichtigung ist in der ''/ | ||
+ | |||
+ | < | ||
+ | MAILFROM my-server-name - mdadm</ | ||
+ | oder | ||
+ | < | ||
+ | MAILFROM my-server-name - mdadm</ | ||
+ | |||
+ | Mehrere Empfänger (leider nicht in mdadm.conf machbar), dazu wäre bei [[server: | ||
+ | < | ||
+ | <code bash> | ||
+ | |||
+ | **E-Mail-Benachrichtigung testen**: <code bash> | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | ==== Raid wieder zusammensetzen ==== | ||
+ | |||
+ | Wenn das raid-Array keine Fehler hatte und nur nicht automatisch gefunden wurde: <code bash> | ||
+ | |||
+ | :!: Die anschließenden Schritte funktionieren nur wenn das System die fehlerhafte Platte bereits selbstständig aus dem Raid entfernt hat. Sollte die Festplatte noch als Teil des Raids, z.B. als " | ||
+ | |||
+ | Beispiel: raid1 mit /dev/sda defekt, /dev/sdb intakt | ||
+ | |||
+ | * **Partitionieren der neuen (Austausch-) Festplatte** durch Clonen der Partionierung einer vorhandenen Festplatte (hier /dev/sdb): | ||
+ | * **GPT**: clonen mit (von sdb auf sda!)< | ||
+ | * **MBR**: <code bash> | ||
+ | OK | ||
+ | |||
+ | Disk /dev/sda: 243201 cylinders, 255 heads, 63 sectors/ | ||
+ | |||
+ | sfdisk: ERROR: sector 0 does not have an msdos signature | ||
+ | / | ||
+ | Old situation: | ||
+ | No partitions found | ||
+ | New situation: | ||
+ | Units = sectors of 512 bytes, counting from 0 | ||
+ | |||
+ | | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | / | ||
+ | Warning: partition 1 does not end at a cylinder boundary | ||
+ | Warning: partition 2 does not start at a cylinder boundary | ||
+ | Warning: partition 2 does not end at a cylinder boundary | ||
+ | Warning: no primary partition is marked bootable (active) | ||
+ | This does not matter for LILO, but the DOS MBR will not boot this disk. | ||
+ | Successfully wrote the new partition table | ||
+ | |||
+ | Re-reading the partition table ... | ||
+ | |||
+ | If you created or changed a DOS partition, /dev/foo7, say, then use dd(1) | ||
+ | to zero the first 512 bytes: | ||
+ | (See fdisk(8).) | ||
+ | </ | ||
+ | * ggf. Partitionen einlesen wenn nicht sichtbar: <code bash> | ||
+ | * **Einbinden der neuen Festplatte**: | ||
+ | * Boot-manager (grub) auf die neue Festplatte installieren <code bash> | ||
+ | * der **Syncronisationsfortschritt** kann mit <code bash>cat / | ||
+ | |||
+ | |||
+ | **Links**: | ||
+ | * [[http:// | ||
+ | ==== Syncronisationsgeschwindigkeit festlegen ==== | ||
+ | |||
+ | Maximale Syncronisationsgeschwindigkeit anzeigen: <code bash>cat / | ||
+ | |||
+ | Hier ist also 100 MB/s eingestellt (100000K/ | ||
+ | Geschwindigkeit auf 200 MB/s stellen (**gültig bis zum reboot**): <code bash> | ||
+ | |||
+ | Minimal garantierte Syncronisationsgeschwindigkeit anzeigen: <code bash>cat / | ||
+ | |||
+ | **Dauerhafte Einstellungen** in der Datei ''/ | ||
+ | dev.raid.speed_limit_max = 200000</ | ||
+ | |||
+ | |||
+ | ==== Beispiel: Partitionierung >2TB und Raid 5 bei 4 identischen Platten anlegen ==== | ||
+ | |||
+ | Beispiel: 4 Festplatten mit 4TB (/dev/sda bis /dev/sdd), GPT-Partionierung, | ||
+ | |||
+ | **passende Partitionstabelle auf der ersten Festplatte anlegen:** | ||
+ | <code bash> | ||
+ | < | ||
+ | (parted) mklabel gpt | ||
+ | (parted) mkpart primary ext4 2048s -1s | ||
+ | Warnung: Sie haben eine Partition von 1049kB nach 4000GB angefordert. | ||
+ | Der nächste Ort, der verwaltet werden kann, ist von 1049kB nach 4000GB. | ||
+ | Ist das noch annehmbar? | ||
+ | Ja/ | ||
+ | (parted) set 1 raid on | ||
+ | (parted) quit</ | ||
+ | < | ||
+ | **Nun die Partitionstabelle auf die anderen Festplatten clonen (Schema: sgdisk -R Ziel Quelle):** | ||
+ | <code bash> | ||
+ | < | ||
+ | <code bash> | ||
+ | < | ||
+ | <code bash> | ||
+ | **Anschließend auf den geclonten Festplatten neue GUIDs erzeugen (GPT-Bezeichner): | ||
+ | <code bash> | ||
+ | < | ||
+ | <code bash> | ||
+ | < | ||
+ | <code bash> | ||
+ | < | ||
+ | <code bash> | ||
+ | < | ||
+ | mdadm: array /dev/md0 started.</ | ||
+ | |||
+ | |||
+ | ==== Beispiel: Raid 1 mit 2 identischen Platten anlegen ==== | ||
+ | |||
+ | Beispiel: Raid 1 mit 2 identischen Platten anlegen: | ||
+ | |||
+ | - **passende Partitionstabelle** anlegen (**Partitionen mit Typ fd** Linux raid-autodetect): | ||
+ | unit: sectors | ||
+ | |||
+ | /dev/sdc1 : start= | ||
+ | /dev/sdc2 : start= | ||
+ | /dev/sdc3 : start= | ||
+ | /dev/sdc4 : start= | ||
+ | - **Partitionierung syncronisieren**: | ||
+ | - **Raiddevices mit mdadm erstellen**: | ||
+ | may not be suitable as a boot device. | ||
+ | store '/ | ||
+ | your boot-loader understands md/v1.x metadata, or use | ||
+ | --metadata=0.90 | ||
+ | Continue creating array? y | ||
+ | mdadm: Defaulting to version 1.2 metadata | ||
+ | mdadm: array /dev/md0 started.</ | ||
+ | - Die Syncronisation beider Datenträger beginnt nicht automatisch: | ||
+ | Personalities : [raid0] [raid1] [raid6] [raid5] [raid4] [raid10] | ||
+ | md0 : active (auto-read-only) raid1 sda1[1] sdb1[0] | ||
+ | 1465134841 blocks super 1.2 [2/2] [UU] | ||
+ | resync=PENDING</ | ||
+ | Personalities : [raid0] [raid1] [raid6] [raid5] [raid4] [raid10] | ||
+ | md0 : active raid1 sdd1[1] sdc1[0] | ||
+ | 1465134841 blocks super 1.2 [2/2] [UU] | ||
+ | [> | ||
+ | - **neue Config nach ''/ | ||
+ | - Optional: **Initialsyncronisierung beschleunigen** (siehe oben): <code bash> | ||
+ | |||
+ | |||
+ | ==== Beispiel: Raid 1 mit 1 defekter Platte ==== | ||
+ | |||
+ | Wenn man eine Mailbenachrichtigung eingerichtet hat (was man tun sollte!) bekommt man Warnungen falls das Raid Probleme hat. | ||
+ | |||
+ | Info: Die Mailbenachrichtigung ist in der ''/ | ||
+ | |||
+ | < | ||
+ | This is an automatically generated mail message from mdadm | ||
+ | running on serverXY | ||
+ | |||
+ | A Fail event had been detected on md device /dev/md0. | ||
+ | |||
+ | It could be related to component device /dev/sdb1. | ||
+ | |||
+ | Faithfully yours, etc. | ||
+ | |||
+ | P.S. The / | ||
+ | |||
+ | Personalities : [raid0] [raid1] [raid6] [raid5] [raid4] [raid10] | ||
+ | md0 : active raid1 sda1[0] sdb1[1](F) | ||
+ | 1465134841 blocks super 1.2 [2/1] [U_] | ||
+ | [> | ||
+ | |||
+ | unused devices: < | ||
+ | </ | ||
+ | |||
+ | Wenn dann noch die Resync-Versuche scheitern sieht es so aus: | ||
+ | < | ||
+ | # mdadm --detail /dev/md0 | ||
+ | /dev/md3: | ||
+ | Version : 1.2 | ||
+ | Creation Time : Sat Aug 27 04:51:31 2011 | ||
+ | Raid Level : raid1 | ||
+ | Array Size : 1465134841 (1397.26 GiB 1500.30 GB) | ||
+ | Used Dev Size : 1465134841 (1397.26 GiB 1500.30 GB) | ||
+ | Raid Devices : 2 | ||
+ | Total Devices : 2 | ||
+ | Persistence : Superblock is persistent | ||
+ | |||
+ | Update Time : Sun Mar 4 02:13:22 2012 | ||
+ | State : clean, degraded | ||
+ | | ||
+ | Working Devices : 1 | ||
+ | | ||
+ | Spare Devices : 0 | ||
+ | |||
+ | Name : serverXY: | ||
+ | UUID : 12f8e3be: | ||
+ | | ||
+ | |||
+ | Number | ||
+ | | ||
+ | | ||
+ | |||
+ | | ||
+ | </ | ||
+ | |||
+ | Die Festplatte /dev/sdb (Partition /dev/sdb1) scheint also tatsächlich defekt zu sein, so dass nur eine Platte betriebsbereit ist. Der Status ist " | ||
+ | |||
+ | * https:// | ||
+ | * http:// | ||
+ | * http:// | ||
+ | * https:// | ||
+ | * http:// | ||
+ | |||
+ | ==== Beispiel: Raid stoppen / entfernen ==== | ||
+ | |||
+ | - unmounten: <code bash> | ||
+ | - ggf. LVM inaktiv schalten: <code bash> | ||
+ | - stoppen:< | ||
+ | - entfernen: <code bash> | ||
+ | - optional: das RAID zerstören (kann dann nicht mehr zusammengesetzt werden!)< | ||
+ | |||
+ | ==== asynchron schreiben (write-mostly write-behind)==== | ||
+ | |||
+ | Die Option " | ||
+ | |||
+ | Beim anlegen des Raid wird das festgelegt: '' | ||
+ | |||
+ | Zur Laufzeit (Beispiel array md0 mit /dev/sda1): | ||
+ | * aktivieren: <code bash> | ||
+ | * deaktivieren: | ||
+ | :!: gut möglich das diese Einstellung [[https:// | ||
+ | |||
+ | " | ||
+ | |||
+ | <code bash> | ||
+ | |||
+ | |||
+ | Beides Einstellungen sollte mit [[https:// | ||
+ | <code bash> | ||
+ | mdadm /dev/md0 --grow --bitmap=none | ||
+ | mdadm /dev/md0 --grow --bitmap=internal --write-behind=4096 | ||
+ | </ | ||
+ | |||
+ | Links: | ||
+ | * https:// | ||
+ | |||
+ | |||
+ | |||
+ | ==== Links ==== | ||
+ | |||
+ | * [[http:// | ||
+ | * [[http:// | ||
+ | * [[https:// | ||
+ | * [[http:// | ||
+ | * [[http:// | ||
+ | * Artikel " | ||
+ | |||
+ | ===== Software RAID mit Windows ===== | ||
+ | |||
+ | FIXME | ||
+ | |||
+ | ==== Links ==== | ||
+ | |||
+ | FIXME |