我有一个使用 LVM 和快照的产品。创建基本安装后,我使用以下内容创建分区快照:
lvcreate -L 15G -s -n lv_root_gold /dev/vg_sys/lv_root
lvcreate -L 15G -s -n lv_home_gold /dev/vg_sys/lv_home
lvcreate -L 1G -s -n lv_services_gold /dev/vg_sys/lv_services
在我的系统上,大多数软件都安装到 lv_services lv 中,lv 被安装到 /services。这会对 lv_services_gold 快照创建大量更改。
当我部署软件更新时,我会将整个系统回滚到其初始快照。我这样做是为了确保所有机器都从相同的状态安装。重新启动后,我会在“原始”状态下拍摄盒子的新快照,然后继续安装新软件。
当我使用以下命令回滚系统时:
lvconvert --merge -y /dev/vg_sys/lv_root_gold
lvconvert --merge -y /dev/vg_sys/lv_services_gold
lvconvert --merge -y /dev/vg_sys/lv_home_gold
由于所有分区均已安装,因此需要重新启动。但是当我重新启动时,其中一个分区会留在 Attr (O)rigin 中并合并快照:
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
lv_home vg_sys -wi-ao---- 15.00g
lv_services vg_sys Owi-aos--- 1.00g 0.00
lv_root vg_sys -wi-ao---- 20.00g
命令“lvdisplay vg_sys/lv_services_gold”显示快照由于正在合并而仍然存在。但是,快照不会通过 lvs 命令显示。
是否有一个修饰符可以提供给“lvconvert”,以在系统启动时强制快照完全合并,并在系统上线后阻止以避免“O”Attr?如果我再次重新启动,lv_services LV 将不再处于“Origin 与快照合并”模式。
此时我的解决方法是确定系统启动时是否有任何快照。如果否,请确定是否有任何 LV 处于“O”状态。如果是这样,请继续重新启动,直到所有 LV 都没有“带有合并快照的原始”。然后我继续拍摄新快照并安装软件。我更愿意避免重复重新启动。
答案1
我在发布问题后不久就找到了答案。一旦 lvs 报告合并状态,“数据%”列中的值就会降至 0.00。具有合并快照字段的 [O]rigin 可以通过发出以下命令来清除:
lvchange --refresh <<VG_NAME>>
示例(初始 lvs 命令位于 lvconvert --merge 并重新启动之后):
root@testbox:~# lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
lv_services vg_sys Owi-aos--- 1.00g 0.00
root@testbox:~# lvchange --refresh vg_sys
root@testbox:~# lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
lv_services vg_sys -wi-ao---- 1.00g