如果对 LVM 做过逻辑卷体系的命令,LVM 会将变化前组的元数据归档在 /etc/lvm/archive/ 目录下,最后一次改变后的组的元数据备份存放在 /etc/lvm/backup/groupname 文件中。这些信息可以使用 vgcfgrestore -l groupname 来查看。
案例1:找回删除的 LV
# umount /mnt/lv1 <--- 卸载 LV
# lvremove /dev/vgdemo/lv1 <--- 删除 LV
# vgcfgrestore -l vgdemo <--- 查看元数据变化记录
File: /etc/lvm/archive/vgdemo_00010-1892020829.vg
VG name: vgdemo
Description: Created *before* executing 'lvremove /dev/vgdemo/lv1'
Backup Time: Wed Aug 7 14:14:26 2019
File: /etc/lvm/backup/vgdemo
VG name: vgdemo
Description: Created *after* executing 'lvremove /dev/vgdemo/lv1'
Backup Time: Wed Aug 7 14:14:26 2019
# vgcfgrestore -f /etc/lvm/archive/vgdemo_00010-1892020829.vg vgdemo <--- 还原删除的 LV
# lvchange -an /dev/vgdemo/lv1; lvchange -ay /dev/vgdemo/lv1 <--- 对 LV 做一个重新激活以保证 everything is updated.
案例2:恢复违规缩小损坏的 LV
# umount /mnt/lv1 <--- 卸载 LV
# lvresize -L 60M /dev/vgdemo/lv1 <--- 违规缩小 LV
# mount /dev/vgdemo/lv1 /mnt/lv1 <--- 尝试挂载时失败:wrong fs type, bad option, bad superblock
# vgcfgrestore -l vgdemo <--- 查看元数据变化记录
File: /etc/lvm/archive/vgdemo_00011-102582637.vg
VG name: vgdemo
Description: Created *before* executing 'lvresize -L 60M /dev/vgdemo/lv1'
Backup Time: Wed Aug 7 14:21:27 2019
File: /etc/lvm/backup/vgdemo
VG name: vgdemo
Description: Created *after* executing 'lvresize -L 60M /dev/vgdemo/lv1'
Backup Time: Wed Aug 7 14:21:27 2019
# vgcfgrestore -f /etc/lvm/archive/vgdemo_00011-102582637.vg vgdemo <--- 还原损坏的 LV
# lvchange -an /dev/vgdemo/lv1; lvchange -ay /dev/vgdemo/lv1 <--- 对 LV 做一个重新激活以保证 everything is updated.
# mount /dev/vgdemo/lv1 /mnt/lv1/ <--- 再次挂载将成功,且里面的文件没有损坏。
注意:不是所有的操作都可以revert,归档文件只记录逻辑卷体系的命令,备份的只是元数据。例如使用dd命令将LV填0的动作就是不记录的。revert到dd之前的状态也无济于事。