Forçando o zpool a usar / dev / disk / by-id no Ubuntu Xenial

16

Estou experimentando o OpenZFS incluído no Ubuntu 16.04 Xenial.

Ao criar pools, eu sempre faço referência aos drives por suas séries no /dev/disk/by-id/(ou /dev/disk/gptno FreeBSD) para resiliência. As unidades nem sempre estão na mesma ordem em /devque uma máquina é reinicializada e, se houver outras unidades na máquina, o pool pode falhar na montagem correta.

Por exemplo, rodando zpool statusem uma caixa 14.04, recebo o seguinte:

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

Mas quando eu crio um novo pool no 16.04 com isso (abreviado):

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

Eu entendo isso com 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

Parece que o zpool seguiu os links simbólicos, em vez de referenciá-los.

Existe uma maneira de forçar o zpool no 16.04 a respeitar minhas referências de unidade ao criar um pool? Ou, alternativamente, minhas dúvidas sobre o que está fazendo aqui são equivocadas?

Atualização: solução alternativa

Eu encontrei um fio para zfsonlinux no Github que sugeriu uma solução alternativa. Crie seu zpool com os /dev/sdXdispositivos primeiro e faça o seguinte:

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

Eu ainda preferiria poder fazer isso com a inicial, zpool createse possível.

Ruben Schade
fonte
Não importa como você os cria. Se ele reverter para / dev / sd? nomes de dispositivos, zfs exporte zfs import -dfuncionará de qualquer maneira. BTW, a menos que você realmente precise de todos os bytes de espaço, use dois pares espelhados em vez de raidz. O desempenho do raidz é melhor que o raid-5, mas ainda muito pior que os pares espelhados raid-10 ou zfs. também é mais fácil expandir um pool composto por pares espelhados, basta adicionar dois discos de cada vez ... com o raidz, você deve substituir cada uma das unidades por unidades maiores e somente quando você substituir todas elas será piscina tem mais espaço disponível.
cas
Eu ainda tenho alguns pools de raid-z e lamento tê-los feito. Quando eu puder comprar discos de substituição, criarei novos pools com pares espelhados e utilizarei zfs sendpara copiar meus dados para os novos pools. Na verdade, o raid-z é bom para minha caixa de mythtv, onde o desempenho não é crítico, a menos que eu esteja executando 6 ou 8 trabalhos de transcodificação ao mesmo tempo. Mudar para pares espelhados seria muito perceptível no pool onde /home mora meu diretório.
cas
2
O espelhamento do ZIL é para que você possa usar SSDs baratos comuns, em vez dos caros, com grandes capacitores, para evitar perdas de energia. Na IMO, o espelhamento do ZIL não é opcional, independentemente do tipo de SSD que você possui - se o seu ZIL morrer, você perderá todos os dados que ainda serão gravados e potencialmente corromperá seu pool. Quanto ao L2ARC, eu disse especificamente NÃO para espelhá-los ... espelhar o cache L2ARC é um desperdício de tempo, dinheiro e bom espaço SSD (e não faria nada para evitar a perda do cache - de onde você tirou essa idéia?)
cas
1
:) BTW, meu cérebro não estava funcionando direito quando expliquei o motivo de espelhar o ZIL. Não é para se proteger contra a perda de energia, isso é um absurdo completo e eu nunca deveria ter dito isso. É para se proteger contra falhas da unidade ZIL. ou seja, espelho RAID-1 para o ZIL. Dois SSDs com preços razoáveis ​​são, em geral, melhores que um extremamente caro (a menos que o SSD mais caro tenha uma interface muito mais rápida, como PCI-e vs SATA). e um no-break é essencial ... proteção barata contra perda de energia.
cas
1
O @cas Mirrored ZIL protege contra falhas do dispositivo SLOG ao mesmo tempo que um desligamento inesperado. Sob operações normais, o ZIL é somente gravação e as gravações no armazenamento persistente são da RAM (ARC). Se o sistema for desligado inesperadamente, o log de intenções (ZIL, SLOG) será usado para concluir as gravações que foram interrompidas. Somente se o desligamento inesperado coincidir com a falha de um dispositivo SLOG, você precisará de um SLOG redudante para recuperar as gravações interrompidas. Para a maioria das cargas de trabalho que não são de servidores (e muitos servidores), um SLOG é um exagero, pois o ZIL realmente só entra em jogo com gravações síncronas.
um CVn

Respostas:

1

De vez em quando, zpool import -d /dev/disk/by-idnão funciona.

Eu notei isso em mais de um ambiente. Eu tenho um script de importação que, além de fazer alguma lógica mágica e mostrar dispositivos ZFS fisicamente conectados, também faz basicamente isso:

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

Na segunda vez, mesmo sem a -dopção, importa por ID do dispositivo, mesmo que não tenha sido a primeira vez com o comando explícito.

É possível que isso tenha ocorrido apenas devido a um bug do ZFS durante algumas semanas ou meses (um ou dois anos atrás), e isso não é mais necessário. Suponho que deveria ter apresentado um relatório de erro, mas foi trivial contornar isso.

Jim
fonte
1

Eu sei que esta discussão é meio obsoleta, mas há uma resposta. Você precisa atualizar seu arquivo de cache após a importação. Este exemplo mostra o local padrão para o arquivo de 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
Steve O
fonte