如何确定 lvm 镜像写入是异步的还是同步的?

如何确定 lvm 镜像写入是异步的还是同步的?

我正在使用带有 lvm 镜像的 redhat 5.8,使用以下命令创建:

 lvcreate -m1 --mirrorlog mirrored -n mirrorvol -L 10G myvg /dev/vdb /dev/vdc

我想知道,当我写入时,是否需要等待两个设备都写入,还是只需要等待一个设备写入?

据我了解,lvm 镜像是同步的:

[root@02srv004x9 ~]# dmsetup ls
mpath2  (253, 2)
foo (253, 3)
vgmirror-oracle_BD2_mirrorlogAvol   (253, 4)
VolGroup00-LogVol01 (253, 1)
VolGroup00-LogVol00 (253, 0)
vgmirror-oracle_BD2_mirrorlogAvol_mimage_1  (253, 6)
vgmirror-oracle_BD2_mirrorlogAvol_mimage_0  (253, 5)
dmsetup suspend /dev/mapper/vgmirror-oracle_BD2_mirrorlogAvol_mimage_1
Name:              vgmirror-oracle_BD2_mirrorlogAvol_mimage_1
State:             SUSPENDED
Read Ahead:        256
Tables present:    LIVE
Open count:        1
Event number:      0
Major, minor:      253, 6
Number of targets: 1
UUID: LVM-c8xfdstj4tTpfV3LSIYat0wbKXpfb7kDefFId05lIJR2QV1ws7CBfkbC0Oc813d9

现在我有一个处于挂起状态的辅助映像,我将尝试挂载文件系统:

 mount /dev/mapper/vgmirror-oracle_BD2_mirrorlogAvol /mnt

这里 mount 命令锁定,并保持在状态 D。

答案1

如果您进行写入,写入将发生在 RAM 中的块缓存中。当达到最佳状态时,它将从那里同步出去。

如果您执行sync命令或fsync()系统调用,它将写出整个写入缓存。除此之外,ext2-3-4 文件系统会尽可能频繁地尝试写入写入缓存,其他文件系统有更好的启发式方法。

日志文件系统也定期执行部分同步。

如果对 mirrorvol 进行写入,它将把两个写入操作传递到 vdb 和 vdc 上的逻辑子卷。不能保证它们会同时执行,除非有人这样​​说(可能是定期写入缓存同步、日志记录或 ext2-3-4 文件系统出色的同步功能)。


暂停不是为了模拟 LVM 物理卷中的错误。暂停是为了执行非原子更改,但对于实际用户来说,这些更改似乎是原子的。在暂停期间,使用给定逻辑卷的每个命令都将处于 D 状态,但它不必对写入缓存执行任何操作,这是 LVM 功能。

如果要在镜像 LVM 卷中模拟硬件错误,则必须找到替代解决方案。我认为第一个方法是使用 SMART 关闭物理硬盘的电源。

相关内容