
CentOS系统做快照,说白了就是给你的系统或数据盘在某个时间点“拍张照片”,以便将来需要时能快速回滚到那个状态。这事儿主要有两种玩法:一种是基于虚拟化平台的虚拟机快照,简单粗暴,适合整个虚拟机的状态保存;另一种是基于LVM(逻辑卷管理)的快照,更精细,针对的是数据盘或系统分区,尤其在物理机或对性能有要求时显得更为专业。在我看来,理解这两种机制,并根据实际场景灵活运用,才是真正掌握快照的关键。
对于CentOS的快照操作,我们得区分两种最常见的场景:虚拟机环境和LVM环境。
1. 虚拟机快照(以VMware ESXi或VirtualBox为例,概念通用)
这是最直观、操作最简单的快照方式。它会捕获虚拟机在某一时刻的完整状态,包括磁盘文件、内存状态(可选)、以及配置信息。
创建快照:
.vmdk或
.vdi的delta文件),后续所有对虚拟机磁盘的写入都会记录在这个差异文件中。原始磁盘文件保持不变。
恢复快照:
删除快照:
2. LVM快照(逻辑卷管理快照)
LVM快照是针对逻辑卷(可以理解为分区)的“写时复制”(Copy-on-Write, CoW)机制。它只记录快照创建后,原始逻辑卷上发生的数据块变化。这对于物理机或者对虚拟机内部特定分区做快照非常有用。
创建LVM快照:
lvcreate -L [快照大小] -s -n [快照逻辑卷名称] [原始逻辑卷路径]
/dev/vg_data/lv_mydata,你想给它创建一个大小为10GB的快照,命名为
lv_mydata_snap。
lvcreate -L 10G -s -n lv_mydata_snap /dev/vg_data/lv_mydata
-L指定快照卷的大小,这个大小不是原始卷的大小,而是预留给原始卷在快照创建后发生变化的块的空间。如果原始卷变化量超过这个大小,快照会失效。
-s表示创建快照,
-n指定快照卷的名称。
/dev/vg_data/lv_mydata_snap就可以像普通逻辑卷一样挂载和访问,它展示的是快照创建那一刻原始卷的数据状态。
恢复LVM快照:
umount /mnt/mydata(假设
/dev/vg_data/lv_mydata挂载在
/mnt/mydata)
lvchange -an /dev/vg_data/lv_mydata
lvconvert --merge /dev/vg_data/lv_mydata_snap
lvchange -ay /dev/vg_data/lv_mydata然后
mount /dev/vg_data/lv_mydata /mnt/mydata
删除LVM快照:
lvremove /dev/vg_data/lv_mydata_snap
这真是一个好问题,也是我个人在实际工作中经常思考的。说实话,这两种快照机制虽然都能达到“回滚”的目的,但它们的哲学和适用场景大相径庭。
虚拟机快照:
LVM快照:
我的选择建议: 如果你在虚拟机里,且需要一个快速、全方位的系统状态回滚,那么虚拟机快照无疑是最便捷的选择。但记住,用完即删,不要让快照链变得臃肿。如果你在物理机上,或者需要对虚拟机内部某个关键数据盘做更精细、性能影响更小的保护,LVM快照才是你的利器。它虽然操作繁琐些,但提供了更深层次的控制和更好的性能表现。
LVM快照这玩意儿,用好了是神器,用不好就是个“坑”。我个人就踩过不少雷,总结下来,最核心的几个点就是空间、性能和操作的严谨性。
1. 快照卷空间不足的坑
lvs -o +snap_percent命令来查看快照卷的使用百分比。一旦接近100%,就得赶紧处理,要么扩大快照卷(
lvextend),要么删除快照。
lvextend -L +5G /dev/vg_data/lv_mydata_snap(给快照卷增加5GB空间)
2. 性能影响的坑
3. 误操作导致数据丢失的坑
lvconvert --merge或
lvremove等破坏性命令前,务必再三确认目标逻辑卷的名称和路径。
lvs、
lvdisplay、
vgdisplay等命令,它们能帮你清晰地了解当前LVM的布局和状态。
umount,再
lvchange -an,然后
lvconvert --merge,每一步都确认无误。
系统崩溃,这真是每个运维人员的噩梦。但如果之前做了快照,那简直是救命稻草。恢复过程因快照类型而异,我来详细说说。
1. 虚拟机快照恢复:最直接的“时光倒流”
如果你的CentOS是跑在VMware、VirtualBox或KVM等虚拟机平台上的,并且你定期有做虚拟机快照,那么恢复起来是最省心的。
2. LVM快照恢复:针对特定分区的“外科手术”
如果你的CentOS系统崩溃,但根目录或某个关键数据分区是LVM管理的,并且你恰好在崩溃前做了LVM快照,那么恢复过程会稍微复杂一些,但同样有效。
场景一:非根分区(如/home
, /var
, /opt
等)崩溃或数据损坏
vgscan和
lvscan命令,确保能识别到你的卷组和逻辑卷。
/dev/vg_data/lv_mydata),如果它被挂载了,先
umount掉。然后
lvchange -an /dev/vg_data/lv_mydata停用它。
/dev/vg_data/lv_mydata_snap),执行合并命令:
lvconvert --merge /dev/vg_data/lv_mydata_snap
这个命令会将快照点的数据合并回原始逻辑卷,同时删除快照卷。
lvchange -ay /dev/vg_data/lv_mydata。然后,你可以尝试
fsck检查文件系统完整性(
fsck -y /dev/vg_data/lv_mydata),最后将其挂载回原目录。
场景二:根分区(/
)是LVM,且系统无法启动
/mnt/sysimage,选择“1”或“Continue”。
/dev/vg_root/lv_root之类的。在救援模式下,如果它已经被挂载到
/mnt/sysimage,你需要
umount /mnt/sysimage。然后
lvchange -an /dev/vg_root/lv_root停用它。
lvconvert --merge /dev/vg_root/lv_root_snap
lvchange -ay /dev/vg_root/lv_root。
fsck -y /dev/vg_root/lv_root。
mount /dev/vg_root/lv_root /mnt/sysimage。
chroot /mnt/sysimage。
grub2-mkconfig -o /boot/grub2/grub.cfg grub2-install /dev/sda # 替换为你的启动盘