Наборы данных ZFS исчезают при перезагрузке


Я установил ZFS(0.6.5) в свой Centos 7, и я также создал zpool, все работает отлично, за исключением того, что мои наборы данных исчезают при перезагрузке.
Я пытался отладить эту проблему с помощью различных интернет-ресурсов и блогов, но не смог получить желаемый результат.
После перезагрузки, когда я выдаю zfs list Я получаю команду "нет доступных наборов данных" и zpool list дает "нет доступных пулов". После многих онлайн-исследований я мог заставить его работать, импортируя файл кэша вручную, используя zpool import -c cachefile, но все же мне пришлось запустить zpool set cachefile=/etc/zfs/zpool.cache Пул перед перезагрузкой, чтобы импортировать его позже после перезагрузки.

Это то, что systemctl status zfs-import-cache похоже,

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"

Я не уверен, что это известная проблема, если да, есть ли обходной путь для этого? возможно, это простой способ сохранить мои наборы данных после перезагрузки и желательно без использования файла кэша.

4 ответа

Решение

Пожалуйста, убедитесь, что служба zfs (цель) включена. Это то, что обрабатывает импорт / экспорт пула при загрузке / выключении.

zfs.target loaded active active ZFS startup target

Вам никогда не придется бороться с этим. Если у вас есть шанс, запустите обновление в своем дистрибутиве zfs, так как я знаю, что сервисы стартапов улучшились за последние несколько выпусков:

[root@zfs2 ~]# rpm -qi zfs
Name        : zfs
Version     : 0.6.5.2
Release     : 1.el7.centos

Хорошо, значит, пул есть, что означает, что проблема в вашем zfs.cache, он не является постоянным, и поэтому он теряет свою конфигурацию при перезагрузке. то, что я бы предложил сделать, это запустить:

      zpool import zfsPool 
      zpool list 

И проверьте, если это доступно. Перезагрузите сервер и посмотрите, вернется ли он, если он не выполнит те же шаги и запустите:

      zpool scrub

Просто чтобы убедиться, что все в порядке с вашим бассейном и т. Д.

Просьба также опубликовать содержание:

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

В качестве альтернативы, если вы ищете обходной путь для этой проблемы, вы можете установить его следующим образом.

Измените значение с 1 на 0:

    /etc/init/zpool-import.conf

и добавьте следующее в ваш /etc/rc.local:

    zfs mount -a

Это сделает свое дело.

У меня также была проблема исчезновения zfs после перезагрузки. Запуск CentOS 7.3 и ZFS 0.6.5.9 Реимпорт вернул его (zpool import zfspool) только до следующей перезагрузки.

Вот команда, которая работала для меня (чтобы она сохранялась при перезагрузке):

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

(Найдено по адресу: https://github.com/zfsonlinux/zfs/wiki/RHEL-%26-CentOS)

В моем случае ZFS не удалось импортировать zpool, поскольку он находился в постоянном облачном томе, который физически не был подключен к машине. Я предполагаю, что сетевые тома станут доступными позже, чем ожидалось, в процессе загрузки.

Бегsystemctl status zfs-import-cache.serviceпосле загрузки выдал следующее сообщение:

      ● zfs-import-cache.service - Import ZFS pools by cache file
     Loaded: loaded (/lib/systemd/system/zfs-import-cache.service; enabled; vendor preset: enabled)
     Active: failed (Result: exit-code) since Tue 2021-09-07 18:37:28 UTC; 3 months 17 days ago
       Docs: man:zpool(8)
    Process: 780 ExecStart=/sbin/zpool import -c /etc/zfs/zpool.cache -aN (code=exited, status=1/FAILURE)
   Main PID: 780 (code=exited, status=1/FAILURE)

Sep 07 18:37:26 ingress-zfs-2 systemd[1]: Starting Import ZFS pools by cache file...
Sep 07 18:37:28 ingress-zfs-2 zpool[780]: cannot import 'data': no such pool or dataset
Sep 07 18:37:28 ingress-zfs-2 zpool[780]:         Destroy and re-create the pool from
Sep 07 18:37:28 ingress-zfs-2 zpool[780]:         a backup source.
Sep 07 18:37:28 ingress-zfs-2 systemd[1]: zfs-import-cache.service: Main process exited, code=exited, status=1/FAILURE
Sep 07 18:37:28 ingress-zfs-2 systemd[1]: zfs-import-cache.service: Failed with result 'exit-code'.
Sep 07 18:37:28 ingress-zfs-2 systemd[1]: Failed to start Import ZFS pools by cache file.

Решением было пропатчитьzfs-import-cache.serviceслужебный файл для включенияremote-fs.targetзависимость:

      [Unit]
...
After=remote-fs.target
...

В Ubuntu 20.04 этот файл находился по адресу:/etc/systemd/system/zfs-import.target.wants/zfs-import-cache.service.

Я думаю, уточнивAfter=remote-fs.targetэквивалентно использованию_netdevвариант в/etc/fstabфайл (см.: https://unix.stackexchange.com/a/226453/78327).

Другие вопросы по тегам