Wie kann ich die ID einer Online-Festplatte in einem ZFS-Pool erhalten?

1067
STW

Ich drehe physische Festplatten innerhalb meines gespiegelten ZFS-Zpools (mit ZoL) und entferne ihn, um sie für Offsite-Backups zu verwenden. Um den Prozess zu rationalisieren, verwende ich udev-Regeln, um auf die ausgelagerten Laufwerke zu reagieren.

Wenn derzeit ein Laufwerk eingefügt wird, verwende ich ein zfs attach, das den Namen eines vorhandenen Laufwerks innerhalb des Pools erfordert. Für den Moment ist es auf einer der Festplatten fest codiert, die niemals offsite ist.

Wie kann ich also die ID einer Online-Festplatte für den Zielpool abrufen, anstatt eine ID fest zu codieren? Momentan spiele ich mit dem Grepping aus, hatte zpool statusaber gehofft, es könnte eine bessere Option geben.

1
Wäre es nicht sicherer, inkrementelle Snapshots mit "zfs send" und "zfs recv" zu verwenden, um Off-Site-Backups zu erstellen? Darth Android vor 9 Jahren 0
@DarthAndroid sicher, aber das ist ein ganz anderes Thema. STW vor 9 Jahren 0
Warum nicht `zpool online` und` zpool offline` verwenden? Dafür werden die Pool- und Gerätenamen benötigt. Der Gerätename sollte auf einem Silbertablett (kein Wortspiel beabsichtigt) von udev übergeben werden, und der Poolname kann leicht von `zdb aus dem Gerät extrahiert werden-l` oder vielleicht hart codiert, wenn nur ein Pool beteiligt ist. ZFS resilver ein veraltetes Gerät automatisch in einem Pool, wenn es online geschaltet wird. a CVn vor 9 Jahren 0

1 Antwort auf die Frage

0
STW

Fürs Erste habe ich ein kleines Skript zusammengestellt, zfs-online-disks.shdas die Online-Datenträger aus folgenden Elementen herauszieht zpool status:

#!/bin/bash  # Return a list of online disks for a storage pool  ONLINE=$(zpool status $1 | grep -Po "\S*(?=\s*ONLINE)")  while read -r line; do if ! [ -b "/dev/disk/by-id/$line" ]; then continue fi echo $line done <<< "$ONLINE"