Hệ thống tập tin BTRFS đa thiết bị với đĩa có kích thước khác nhau


14

Tôi có một hệ thống tệp BTRFS hiện có bao gồm một đĩa 500 GB và tôi vừa mua một đĩa 2TB để tăng dung lượng lưu trữ của máy chủ gia đình và tôi muốn thêm đĩa mới vào hệ thống tệp hiện có. Từ những gì tôi đọc được, có vẻ như không có thiết lập BTRFS nào có thể xử lý đĩa có kích thước khác nhau mà không lãng phí sự khác biệt về kích thước giữa đĩa lớn hơn và đĩa nhỏ hơn, nhưng tôi mới sử dụng BTRFS và tôi có thể đã bỏ lỡ điều gì đó, vì vậy có thiết lập không Điều đó có thể cho phép tôi kết hợp hai đĩa trong một hệ thống tập tin mà không lãng phí không gian?


Làm thế nào bạn xử lý các đĩa cơ bản? Với LVM?
Andy Smith

@Andy, btrfs xử lý nhiều đĩa theo kiểu LVM / RAID, kiểm tra cái này .
OneOfOne

Rất tiếc ... xấu của tôi. Chúc mừng vì điều đó ;-)
Andy Smith

Câu trả lời:


4

Btrfs có thể sử dụng các cấp độ đột kích khác nhau cho dữ liệu và Siêu dữ liệu:

mặc định (thậm chí cho một đĩa) là raid1 cho siêu dữ liệu (thư mục, v.v.) và raid0 cho dữ liệu.

Nếu bạn không thay đổi điều này thì có khả năng bạn sẽ không gặp vấn đề gì khi thêm đĩa thứ hai và chạy cân bằng lại. bởi vì chỉ siêu dữ liệu sẽ được sao chép vào cả hai đĩa (bạn có thể thấy kích thước siêu dữ liệu của mình với btrfs filesystem df /). Chỉ cần lưu ý rằng nếu một trong hai đĩa của bạn bị lỗi, bạn sẽ mất dữ liệu.

bởi vì đĩa 2tb rất lớn hơn 500g, nó có thể mang lại cho bạn tỷ lệ cược tốt hơn nếu bạn thêm cái mới và sau đó loại bỏ cái cũ (tỷ lệ của một ổ đĩa cụ thể bị lỗi ít hơn rất nhiều so với tỷ lệ của một trong hai ổ đĩa thất bại).

nếu bạn dự định có một mảng đột kích sau này (với các ổ đĩa có kích thước tương tự hơn), bạn có thể muốn tạo lại hệ thống tệp trên ổ đĩa mới với raid1 cho cả dữ liệu và siêu dữ liệu và sau đó sao chép mọi thứ. sau đó khi bạn có nhiều tiền hơn hãy mua ổ 2tb thứ hai.

ps: sử dụng raid1 trên ổ đĩa đơn có nghĩa là dữ liệu sẽ được lưu trữ ở hai vị trí trên một ổ đĩa đó (để bảo vệ chống tham nhũng) và sẽ giảm dung lượng lưu trữ của bạn (đó là một ý tưởng thực sự tốt cho siêu dữ liệu).

pss: nghiêm túc, đừng cố gắng không sử dụng raid1 cho siêu dữ liệu. psss: có một cơ hội rất tốt rằng btrfs sẽ có được khả năng thay đổi cấp độ đột kích một cách linh hoạt.


cá nhân tôi đang lên kế hoạch tái tạo btrfs fs / mảng / what-do-i-call-this ngay khi btrfs có hỗ trợ raid5 và raid6.
Arthur Ulfeldt

11

Nó phụ thuộc vào cấu hình bạn sử dụng cho các khối dữ liệu của hệ thống tệp Btrfs đa thiết bị.

  • Khi bạn sử dụng RAID0 (mặc định cho các khối dữ liệu), mỗi đĩa chỉ có thể được lấp đầy với dung lượng của đĩa nhỏ nhất trong mảng.

  • Khi bạn sử dụng cấu hình "đơn" cho các khối dữ liệu, mỗi đĩa sẽ được lấp đầy với dung lượng tối đa. ví dụmkfs.btrfs -d single /dev/sda /dev/sdb

Tôi có một máy chủ tập tin với đĩa 2TB và 3TB. Nó khởi động Ubuntu 12.10 từ ổ flash USB. Đầu tiên tôi tạo hệ thống tập tin Btrfs mà không có -d singletùy chọn:

mkfs.btrfs /dev/sda /dev/sdb

Kết quả là tôi chỉ có thể lưu trữ khoảng 4TB (3,45 dữ liệu tệp TB nhị phân).

# btrfs fi show
Label: none  uuid: 3a63a407-dd3c-46b6-8902-ede4b2b79465
 Total devices 2 FS bytes used 3.22TB
 devid    2 size 2.73TB used 1.82TB path /dev/sdb
 devid    1 size 1.82TB used 1.82TB path /dev/sda
# btrfs fi df /mnt/btrfs1/
Data, RAID0: total=3.45TB, used=3.22TB
Data: total=8.00MB, used=0.00
System, RAID1: total=8.00MB, used=264.00KB
System: total=4.00MB, used=0.00
Metadata, RAID1: total=94.00GB, used=4.29GB
Metadata: total=8.00MB, used=0.00
# df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/sdb        4.6T  3.3T  241G  94% /mnt/btrfs1

Lưu ý used 1.82TBcho ổ đĩa 3TB.

Sau đó, tôi đã sử dụng lệnh "cân bằng" để chuyển đổi các khối dữ liệu từ RAID0 sang cấu hình "đơn":

btrfs balance start -dconvert=single /mnt/btrfs1

Phải mất một thời gian rất dài (khoảng 30 giờ) để cân bằng dữ liệu 4TB. Nhưng sau khi hoàn thành, tôi có thể sử dụng toàn bộ 5TB (4.36 dữ liệu tệp TB nhị phân).

# btrfs fi show
Label: none  uuid: 3a63a407-dd3c-46b6-8902-ede4b2b79465
 Total devices 2 FS bytes used 4.34TB
 devid    2 size 2.73TB used 2.73TB path /dev/sdb
 devid    1 size 1.82TB used 1.82TB path /dev/sda
# btrfs fi df /mnt/btrfs1/
Data: total=4.36TB, used=4.34TB
System, RAID1: total=40.00MB, used=500.00KB
System: total=4.00MB, used=0.00
Metadata, RAID1: total=94.00GB, used=4.01GB
Metadata: total=8.00MB, used=0.00
# df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/sdb        4.6T  4.4T   27G 100% /mnt/btrfs1

2

Tôi đã sử dụng nhiều thiết bị với btrfs trong Ubuntu và nó hoạt động rất tốt. Hãy nhớ rằng btrfs không thực sự thực hiện các cấp RAID tiêu chuẩn. Nó thực hiện phân chia tùy chọn và phản chiếu, nhưng không phải là RAID thực sự.


1

Có thể kết hợp các ổ đĩa với kích thước khác nhau trong btrfs.
Nhưng hiện tại btrfs không xử lý ENOSPC (Không còn chỗ trống trên thiết bị).

Ví dụ: tôi đã cài đặt 3 ổ đĩa trong một mảng RAID0 (sọc). 1x500GB, 1x250GB, 1x160GB.
Bạn sẽ cho rằng mình sẽ có dung lượng ổ đĩa từ 800-900GB.

Đây là những gì df -hhiển thị:
/ dev / sdf 848G 615G 234G 73% / media / btrfs

Nhưng tôi không thể lưu trữ thêm dữ liệu trên mảng. (Không còn chỗ trống)

btrfs filesystem df /media/btrfscho tôi thấy điều này:
Dữ liệu: tổng = 612,51GB, đã sử dụng = 612,51GB
Siêu dữ liệu: tổng = 1,62GB, đã sử dụng = 990,73MB
Hệ thống: tổng = 12,00 MB, đã sử dụng = 48,00KB

Ngay cả việc tái cân bằng cũng không giúp được gì.

Trong danh sách gửi thư, tôi đã thấy cách gọi này:
kích thước của ổ đĩa nhỏ nhất * số lượng ổ đĩa trong mảng
(mặc dù tôi có thêm dung lượng: 612GB thay vì 160GB * 3 = 480GB)

Vì vậy, trong tình trạng phát triển hiện tại, bạn sẽ không thể sử dụng tất cả không gian bạn có mặc dù btrfs không hỗ trợ các kích thước khác nhau trong một mảng.

Tôi đang sử dụng Ubuntu 10.10 với kernel 2.6,35-22.


Tôi không nghĩ nó sẽ hỗ trợ những gì bạn muốn, ít nhất là cho đến khi nó hỗ trợ các cấp độ đột kích khác nhau trên mỗi tệp / mỗi thư mục. Đối với raid0 (sọc), btrfs được yêu cầu giữ các phần có kích thước bằng nhau của mỗi tệp trên cả 3 thiết bị. Làm thế nào nó có thể làm điều đó nếu nó cho phép bạn sử dụng tất cả 500GB của một thiết bị? Nếu thay vì "raid0" bạn đã sử dụng "đơn" (không chắc tùy chọn này có sẵn khi bạn đăng), thì btrfs không cố gắng sao chép tệp ở bất cứ đâu và sẽ cho phép bạn sử dụng tất cả dung lượng trên tất cả các thiết bị. Nhưng đối với các cấp độ đột kích, điều đó không có nghĩa: bạn đang cố vi phạm định nghĩa về cấp độ đột kích.
bobpaul

Đừng bận tâm, tôi sai rồi. btrfs raid0 / 1 chỉ sọc / gương cho 1 thiết bị khác, không phải tất cả các thiết bị, vì vậy 1TB + 500GB + 500GB hoạt động chính xác cũng như 1TB + 1TB cho raid0 và raid1 (ít nhất là của Linux 3.0). Trước Linux 3.0, nó có vấn đề bạn mô tả.
bobpaul

1

cập nhật: câu trả lời dưới đây được viết trước khi Linux 3.0 được phát hành. Linux 3.0 bao gồm bản vá bán nguyệt.

Khi bạn thực hiện phản chiếu hoặc phân loại dữ liệu, gương thứ hai hoặc đoạn sọc cần được phân bổ trên một thiết bị khác có không gian trống. BTRFS phân bổ các khối cho các thiết bị theo kiểu vòng tròn, có thể gây mất không gian nếu bạn có các thiết bị có kích cỡ khác nhau.

Có một bản vá gần như tròn trong đường ống để cải thiện điều này. Tất nhiên, vẫn không thể ghép nối tất cả các khối trên các thiết bị khác nhau nếu bạn có ổ đĩa 500 GB và 2TB. Bản vá được dành nhiều hơn cho các tình huống như 1 x 1TB + 2 x 500GB trong đó mỗi đĩa nhỏ nên thích nhân bản / sọc với đĩa lớn thay vì đĩa nhỏ khác.

Trong tình huống của bạn, tôi sẽ chỉ sử dụng chế độ "đơn" cho dữ liệu của bạn ( mkfs.btrfs -d single). Chunks không được ghép nối trong chế độ đó, vì vậy tôi nghĩ sẽ không có vấn đề gì với các thiết bị có kích cỡ khác nhau. Tôi đã không kiểm tra nó mặc dù.


0

Vấn đề này chỉ áp dụng cho các thiết lập btrfs-raid1, từ trang Gotchas :

  • Phân bổ được thực hiện trên cơ sở vòng tròn. Nếu bạn có chiến lược raid1 trên một ổ đĩa được tạo thành từ các ổ đĩa không khớp (âm lượng có kích thước khác nhau), âm lượng nhỏ hơn của bạn có thể lấp đầy trong khi không còn nhiều dung lượng trống trên ổ đĩa lớn nhất của bạn. Bạn có thể xác minh rằng đây là một vấn đề nếu có bất kỳ sự khác biệt nào giữa 'df' và 'btrfs filesystem df [mountpoint]' VÀ nếu lệnh sau cũng cho thấy "tổng" và "được sử dụng" giống nhau trên dòng "Dữ liệu" . Một sự cân bằng có thể giảm thiểu vấn đề này. (2.6.33)
    • Nếu âm lượng của bạn không đầy theo cách này, sự cân bằng lại có thể nhanh chóng gây ra ENOSPC ("Lỗi KHÔNG SPaCe còn lại trên thiết bị"). Bạn có thể phải xóa một tệp tương đối lớn để giải quyết tình trạng bế tắc này, sau đó việc cân bằng lại sẽ thành công. (2.6.33)
    • Việc cân bằng lại có thể gây ra việc sử dụng CPU rất mạnh mẽ trong thời gian dài. (2.6.34 & 2.6.35)

Xin lỗi để khiến bạn lặp lại chính mình, nhưng tôi sắp thêm thiết bị mới và tôi cần chắc chắn. Tất cả các nguồn được kiểm tra về trạng thái RAID0 rằng các đĩa cần phải có cùng kích thước (ví dụ: tài liệu địa lý freebsd: "Mỗi đĩa trong một dải RAID0 phải có cùng kích thước, vì các yêu cầu I / O được xen kẽ để đọc hoặc ghi để nhiều đĩa song song. "). Bạn có thể xác nhận nó hoạt động với Btrfs không?
fokenrute

Tôi xin lỗi, tôi không có btrfs đa thiết bị mà tôi không thể xác nhận, tuy nhiên tôi không thể tìm thấy điều gì nói về việc có cùng kích thước thiết bị cho raid0 + btrfs, tuy nhiên nếu bạn có đủ thời gian, hãy chia đĩa mới thành 1tb / 1tb, sao lưu đĩa cũ vào một trong các phân vùng, nối thêm 1tb trống, nếu nó hoạt động nối thêm phần thứ hai.
OneOfOne
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.