lvcreate snapshot 创建比快照大小更大的快照

lvcreate snapshot 创建比快照大小更大的快照

我在跑

lvcreate --size $snapshot_size --snapshot --name mdb-snap-00 /dev/vg0/mongodb

创建 mongo 分区的快照。

$snapshot_size是362M

然而创建它后,lsblk给了我

nvme0n1                 259:0    0 442.4G  0 disk 
├─vg0-mongodb-real      252:1    0 221.2G  0 lvm  
│ ├─vg0-mongodb         252:0    0 221.2G  0 lvm  /mnt/data
│ └─vg0-mdb--snap--00   252:3    0 221.2G  0 lvm  
└─vg0-mdb--snap--00-cow 252:2    0   364M  0 lvm  
  └─vg0-mdb--snap--00   252:3    0 221.2G  0 lvm

这对我来说是一个问题,因为我试图将快照通过管道添加到 gzip 并将其通过管道传递到 aws 存储桶,但每次都会超时。我刚刚了解到发生这种情况是因为它试图处理整个 221G 磁盘,即使其上的数据和指定的快照大小只有 362Mb

编辑

root@ip-10-0-97-77:~# lvs
  LV          VG   Attr       LSize   Pool Origin  Data%  Meta%  Move Log Cpy%Sync Convert
  mdb-snap-00 vg0  swi-a-s--- 364.00m      mongodb 0.48                                   
  mongodb     vg0  owi-aos--- 221.15g

答案1

逻辑卷是 PE(物理盘区)大小的倍数,默认情况下为 4MiB。 362 无法除以 4,因此 LVM 将大小向上舍入为 364。

我认为改变 PE 大小并不容易。

不过,您可以创建一个 362 MiB 文件,在其上放置一个循环设备并手动配置快照 ( dmsetup),使其指向那里。但这可能是有经验的用户的事情。

您读取的数据超出了预期的 362/364 MiB,因为您从错误的设备读取数据。快照设备是原始设备的副本,因此具有相同的大小。您必须直接从 COW 设备读取。

相关内容