Trying to get the size of a subvolume created using "btrfs receive",
I've come with a cute little script:

   SUBVOL=/path/to/subvolume
   CGEN=$(btrfs subvolume show "$SUBVOL" \
     | sed -n 's/\s*Gen at creation:\s*//p')
   btrfs subvolume find-new "$SUBVOL" $((CGEN+1)) \
     | cut -d' ' -f7 \
     | tr '\n' '+' \
     | sed 's/\+\+$/\n/' \
     | bc

This simply sums up the "len" field from all modified files since the
creation of the subvolume. Works fine, as btrfs-receive first makes a
snapshot of the parent subvolume, then adds the files according to the
send-stream.

Now this rises some questions:

1. How accurate is this? AFAIK "btrfs find-new" prints real length, not
compressed length.

2. If there are clone-sources in the send-stream, the cloned files
probably also appear in the list.

3. Is there a better way? It would be nice to have a btrfs command for
this. It would be straight-forward to have a "--summary" option in
"btrfs find-new", another approach would be to calculate and dump the
size in either "btrfs send" or "btrfs receive".

Any thoughts? I'm willing to implement such a feature in btrfs-progs if
this sounds reasonable to you.


- Axel


Ref: https://github.com/digint/btrbk/issues/280

Reply via email to