On 18/07/2019 19.48, Andrei Borzenkov wrote: > 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). Displaying the subvolume path might be useful as well, but I think this should better be hidden from the user, except he is investigating btrfs internas. Note that the subvolume path (from "btrfs subvolume list") is ambiguous: You can not tell what parts are "path-to-subvolume", and which are "subvolume-name" (especially for nested subvolumes within directories). Nevertheless, I updated "btrbk/action-ls" to print subvolume_path as well as subvolume_rel_path (relative to top_level subvolume) for format=rel [1]: # ./btrbk ls / --format=rel [1] https://github.com/digint/btrbk/commit/c0f2896ae1 > >> >> 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 >> >
