我正在尝试 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 错误造成的,而这不再是必要的。我想我应该提交一份错误报告,但解决这个问题很简单。