我在跑
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 设备读取。