TL; DR Siêu dữ liệu (nếu btrfs không chịu điều kiện không gian thấp chung) sẽ tự động tăng. Trong trường hợp không tồn tại không gian trống chưa được phân bổ, mức tăng tự động sẽ bị giảm. Tuy nhiên, nếu phần dữ liệu của btrfs
đã được phân bổ nhiều không gian hơn mức cần thiết, thì có thể phân phối lại phần này. Điều này được gọi là balance
-ing trong btrfs.
Giả sử rằng có đủ bộ nhớ chưa phân bổ trên (các) thiết bị khối sao lưu btrfs
, thì phần Siêu dữ liệu của hệ thống tệp sẽ phân bổ - giống như giả định của OP - bộ nhớ tự động để tăng / mở rộng siêu dữ liệu.
Do đó, câu trả lời là: Có (với điều kiện không có bộ nhớ thấp / điều kiện không gian trống trong btrfs
) , thì siêu dữ liệu sẽ tự động tăng lên, như vậy:
(1) Chúng tôi đã xem xét một số thiết lập phân bổ ban đầu của btrfs (trên 40GB
thiết bị)
$> btrfs filesystem df /
Data, single: total=25.00GiB, used=24.49GiB
System, single: total=32.00MiB, used=16.00KiB
Metadata, single: total=1.55GiB, used=1.33GiB
GlobalReserve, single: total=85.41MiB, used=0.00B
(2) Như có thể thấy, không gian được phân bổ trong hệ thống tệp để lưu trữ Siêu dữ liệu là 1,55GiB, trong đó 1,33GiB, do đó hầu như tất cả đều được sử dụng (đây có thể là tình huống xảy ra trong trường hợp của OP)
(3) Bây giờ chúng tôi kích thích sự gia tăng siêu dữ liệu được thêm vào. Để làm như vậy, chúng tôi sao chép thư mục / home bằng cách sử dụng --reflink=always
tùy chọn của cp
lệnh.
$> cp -r --reflink=awlways /home /home.copy
(4) Vì (như chúng tôi giả sử có rất nhiều tệp trong / home), rất nhiều dữ liệu mới cho hệ thống tệp đã được thêm vào, do chúng tôi sử dụng --reflink
không sử dụng ít hoặc không có thêm không gian cho dữ liệu thực tế, nên nó sử dụng Copy-on-Write, cơ chế. Nói tóm lại, phần lớn Metadata đã được thêm vào hệ thống tập tin. Do đó chúng ta có thể có một cái nhìn khác
$> btrfs filesystem df /
Data, single: total=25.00GiB, used=24.65GiB
System, single: total=32.00MiB, used=16.00KiB
Metadata, single: total=2.78GiB, used=2.45GiB
GlobalReserve, single: total=85.41MiB, used=0.00B
Có thể thấy, không gian được phân bổ cho Siêu dữ liệu được sử dụng trong này btrfs
đã tự động tăng lên.
Vì điều này là rất tự động, nó thường không bị phát hiện bởi người dùng. Tuy nhiên, có một số trường hợp, chủ yếu là những trường hợp mà toàn bộ hệ thống tập tin đã được lấp đầy khá nhiều. Trong những trường hợp đó, btrfs
có thể bắt đầu "nói lắp" và không tự động tăng không gian được phân bổ cho Siêu dữ liệu. Lý do sẽ là, ví dụ, tất cả không gian đã được phân bổ cho các bộ phận (Dữ liệu, Hệ thống, Siêu dữ liệu, GlobalReserve). Một cách khó hiểu, đó có thể là trường hợp có không gian rõ ràng. Một ví dụ sẽ là đầu ra này:
$> btrfs filesystem df /
Data, single: total=38.12GiB, used=25.01GiB
System, single: total=32.00MiB, used=16.00KiB
Metadata, single: total=1.55GiB, used=1.45GiB
GlobalReserve, single: total=85.41MiB, used=0.00B
Như có thể thấy, hệ thống tất cả 40GiB
, tuy nhiên việc phân bổ có phần tắt balance
, vì trong khi vẫn còn không gian cho dữ liệu của các tệp mới, thì Siêu dữ liệu (như trong trường hợp OP) là thấp. Việc phân bổ bộ nhớ tự động cho các thiết bị sao lưu btrfs
hệ thống tập tin là không thể nữa (chỉ cần cộng tổng số phân bổ, 38.12G + 1.55G + .. ~ = 40GiB).
Do có không gian trống dư thừa được phân bổ cho data
một phần của hệ thống tập tin, giờ đây nó có thể hữu ích, cần thiết để cân bằng các btrfs. Số dư có nghĩa là phân phối lại không gian đã được phân bổ.
Trong trường hợp của OP, có thể giả định rằng, vì một số lý do, sự mất cân bằng giữa các phần khác nhau của btrfs
phân bổ đã xảy ra.
Thật không may, lệnh đơn giản sudo btrfs balance -dusage=0
, về nguyên tắc nên tìm kiếm các khối trống (được phân bổ cho dữ liệu) và đưa chúng đến người dùng tốt hơn (đó sẽ là không gian gần như cạn kiệt cho Siêu dữ liệu), có thể không tìm thấy vì không thể tìm thấy khối dữ liệu hoàn toàn trống.
Do đó, các btrfs
nhà phát triển khuyến nghị nên liên tục tăng giới hạn sử dụng "khi các khối dữ liệu nên được sắp xếp lại để lấy lại không gian"
Do đó, nếu kết quả của
$> sudo btrfs balance -dusage=0
Done, had to relocate 0 out of 170 chunks
đang hiển thị không di dời, người ta nên làm một số
$> sudo btrfs balance -dusage=5
Done, had to relocate 0 out of 170 chunks <--(again fail)
$> sudo btrfs balance -dusage=10
Done, had to relocate 0 out of 170 chunks <--(again fail)
$> sudo btrfs balance -dusage=15
Done, had to relocate 2 out of 170 chunks <--(success)
Câu trả lời khác đã gợi ý về ảnh hưởng của các btrfs
nút, điều này ảnh hưởng phần nào đến việc siêu dữ liệu sẽ tăng nhanh như thế nào. Các kích thước nút là (như được đề cập trong câu trả lời khác) chỉ được đặt một lần tại mkfs.btrfs
thời điểm tạo hệ thống tập tin. Về lý thuyết, người ta có thể giảm kích thước của Siêu dữ liệu nếu có thể thay đổi thành giá trị thấp hơn cho kích thước nút, nếu điều đó là có thể (thì không!). Tuy nhiên, kích thước nút sẽ không thể giúp mở rộng hoặc tăng không gian siêu dữ liệu được phân bổ theo bất kỳ cách nào. Thay vào đó, nó có thể chỉ giúp bảo tồn không gian ở nơi đầu tiên. Tuy nhiên, một kích thước nút nhỏ hơn, không được bảo đảm để giảm kích thước siêu dữ liệu. Thật vậy, một số trường hợp có thể cho thấy rằng các nút lớn hơn làm giảm chiều dài của cây trên btrfs, vì các ghi chú có thể chứa nhiều "liên kết" hơn.