Costringere zpool a usare / dev / disk / by-id in Ubuntu Xenial


16

Sto provando il bundle OpenZFS su Ubuntu 16.04 Xenial.

Quando creo i pool, faccio sempre riferimento alle unità tramite i loro periodici in /dev/disk/by-id/(o /dev/disk/gptsu FreeBSD) per la resilienza. Le unità non sono sempre nello stesso ordine in /devcui una macchina si riavvia e se nel computer sono presenti altre unità, il pool potrebbe non essere montato correttamente.

Ad esempio, in esecuzione zpool statussu una scatola 14.04 ottengo questo:

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

Ma quando creo un nuovo pool il 16.04 con questo (abbreviato):

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_[..]

Lo capisco con 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

Sembra che zpool abbia seguito i symlink, piuttosto che fare riferimento a loro.

C'è un modo per forzare zpool su 16.04 a rispettare i riferimenti del mio disco durante la creazione di un pool? O in alternativa, i miei dubbi su ciò che sta facendo qui sono fuori luogo?

Aggiornamento: soluzione alternativa

Ho trovato un thread per zfsonlinux su Github che ha suggerito una soluzione alternativa. Crea prima il tuo zpool con i /dev/sdXdispositivi, quindi fai questo:

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

Preferirei comunque riuscire a farlo con l'iniziale, zpool createse possibile.


Non importa come li crei. Se ritorna a / dev / sd? i nomi dei dispositivi, zfs exporte zfs import -dfunzioneranno comunque. A proposito, a meno che tu non abbia davvero bisogno di ogni byte di spazio, usa due coppie speculari anziché raidz. Le prestazioni di raidz sono migliori di raid-5 ma ancora molto peggio delle coppie con mirroring di raid-10 o zfs. è anche più facile espandere un pool composto da coppie speculari, basta aggiungere due dischi alla volta ... con raidz, devi sostituire ciascuna delle unità con unità più grandi e solo quando avrai sostituito tutte la piscina ha più spazio disponibile.
Cas

Ho ancora alcuni pool raid-z e mi pento di averli creati. Quando posso permettermi di acquistare dischi sostitutivi, creerò nuovi pool con coppie speculari e li userò zfs sendper copiare i miei dati nei nuovi pool. In realtà, raid-z è OK per il mio mito box dove le prestazioni non sono critiche a meno che non stia eseguendo 6 o 8 lavori di transcodifica contemporaneamente. Il passaggio a coppie speculari sarebbe molto evidente nel pool in cui /home risiede la mia directory.
Cas

2
Il mirroring di ZIL è così che puoi cavartela usando i normali SSD economici piuttosto che quelli costosi con grandi condensatori per proteggerti dalla perdita di potenza. IMO, il mirroring di ZIL non è facoltativo, indipendentemente dal tipo di SSD che hai - se ZIL muore, perdi tutti i dati ancora da scrivere e potenzialmente corrompi il tuo pool. Per quanto riguarda L2ARC, ho detto specificamente di NON specularli ... Il mirroring della cache L2ARC è una perdita di tempo, denaro e buon spazio SSD (e non farebbe nulla per impedire di perdere la cache - da dove hai preso l'idea?)
CAS

1
:) A proposito, il mio cervello non funzionava bene quando ho spiegato il motivo del mirroring di ZIL. Non è per proteggersi dalla perdita di potenza, è una totale assurdità e non avrei mai dovuto dirlo. Protegge dal guasto dell'unità ZIL. cioè il raid-1 mirror per lo ZIL. Due SSD a prezzi ragionevoli sono, in generale, migliori di uno estremamente costoso (a meno che l'SSD più costoso non abbia un'interfaccia molto più veloce, come PCI-e vs SATA). e un UPS è essenziale ... protezione economica contro la perdita di potenza.
Cas l'

1
@cas Mirrored ZIL protegge dai guasti del dispositivo SLOG contemporaneamente a un arresto imprevisto. In normali operazioni, ZIL è di sola scrittura e le scritture su memoria permanente provengono da RAM (ARC). Se il sistema si arresta in modo imprevisto, il registro degli intenti (ZIL, SLOG) viene utilizzato per completare le scritture interrotte. Solo se l'arresto imprevisto coincide con il guasto di un dispositivo SLOG, è necessario SLOG ridondante per recuperare le scritture interrotte. Per la maggior parte dei carichi di lavoro non server (e molti server), uno SLOG è eccessivo, poiché ZIL entra in gioco solo con scritture sincrone.
un CVn

Risposte:


1

Uno su un po ', zpool import -d /dev/disk/by-idnon funziona.

L'ho notato su più di un ambiente. Ho uno script di importazione che, oltre a fare anche qualche logica magica e mostrare dispositivi ZFS collegati fisicamente, fa sostanzialmente questo:

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

La seconda volta, anche senza lo -dswitch, viene importata per ID dispositivo anche se non è stata la prima volta con il comando esplicito.

È possibile che ciò sia dovuto solo a un bug ZFS nel giro di poche settimane o mesi (un anno o due fa), e questo non è più necessario. Suppongo che avrei dovuto presentare una segnalazione di bug, ma era banale aggirare.


1

So che questa discussione è in qualche modo stantia, ma c'è una risposta. È necessario aggiornare il file della cache dopo l'importazione. Questo esempio mostra il percorso predefinito per il file cache.

$> 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
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.