18.07.2019 15:00, Axel Burri пишет: > On 13/07/2019 01.17, Ulli Horlacher wrote: >> I need to find (all) subvolume directories. >> I know, btrfs subvolumes root directories have inode #256, but a >> "find / -inum 256" is horrible slow! > > Having all required frameworks for this in btrbk, implementing a "list > all subvolumes below <path>" command was quite easy to implement: > > https://github.com/digint/btrbk/commit/e12d980502 > > - get mounted filesystems from /proc/self/mountinfo > - fetch subvolumes using "btrfs subvolume list" (fast, needs root) > - filter and print subvolumes below mount point > > Note that this approach needs root, as "btrfs subvolume list" requires > "cap_sys_admin" and "cap_dac_read_search". > > > Try it: > > Download btrbk from "action-ls" feature branch (no dependencies needed): > > # cd /tmp > # wget https://raw.githubusercontent.com/digint/btrbk/action-ls/btrbk > # chmod +x /tmp/btrbk > > > List subvolumes below /home: > > # ./btrbk ls /home > # ./btrbk ls /home -t > > > Comprehensive list of all accessible subvolumes: > > # ./btrbk ls / --format=long >
Seems to work, also across non-btrfs mount point. One thing missing is actual subvolume path (not current mount point). > > Show commands run by btrbk: > > # ./btrbk ls / -l debug > > > If you need to run this as a regular user (and if you are brave), you > can install setcap enabled btrfs binaries from: > https://github.com/digint/btrfs-progs-btrbk > > Hope this helps, > > - Axel >