Erzwingen, dass zpool / dev / disk / by-id in Ubuntu Xenial verwendet

15

Ich probiere das gebündelte OpenZFS auf Ubuntu 16.04 Xenial aus.

Beim Erstellen von Pools beziehe ich mich aus Gründen der Ausfallsicherheit immer auf Laufwerke mit ihren Seriennummern in /dev/disk/by-id/(oder /dev/disk/gptunter FreeBSD). Die Reihenfolge der Laufwerke ist /devbeim Neustart eines Computers nicht immer gleich. Wenn sich andere Laufwerke im Computer befinden, wird der Pool möglicherweise nicht ordnungsgemäß bereitgestellt.

Wenn zpool statusich zum Beispiel mit einer 14.04-Box arbeite, bekomme ich Folgendes:

NAME                                  STATE     READ WRITE CKSUM
tank                                  ONLINE       0     0     0
  raidz1-0                            ONLINE       0     0     0
    ata-Hitachi_HDS722020ALA330_[..]  ONLINE       0     0     0
    ata-Hitachi_HDS722020ALA330_[..]  ONLINE       0     0     0
    ata-Hitachi_HDS722020ALA330_[..]  ONLINE       0     0     0
    ata-Hitachi_HUA722020ALA330_[..]  ONLINE       0     0     0

Aber wenn ich am 16.04 einen neuen Pool damit erstelle (abgekürzt):

zpool create pool raidz \
    /dev/disk/by-id/ata-Hitachi_HDS723030ALA640_[..] \
    /dev/disk/by-id/ata-Hitachi_HDS723030ALA640_[..] \
    /dev/disk/by-id/ata-Hitachi_HDS723030ALA640_[..] \
    /dev/disk/by-id/ata-Hitachi_HDS723030ALA640_[..]

Ich bekomme das mit zpool status:

NAME        STATE     READ WRITE CKSUM
tank        ONLINE       0     0     0
  raidz1-0  ONLINE       0     0     0
    sdf     ONLINE       0     0     0
    sde     ONLINE       0     0     0
    sdd     ONLINE       0     0     0
    sda     ONLINE       0     0     0

Es sieht so aus, als ob zpool den Symlinks gefolgt ist, anstatt sie zu referenzieren.

Gibt es eine Möglichkeit, zpool am 16.04 zu zwingen, meine Laufwerksreferenzen beim Erstellen eines Pools zu berücksichtigen? Oder sind meine Bedenken, was hier getan wird, falsch?

Update: Problemumgehung

Ich habe auf Github einen Thread für zfsonlinux gefunden, der eine Problemumgehung vorschlug. Erstellen Sie zuerst Ihren Zpool mit /dev/sdXGeräten, und führen Sie dann Folgendes aus :

$ sudo zpool export tank
$ sudo zpool import -d /dev/disk/by-id -aN

Ich würde es dennoch vorziehen, zpool createwenn es möglich wäre, dies mit der Initiale zu tun .

Ruben Schade
quelle
Es spielt keine Rolle, wie Sie sie erstellen. Wenn es zu / dev / sd zurückkehrt? Gerätenamen, die zfs exportund zfs import -dfunktionieren trotzdem. Übrigens, es sei denn, Sie benötigen wirklich jedes Byte Speicherplatz, verwenden Sie zwei gespiegelte Paare anstelle von raidz. Die Leistung von raidz ist besser als die von raid-5, aber immer noch viel schlechter als die von raid-10 oder zfs gespiegelten Paaren. Es ist auch einfacher, einen Pool aus gespiegelten Paaren zu erweitern. Fügen Sie einfach zwei Festplatten gleichzeitig hinzu. Mit raidz müssen Sie jede der Festplatten durch größere ersetzen Pool haben mehr Platz zur Verfügung.
cas
Ich habe immer noch einige Raid-Z-Pools und bereue, sie gemacht zu haben. Wenn ich mir Ersatzdatenträger leisten kann, erstelle ich neue Pools mit gespiegelten Paaren und zfs sendkopiere meine Daten in die neuen Pools. Tatsächlich ist raid-z für meine mythtv-Box in Ordnung, in der die Leistung nur dann kritisch ist, wenn 6 oder 8 Transcodierungsaufträge gleichzeitig ausgeführt werden. Das Wechseln zu gespiegelten Paaren ist in dem Pool, in dem sich mein /home Verzeichnis befindet, sehr auffällig .
cas
2
Die Spiegelung von ZIL ist so, dass Sie keine billigen SSDs mit großen Kondensatoren mehr verwenden müssen, um Stromausfälle zu vermeiden. IMO, das Spiegeln der ZIL ist nicht optional, egal welche Art von SSDs Sie haben - wenn Ihre ZIL stirbt, verlieren Sie alle noch zu schreibenden Daten und können Ihren Pool beschädigen. Was L2ARC betrifft, habe ich ausdrücklich gesagt, dass sie NICHT gespiegelt werden dürfen ... Das Spiegeln des L2ARC-Cache ist eine Verschwendung von Zeit, Geld und gutem SSD-Speicherplatz (und würde nichts tun, um den Cache zu verlieren - woher haben Sie diese Idee?)
cas
1
:) Übrigens, mein Gehirn hat nicht richtig funktioniert, als ich den Grund für das Spiegeln von ZIL erklärt habe. Es ist nicht zum Schutz vor Stromausfall, das ist völliger Unsinn und ich hätte es niemals sagen sollen. Es soll vor dem Ausfall des ZIL-Antriebs schützen. dh RAID-1-Spiegel für die ZIL. Zwei preisgünstige SSDs sind im Allgemeinen besser als eine extrem teure (es sei denn, die teurere SSD verfügt über eine viel schnellere Schnittstelle wie PCI-e gegenüber SATA). und eine USV ist unabdingbar ... billiger Schutz gegen Stromausfall.
cas
1
@cas Mirrored ZIL schützt gleichzeitig mit einem unerwarteten Herunterfahren vor dem Ausfall eines SLOG-Geräts . Unter normalen Betriebsbedingungen ist die ZIL schreibgeschützt und das Schreiben in den dauerhaften Speicher erfolgt aus dem RAM (ARC). Wenn das System unerwartet heruntergefahren wird, werden die unterbrochenen Schreibvorgänge mithilfe des Absichtsprotokolls (ZIL, SLOG) abgeschlossen. Nur wenn das unerwartete Herunterfahren mit dem Ausfall eines SLOG-Geräts zusammenfällt, benötigen Sie ein redundantes SLOG, um die unterbrochenen Schreibvorgänge wiederherzustellen. Für die meisten Nicht-Server-Workloads (und viele Server-Workloads) ist ein SLOG zu viel des Guten, da das ZIL nur bei synchronen Schreibvorgängen ins Spiel kommt.
ein Lebenslauf am

Antworten:

1

Einer nach dem anderen zpool import -d /dev/disk/by-idfunktioniert nicht.

Ich habe dies in mehr als einer Umgebung bemerkt. Ich habe ein Importskript, das nicht nur magische Logik ausführt und physikalisch angeschlossene ZFS-Geräte anzeigt, sondern im Grunde auch Folgendes tut:

zpool import -d /dev/disk/by-id POOL
zpool export POOL
zpool import POOL

Beim zweiten Mal wird, auch ohne den -dSchalter, nach Geräte-ID importiert, auch wenn dies nicht beim ersten Mal mit dem expliziten Befehl der Fall war.

Es ist möglich, dass dies nur auf einen ZFS-Fehler während einiger Wochen oder Monate (vor einem oder zwei Jahren) zurückzuführen war, und dies ist nicht länger erforderlich. Ich nehme an, ich hätte einen Fehlerbericht einreichen sollen, aber es war trivial, das Problem zu umgehen.

Jim
quelle
1

Ich weiß, dieser Thread ist irgendwie abgestanden, aber es gibt eine Antwort. Sie müssen Ihre Cache-Datei nach dem Import aktualisieren. Dieses Beispiel zeigt den Standardspeicherort für die Cache-Datei.

$> sudo zpool export POOL
$> sudo zpool import -d /dev/disk/by-id POOL
$> sudo zpool import -c /etc/zfs/zpool.cache
$> sudo zpool status POOL
NAME                                  STATE     READ WRITE CKSUM
POOL                                  ONLINE       0     0     0
  raidz1-0                            ONLINE       0     0     0
    ata-Hitachi_HDS722020ALA330_[..]  ONLINE       0     0     0
    ata-Hitachi_HDS722020ALA330_[..]  ONLINE       0     0     0
    ata-Hitachi_HDS722020ALA330_[..]  ONLINE       0     0     0
    ata-Hitachi_HUA722020ALA330_[..]  ONLINE       0     0     0
Steve O.
quelle