lvcreate snapshotは、スナップショットサイズよりも大きいスナップショットを作成します。

lvcreate snapshotは、スナップショットサイズよりも大きいスナップショットを作成します。

私は走っている

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

mongoパーティションのスナップショットを作成します。

$snapshot_size362Mです

しかしそれを作った後は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デバイスから直接読む必要があります。

関連情報