Bao nhiêu không gian sẽ được giải phóng bằng cách loại bỏ một subvolume btrfs?


11

Có cách nào để tính toán tôi sẽ giải phóng bao nhiêu dung lượng nếu tôi xóa một (hoặc một vài) subvolume trên đĩa Btrfs (mà không thực sự loại bỏ chúng) không? Tôi biết rằng "hiện tại không có mã nào thực hiện phép tính cho bạn" , nhưng bạn sẽ làm thế nào?

Tôi cũng tự hỏi tại sao họ lại nói rằng nó sẽ chậm như vậy? Cả hai thực sự loại bỏ một subvolume và hỏi về không gian trống là rất nhanh theo kinh nghiệm của tôi, tại sao làm điều tương tự theo giả thuyết sẽ chậm hơn rất nhiều?


2
Tôi hy vọng bạn biết rằng btrfs.wiki.kernel.org/index.php/Btrfs_mailing_list có thể là nơi tốt hơn để đặt câu hỏi về hoạt động bên trong của btrfs (hoặc bất kỳ thành phần hạt nhân nào khác). Nếu bạn nhận được câu trả lời xin vui lòng gửi nó ở đây là tốt. Tôi tò mò về câu trả lời cho mình.
Adam Ryczkowski

1
Bạn nói "Cả hai thực sự loại bỏ một subvolume và hỏi về không gian trống là rất nhanh theo kinh nghiệm của tôi". Khi bạn xóa một subvolume, nó thực sự chỉ đánh dấu subvolume đó để xóa, nó chỉ thực sự giải phóng các khối đó khi có thời gian (đó là thông điệp 'không cam kết' khi bạn thực hiện), vì vậy, không xóa nhất thiết phải rất nhanh
etskinner

Câu trả lời:


3

Bạn nên xem btrfs quotabtrfs qgroups(nhóm hạn ngạch).

Về cơ bản qgroupslà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 qgroupchức năng cho một btrfshệ 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 qgroupdữ 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 qgroupsvớ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 qgroupcho 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 qgroupnhư là cha mẹ cho qgroupscá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 -pcờ để thêm parentcộ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/0cho 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.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.