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