为什么创建 ZPool 会导致此错误?

Rub*_*ben 6 zfs

当我尝试创建 ZPool 时,出现以下错误:

user@arch ~ % sudo zpool create -f -o ashift=12 -m /data media raidz /dev/disk/by-id/ata-ST2000DM001-1CH164_Z2F0TL8V /dev/disk/by-id/ata-ST2000DM001-1ER164_Z4Z030LK /dev/disk/by-id/ata-ST2000DM001-1ER164_Z4Z06PR
the kernel failed to rescan the partition table: 16  
cannot label 'sda': try using parted(8) and then provide a specific slice: -1
Run Code Online (Sandbox Code Playgroud)

我尝试过多次背靠背运行命令(udevadm trigger也在两者之间运行),使用sgdisk -Z /dev/sdX. 我想parted /dev/sdX mklabel gpt还有zpool labelclear /dev/sdX。

我已经提到的驱动器/dev/disk/by-id以及/dev/sdX但其中标签取决于驱动器的顺序改变上发生相同的错误。

slm*_*slm 6

搜索您的错误时,我看到了这篇博客文章,标题为:使用属于 md raid 阵列的驱动器创建 zfs 池时出错,该驱动器显示了相同的错误。

$ zpool create -f tank mirror /dev/disk/by-id/xxx /dev/disk/by-id/yyy the kernel failed to rescan the partition table: 16 cannot label 'sdb': try using parted(8) and然后提供一个特定的切片

该文章指出,问题是由于将设备添加到未使用的 MDADM 阵列而引起的。

即使不再挂载旧的 mdadm 阵列(因为丢失了多个磁盘 > 并且它是一个 raid5),它们仍然被添加到 md0:

  $ cat /proc/mdstat Personalities : [linear] [raid0] [raid1] [raid10] [raid6] > [raid5] [raid4] [multipath]
  md0 : inactive sdd1[4](S) sdb1[1](S)
  3907025072 blocks super 1.2

  unused devices:
Run Code Online (Sandbox Code Playgroud)

此特定问题的修复如下:

$ mdadm --stop /dev/md0
mdadm: stopped /dev/md0

$ zpool create -f tank mirror /dev/disk/by-id/xxx /dev/disk/by-id/yyy
$ zpool status
pool: tank
state: ONLINE
scan: none requested
[...]
Run Code Online (Sandbox Code Playgroud)