物理卷“/dev/sdb1”仍在使用中,如何删除 PV 来模拟其故障

物理卷“/dev/sdb1”仍在使用中,如何删除 PV 来模拟其故障

1我正在尝试从 VG 中删除物理卷

sudo vgreduce mirrorgroup /dev/sdb1

我制作了两个 PV sdb1sdb2并根据我正在执行的活动对其进行了镜像。

我需要模拟驱动器故障,这需要我停用 LV 并移除其中一个 PV(sdb1sdb2),但它输出两者仍在使用中:

Physical volume /dev/sdb1 still in use

我怎样才能做到这一点?

操作:模拟驱动器故障:卸载 LV 并将其停用(lvchange -an /dev/mirrorgroup/mirrorlv)。现在,通过使用 vgreduce /dev/mirrorgroup /dev/sdb1 从 VG 中删除一个 PV(假设 /dev/sdb1 是被“删除”的那个)来模拟驱动器故障。

shell 会话屏幕截图

lv显示器

在此处输入图片描述

PS. 我在虚拟机上运行它,我认为删除 PV 后我必须将其返回以模拟我可以再次访问其中的文件

答案1

您无法通过这种方式模拟驱动器故障。Linux 会保护您免受明显错误的操作。而且,当驱动器实际发生故障时,系统不会看到这种“安全移除”。驱动器永远不会说“请优雅地将我从组中移除,因为我将要发生故障”。它只是突然停止响应或开始输出错误或返回损坏的数据。您需要以某种方式注入此类错误,让系统对其采取行动。

最简单的方法就是拉一个设备。我知道这很可怕,但同时也是最可行的。

您可以使用 sysfs 取消注册一个设备,这将使其从系统中消失:

echo 1 > /sys/block/sdb/device/delete

这看起来就像 SSD 控制器坏了,从总线上掉下来了。还有其他方法可以做类似的事情,具体取决于您的确切系统结构(例如,如果每个磁盘都连接到单独的控制器,您可以从 PCI 总线上取消注册一个控制器)。

另外,您可以使用设备映射器errorflakey目标来模拟某些块上的 I/O 错误(参见这个问题,以及答案,例如;Gentoo Wiki 页面关于 Device Mapper看起来非常好),但要实现这一点,你仍然需要打破你的设置,并添加这个“不稳定”的层以下您的一个 PV。在系统看来,这与 HDD 开始显示坏块时发生的情况非常相似。

相关内容