Làm cách nào để mở rộng siêu dữ liệu btrfs?


9

btrfsSiêu dữ liệu của tôi đã đầy. (Tôi đang tạo ảnh chụp nhanh hàng giờ bằng cách sử dụng btrbk.)

Làm cách nào để tăng / mở rộng không gian được phân bổ cho siêu dữ liệu của btrfshệ thống tệp?

Hay là nó tự động mở rộng?


bạn đang sử dụng một phân vùng chỉ để sao lưu?
Rui F Ribeiro

1
Đó là subvolume @homeđược gắn tại /home, với các btrbkbản sao lưu trong subvolume btrbk-snap. Đối với một hệ thống tệp hỗ trợ tối đa 2 ^ 64 ảnh chụp nhanh, tôi hy vọng nó có cách để tăng kích thước siêu dữ liệu ...
Tom Hale

Hãy xem lệnh cân bằng btrfs
Emmanuel Rosa

@EmmanuelRosa Tôi có. Phần nào bạn cho là hữu ích?
Tom Hale

Có một giây thảo luận về việc cân bằng lại siêu dữ liệu. Có lẽ với bộ lọc phù hợp, bạn có thể cấp thêm dung lượng cho các khối siêu dữ liệu.
Emmanuel Rosa

Câu trả lời:


7

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 40GBthiế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=alwaystùy chọn của cplệ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 --reflinkkhô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 đó, btrfscó 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 btrfshệ 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 datamộ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 btrfsphâ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 btrfsnhà 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 btrfsnú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.btrfsthờ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.


1

Theo Câu hỏi thường gặp trên wiki btrfs , điều này là không thể và không có khả năng được thực hiện.

Tôi có thể thay đổi kích thước khối siêu dữ liệu mà không cần tạo lại các tập tin không?

Không, giá trị được truyền cho mkfs.btrfs -n SIZE không thể thay đổi sau khi hệ thống tập tin được tạo. Một bản sao lưu / khôi phục là cần thiết. Lưu ý rằng điều này có thể sẽ không bao giờ được thực hiện bởi vì nó sẽ yêu cầu cập nhật lớn cho chức năng cốt lõi.

Bạn có thể di chuyển hệ thống tập tin btrfs hiện có sang một hệ thống mới có quy mô lớn hơn -n SIZE. Sau đó, bạn thậm chí có thể thêm nó vào hệ thống tệp hiện có bằng cách sử dụng btrfs RAID và cân bằng, sau đó loại bỏ hệ thống tệp cũ.

Xem thêm phần về các ổ đĩa gần đầy .


2
Có một sự khác biệt giữa kích thước nút (mà trạng thái của bạn chỉ có thể được đặt một lần khi tạo hệ thống tệp) và kích thước siêu dữ liệu, mà imho là btrfs filesystem df /dòng đầu ra của lệnh Metadata, single: total=xxGiB, used=xxx.
nhân

Ý bạn là sao? Chắc chắn có một sự khác biệt, nhưng đó không phải là vấn đề quan điểm. -nđặt kích thước của từng khối siêu dữ liệu, đồng thời btrfs filesystem dfhiển thị không gian được sử dụng bởi các khối đó. Nếu tác giả bài viết gốc có quá nhiều không gian được chiếm bởi siêu dữ liệu so với dữ liệu thực tế, họ nên giảm kích thước -n, để các khối siêu dữ liệu có kích thước tối thiểu thấp hơn (chiếm ít không gian hơn nhưng phân mảnh nhiều hơn).
etskinner

3
OP hỏi làm thế nào để "tăng / mở rộng không gian được phân bổ cho siêu dữ liệu", do đó -ncâu trả lời "không thể đặt nút kích thước ( tùy chọn)" của bạn là imho, không phải là điểm chính. Vì khi anh ta hỏi thêm "hoặc [không gian được phân bổ cho siêu dữ liệu] nó có tự động được mở rộng không?", Gợi ý rằng đó không phải là kích thước nút, mà là không gian được phân bổ mà anh ta quan tâm. Câu trả lời nên là "có". Tất nhiên bạn đúng, gợi ý rằng -ncài đặt ảnh hưởng gián tiếp đến kích thước siêu dữ liệu, nhưng câu hỏi dường như hướng nhiều hơn đến bộ nhớ được phân bổ cho Siêu dữ liệu, chứ không phải kích thước ghi chú siêu dữ liệu duy nhất ....
humanityANDpeace

... ví dụ: có 100G không gian không được sử dụng trên thiết bị khối sao lưu, trong trường hợp bộ nhớ được phân bổ / cấp phát cho siêu dữ liệu, sẽ tự động được mở rộng (như OP đã giả định đúng). Với btrfstuy nhiên nó không phải là uncommen, rằng tất cả các thiết bị sự ủng hộ / bộ nhớ, đã được alloted để blockgroups dữ liệu, có nghĩa là bên cạnh bộ nhớ miễn phí (đối với dữ liệu riêng của mình), "không gian" lỗi được tạo ra. Do đó, người dùng cần thử một số btrfs balance, nếu vẫn còn không gian trong các phân đoạn khác có thể phân phối lại để tăng không gian thiếu của phần siêu dữ liệu.
nhân
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.