Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit f0d646d

Browse files
authored
reflect changes in the program usage and structure
1 parent 5ad76dc commit f0d646d

File tree

1 file changed

+83
-81
lines changed

1 file changed

+83
-81
lines changed

‎README.md‎

Lines changed: 83 additions & 81 deletions
Original file line numberDiff line numberDiff line change
@@ -12,29 +12,22 @@ This tool can approximately identify how much space will be freed when a snapsho
1212

1313
This tool identifies all subvolumes of a btrfs filesystem. For each subvolume all file extents which are not inline are parsed and kept. All other items are ignored.
1414

15-
Thus, we acquire a dictionary of chronologically ordered snapshots together with their set of file extents:
15+
Thus, we create a tree of extents & ranges together with the snapshots that use them:
1616

17-
1. Snapshot 1
18-
1. file extent 1
19-
2. file extent 2
17+
1. file extent 1
18+
1. range1: [Snapshot 1, Snapshot 2]
19+
2. range2: [Snapshot 3]
2020
3. ...
21-
4. file extent n
22-
2. Snapshot 2
23-
1. file extent 1
24-
2. file extent 2
25-
3. ...
26-
4. file extent n
27-
3. Snapshot n
28-
1. ...
29-
30-
Now, the actual disk size of Snapshot 1 is the size of the extents of snapshot 1 minus the common extents with snapshot 2. (Set(Snapshot1) - Set(Snapshot2))
31-
The actual disk size of Snapshot 2 is the size of the extents of snapshot 2 minus the common extents with snapshot 1 minus the common extents with snapshot 3. (Set(Snapshot2) - Set(Snapshot1)) - Set(Snapshot3)
21+
2. file extent 2
22+
3. range1: [...]
23+
4. range2: [...]
3224

25+
Now, the actual disk size of Snapshot 1 can be extracted from each file extent
3326
## Usage:
3427

3528
[python-btrfs](https://github.com/knorrie/python-btrfs) must be installed.
3629

37-
`subvolume.py /path/to/btrfs <subvolume id to ignore1> <subvolume id to ignore2> ...`
30+
`subvolume.py -r <root tree, default 5> /path/to/btrfs/ <subvolume id to ignore1> <subvolume id to ignore2>`
3831

3932
You can find suvolume ids by using:
4033
`btrfs subvolume list /path/to/btrfs`
@@ -44,90 +37,99 @@ You can find suvolume ids by using:
4437
`btrfs subvolume list /path/to/btrfs`:
4538

4639
```
47-
ID 258 gen 14468 top level 5 path mydata
48-
ID 259 gen 14467 top level 5 path subvol_snapshots
40+
ID 258 gen 15649 top level 5 path mydata
41+
ID 259 gen 15651 top level 5 path subvol_snapshots
4942
ID 1949 gen 3785 top level 259 path subvol_snapshots/283/snapshot
5043
ID 2133 gen 5080 top level 259 path subvol_snapshots/435/snapshot
5144
ID 2395 gen 6616 top level 259 path subvol_snapshots/660/snapshot
52-
ID 2577 gen 8480 top level 259 path subvol_snapshots/783/snapshot
5345
ID 2694 gen 8781 top level 259 path subvol_snapshots/888/snapshot
5446
ID 3661 gen 10830 top level 259 path subvol_snapshots/1126/snapshot
55-
ID 3764 gen 11594 top level 259 path subvol_snapshots/1189/snapshot
5647
ID 3818 gen 11948 top level 259 path subvol_snapshots/1228/snapshot
57-
ID 3857 gen 12035 top level 259 path subvol_snapshots/1258/snapshot
58-
ID 3864 gen 12070 top level 259 path subvol_snapshots/1265/snapshot
5948
ID 3887 gen 12351 top level 259 path subvol_snapshots/1285/snapshot
60-
ID 3900 gen 12404 top level 259 path subvol_snapshots/1298/snapshot
61-
ID 3913 gen 12505 top level 259 path subvol_snapshots/1311/snapshot
62-
ID 3923 gen 12557 top level 259 path subvol_snapshots/1320/snapshot
6349
ID 3942 gen 12628 top level 259 path subvol_snapshots/1333/snapshot
64-
ID 3974 gen 13105 top level 259 path subvol_snapshots/1362/snapshot
6550
ID 4040 gen 13778 top level 259 path subvol_snapshots/1412/snapshot
66-
ID 4046 gen 13778 top level 259 path subvol_snapshots/1417/snapshot
6751
ID 4072 gen 13778 top level 259 path subvol_snapshots/1438/snapshot
6852
ID 4091 gen 13778 top level 259 path subvol_snapshots/1452/snapshot
6953
ID 4130 gen 13853 top level 259 path subvol_snapshots/1477/snapshot
70-
ID 4166 gen 14444 top level 259 path subvol_snapshots/1509/snapshot
71-
ID 4175 gen 14444 top level 259 path subvol_snapshots/1517/snapshot
72-
ID 4176 gen 14444 top level 259 path subvol_snapshots/1518/snapshot
73-
ID 4177 gen 14444 top level 259 path subvol_snapshots/1519/snapshot
74-
ID 4178 gen 14444 top level 259 path subvol_snapshots/1520/snapshot
75-
ID 4179 gen 14444 top level 259 path subvol_snapshots/1521/snapshot
76-
ID 4181 gen 14444 top level 259 path subvol_snapshots/1522/snapshot
77-
ID 4182 gen 14444 top level 259 path subvol_snapshots/1523/snapshot
78-
ID 4183 gen 14450 top level 259 path subvol_snapshots/1524/snapshot
79-
ID 4184 gen 14455 top level 259 path subvol_snapshots/1525/snapshot
80-
ID 4185 gen 14459 top level 259 path subvol_snapshots/1526/snapshot
81-
ID 4186 gen 14464 top level 259 path subvol_snapshots/1527/snapshot
54+
ID 4166 gen 14537 top level 259 path subvol_snapshots/1509/snapshot
55+
ID 4182 gen 14537 top level 259 path subvol_snapshots/1523/snapshot
56+
ID 4196 gen 14537 top level 259 path subvol_snapshots/1535/snapshot
57+
ID 4211 gen 14753 top level 259 path subvol_snapshots/1545/snapshot
58+
ID 4258 gen 15274 top level 259 path subvol_snapshots/1582/snapshot
59+
ID 4337 gen 15274 top level 259 path subvol_snapshots/1652/snapshot
60+
ID 4372 gen 15274 top level 259 path subvol_snapshots/1680/snapshot
61+
ID 4392 gen 15341 top level 259 path subvol_snapshots/1691/snapshot
62+
ID 4414 gen 15434 top level 259 path subvol_snapshots/1712/snapshot
63+
ID 4444 gen 15538 top level 259 path subvol_snapshots/1740/snapshot
64+
ID 4451 gen 15566 top level 259 path subvol_snapshots/1747/snapshot
65+
ID 4452 gen 15570 top level 259 path subvol_snapshots/1748/snapshot
66+
ID 4454 gen 15581 top level 259 path subvol_snapshots/1749/snapshot
67+
ID 4455 gen 15584 top level 259 path subvol_snapshots/1750/snapshot
68+
ID 4456 gen 15589 top level 259 path subvol_snapshots/1751/snapshot
69+
ID 4457 gen 15592 top level 259 path subvol_snapshots/1752/snapshot
70+
ID 4458 gen 15596 top level 259 path subvol_snapshots/1753/snapshot
71+
ID 4459 gen 15598 top level 259 path subvol_snapshots/1754/snapshot
72+
ID 4460 gen 15611 top level 259 path subvol_snapshots/1755/snapshot
73+
ID 4461 gen 15612 top level 259 path subvol_snapshots/1756/snapshot
74+
ID 4462 gen 15620 top level 259 path subvol_snapshots/1757/snapshot
75+
ID 4463 gen 15639 top level 259 path subvol_snapshots/1758/snapshot
76+
ID 4464 gen 15643 top level 259 path subvol_snapshots/1759/snapshot
77+
ID 4465 gen 15646 top level 259 path subvol_snapshots/1760/snapshot
78+
ID 4466 gen 15649 top level 259 path subvol_snapshots/1761/snapshot
8279
```
8380

84-
`python subvolume.py /path/to/btrfs 259`:
81+
`subvolume_newway.py -r 258 /path/to/btrfs/ 259`:
8582

8683
```
87-
Unique File Extents Extents added ontop Extents added ontop
88-
per subvolume of older subvolume of current(act) subvolume
89-
-------------------|-------------------|----------------------
90-
SubvolumId Size SubvolumId Size SubvolumId Size
91-
258 0.0B 258 0.0B 258 1.6TiB
92-
4186 0.0B 4186 0.0B 4186 0.0B
93-
4185 0.0B 4185 0.0B 4185 0.0B
94-
4184 0.0B 4184 0.0B 4184 0.0B
95-
4183 0.0B 4183 0.0B 4183 0.0B
96-
4182 0.0B 4182 0.0B 4182 0.0B
97-
4181 0.0B 4181 0.0B 4181 0.0B
98-
4179 0.0B 4179 0.0B 4179 0.0B
99-
4178 0.0B 4178 3.3MiB 4178 0.0B
100-
4177 0.0B 4177 0.0B 4177 188.0KiB
101-
4176 0.0B 4176 0.0B 4176 188.0KiB
102-
4175 0.0B 4175 0.0B 4175 188.0KiB
103-
4166 0.0B 4166 590.9MiB 4166 188.0KiB
104-
4130 8.0KiB 4130 6.1GiB 4130 164.0KiB
105-
4091 4.0KiB 4091 34.0MiB 4091 2.9MiB
106-
4072 0.0B 4072 4.8MiB 4072 3.0MiB
107-
4046 12.0KiB 4046 3.8MiB 4046 3.1MiB
108-
4040 8.4MiB 4040 11.0GiB 4040 11.6MiB
109-
3974 20.0KiB 3974 2.1MiB 3974 4.7MiB
110-
3942 128.0KiB 3942 3.9GiB 3942 4.8MiB
111-
3923 0.0B 3923 96.5MiB 3923 11.3MiB
112-
3913 0.0B 3913 556.4MiB 3913 11.3MiB
113-
3900 0.0B 3900 36.3MiB 3900 4.6MiB
114-
3887 0.0B 3887 995.6MiB 3887 4.6MiB
115-
3864 0.0B 3864 61.9MiB 3864 4.6MiB
116-
3857 0.0B 3857 3.1GiB 3857 4.6MiB
117-
3818 32.0KiB 3818 7.3GiB 3818 4.6MiB
118-
3764 116.0KiB 3764 7.9GiB 3764 4.9MiB
119-
3661 216.0KiB 3661 13.6GiB 3661 5.1MiB
120-
2694 8.0KiB 2694 590.7MiB 2694 4.8MiB
121-
2577 2.4MiB 2577 39.9GiB 2577 7.3MiB
122-
2395 1.7MiB 2395 54.2GiB 2395 53.5MiB
123-
2133 447.7MiB 2133 28.3GiB 2133 2.4GiB
124-
1949 151.0MiB 1949 1.4TiB 1949 2.1GiB
84+
Unique File Extents Extents added ontop Extents added ontop of
85+
per subvolume of previous subvolume current(act) subvolume
86+
---------------------|---------------------|----------------------
87+
SubvolumId Size Size Size
88+
258 0.00B 0.00B 1.46TiB
89+
4466 0.00B 0.00B 0.00B
90+
4465 0.00B 0.00B 0.00B
91+
4464 0.00B 0.00B 0.00B
92+
4463 0.00B 2.58MiB 0.00B
93+
4462 0.00B 0.00B 648.00KiB
94+
4461 0.00B 0.00B 648.00KiB
95+
4460 0.00B 1.18MiB 648.00KiB
96+
4459 0.00B 0.00B 996.00KiB
97+
4458 0.00B 0.00B 996.00KiB
98+
4457 0.00B 0.00B 996.00KiB
99+
4456 0.00B 0.00B 996.00KiB
100+
4455 0.00B 0.00B 996.00KiB
101+
4454 0.00B 0.00B 996.00KiB
102+
4452 0.00B 0.00B 996.00KiB
103+
4451 0.00B 0.00B 996.00KiB
104+
4444 0.00B 1.23MiB 996.00KiB
105+
4414 120.00KiB 12.38MiB 1.07MiB
106+
4392 184.00KiB 6.20GiB 1.19MiB
107+
4372 164.00KiB 3.64MiB 4.41MiB
108+
4337 176.00KiB 6.47MiB 4.48MiB
109+
4258 0.00B 1010.53MiB 4.91MiB
110+
4211 0.00B 1.97GiB 4.91MiB
111+
4196 36.00KiB 36.00KiB 5.64MiB
112+
4182 36.00KiB 3.66MiB 5.64MiB
113+
4166 140.00KiB 590.95MiB 5.80MiB
114+
4130 192.00KiB 6.04GiB 5.83MiB
115+
4091 1.75MiB 34.36MiB 7.49MiB
116+
4072 296.00KiB 9.12MiB 8.09MiB
117+
4040 8.96MiB 11.01GiB 16.72MiB
118+
3942 2.31MiB 4.16GiB 8.67MiB
119+
3887 1.59MiB 4.15GiB 27.33MiB
120+
3818 1.22MiB 15.20GiB 27.41MiB
121+
3661 2.43MiB 13.61GiB 27.43MiB
122+
2694 3.19MiB 40.44GiB 27.42MiB
123+
2395 6.55MiB 13.25GiB 62.80MiB
124+
2133 5.99MiB 17.44GiB 119.27MiB
125+
1949 42.48MiB 1.33TiB 166.50MiB
126+
Size/Cost of snapshots: 77.78MiB Volatility: 0.01%
125127
```
126-
Snapshot 2133 introduced 28GiB, where most of them still reside on the system (used by newer snapshot, 2395)
127-
Thus, deleting snapshot 2133, will only free 447MiB. Snapshot 2133 has 2.4GiB changed compared to current (258) subvolume.
128+
Snapshot 2133 introduced 17GiB, where most of them still reside on the system (used by newer snapshot, 2395)
129+
Thus, deleting snapshot 2133, will only free 6MiB. Snapshot 2133 has 119MiB changed compared to current/ active (258) subvolume.
128130

129131
## Possible expansions:
130132

131133
Calculate the size of metadata block differences.
132134
Take into consideration inline file extents.
133-
Does balance operation change the differences between snapshots?
135+
Why do we recieve the same extent with the same range many times?

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /