我正在使用带有 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 关闭物理硬盘的电源。