zfs相关问题

1、没使用前,zpool import在jbod上两个服务器看到的存储池数量不一致
问题原因:libblkid缓存,
解决办法:reboot机器或者执行下blkid, partprobe

blkid
partprobe

然后在执行zpool import后就能看到了

2、cannot import : I/O error Destroy and re-create the pool from a backup
在这里插入图片描述

  • -F(Force Import in Recovery Mode):强制以恢复模式导入一个无法正常导入的存储池。如果池的状态因为某些原因变得不可导入,该选项会尝试丢弃最后几笔事务记录,从而尽力将存储池恢复至可导入状态。然而,并非所有损坏的存储池都能通过此选项成功恢复。如果成功,被丢弃事务中的数据将永久丢失。
  • -f(Force Import):即使存储池看起来可能处于活动状态,也强制执行导入操作。这意味着即使系统检测到该存储池可能在其他地方仍然活跃,也会强制将其导入到当前系统中。
  • -m(Import with Missing Log Device):允许在日志设备丢失的情况下导入存储池。使用此选项可能导致最近的事务记录丢失,因为日志设备会被忽略并丢弃。
  • -X(Extreme Measures for Recovery):与 -F 选项结合使用,决定是否采取极端措施来寻找有效的事务组(txg)。这样可以将存储池回滚到一个不再保证一致性的txg。使用此选项导入的存储池可能包含无法修复的校验和错误。警告:此选项对存储池的数据完整性可能造成极大的威胁,仅应作为最后的补救手段使用。在不明确后果的情况下,请谨慎使用。
# 可能会丢失数据
zpool import -FX 
zpool import -FfmX

在这里插入图片描述
3、使用zfs在同时打开大量的文件时,可能会导致内存占用高

1、限制ARC的大小
	ZFS使用一个名为ARC的结构(Adaptive Replacement Cache)来缓存数据,以提高读取性能。
    你可以通过限制ARC的大小来减少ZFS的内存使用。你可以通过如下命令来设置ARC的最大大小(这里设为4GB)
        
    echo "options zfs zfs_arc_max=4294967296" >> /etc/modprobe.d/zfs.conf

2、启用压缩
    启用ZFS的压缩功能可以减少存储空间的使用,从而也可以减少内存的使用
    
    zfs set compression=on yourpool
    
3、关闭预读
	ZFS的预读功能可以提高连续读取的性能,但是在某些情况下,可能会导致不必要的内存使用。

    echo "options zfs zfs_prefetch_disable=1" >> /etc/modprobe.d/zfs.conf

4、查看导入某个池的大致时间,以及日志

/proc/spl/kstat/zfs/import_progress
/proc/spl/kstat/zfs/dbgmsg

查看某个池导入时间,搭配watch更佳
在这里插入图片描述
查看日志
在这里插入图片描述
5、zed相关事件,ZEDLET

# ZEVENT_CLASS
history_event
statechange   # 池状态改变
vdev_online	# 池中的盘上线
resilver_start	# 开始重建
config_sync
resilver_finish	# 重建完成
pool_import
pool_export
/etc/zfs/zed.d
	已启用ZEDLET的默认目录。

/etc/zfs/zed.d/zed.rc
	ZEDLET使用的公共变量的默认rc文件。

/usr/libexec/zfs/zed.d
	已安装ZEDLET的默认目录。

可以注册自定义的相关事件,参考zed的文档

6、存储池导入时间长以及长时间读写高概率出现suspend

options zfs zfs_multihost_interval=1000
options zfs zfs_multihost_import_intervals=20
options zfs zfs_multihost_fail_intervals=10

在这里插入图片描述

7、出现suspend

未设置multihost属性直接zpool clear,设置了需要reboot机子

8、确定一个盘上是否有zfs分区,或者说盘在扇区读写错误检查能否被修复

zdb -l

在这里插入图片描述

在存储池中的正常盘的分区信息,能读到分区信息,则可以被修复
在这里插入图片描述
9、zfs xattr 性能
默认设置下, zfs 将文件的 xattr 存放在额外的单独文件中,针对文件扩展属性的访问有额外的访问步骤和资源竞争

解决办法

zfs set xattr=sa 池名称

设置 xattr = sa 后,扩展属性直接存在 inode 中

  1. 直接的访问速度会加快
  2. xattr 在 inode 中时, 可以被 zfs arc 缓存,读取时命中缓存后,读出速度快

10、指定txg回滚池子

在某些时候,打快照频率可能设置的时间较长,比如一天,但是zfs池子在今天打快照前出现数据错误,这个时候没法通过快照回滚,且其它方法不太好恢复数据。如果此时发生的时间在一定时间以内,可以通过txg来恢复。

# 查看某个池子当前可用的txg

 zdb -eul ORAID-112

在这里插入图片描述
得到txg编号,通过zpool import -T txg编号回滚。

示例:
假设有一个池子ORAID-112,挂载点为/mnt/t1
在这里插入图片描述
当前数据
在这里插入图片描述
然后查看当前txg(先按时间排序,然后找到当前对应的最新txg)
在这里插入图片描述
得到当前最新时间txg为2496,记下这个,后面会用到
在这里插入图片描述

然后模拟写入一些数据,放入一个新文件
在这里插入图片描述
此时在查看txg已经在刚刚的txg上多出了
在这里插入图片描述
假设这部分数据有误,我们需要恢复池子,那么先导出池子

zpool export ORAID-112

在这里插入图片描述
然后恢复到之前只有tools目录的那个时候

zpool import -T txg编号 池名称

在这里插入图片描述
查看文件,此时已恢复到池子之前的状态,刚放入的文件已消失
在这里插入图片描述

备注:
1、这种方式可能会对快照产生影响,如果回滚的某个txg之后有快照,可能该txg之后的快照无法使用。
2、这种方式能回滚的时间点有限,txg保存的数量有限
3、如非必要尽量不要在生产环境进行次操作,如果一定要生产环境操作请先注意数据备份,避免数据丢失风险

11、zpool import内核崩溃,zpool其他命令卡死,如下:
在这里插入图片描述
重启导致系统无法启动,一堆zfs的内核报错信息
在这里插入图片描述

处理思路:
1、在启动前进入单用户模式,将/etc/zfs/zpool.cache文件放到其他位置,然后重新启动,使得可以先进入到系统。
2、然后根据情况恢复,注意数据丢失风险。
- 比如以只读模式导入,然后备份数据,摧毁池在重建。
- 或者按照txg的方式修复
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值