处理 WWN

处理 WWN

我正在尝试 Ubuntu 16.04 Xenial 上捆绑的 OpenZFS。

创建池时,我总是通过驱动器在/dev/disk/by-id/(或/dev/disk/gpt在 FreeBSD 上)的序列号来引用驱动器,以实现弹性。当计算机重新启动时,驱动器并不总是按相同的顺序排列/dev,如果计算机中有其他驱动器,池可能无法正确安装。

例如,zpool status在 14.04 机器上运行我得到:

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

但是当我在 16.04 上用这个(缩写)创建一个新池时:

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

我得到这个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

看起来 zpool 遵循了符号链接,而不是引用它们。

有没有办法强制 16.04 上的 zpool 在创建池时尊重我的驱动器引用?或者,我对它在这里所做的事情的疑虑是否是错误的?

更新:解决方法

找到了一个线索Github 上的 zfsonlinux 建议了一个解决方法。首先使用设备创建 zpool /dev/sdX,然后执行以下操作:

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

zpool create如果可能的话,我仍然希望能够使用初始版本来完成此操作。

答案1

我知道这个帖子有点陈旧,但有一个答案。导入后您需要更新缓存文件。此示例显示缓存文件的默认位置。

$> 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

答案2

处理 WWN

$ cd /dev/disk/by-id/
$ ls -l
… ata-WDC_WD20EFRX-68EUZN0_WD-WCC4M5ZUJ4XE -> ../../sde
… ata-WDC_WD20EFRX-68EUZN0_WD-WCC4M5ZUJ4XE-part1 -> ../../sde1
… ata-WDC_WD20EFRX-68EUZN0_WD-WCC4M5ZUJ4XE-part9 -> ../../sde9
… wwn-0x50014ee2628c2228 -> ../../sde
… wwn-0x50014ee2628c2228-part1 -> ../../sde1
… wwn-0x50014ee2628c2228-part9 -> ../../sde9

请注意,一个驱动器或一个驱动器分区可以有多个by-id.除了基于品牌、型号名称和序列号的 ID 之外,现在还可能有一个wwn-ID。这是独一无二的全球通用名称 (WWN)并且也印在驱动器外壳上。

两种类型的 ID 都可以在 ZFS 上正常工作,但 WWN 的信息不太明显。如果这些 WWN ID 是不是被生产系统引用(例如根分区或尚未导出的 ZFS),这些可以简单地使用 删除sudo rm wwn-*。相信我;我已经这么做了。一切都不会出错只要 ZFS 处于导出状态在这样做之前。

毕竟,WWN ID 只是sd在驱动器检测时创建的设备的符号链接。当系统重新启动时,它们会自动重新出现。在内部,Linux 总是引用sd设备。

$ sudo zpool export pool0
$ sudo rm wwn-*
$ sudo zpool import -d /dev/disk/by-id/ pool0

在这里寻找更多 ZFS 丰富!

答案3

一会儿用一次,zpool import -d /dev/disk/by-id没效果。

我在不止一个环境中注意到了这一点。我有一个导入脚本,除了执行一些神奇的逻辑并显示物理连接的 ZFS 设备之外,还基本上执行以下操作:

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

第二次,即使没有-d开关,也会按设备 ID 导入,即使第一次没有使用显式命令。

这可能只是由于几周或几个月(一两年前)内的 ZFS 错误造成的,而这不再是必要的。我想我应该提交一份错误报告,但解决这个问题很简单。

相关内容