是否可以在 Linux 中更改 zfs raidz 池的分区的扇区大小?

bar*_*mac 8 storage zfs partition block-device

我一直在通过稀疏文件的虚拟设备将 linux 上的 zfs raidz 池迁移到新磁盘。我在磁盘上使用了分区,因为磁盘的大小各不相同,每个 1.9T。要添加的最后一个磁盘是 4Tb 磁盘,我将它与其他磁盘分区,并使用 1.9T 分区添加到池中。它使用 GPT 分区表。当我尝试用 4T 磁盘上的 1.9T 分区替换最后一个文件时,我得到以下信息

zpool replace -f zfs_raid /zfs_jbod/zfs_raid/zfs.2 /dev/sdd1 
cannot replace /zfs_jbod/zfs_raid/zfs.2 with /dev/sdd1: devices have different sector alignment
Run Code Online (Sandbox Code Playgroud)

我如何将分区扇区大小更改为 512 像其他人一样,或者如果失败,是否可以将其他池设备更改为 4024 ?显然逻辑扇区大小都是 512

cat /sys/block/sdd/queue/hw_sector_size
Disk /dev/sdd: 4000.8 GB, 4000787030016 bytes, 7814037168 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Run Code Online (Sandbox Code Playgroud)

由于我重新分区了包含我试图替换的基于第 4 个文件的原始设备的光盘,但它不起作用,我重新创建了设备文件,因此它目前正在重新同步该文件。

zpool 状态输出:

NAME                            STATE     READ WRITE CKSUM
zfs_raid                        DEGRADED     0     0     0
  raidz1-0                      DEGRADED     0     0     0
    sda3                        ONLINE       0     0     0
    sdc2                        ONLINE       0     0     0
    sdb1                        ONLINE       0     0     0
    replacing-3                 OFFLINE      0     0     0
      /zfs_jbod/zfs_raid/zfs.2  OFFLINE      0     0     0
      /mnt/butter2/zfs.4        ONLINE       0     0     0  (resilvering)
Run Code Online (Sandbox Code Playgroud)

bar*_*mac 4

我找到了必要的选项!发出以下命令后,池当前正在重新同步新分区:

 zpool replace  -o ashift=9 zfs_raid <virtual device> /dev/sdd1
Run Code Online (Sandbox Code Playgroud)

虽然这是可能的,但不建议这样做,因为强制 4k 类型驱动器写入 512b 会导致性能下降。我经历了惨痛的教训才学会了应该添加

-o ashift=12 
Run Code Online (Sandbox Code Playgroud)

创建池时以避免稍后重新创建它,因为目前无法“迁移”到 4k 扇区大小。