私は走っている
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バケットにパイプしようとすると、毎回タイムアウトが発生するため、これが問題になります。ディスク上のデータと指定されたスナップショットサイズがわずか362Mbであっても、221Gディスク全体を処理しようとしているため、これが発生することがわかりました。
編集する
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
論理ボリュームは、デフォルトで4MiBの物理範囲(PE)サイズの倍数です。 362 は 4 に分割できないため、LVM はサイズを 364 に丸めます。
PEサイズを変えるのは簡単ではないと思います。
ただし、362MiBファイルを作成してループデバイスをここに配置した後、dmsetup
そのファイルを指すようにスナップショット()を手動で設定できます。しかし、これは経験豊富なユーザーにとっては問題になる可能性があります。
間違ったデバイスから読み込んでいるため、予想より362/364MiBを読みます。スナップショットデバイスは元のデバイスのコピーなので、サイズは同じです。 COWデバイスから直接読む必要があります。