Linux Btrfs filesystem development
 help / color / mirror / Atom feed
* list all subvolumes below given path?
@ 2024-05-14  7:22 Ulli Horlacher
  2024-05-14  8:11 ` Andrei Borzenkov
  0 siblings, 1 reply; 3+ messages in thread
From: Ulli Horlacher @ 2024-05-14  7:22 UTC (permalink / raw)
  To: linux-btrfs


I need to know all subvolumes below a given path.

An example:

/local/test is a subvolume of /local and contains some subvolumes itself:

root@fex:/local/test# mount | grep /local
/dev/sde1 on /local type btrfs (rw,relatime,space_cache,user_subvol_rm_allowed,subvolid=5,subvol=/)


This works but it is very slow on BIG filesystems:

root@fex:/local/test# find . -inum 256
.
./sv1
./sv1/sv1_1
./sv1/sv1_1/ss
./sv1/sv1_2
./sv2


This does not list sub-subvolumes and it contains the whole path up to the
btrfs root subvolume:

root@fex:/local/test# btrfs subvolume list -o .
ID 62531 gen 6079120 top level 62530 path test/sv1
ID 62532 gen 6079120 top level 62530 path test/sv2


This lists all subvolumes of the filesystem:

root@fex:/local/test# btrfs subvolume list .
ID 350 gen 6079851 top level 5 path home
ID 505 gen 6079123 top level 350 path home/smc/test
ID 621 gen 6079123 top level 350 path home/framstag/blubb
ID 2524 gen 3666531 top level 621 path home/framstag/blubb/.snapshot/2017-12-02_1026.test
ID 18082 gen 3666531 top level 621 path home/framstag/blubb/.snapshot/2019-07-18_0139.test
ID 18091 gen 6079833 top level 5 path tmp/test
ID 27760 gen 3666531 top level 621 path home/framstag/blubb/.snapshot/2020-07-10_1123.test
ID 36104 gen 3666531 top level 621 path home/framstag/blubb/.snapshot/2021-05-31_1052.test
ID 60430 gen 5849702 top level 621 path home/framstag/blubb/.snapshot/2024-02-16_1148.test
ID 62480 gen 6073978 top level 350 path home/.snapshot/2024-05-11_0000.daily
ID 62504 gen 6073978 top level 350 path home/.snapshot/2024-05-12_0000.weekly
ID 62530 gen 6079831 top level 5 path test
ID 62531 gen 6079120 top level 62530 path sv1
ID 62532 gen 6079120 top level 62530 path sv2
ID 62533 gen 6079120 top level 62531 path sv1/sv1_1
ID 62534 gen 6079120 top level 62531 path sv1/sv1_2
ID 62540 gen 6076249 top level 350 path home/.snapshot/2024-05-13_0000.daily
ID 62545 gen 6076377 top level 62533 path sv1/sv1_1/ss
ID 62565 gen 6078533 top level 350 path home/.snapshot/2024-05-13_2100.hourly
ID 62566 gen 6078643 top level 350 path home/.snapshot/2024-05-13_2200.hourly
ID 62567 gen 6078751 top level 350 path home/.snapshot/2024-05-13_2300.hourly
ID 62568 gen 6078859 top level 350 path home/.snapshot/2024-05-14_0000.daily
ID 62569 gen 6078967 top level 350 path home/.snapshot/2024-05-14_0100.hourly
ID 62570 gen 6079075 top level 350 path home/.snapshot/2024-05-14_0200.hourly
ID 62571 gen 6079183 top level 350 path home/.snapshot/2024-05-14_0300.hourly
ID 62572 gen 6079292 top level 350 path home/.snapshot/2024-05-14_0400.hourly
ID 62573 gen 6079401 top level 350 path home/.snapshot/2024-05-14_0500.hourly
ID 62574 gen 6079509 top level 350 path home/.snapshot/2024-05-14_0600.hourly
ID 62575 gen 6079617 top level 350 path home/.snapshot/2024-05-14_0700.hourly
ID 62576 gen 6079725 top level 350 path home/.snapshot/2024-05-14_0800.hourly
ID 62577 gen 6079833 top level 350 path home/.snapshot/2024-05-14_0900.hourly

How do I know which subvolumes are below $PWD ?


-- 
Ullrich Horlacher              Server und Virtualisierung
Rechenzentrum TIK
Universitaet Stuttgart         E-Mail: horlacher@tik.uni-stuttgart.de
Allmandring 30a                Tel:    ++49-711-68565868
70569 Stuttgart (Germany)      WWW:    https://www.tik.uni-stuttgart.de/
REF:<20240514072238.GA110925@tik.uni-stuttgart.de>

^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: list all subvolumes below given path?
  2024-05-14  7:22 list all subvolumes below given path? Ulli Horlacher
@ 2024-05-14  8:11 ` Andrei Borzenkov
  2024-05-14  9:33   ` Ulli Horlacher
  0 siblings, 1 reply; 3+ messages in thread
From: Andrei Borzenkov @ 2024-05-14  8:11 UTC (permalink / raw)
  To: linux-btrfs

On Tue, May 14, 2024 at 10:30 AM Ulli Horlacher
<framstag@rus.uni-stuttgart.de> wrote:
>
>
> I need to know all subvolumes below a given path.
>

That is rather vague.

> An example:
>
> /local/test is a subvolume of /local and contains some subvolumes itself:
>
> root@fex:/local/test# mount | grep /local
> /dev/sde1 on /local type btrfs (rw,relatime,space_cache,user_subvol_rm_allowed,subvolid=5,subvol=/)
>
>
> This works but it is very slow on BIG filesystems:
>
> root@fex:/local/test# find . -inum 256
> .
> ./sv1
> ./sv1/sv1_1
> ./sv1/sv1_1/ss
> ./sv1/sv1_2
> ./sv2
>

Any number of different btrfs filesystems can be mounted below any
given path. You conflate "mount point" with "btrfs path". Can you
describe more precisely what you mean?

>
> This does not list sub-subvolumes and it contains the whole path up to the
> btrfs root subvolume:
>

And that will not list any subvolume of any btrfs filesystem that does
not contain the $PWD. Your original requirement included them (or,
better, did not exclude them).

> root@fex:/local/test# btrfs subvolume list -o .
> ID 62531 gen 6079120 top level 62530 path test/sv1
> ID 62532 gen 6079120 top level 62530 path test/sv2
>
>
> This lists all subvolumes of the filesystem:
>
> root@fex:/local/test# btrfs subvolume list .
> ID 350 gen 6079851 top level 5 path home
> ID 505 gen 6079123 top level 350 path home/smc/test
> ID 621 gen 6079123 top level 350 path home/framstag/blubb
> ID 2524 gen 3666531 top level 621 path home/framstag/blubb/.snapshot/2017-12-02_1026.test
> ID 18082 gen 3666531 top level 621 path home/framstag/blubb/.snapshot/2019-07-18_0139.test
> ID 18091 gen 6079833 top level 5 path tmp/test
> ID 27760 gen 3666531 top level 621 path home/framstag/blubb/.snapshot/2020-07-10_1123.test
> ID 36104 gen 3666531 top level 621 path home/framstag/blubb/.snapshot/2021-05-31_1052.test
> ID 60430 gen 5849702 top level 621 path home/framstag/blubb/.snapshot/2024-02-16_1148.test
> ID 62480 gen 6073978 top level 350 path home/.snapshot/2024-05-11_0000.daily
> ID 62504 gen 6073978 top level 350 path home/.snapshot/2024-05-12_0000.weekly
> ID 62530 gen 6079831 top level 5 path test
> ID 62531 gen 6079120 top level 62530 path sv1
> ID 62532 gen 6079120 top level 62530 path sv2
> ID 62533 gen 6079120 top level 62531 path sv1/sv1_1
> ID 62534 gen 6079120 top level 62531 path sv1/sv1_2
> ID 62540 gen 6076249 top level 350 path home/.snapshot/2024-05-13_0000.daily
> ID 62545 gen 6076377 top level 62533 path sv1/sv1_1/ss
> ID 62565 gen 6078533 top level 350 path home/.snapshot/2024-05-13_2100.hourly
> ID 62566 gen 6078643 top level 350 path home/.snapshot/2024-05-13_2200.hourly
> ID 62567 gen 6078751 top level 350 path home/.snapshot/2024-05-13_2300.hourly
> ID 62568 gen 6078859 top level 350 path home/.snapshot/2024-05-14_0000.daily
> ID 62569 gen 6078967 top level 350 path home/.snapshot/2024-05-14_0100.hourly
> ID 62570 gen 6079075 top level 350 path home/.snapshot/2024-05-14_0200.hourly
> ID 62571 gen 6079183 top level 350 path home/.snapshot/2024-05-14_0300.hourly
> ID 62572 gen 6079292 top level 350 path home/.snapshot/2024-05-14_0400.hourly
> ID 62573 gen 6079401 top level 350 path home/.snapshot/2024-05-14_0500.hourly
> ID 62574 gen 6079509 top level 350 path home/.snapshot/2024-05-14_0600.hourly
> ID 62575 gen 6079617 top level 350 path home/.snapshot/2024-05-14_0700.hourly
> ID 62576 gen 6079725 top level 350 path home/.snapshot/2024-05-14_0800.hourly
> ID 62577 gen 6079833 top level 350 path home/.snapshot/2024-05-14_0900.hourly
>
> How do I know which subvolumes are below $PWD ?
>

You parse the current mount table to find out what subvolume contains
$PWD. But again - you may have arbitrary subvolumes from the same and
different filesystems mounted anywhere below $PWD and you only can
find it out by parsing the current mount table.

^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: list all subvolumes below given path?
  2024-05-14  8:11 ` Andrei Borzenkov
@ 2024-05-14  9:33   ` Ulli Horlacher
  0 siblings, 0 replies; 3+ messages in thread
From: Ulli Horlacher @ 2024-05-14  9:33 UTC (permalink / raw)
  To: linux-btrfs

On Tue 2024-05-14 (11:11), Andrei Borzenkov wrote:

> > I need to know all subvolumes below a given path.
> 
> That is rather vague.
> 
> Any number of different btrfs filesystems can be mounted below any
> given path. You conflate "mount point" with "btrfs path". Can you
> describe more precisely what you mean?

Sorry to be unprecise.
I mean all subvolumes of the given btrfs filsystem, but excluding other
filsystems (mount points).

In my example: I want to list all subvolmes of the /local filesystem below
$PWD:

root@fex:/local/test# mount | grep /local
/dev/sde1 on /local type btrfs (rw,relatime,space_cache,user_subvol_rm_allowed,subvolid=5,subvol=/)

find does not help me, because it also lists subvolumes of other file
systems which may be mounted below (not there in my example) and option
-xdev excludes subvolumes:

root@fex:/local/test# find . -inum 256 
.
./sv1
./sv1/sv1_1
./sv1/sv1_1/ss
./sv1/sv1_2
./sv2

root@fex:/local/test# find . -xdev -inum 256
.
./sv1
./sv2



> You parse the current mount table to find out what subvolume contains
> $PWD. But again - you may have arbitrary subvolumes from the same and
> different filesystems mounted anywhere below $PWD and you only can
> find it out by parsing the current mount table.

This was my apprehension :-}


-- 
Ullrich Horlacher              Server und Virtualisierung
Rechenzentrum TIK
Universitaet Stuttgart         E-Mail: horlacher@tik.uni-stuttgart.de
Allmandring 30a                Tel:    ++49-711-68565868
70569 Stuttgart (Germany)      WWW:    https://www.tik.uni-stuttgart.de/
REF:<CAA91j0XJcCw3+p_owtwA8FWj3A=e5jWHyoLbF1s_ZC1-xKW=Bw@mail.gmail.com>

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2024-05-14  9:33 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-05-14  7:22 list all subvolumes below given path? Ulli Horlacher
2024-05-14  8:11 ` Andrei Borzenkov
2024-05-14  9:33   ` Ulli Horlacher

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox