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/gpt
no FreeBSD) para resiliência. As unidades nem sempre estão na mesma ordem em /dev
que uma máquina é reinicializada e, se houver outras unidades na máquina, o pool pode falhar na montagem correta.
Por exemplo, rodando zpool status
em 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/sdX
dispositivos 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 create
se possível.
zfs export
ezfs import -d
funcionará 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.zfs send
para 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.Respostas:
De vez em quando,
zpool import -d /dev/disk/by-id
nã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:
Na segunda vez, mesmo sem a
-d
opçã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.
fonte
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.
fonte