LVM 可以在启动时等待快照源合并完成吗?

LVM 可以在启动时等待快照源合并完成吗?

我有一个使用 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  

相关内容