Conjuntos de dados do ZFS desaparecem na reinicialização

13


Instalei o ZFS (0.6.5) no meu Centos 7 e também criei um zpool, tudo funciona bem, exceto pelo fato de meus conjuntos de dados desaparecerem na reinicialização.
Estou tentando depurar esse problema com a ajuda de vários recursos e blogs on-line, mas não consegui o resultado desejado.
Após a reinicialização, quando emito o zfs listcomando, recebo "nenhum conjunto de dados disponível" e zpool listfornece "nenhum pool disponível". Após fazer muita pesquisa on-line, eu poderia fazê-lo funcionar importando manualmente o arquivo de cache usando zpool import -c cachefile , mas ainda assim, tive que executar o conjunto de zpool cachefile = / etc / zfs / zpool.cache Pool antes da reinicialização para importá-lo mais tarde após a reinicialização.

Isso é o quesystemctl status zfs-import-cache parece,

zfs-import-cache.service - Import ZFS pools by cache file Loaded: loaded (/usr/lib/systemd/system/zfs-import-cache.service; static) Active: inactive (dead)

cat /etc/sysconfig/zfs

# ZoL userland configuration.

# Run `zfs mount -a` during system start?
ZFS_MOUNT='yes'

# Run `zfs unmount -a` during system stop?
ZFS_UNMOUNT='yes'

# Run `zfs share -a` during system start?
# nb: The shareiscsi, sharenfs, and sharesmb dataset properties.
ZFS_SHARE='yes'

# Run `zfs unshare -a` during system stop?
ZFS_UNSHARE='yes'

# Specify specific path(s) to look for device nodes and/or links for the
# pool import(s). See zpool(8) for more information about this variable.
# It supersedes the old USE_DISK_BY_ID which indicated that it would only
# try '/dev/disk/by-id'.
# The old variable will still work in the code, but is deprecated.
#ZPOOL_IMPORT_PATH="/dev/disk/by-vdev:/dev/disk/by-id"

# Should the datasets be mounted verbosely?
# A mount counter will be used when mounting if set to 'yes'.
VERBOSE_MOUNT='no'

# Should we allow overlay mounts?
# This is standard in Linux, but not ZFS which comes from Solaris where this
# is not allowed).
DO_OVERLAY_MOUNTS='no'

# Any additional option to the 'zfs mount' command line?
# Include '-o' for each option wanted.
MOUNT_EXTRA_OPTIONS=""

# Build kernel modules with the --enable-debug switch?
# Only applicable for Debian GNU/Linux {dkms,initramfs}.
ZFS_DKMS_ENABLE_DEBUG='no'

# Build kernel modules with the --enable-debug-dmu-tx switch?
# Only applicable for Debian GNU/Linux {dkms,initramfs}.
ZFS_DKMS_ENABLE_DEBUG_DMU_TX='no'

# Keep debugging symbols in kernel modules?
# Only applicable for Debian GNU/Linux {dkms,initramfs}.
ZFS_DKMS_DISABLE_STRIP='no'

# Wait for this many seconds in the initrd pre_mountroot?
# This delays startup and should be '0' on most systems.
# Only applicable for Debian GNU/Linux {dkms,initramfs}.
ZFS_INITRD_PRE_MOUNTROOT_SLEEP='0'

# Wait for this many seconds in the initrd mountroot?
# This delays startup and should be '0' on most systems. This might help on
# systems which have their ZFS root on a USB disk that takes just a little
# longer to be available
# Only applicable for Debian GNU/Linux {dkms,initramfs}.
ZFS_INITRD_POST_MODPROBE_SLEEP='0'

# List of additional datasets to mount after the root dataset is mounted?
#
# The init script will use the mountpoint specified in the 'mountpoint'
# property value in the dataset to determine where it should be mounted.
#
# This is a space separated list, and will be mounted in the order specified,
# so if one filesystem depends on a previous mountpoint, make sure to put
# them in the right order.
#
# It is not necessary to add filesystems below the root fs here. It is
# taken care of by the initrd script automatically. These are only for
# additional filesystems needed. Such as /opt, /usr/local which is not
# located under the root fs.
# Example: If root FS is 'rpool/ROOT/rootfs', this would make sense.
#ZFS_INITRD_ADDITIONAL_DATASETS="rpool/ROOT/usr rpool/ROOT/var"

# List of pools that should NOT be imported at boot?
# This is a space separated list.
#ZFS_POOL_EXCEPTIONS="test2"

# Optional arguments for the ZFS Event Daemon (ZED).
# See zed(8) for more information on available options.
#ZED_ARGS="-M"

Não tenho certeza se esse é um problema conhecido. Se sim, existe alguma solução alternativa para isso? talvez uma maneira fácil de preservar meus conjuntos de dados após a reinicialização e, de preferência, sem a sobrecarga de um arquivo de cache.

Vishnu Nair
fonte
o que o zpool status -v e o zpool import dizem?
Ostendali #
Oi, zpool status -v zpool status -v no pools availableE, zpool importdá-me estepool: zfsPool id: 10064980395446559551 state: ONLINE action: The pool can be imported using its name or numeric identifier. config: zfsPool ONLINE sda4 ONLINE
Vishnu Nair
zfs importação é como eu poderia fazê-lo funcionar, definindo o cachefile inicialmente utilizando o comando set cachefile
Vishnu Nair
você perdeu o /etc/init/zpool-import.conf, também pode publicar o conteúdo desse arquivo?
Ostendali 28/10/2015
1
O destino do ZFS está ativado? systemctl status zfs.target
Michael Hampton

Respostas:

6

Verifique se o serviço zfs (target) está ativado. É isso que lida com a importação / exportação de pool na inicialização / desligamento.

zfs.target loaded active active ZFS startup target

Você nunca deve ter que lutar com isso. Se você tiver uma chance, execute uma atualização em sua distribuição zfs, pois sei que os serviços de inicialização melhoraram nos últimos lançamentos:

[root@zfs2 ~]# rpm -qi zfs
Name        : zfs
Version     : 0.6.5.2
Release     : 1.el7.centos
ewwhite
fonte
Olá, eu testei o 0.6.5.3 também, que é a versão mais recente que acredito, mas ainda enfrentei esse problema. Com o .6.5.3, eu precisava executar modprobe zfssempre que reiniciava para carregar os módulos. Aliás, o destino não está ativado. Verifique a saída nos comentários acima (responda a Michael). Posso saber como definir um? obrigado.
Vishnu Nair
Tudo que você precisa fazer é provavelmente algo como:systemctl enable zfs.target
ewwhite
5

ok, então o pool está lá, o que significa que o problema está no seu zfs.cache, ele não é persistente e é por isso que perde sua configuração quando você reinicia. o que eu sugiro fazer é executar:

      zpool import zfsPool 
      zpool list 

E verifique se o se está disponível. Reinicie o servidor e veja se ele volta, se não executar, execute as mesmas etapas e execute:

      zpool scrub

Só para garantir que está tudo bem com sua piscina, etc.

Pls também publica o conteúdo de:

      /etc/default/zfs.conf
      /etc/init/zpool-import.conf

Como alternativa, se você estiver procurando uma solução alternativa para esse problema, é possível configurá-lo da seguinte maneira.

Altere o valor de 1 para 0:

    /etc/init/zpool-import.conf

e adicione o seguinte ao seu /etc/rc.local:

    zfs mount -a

Isso será o suficiente.

ostendali
fonte
Eu executei o zfs import zfsPoolque, conforme o esperado, importou meu pool e, em seguida, reiniciei, executando o zfs listque me deu no datasets. Repeti os passos novamente e correu zfs scrubo que não me dão nenhuma saída, eu fiz uma reinicialização agora de novo, e ainda os conjuntos de dados não são preservados
Vishnu Nair
caso você não tenha visto minha solicitação, eu publicarei novamente "você também pode publicar o que está em / etc / default / zfs?"
Ostendali 28/10/2015
4

Eu também tive o problema do zfs desaparecer após uma reinicialização. A execução da reimportação do CentOS 7.3 e do ZFS 0.6.5.9 trouxe de volta (zpool import zfspool) apenas até a próxima reinicialização.

Aqui está o comando que funcionou para mim (para persistir durante as reinicializações):

systemctl preset zfs-import-cache zfs-import-scan zfs-mount zfs-share zfs-zed zfs.target

(Encontrado em: https://github.com/zfsonlinux/zfs/wiki/RHEL-%26-CentOS )

Jeff
fonte
Encontre-o no wiki aqui agora: github.com/openzfs/zfs/wiki/FAQ#the-etczfszpoolcache-file
Daniel S. Sterling