one icon indicating copy to clipboard operation
one copied to clipboard

Thin LVM - incremental backups

Open 1gramos opened this issue 10 months ago • 0 comments

Background resources

  • lvmthin(7)
  • https://wiki.gentoo.org/wiki/LVM/en#Thin_provisioning
  • Specifically for incrementals, some tools which can be of inspiration: https://github.com/mpalmer/lvmsync, https://github.com/davidbartonau/lvm-thin-sendrcv.

Process overview

Naïve way: set metadata to RO (not good because it blocks ALL disks using the pool):

lvchange -an <todos los volumenes en el pool onepool1>
lvchange -an vg-one-0/onepool1
lvchange -y -ay vg-one-0/onepool1_tmeta # activate component LV in read-only mode
thin_ls /dev/mapper/vg--one--0-onepool1_tmeta

A better way (live system, using thin-provisioning-tools)

Get LVM snapshot IDs:

lvs -a -o lv_name,thin_id
(lvs --noheadings -o thin_id volg/thin_volume_snap4, for scripting)

Make metadata snapshot and extract deltas:

dmsetup message /dev/mapper/vg--one--0-onepool1-tpool 0 reserve_metadata_snap
thin_delta -m --thin1 1 --snap2 2 /dev/mapper/vg--one--0-onepool1_tmeta > out
dmsetup message /dev/mapper/vg--one--0-onepool1-tpool 0 release_metadata_snap

(Just for fun, metadata snapshot ID can be queried like this:)

dmsetup status /dev/mapper/vg--one--0-onepool1-tpool | cut -f 7 -d " "

Now, the thin_delta output is something like this:

<superblock uuid="" time="1" transaction="2" data_block_size="128" nr_data_blocks="0">
  <diff left="1" right="2">
    <different>
      <range begin="0" left_data_begin="3520" right_data_begin="3521" length="1"/>
    </different>
    <same>
      <range begin="1" data_begin="1028" length="39"/>
    </same>
    <different>
      <range begin="40" left_data_begin="4172" right_data_begin="1067" length="1"/>
      <range begin="41" left_data_begin="3524" right_data_begin="3527" length="2"/>
    </different>
    <same>
      <range begin="43" data_begin="1078" length="511"/>
    </same>
   ...

So, in theory, we should be able to iterate over different blocks and copy them using good old dd. TODO test this approach...

1gramos avatar Feb 10 '25 16:02 1gramos