Replace 更换ZFS介质,调整分区

Replace 更换ZFS介质,调整分区,replace,zfs,Replace,Zfs,我有一台HP microserver gen8运行FreeBSD,带有镜像启动介质:一个USB记忆棒(16GB)和一个microSD卡(16GB)。这根棍子最近显示校验和错误,所以我更换了它,但我手头只有一根32GB的棍子。调整大小后,zpool看起来很满足,但我无法编写引导代码,gpart甚至无法识别媒体 详细地说 这是出现问题时的zpool状态: Checking status of zfs pools: NAME SIZE ALLOC FREE EXPANDS

我有一台HP microserver gen8运行FreeBSD,带有镜像启动介质:一个USB记忆棒(16GB)和一个microSD卡(16GB)。这根棍子最近显示校验和错误,所以我更换了它,但我手头只有一根32GB的棍子。调整大小后,zpool看起来很满足,但我无法编写引导代码,gpart甚至无法识别媒体

详细地说

这是出现问题时的zpool状态:


Checking status of zfs pools:
NAME           SIZE  ALLOC   FREE  EXPANDSZ   FRAG    CAP  DEDUP  HEALTH  ALTROOT
freenas-boot  14.5G   791M  13.7G         -      -     5%  1.00x  ONLINE  -
freising       928G  84.6G   843G         -     6%     9%  1.00x  ONLINE  /mnt

  pool: freenas-boot
 state: ONLINE
status: One or more devices has experienced an unrecoverable error.  An
        attempt was made to correct the error.  Applications are unaffected.
action: Determine if the device needs to be replaced, and clear the errors
        using 'zpool clear' or replace the device with 'zpool replace'.
   see: http://illumos.org/msg/ZFS-8000-9P
  scan: scrub repaired 213K in 0h15m with 0 errors on Thu Mar 23 04:00:56 2017
config:

        NAME        STATE     READ WRITE CKSUM
        freenas-boot  ONLINE     0     0     0
          mirror-0  ONLINE       0     0     0
            da0p2   ONLINE       0     0     3
            da1p2   ONLINE       0     0     0

errors: No known data errors
我关闭了机器的电源,用32GB的棒更换了棒,然后重新启动。zpool状态:


        NAME                     STATE     READ WRITE CKSUM
        freenas-boot             DEGRADED     0     0     0
          mirror-0               DEGRADED     0     0     0
            3278622582862864884  UNAVAIL      0     0     0  was /dev/da0p2
            da1p2                ONLINE       0     0     0
很好,所以我告诉zpool使用新媒体:


sudo zpool replace freenas-boot 3278622582862864884 /dev/da0 
(zpool不允许我使用“/dev/da0p2”)

花了大约8个小时才把事情解决,现在zpool似乎很高兴:


sudo zpool status -xv
all pools are healthy
但我无法编写引导代码:


sudo gpart bootcode -b /boot/pmbr -p /boot/gptzfsboot -i 1 da0
gpart: No such geom: da0.
gpart甚至无法识别新的斗杆:


sudo gpart status
  Name  Status  Components
ada0p1      OK  ada0
ada0p2      OK  ada0
ada1p1      OK  ada1
ada1p2      OK  ada1
 da1p1      OK  da1
 da1p2      OK  da1

最好的方法是什么?我很不确定我应该通过gpart控制什么,还有什么更好的方法留给zfs和它的魔力。

如果你仍然有旧的棍子,你可以使用它。校验和错误,特别是在低计数时,如在您的情况下为3,无需担心。它们可能是由于电缆连接不良或设备被强制拆除,或突然断电或重新连接(特别是USB,其设计目的是频繁拆除,而不是完美的稳定性)


因此,如果您只经历过一次这些错误(并且没有写或读错误),并且仍然有一个健康的镜像,我个人将继续使用已经正确设置为引导的旧设备。您可以通过两次指定设备名称来替换设备本身:
zpool replace poolname device device
,或者只需使用
zpool clear poolname
清除错误即可。除非这种情况再次发生,否则我不会扔掉一个正常工作的设备。

如果你还有那根旧棍子,你可以用它。校验和错误,特别是在低计数时,如在您的情况下为3,无需担心。它们可能是由于电缆连接不良或设备被强制拆除,或突然断电或重新连接(特别是USB,其设计目的是频繁拆除,而不是完美的稳定性)


因此,如果您只经历过一次这些错误(并且没有写或读错误),并且仍然有一个健康的镜像,我个人将继续使用已经正确设置为引导的旧设备。您可以通过两次指定设备名称来替换设备本身:
zpool replace poolname device device
,或者只需使用
zpool clear poolname
清除错误即可。除非这种情况再次发生,否则我不会扔掉一个正常工作的设备。

同时,在将数据添加到池中之前,我想出了如何使用gpart为引导代码创建一个分区,为数据创建另一个分区(假设新设备为/dev/da2):

然而,在这个过程中,我设法让自己陷入了新的麻烦:

同时,在将启动代码和数据添加到池中之前(假设新设备为/dev/da2),我想出了如何使用gpart为启动代码和数据创建一个分区:

然而,在这个过程中,我设法让自己陷入了新的麻烦:

sudo gpart show da2
sudo gpart delete -i 1 da2
sudo gpart destroy da2
sudo gpart create -s gpt da2
sudo gpart add -s 512K -t bios-boot da2
sudo gpart add -s 15G -t freebsd-zfs da2
sudo gpart bootcode -b /boot/pmbr -p /boot/gptzfsboot -i 1 da2
sudo zpool attach freenas-boot da1p2 da2p2