staging.inyokaproject.org

Linux RAID-1 sicher auswerfen (ohne degrading)

Status: Ungelöst | Ubuntu-Version: Ubuntu 20.04 (Focal Fossa)
Antworten |

wIllson

Anmeldungsdatum:
4. Juni 2020

Beiträge: Zähle...

Hallo Leute!

Ich habe mir einen kleinen Homeserver eingerichtet, auf dem ich zahlreiche Serverapplikationen laufen hab (nginx, php, mysql,teamspeak, ftp, samba, ....). Aus Performancegründen läuft das System auf einer SSD (/dev/sda). Nebenbei benutze ich den Rechner als Datengrab / Archiv, indem ich zwei klassische Festplatten à 5TB angeschlossen habe (/dev/sdb und /dev/sdc). Diese sind im RAID-1 miteinander verbunden, um die Ausfallsicherheit zu erhöhen. Auf das Archiv greife ich lediglich selten (etwa alle 5-10 Tage ein mal) zu. Ich würde die Platten gerne bedarfsgerecht mounten, und in der Zwischenzeit sollen sie aus Stromspargründen und Gründen der Abnutzung gerne schlafen.

Konfiguration:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
admin@homeserver:/$ df
Filesystem      1K-blocks       Used  Available Use% Mounted on
[...]
/dev/vg1000/lv 4683780588 2427901136 2255879452  52% /Archive

admin@homeserver:/$ cat /proc/mdstat
Personalities : [linear] [raid0] [raid1] [raid10] [raid6] [raid5] [raid4]
md1 : active raid1 sdb1[2] sdc1[1]
      4878939456 blocks super 1.2 [2/2] [UU]
[...]
unused devices: <none>

admin@homeserver:/$ sudo mdadm --misc --detail /dev/md0
/dev/md0:
        Version : 1.2
  Creation Time : Sun Mar 22 13:52:22 2020
     Raid Level : raid1
     Array Size : 4878939456 (4652.92 GiB 4996.03 GB)
  Used Dev Size : 4878939456 (4652.92 GiB 4996.03 GB)
   Raid Devices : 2
  Total Devices : 2
    Persistence : Superblock is persistent

    Update Time : Sat Jun  6 12:34:20 2020
          State : clean
 Active Devices : 2
Working Devices : 2
 Failed Devices : 0
  Spare Devices : 0

    Number   Major   Minor   RaidDevice State
       2       8       21        0      active sync   /dev/sdb1
       1       8       37        1      active sync   /dev/sdc1

Leider ist es so, dass über die klassische Stromsparroutine (hdparm -S) die Platten niemals einschlafen, und bei forciertem Standby (hdparm -Y) sofort wieder erwachen. Ich habe viel Debugging betrieben um zu schauen, welche Applikation die Platten immer wieder aufwachen lässt, doch ist es bei der Fülle der Progamme (und deren zahlreiche IO-Operations) ein Kampf gegen Windmühlen. Zudem: bei Neuinstallation von Software würde man wieder am Anfang stehen.

Ich bin ziemlich schnell zur Erkenntnis gekommen, dass man die Platten nur sicher bei laufendem System über einen längeren Zeitraum in den Standby schicken kann, indem man sie un-mounted und für den Kernel unsichtbar macht.

1
2
3
4
5
admin@homeserver:/$ sudo umount /Archive   # Unmount filesystem on the disk.
admin@homeserver:/$ sudo vgchange -an      # Deactivate any LVM groups.
  0 logical volume(s) in volume group "vg1000" now active
admin@homeserver:/$ sudo hdparm -Y /dev/sdb
admin@homeserver:/$ sudo hdparm -Y /dev/sdc

Sogar nach diesen Schritten ist es so, dass die beiden HDDs sofort nach dem Schlafenlegen wieder aufwachen. Deshalb habe ich sie mit den folgenden Befehlen unregistered...

1
2
admin@homeserver:/$ sudo echo 1 > /sys/block/sdb/device/delete
admin@homeserver:/$ sudo echo 1 > /sys/block/sdc/device/delete

Die Platten fahren runter, die /dev/ Einträge sind nicht mehr verfügbar und kein Programm kann die Platten wieder erwecken, bis man sie mit echo 0 - 0 > /sys/class/scsi_host/hostX/scan wieder einbindet. Problem: nachdem man das RAID-1 wieder aktiviert erscheint das Array nun als degraded und muss neu syncronisiert werden. Insgesamt also keine gute Lösung.

Fragen: - Gibt es eine elegantere Lösung, die Platten längerfristig schlafen zu legen, ohne das RAID-1 Array zu desyncronisieren? - Gibt es alternative Möglichkeiten, den Zugriff auf die Platten zu blockieren, sodass sie schlafen?

Falls weitere Informationen benötigt werden, kann ich diese gerne nachreichen!

Bearbeitet von rklm:

Syntaxhighlighting "console"

engheneiro

Anmeldungsdatum:
13. August 2009

Beiträge: 2074

Hi,

ich lege meine Server-Platten, die mit ZFS im RAID1 Verbund laufen mit hd-idle (sollte bei fossa im repo universe sein, also über die Paketverwaltung instalieren) schlafen. Das geht bei mir problemlos.

Anwendung z.B.

hd-idle -i 1200

HTH

Rainer

wIllson

(Themenstarter)

Anmeldungsdatum:
4. Juni 2020

Beiträge: 7

Danke für deine Antwort. hd-idle ist im Prinzip genau das, was ich mit hdparm -Y bereits versucht habe. Leider springen die Platten nach wenigen Sekunden wieder an. Beim Setzen eines Idle-Timers schlafen sie gar nicht erst ein.

Was ich also brauche, ist eine Möglichkeit, die Platten zu un-mounten, damit kein Programm die HDDs immer wieder aufwecken kann. Und das, ohne das RAID-1 zu degraden 😉

Grüße

engheneiro

Anmeldungsdatum:
13. August 2009

Beiträge: 2074

Hallo nochmal,

also das RAID auseinanderzureißen ist sicher kein gangbarer Weg. Es sollte eigentlich nicht mal ein umount nötig sein. Zumindest in meinem Fall funktioniert das Sleep auch mit einer Media-Disc im RAID1, auf der SAMBA-Freigaben und ein DLNA-Server laufen. Sobald einige Zeit kein Zugriff mehr ist, schlafen sie friedlich ein (und durch 😉).

Evtl. reagiert deine Disk schlicht nicht oder nicht richtig auf hdparm, daher der Versuch mit hd-idle. Recherchiere mal, ob mit dem Disc Typ Probleme bekannt sind. Versuche auch mal, den Status und die Eigenschaften abzufragen mit

sudo hdparm -I /dev/sd[a-c]

Zudem würde ich dann auch UIDs nutzen, da sich die Device-Pfade immer mal ändern können in der Reihenfolge.

HTH

Rainer

wIllson

(Themenstarter)

Anmeldungsdatum:
4. Juni 2020

Beiträge: 7

Ich habe es nochmal genauer untersucht. Der Standby scheint ansich zu funktionieren, wird nur leider durch ständige Zugriffe unterbrochen.

Wenn ich die Platten mit hdparm -Y manuell schlafen lege, funktioniert dies, man hört wie die Platten herunterfahen. Dies lässt sich auch für wenige Sekunden in der Konsole bestätigen:

1
2
3
4
admin@homeserver:/$ sudo hdparm -C /dev/sdb

/dev/sdb:
 drive state is:  standby

Kurz darauf springen die Platten hörbar wieder an, und der Status springt zurück auf "active/idle"

Wenn ich alle Server Dienste ausschalte, dann fahren die Platten auch längerfristig herunter (für z.B. 2h). Leider ist es dann immernoch so, dass sobald der Rechner irgendeine minimale Aktion durchführt (z.B. DHCP IP renew oder Ähnliches) die Platten wieder hochfahren, und das obwohl die Systempartition ja auf der SSD liegt. Zudem ist der Rechner ohne laufende Serverdienste ja auch nutzlos für mich ☹

dingsbums

Anmeldungsdatum:
13. November 2010

Beiträge: 3337

Nebenbei benutze ich den Rechner als Datengrab / Archiv, indem ich zwei klassische Festplatten à 5TB angeschlossen habe (/dev/sdb und /dev/sdc).

Wenn ich alle Server Dienste ausschalte, dann fahren die Platten auch längerfristig herunter.

Zudem ist der Rechner ohne laufende Serverdienste ja auch nutzlos für mich

Wenn das Raid wirklich nur "Datengrab" wäre, dann müsste dein Server auch bei abgeklemmten RAID starten und alle Dienste zur Verfügung stellen. Tut er das? Wenn ja, dann läuft vielleicht irgendein Überwachungsprozess, welcher alle angeschlossenen Platten / Volumes / Partitionen periodisch prüft. Wenn nein, dann liegt wohl doch nicht nur das Archiv dort.

wIllson

(Themenstarter)

Anmeldungsdatum:
4. Juni 2020

Beiträge: 7

Wenn das Raid wirklich nur "Datengrab" wäre, dann müsste dein Server auch bei abgeklemmten RAID starten und alle Dienste zur Verfügung stellen. Tut er das?

Ja, wenn ich die Maschine nur mit angeschlossener SSD starte (HDDs abgeklemmt), funktionieren alle Server ohne Beeinträchtigung (und das schön leise und stromsparend).

Ich habe auch schon viel logging betrieben, um zu schauen, welcher Prozess ggf. andauernd zugreift, jedoch war in den Logs das RAID-1 Archiv einfach nicht zu finden ...

Ggf. gibt es ja einen Weg, das RAID-1 Archiv "inaccessible" zu machen, sodass kein Prozess Zugriff auf die Platten hat, bis man das Archiv wieder manuell "aufschließt"

Thomas_Do Team-Icon

Moderator
Avatar von Thomas_Do

Anmeldungsdatum:
24. November 2009

Beiträge: 8162

wIllson schrieb:

Ggf. gibt es ja einen Weg, das RAID-1 Archiv "inaccessible" zu machen, sodass kein Prozess Zugriff auf die Platten hat, bis man das Archiv wieder manuell "aufschließt"

Ich würde erst einmal versuchen, die Prozesse zu identifizieren, die auf das Raid zugreifen. Ich habe auch einen Server dessen Datenplatte problemlos schlafen geht, wenn sie längere Zeit nicht angesprochen wird.

wIllson

(Themenstarter)

Anmeldungsdatum:
4. Juni 2020

Beiträge: 7

Thomas_Do schrieb:

Ich würde erst einmal versuchen, die Prozesse zu identifizieren, die auf das Raid zugreifen. Ich habe auch einen Server dessen Datenplatte problemlos schlafen geht, wenn sie längere Zeit nicht angesprochen wird.

wie gesagt

wIllson schrieb:

Ich habe auch schon viel logging betrieben, um zu schauen, welcher Prozess ggf. andauernd zugreift, jedoch war in den Logs das RAID-1 Archiv einfach nicht zu finden ...

Ggf. gibt es ja eine Methode, lediglich eine bestimmte Platte zu loggen, ggf. habt ihr da ein gutes Monitoring-Programm? Dann versuche ich es nochmal ....

Thomas_Do Team-Icon

Moderator
Avatar von Thomas_Do

Anmeldungsdatum:
24. November 2009

Beiträge: 8162

sudo su
echo 1 > /proc/sys/vm/block_dump

Dann kannst Du mit "dmesg" die Festplattenaktivitäten sehen

Antworten |