Я запускаю
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, но каждый раз он истекает по таймауту. Я только что узнал, что это происходит из-за того, что он пытается обработать весь диск 221 ГБ, хотя данные на нем и указанный размер моментального снимка составляют всего 362 МБ
Править
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
Логические тома кратны размеру )физических экстентов PE (, который по умолчанию равен 4 МБ. 362 нельзя разделить на 4, поэтому LVM округляет размер до 364.
Я не думаю, что можно легко изменить размер PE.
Однако вы можете создать файл размером 362 МБ, поместить в него петлевое устройство и настроить моментальный снимок вручную (dmsetup
), указав на него. Но это, вероятно, что-то для опытных пользователей.
Вы читаете больше, чем предполагалось, 362/364 МБ, потому что вы читаете не с того устройства.Устройство моментального снимка является копией исходного устройства, поэтому оно имеет тот же размер. Вы должны читать напрямую с устройства COW.