Stworzyłem narzędzie Pythona, które może to zrobić. Zrobiłem to, ponieważ wypróbowałem podejście @Thomas Luzat zarówno we własnej, jak i @Johannes Ernst, a wykorzystana przestrzeń podwoiła się z 20 GB do 40 GB w procedurze klonowania. Myślałem, że potrzeba czegoś bardziej wydajnego.
Rozważ tę wspólną historię systemu plików:
current ---------------------------------\
| | | |
snap4 snap3 snap2 snap1
W przypadku algorytmu Thomasa „prąd” byłby najpierw sklonowany, a wszystkie migawki (będące migawkami wcześniejszych stanów „prądu”) użyłyby „prądu” jako źródła klonowania / rodzica. Oczywiście lepiej byłoby oprzeć snap3 na snap4, snap2 na snap3 itp.
A to tylko wierzchołek góry lodowej; znalezienie „najlepszych” źródeł klonowania (pod względem oszczędności miejsca) w systemie plików btrfs ze złożoną historią jest nietrywialnym problemem. Opracowałem 3 inne strategie rozwiązania tego problemu, które wydają się znacznie wydajniej wykorzystywać przestrzeń. Jeden faktycznie spowodował, że rozmiar klonów był nieco niższy niż rozmiar źródła.
Możesz przeczytać szczegóły na stronie github, jeśli jesteś zainteresowany.