求助:zfs 损坏

我硬盘的最后一个主分区上是一个freebsd类型的分区。然后它被分成2个slice,一个是16G的zfs,还有一个是4G的swap。
最近频出两个错。一是dmesg不停的报告说从硬件检测到的CHS和slice中配置的不一样:
Aug 30 14:09:33 scm kernel: GEOM: ad4s4: geometry does not match label (255h,63s
!= 16h,63s).
在win下用everest看,H应该是16。但是在bsd下用bsdlabel -A看,H是255。而且,我不晓得,为什么必须要加-A才行。我当时是用gpart分的slice啊。
另一个比较严重,部分文件读取失败。/var/log/messages此时有很多这样的错误信息:
Aug 30 14:09:27 scm root: ZFS: vdev I/O failure, zpool=zroot path=/dev/ad4s4a of
fset=18063360000 size=65536 error=5
Aug 30 14:09:27 scm root: ZFS: vdev I/O failure, zpool=zroot path=/dev/ad4s4a of
fset=18063391744 size=3072 error=5
Aug 30 14:09:27 scm root: ZFS: vdev I/O failure, zpool=zroot path=/dev/ad4s4a of
fset=18063391744 size=3072 error=5
Solaris: WARNING: metaslab_free_dva(): bad DVA 0:17993136640
Solaris: WARNING: metaslab_free_dva(): bad DVA 0:17993146368
Solaris: WARNING: metaslab_free_dva(): bad DVA 0:18000989696
Solaris: WARNING: metaslab_free_dva(): bad DVA 0:18000993280
Aug 30 14:16:55 scm root: ZFS: vdev I/O failure, zpool=zroot path=/dev/ad4s4a of
fset=17997330944 size=1536 error=5
Aug 30 14:17:24 scm kernel: Solaris: WARNING: metaslab_free_dva(): bad DVA 0:179
93136640
Aug 30 14:17:24 scm kernel: Solaris: WARNING: metaslab_free_dva(): bad DVA 0:179
93146368
Aug 30 14:17:24 scm kernel: Solaris: WARNING: metaslab_free_dva(): bad DVA 0:180
00989696
Aug 30 14:17:24 scm kernel: Solaris: WARNING: metaslab_free_dva(): bad DVA 0:180
00993280

事情的起点是这样的,我发现我的zfs效率特别慢。于是在/boot/loader.conf中加了ahci的驱动以期望sata能发挥比传统ata更好的性能。另外,去除了/boot/loader.conf中关于zfs的各种内存大小的配置,以前的设置是这样的
vm.kmem_size="330M"
vm.kmem_size_max="330M"
vfs.zfs.arc_max="40M"
vfs.zfs.vdev.cache.size="5M"
vfs.zfs.zil_disable=1
vfs.zfs.prefetch_disable=1
因为这是我以前为32位机器配置的,一直都忘记改。于是全部删掉只留下
vfs.zfs.vdev.cache.size="5M"
vfs.zfs.prefetch_disable=1
后一条因为我的内存小于4G,zfs默认不开prefect,但是我又很想要,所以就保留下来并打开。
然后我启动,进系统后用make -j8编译kernel,然后同时用gmake编译ACE。这个时候用iostat看,这个硬盘每秒的io在2M以上。用TOP和vmstat看,running队列的长度也明显比调整以前大,Wired的内存一直涨到500M左右,然后停下了。。我高兴了没多久,整个系统就hang了。并没有进入db调试器,而且彻底死了。shell依然可以接受字符输入,但是无法执行top/dmesg等这样的命令。传说zfs在io比较重的时候会出各种各样的问题。
可是zfs并没有fsck这样的命令,errno=5应该是底层的IO错误。于是我花了2个小时在BIOS里运行硬盘自检工具进行全盘read test。结果没有报告任何异常。
我现在该怎么办?
——————————————————————————————
我错了。有zfs scrub可以用。
但是,系统已经被我弄的彻底起不来了

此博客中的热门博文

少写代码,多读别人写的代码

在windows下使用llvm+clang

tensorflow distributed runtime初窥