System plików BTRFS dla wielu urządzeń z dyskiem o różnej wielkości


14

Mam istniejący system plików BTRFS składający się z jednego dysku 500 GB i właśnie kupiłem dysk 2 TB, aby zwiększyć pojemność mojego serwera domowego i chcę dodać nowy dysk do istniejącego systemu plików. Z tego, co przeczytałem, wygląda na to, że żadna konfiguracja BTRFS nie jest w stanie obsłużyć dysku o różnych rozmiarach bez marnowania różnicy w wielkości między większym a mniejszym dyskiem, ale jestem nowy w BTRFS i mogłem coś przeoczyć, więc jest konfiguracja które pozwalają mi łączyć dwa dyski w systemie plików bez marnowania miejsca?


Jak radzisz sobie z dyskami bazowymi? Z LVM?
Andy Smith,

@Andy, btrfs obsługuje wiele dysków w stylu LVM / RAID, zaznacz to .
OneOfOne,

Ups ... moje złe. Na zdrowie ;-)
Andy Smith,

Odpowiedzi:


4

Btrfs mogą używać różnych poziomów nalotów dla danych i metadanych:

domyślnie (nawet dla jednego dysku) jest raid1 dla metadanych (katalogów itp.) i raid0 dla danych.

Jeśli tego nie zmieniłeś, prawdopodobnie nie będziesz miał problemu z dodaniem drugiej płyty i uruchomieniem ponownego równoważenia. ponieważ tylko metadane zostaną skopiowane na oba dyski (możesz zobaczyć swój rozmiar metadanych za pomocą btrfs filesystem df /). Pamiętaj tylko, że jeśli któryś z dysków ulegnie awarii, utracisz dane.

ponieważ dysk o pojemności 2 TB jest znacznie większy niż 500 g, prawdopodobnie dałoby to większe szanse, jeśli dodasz nowy, a następnie usuniesz stary (prawdopodobieństwo awarii jednego konkretnego dysku jest znacznie mniejsze niż prawdopodobieństwo jednego z dysków w braku).

jeśli planujesz później mieć macierz RAID (z dyskami o podobnych rozmiarach), możesz chcieć ponownie utworzyć system plików na nowym dysku z raid1 dla danych i metadanych, a następnie skopiować wszystko. potem, kiedy będziesz miał więcej pieniędzy, kup drugi dysk 2 TB.

ps: użycie raid1 na pojedynczym dysku oznacza, że ​​dane będą przechowywane w dwóch lokalizacjach na tym samym dysku (w celu ochrony przed uszkodzeniem) i zmniejszy przestrzeń dyskową (to naprawdę naprawdę dobry pomysł na metadane).

pss: poważnie, nie daj się skusić, aby nie używać raid1 do metadanych. psss: istnieje bardzo duża szansa, że ​​btrfs zyska możliwość dynamicznej zmiany poziomów rajdu.


osobiście planuję odtworzyć moje btrfs fs / tablice / what-do-i-call-this, gdy tylko btrfs będzie obsługiwał raid5 i raid6.
Arthur Ulfeldt,

12

To zależy od tego, jakiego profilu używasz dla bloków danych systemu plików Btrfs na wielu urządzeniach.

  • Gdy używasz RAID0 (domyślnie dla bloków danych), każdy dysk może być zapełniony tylko do pojemności najmniejszego dysku w macierzy.

  • Gdy użyjesz „pojedynczego” profilu dla bloków danych, każdy dysk zostanie zapełniony do pełnej pojemności. na przykładmkfs.btrfs -d single /dev/sda /dev/sdb

Mam serwer plików z dyskiem 2 TB i 3 TB. Uruchamia Ubuntu 12.10 z dysku flash USB. Najpierw stworzyłem system plików Btrfs bez -d singleopcji:

mkfs.btrfs /dev/sda /dev/sdb

Rezultat był taki, że mogłem przechowywać tylko około 4 TB (dane pliku binarnego TB 3,45).

# 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

Zwróć used 1.82TBuwagę na dysk 3 TB.

Następnie użyłem polecenia „balance”, aby przekonwertować bloki danych z RAID0 na profil „single”:

btrfs balance start -dconvert=single /mnt/btrfs1

Zrównoważenie danych 4 TB zajęło bardzo dużo czasu (około 30 godzin). Ale po jego zakończeniu mogłem użyć pełnego 5 TB (dane pliku binarnego 4,36 TB).

# 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

Użyłem wielu urządzeń z btrfs w Ubuntu i działało to dobrze. Pamiętaj, że btrfs tak naprawdę nie implementuje standardowych poziomów RAID. Implementuje opcjonalne paski i dublowanie, ale nie jest to prawdziwa macierz RAID.


1

Możliwe jest łączenie napędów o różnych rozmiarach w btrfs.
Ale obecnie btrfs nie sprzedaje ENOSPC (brak miejsca na urządzeniu) bardzo dobrze.

Np. Zainstalowałem 3 dyski w macierzy RAID0 (paski). 1x500 GB, 1x250 GB, 1x160 GB.
Zakładasz, że będziesz mieć miejsce na dysku między 800-900 GB.

Oto co df -hpokazuje:
/ dev / sdf 848G 615G 234G 73% / media / btrfs

Ale nie jestem w stanie przechowywać więcej danych w tablicy. (Brak miejsca)

btrfs filesystem df /media/btrfspokazuje mi to:
Dane: ogółem = 612,51 GB, używane = 612,51 GB
Metadane: ogółem = 1,62 GB, używane = 990,73 MB
System: ogółem = 12,00 MB, używane = 48,00 KB

Nawet przywrócenie równowagi nie pomogło.

Na liście mailingowej widziałem to połączenie:
rozmiar najmniejszego dysku * liczba dysków w tablicy
(chociaż mam trochę więcej miejsca: 612 GB zamiast 160 GB * 3 = 480 GB)

Tak więc w obecnym stanie rozwoju są szanse, że nie będziesz w stanie wykorzystać całej dostępnej przestrzeni, mimo że btrfs obsługuje różne rozmiary w jednej tablicy.

Używam Ubuntu 10.10 z jądrem generycznym 2.6.35-22.


Nie sądzę, aby kiedykolwiek obsługiwał to, co chcesz, przynajmniej dopóki nie będzie obsługiwał różnych poziomów nalotów dla poszczególnych plików / katalogów. W przypadku raid0 (pasek), btrfs jest wymagany, aby zachować równe rozmiary części każdego pliku na wszystkich 3 urządzeniach. Jak to zrobić, jeśli pozwala na wykorzystanie wszystkich 500 GB jednego urządzenia? Jeśli zamiast „raid0” użyłeś „single” (nie jestem pewien, czy ta opcja była dostępna po opublikowaniu), btrfs nie próbuje nigdzie powielić plików i pozwoli ci wykorzystać całą przestrzeń na wszystkich urządzeniach. Ale w przypadku poziomów nalotów nie ma to sensu: próbujesz złamać definicję poziomu nalotu.
bobpaul 24.04.13

Nieważne, mylę się. btrfs raid0 / 1 tylko paski / kopie lustrzane do 1 innego urządzenia, nie do wszystkich urządzeń, więc 1 TB + 500 GB + 500 GB działa dokładnie tak samo, jak 1 TB + 1 TB dla raid0 i raid1 (przynajmniej w Linuksie 3.0). W wersjach wcześniejszych niż Linux 3.0 miał opisany problem.
bobpaul 24.04.13

1

aktualizacja: poniższa odpowiedź została napisana przed wydaniem Linuksa 3.0. Linux 3.0 zawiera poprawkę quasi-round-robin.

Podczas wykonywania kopii lustrzanych lub usuwania danych drugi fragment kopii lustrzanej lub pasków należy przydzielić na innym urządzeniu z wolnym miejscem. BTRFS przydziela porcje do urządzeń w sposób okrągły, co może powodować utratę miejsca, jeśli masz urządzenia o różnych rozmiarach.

Tam jest poprawka quasi-round-robin . Oczywiście nadal nie można sparować wszystkich części na różnych urządzeniach, jeśli masz dysk 500 GB i 2 TB. Łatka jest przeznaczona raczej do sytuacji takich jak 1 x 1 TB + 2 x 500 GB, gdzie każdy mały dysk powinien preferować tworzenie kopii lustrzanych / pasków na dużym dysku zamiast na drugim małym dysku.

W twojej sytuacji użyłbym po prostu trybu „pojedynczego” dla twoich danych ( mkfs.btrfs -d single). W tym trybie części nie są sparowane, więc myślę, że nie byłoby problemu z urządzeniami o różnych rozmiarach. Nie przetestowałem tego jednak.


0

Ten problem dotyczy tylko konfiguracji btrfs-raid1 ze strony Gotchas :

  • Alokacja odbywa się na zasadzie round-robin. Jeśli masz strategię raid1 na woluminie złożonym z niedopasowanych dysków (woluminy o różnych rozmiarach), twój mniejszy wolumin może się zapełnić, pozostawiając dużo miejsca na twoim największym pojedynczym dysku. Możesz sprawdzić, czy jest to problem, jeśli istnieje rozbieżność między systemem plików „df” i „btrfs file system df [mountpoint]” ORAZ jeśli to drugie polecenie pokazuje również, że „total” i „used” są takie same w wierszu „Data” . Przywrócenie równowagi może złagodzić ten problem. (2.6.33)
    • Jeśli Twój wolumin wypełnia się w ten sposób, ponowne zrównoważenie może szybko spowodować, że ENOSPC („Błąd braku SPACe pozostawiony na urządzeniu”) przestaje działać. Konieczne może być usunięcie stosunkowo dużego pliku, aby rozwiązać ten impas, a następnie przywrócenie równowagi zakończy się powodzeniem. (2.6.33)
    • Ponowne równoważenie może spowodować bardzo intensywne użycie procesora przez dłuższy czas. (2.6.34 i 2.6.35)

Przepraszam, że zmuszam cię do powtórzenia się, ale zamierzam dodać nowe urządzenie i muszę się upewnić. Wszystkie źródła sprawdzone o RAID0 stwierdzają, że dyski muszą być tego samego rozmiaru (np. Freebsd geom doc: „Każdy dysk w pasku RAID0 musi mieć taki sam rozmiar, ponieważ żądania we / wy są przeplatane do odczytu lub zapisu do wielu dysków równolegle. ”). Czy możesz potwierdzić, że działa z Btrfs, proszę?
fokenrute,

Przepraszam, nie mam btrfów na wielu urządzeniach, których nie mogę potwierdzić, jednak nic, co mogę znaleźć, nie mówi nic o tym, aby mieć ten sam rozmiar urządzenia dla raid0 + btrfs, jednak jeśli masz wystarczająco dużo czasu, podziel nowy dysk na 1 TB / 1 TB, wykonaj kopię zapasową starego dysku na jednej z partycji, dołącz pusty 1 TB, jeśli działa, dołącz drugą partycję.
OneOfOne,
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.