Tôi đã tạo ra một công cụ python có thể làm điều này. Tôi đã làm điều này bởi vì tôi đã thử cách tiếp cận của @Thomas Luzat trong cả triển khai của chính tôi và @Johannes Ernst, và không gian sử dụng đã tăng gấp đôi từ 20 GB lên 40 GB trong quy trình nhân bản. Tôi nghĩ rằng một cái gì đó hiệu quả hơn là cần thiết.
Xem xét lịch sử hệ thống tệp phổ biến này:
current ---------------------------------\
| | | |
snap4 snap3 snap2 snap1
Với thuật toán của Thomas, "hiện tại" sẽ được sao chép trước tiên và tất cả các ảnh chụp nhanh (là ảnh chụp nhanh của các trạng thái trước đây của "hiện tại") sẽ sử dụng "hiện tại" làm nguồn / bản sao gốc. Rõ ràng, sẽ tốt hơn nếu căn cứ snap3 trên snap4, snap2 trên snap3, v.v.
Và đây chỉ là phần nổi của tảng băng chìm; tìm các nguồn nhân bản "tốt nhất" (về tiết kiệm không gian) trong hệ thống tệp btrfs có lịch sử phức tạp là một vấn đề không hề nhỏ. Tôi đã đưa ra 3 chiến lược khác để giải quyết vấn đề này, dường như sử dụng không gian hiệu quả hơn nhiều. Người ta đã thực sự dẫn đến kích thước nhái thấp hơn một chút so với nguồn.
Bạn có thể đọc chi tiết trên trang github nếu bạn quan tâm.