LVM 快照在 PE 级别如何工作?

LVM 快照在 PE 级别如何工作?

LVM 快照如何在 PE 级别工作?什么存储在哪里?当快照用尽 COW 空间时会丢失哪些数据?

(以下描述+解释)

我在 VirtualBox 上试验了 LVM 和快照,注意到了一些奇怪的行为。我想看看系统在各种情况下会如何反应,所以我在虚拟机上安装了 Lubuntu 13.04,并选中了 LVM 选项。安装完系统后,我又在虚拟机上添加了另一个 8GB 驱动器,用于将vgcreate卷组扩展lubuntu-vg到,然后使用/dev/sdb拍摄了 的快照,大小为 6.74G (请注意,下面记录的命令是在我创建快照之前运行的)lubuntu-vg/rootlvcreatelubuntu-vg/rootsnaplvdisplay

用户@user-VirtualBox:~$ sudo fdisk /dev/sda
命令(m 获取帮助):p

磁盘 /dev/sda:8589 MB,8589934592 字节
255 个磁头,63 个扇区/磁道,1044 个磁柱,总共 16777216 个扇区
单位 = 1 * 512 = 512 字节的扇区
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标识符:0x000c4cee

   设备启动开始结束块ID系统
/dev/sda1 * 2048 499711 248832 83 Linux
/dev/sda2 501758 16775167 8136705 5 扩展
/dev/sda5 501760 16775167 8136704 8e Linux LVM

命令(m 获取帮助):q

用户@用户-VirtualBox:~$ sudo lvdisplay
  --- 逻辑卷 ---
  LV 路径 /dev/lubuntu-vg/root
  LV 名称根
  VG 名称 lubuntu-vg
  LV UUID JeyQ7Z-dtu1-Yr5R-hTTU-6Vya-Dr67-qSXwTf
  LV 写访问 读/写
  LV 创作主机,时间 lubuntu,2013-05-02 18:09:41 -0500
  LV 状态可用
  # 打开 1
  LV 大小 6.73 GiB
  当前 LE 1723
  段 1
  分配继承
  自动预读扇区
  - 目前设置为 256
  块设备 252:0

  --- 逻辑卷 ---
  LV 路径 /dev/lubuntu-vg/swap_1
  LV 名称 swap_1
  VG 名称 lubuntu-vg
  LV UUID ZkyAxG-mFB0-zhDH-GjfK-CHlz-RbMc-ilumbj
  LV 写访问 读/写
  LV 创作主机,时间 lubuntu,2013-05-02 18:09:41 -0500
  LV 状态可用
  # 打开 2
  LV 尺寸 1020.00 MiB
  当前 LE 255
  段 1
  分配继承
  自动预读扇区
  - 目前设置为 256
  块设备 252:1

用户@用户-VirtualBox:~$ sudo vgdisplay
  --- 卷组 ---
  VG 名称 lubuntu-vg
  系统 ID             
  格式化 lvm2
  元数据区域 2
  元数据序列号 8
  VG 访问 读/写
  VG 状态可调整大小
  最高等级 0
  当前 LV 2
  打开 LV2
  最大 PV 0
  电流 PV 2
  幕 PV 2
  VG 大小 15.75 GiB
  PE 大小 4.00 MiB
  总 PE 4033
  分配 PE / 大小 1978 / 7.73 GiB
  空闲 PE / 大小 2055 / 8.03 GiB
  VG UUID 2ZEhCz-Q988-oBAc-nE14-MdUs-j7un-2oicHD

用户@用户-VirtualBox:~$ sudo pvdisplay
  --- 物理体积 ---
  PV 名称 /dev/sda5
  VG 名称 lubuntu-vg
  PV 大小 7.76 GiB / 不可用 2.00 MiB
  可分配 是
  PE 大小 4.00 MiB
  1986 年体育总成绩
  免费 PE 8
  分配 PE 1978
  PV UUID OYCQrn-p7PH-4D52-4xRR-xphi-9DyL-Klys3t

  --- 物理体积 ---
  PV 名称 /dev/sdb
  VG 名称 lubuntu-vg
  PV 大小 8.00 GiB / 不可用 4.00 MiB
  可分配 是
  PE 大小 4.00 MiB
  总 PE 2047
  免费 PE 2047
  分配的 PE 0
  PV UUID ErizVU-o1Vf-73GO-Pkwf-PeM9-xoWo-snSmm2

然后我下载了一些更新来填充/var/cache/apt/archives,然后关闭系统。为了模拟驱动器故障,我从 VirtualBox 设置中删除了 /dev/sdb,然后重新启动机器。它无法挂载,因为它找不到lubuntu-vg/root。此时,我试图弄清楚我的系统的 LE 和 PE 配置“是什么样子”。

我试图想象我的 LVM 设置的布局会是什么样子;在 上/dev/sda,它会在开始时分配一些 PE 用于交换,然后将其余的 PE 分配给lubuntu-vg/root。然后我扩展lubuntu-vg/dev/sdb,并拍摄快照,我想象它会将大部分 PE 分配给/dev/sdb。我猜现在使用与最初lubuntu-vg/rootsnap相同的 PE ,现在(使用 中的缓存 .debs )混合使用旧 PE 和新分配的 PE以实现 COW 目的。所以对我来说,当我删除(据说是 COW PE)时,机器无法启动,因为它找不到。lubuntu-vg/rootlubuntu-vg/root/var/cache/apt/archives/dev/sdb/dev/sdblubuntu-vg/root

然后我重新添加/dev/sdb、启动并删除了快照。此时,我预计如果我/dev/sdb再次删除,系统将无法启动,因为 COW PE 位于该驱动器上。但是,当我尝试这样做时,系统能够成功启动,并且 .debs 仍然在 中 /var/cache/apt/archives,尽管/dev/sdb没有附加。

这怎么可能?我以为 COW PE 位于 上,但我删除了它。当我删除快照时,/dev/sdbLVM 是否将 COW PE 移动到,还是在我创建快照时进行了其他一些奇特的移动?/dev/sda

我有一个想法,也许当 LVM 分配 PE 时,它会虚拟地进行分配,而不会在创建 LV 时实际物理保留它们,从而允许 LV 的 PE 相互交错。如果是这样,为什么在/dev/sdb移除后系统无法启动?那么 COW PE 不会打开吗/dev/sda

答案1

创建快照时,会分配 PE 来保存 COW 块。如果 PE 已满或无法访问,则死的是快照,而不是原点。您的系统应该能够在没有 /dev/sdb 的情况下正常启动,因为启动不需要快照。如果不能,那么某处就有错误。

另外你不必想象PE分配在哪里,你可以运行pvdisplay -m去看看。

相关内容