Bạn nên xem btrfs quota
và btrfs qgroups
(nhóm hạn ngạch).
Về cơ bản qgroups
làm chính xác những gì bạn yêu cầu, họ theo dõi bao nhiêu không gian được phân bổ bởi các subvolume. Để kích hoạt qgroup
chức năng cho một btrfs
hệ thống tập tin, bạn phải
# btrfs quota enable /path/to/btrfs/filesystem
Tuy nhiên, trước khi bạn làm điều này, hãy cảnh báo rằng điều này sẽ kích hoạt việc tính toán lại hoàn toàn qgroup
dữ liệu, sẽ mất một thời gian, đặc biệt là đối với các hệ thống tệp lớn có nhiều luồng con. Quá trình này chạy không đồng bộ trong nền. Bạn đã có thể kiểm tra trạng thái của qgroups
với
# btrfs qgroup show /path/to/btrfs/filesystem
Điều này sẽ cung cấp cho bạn một số đầu ra như thế này:
WARNING: rescan is running, qgroup data may be incorrect
qgroupid rfer excl
-------- ---- ----
0/5 843.69GiB 61.91MiB
0/4881 811.06GiB 9.34GiB
0/7990 867.32GiB 329.91MiB
0/8400 867.17GiB 37.64MiB
(Cảnh báo trong dòng đầu tiên có mặt miễn là quét lại vẫn đang chạy.)
Btrfs tự động tạo một qgroup
cho mỗi subvolume. Trong trường hợp này, có ba subvolume với ID subvolume 4881, 7990 và 8400. Phần trước dấu gạch chéo phía trước là cấp độ của qgroup
. Mỗi subvolume qgroup
ở cấp 0. Ngoài ra, có một đặc biệt qgroup
ở cấp 0 luôn có ID 5 và tương ứng với thư mục gốc của hệ thống tập tin btrfs.
Đối với mỗi qgroup
đầu ra ở trên cho thấy có bao nhiêu không gian được tham chiếu bởi nó. Điều đó có nghĩa là subvolume tương ứng chứa các tệp có tổng kích thước bằng với số được hiển thị.
Tuy nhiên, do ảnh chụp nhanh và bản chất sao chép khi ghi của các tệp con btrfs có thể chia sẻ tệp. Điều này có nghĩa là nội dung (hoặc thực tế là phạm vi) của các tệp có thể được tham chiếu bởi nhiều hơn một subvolume. Điều này được biểu thị bằng số thứ hai cho biết có bao nhiêu không gian được phân bổ riêng cho mỗi subvolume và không được chia sẻ với bất kỳ subvolume nào khác. Trong trường hợp bạn xóa một subvolume, đây là không gian thực sự sẽ được giải phóng.
Nếu bạn muốn tìm hiểu bao nhiêu dung lượng sẽ được giải phóng nếu bạn xóa nhiều subvolume, bạn có thể sử dụng các mức đã nói ở trên. qgroups
được tổ chức trong một hierachy và các nhóm ở cấp trên (cao hơn 0) tổng hợp thông tin của các cấp thấp hơn.
Do đó, để tìm ra bao nhiêu không gian sẽ được giải phóng nếu subvolume 4881 và 7990 (trong ví dụ trên) sẽ bị xóa, hãy tạo một cái mới qgroup
(tùy ý với ID 0, nhưng bạn có thể chọn bất cứ thứ gì bạn thích ở đây) ở cấp 1 với
# btrfs qgroup create 1/0 /path/to/btrfs/filesystem
Sau đó chỉ định cái mới được tạo qgroup
như là cha mẹ cho qgroups
các tệp con bạn muốn xóa bằng
# btrfs qgroup assign 0/4881 1/0 /path/to/btrfs/filesystem
# btrfs qgroup assign 0/7990 1/0 /path/to/btrfs/filesystem
Điều này sẽ kích hoạt quét lại thông tin hạn ngạch có thể mất một lúc. Nếu nó được hoàn thành và bây giờ bạn phát hành
# btrfs qgroup show -p /path/to/btrfs/filesystem
bạn nhận được một đầu ra như thế này:
qgroupid rfer excl parent
-------- ---- ---- ------
0/5 1.38TiB 2.51GiB ---
0/4881 1.11TiB 10.86GiB 1/0
0/7990 1.23TiB 502.41MiB 1/0
0/8400 1.34TiB 1.69GiB 1/0
1/0 1.51TiB 132.23GiB ---
(Tôi đã thêm -p
cờ để thêm parent
cột vào đầu ra cho thấy mối quan hệ cha / con của qgroups
.)
Bây giờ, dòng với qgroup
1/0
cho bạn biết bao nhiêu không gian được tham chiếu bởi cả hai subvolume bạn muốn xóa và quan trọng hơn, nó cho bạn biết bao nhiêu không gian được phân bổ riêng cho chúng . Đây là dung lượng sẽ được giải phóng nếu bạn xóa cả hai subvolume.
Tôi cũng tự hỏi tại sao họ lại nói rằng nó sẽ chậm như vậy?
Điều này là do tính chất sao chép trên ghi của btrfs cùng với ảnh chụp nhanh. Nếu bạn tạo ảnh chụp nhanh trong btrfs (thông thường), tất cả dữ liệu thực tế trong tệp con mới được tạo có chứa ảnh chụp nhanh được chia sẻ với nguồn của ảnh chụp nhanh. Chỉ khi một tập tin được thay đổi hoặc thay thế trong nguồn thì nó mới trỏ đến nội dung khác nhau (phạm vi). Điều này làm cho rất khó để đánh giá bao nhiêu không gian thực sự sẽ được giải phóng nếu một subvolume bị xóa vì bạn phải tính đến tất cả các không gian được chia sẻ với các subvolume khác.