BTRFS-Dateisystem für mehrere Geräte mit unterschiedlich großer Festplatte

14

Ich habe ein vorhandenes BTRFS-Dateisystem, das aus einer 500-GB-Festplatte besteht, und ich habe gerade eine 2-TB-Festplatte gekauft, um die Speicherkapazität meines Heimservers zu erhöhen. Ich möchte die neue Festplatte zum vorhandenen Dateisystem hinzufügen. Nach dem, was ich gelesen habe, scheint es, dass kein BTRFS-Setup mit Festplatten unterschiedlicher Größe umgehen kann, ohne den Größenunterschied zwischen der größeren und der kleineren Festplatte zu verschwenden, aber ich bin neu in BTRFS und habe möglicherweise etwas verpasst. Gibt es also ein Setup? das kann mir erlauben, zwei Festplatten in einem Dateisystem zu kombinieren, ohne Platz zu verschwenden?

fokenrute
quelle
Wie gehen Sie mit den zugrunde liegenden Datenträgern um? Mit LVM?
Andy Smith
@Andy, btrfs verarbeitet mehrere Festplatten im LVM / RAID-Stil . Aktivieren Sie dieses Kontrollkästchen .
OneOfOne
Hoppla ... mein Schlimmes. Ein
Andy Smith

Antworten:

4

Btrfs können unterschiedliche RAID-Level für Daten und Metadaten verwenden:

Die Standardeinstellung (auch für eine Festplatte) ist raid1 für die Metadaten (Verzeichnisse usw.) und raid0 für die Daten.

Wenn Sie dies nicht geändert haben, werden Sie wahrscheinlich kein Problem damit haben, die zweite CD hinzuzufügen und einen Neuausgleich durchzuführen. da nur die Metadaten auf beide Datenträger kopiert werden (Sie können Ihre Metadatengröße mit sehen btrfs filesystem df /). Beachten Sie jedoch, dass Sie Daten verlieren, wenn eine Ihrer Festplatten ausfällt.

Da die 2-TB-Festplatte sooooooooo viel größer als die 500 g ist, erhalten Sie möglicherweise bessere Chancen, wenn Sie die neue hinzufügen und dann die alte entfernen (die Wahrscheinlichkeit, dass ein bestimmtes Laufwerk ausfällt, ist viel geringer als die Wahrscheinlichkeit, dass eines der Laufwerke ausfällt Versagen).

Wenn Sie später ein RAID-Array haben möchten (mit Laufwerken ähnlicher Größe), können Sie das Dateisystem auf dem neuen Laufwerk mit RAID1 für Daten und Metadaten neu erstellen und dann alles kopieren. dann später, wenn Sie mehr Geld haben, kaufen Sie das zweite 2-TB-Laufwerk.

ps: Die Verwendung von raid1 auf einem einzelnen Laufwerk bedeutet, dass die Daten an zwei Orten auf diesem einen Laufwerk gespeichert werden (zum Schutz vor Beschädigung) und Ihren Speicherplatz reduzieren (eine wirklich gute Idee für die Metadaten).

pss: im Ernst, sei nicht versucht, raid1 nicht für Metadaten zu verwenden. psss: es besteht eine sehr gute chance, dass btrfs die möglichkeit erhält, die raid-ebenen dynamisch zu ändern.

Arthur Ulfeldt
quelle
persönlich plane ich, meine btrfs fs / arrays / what-do-i-call-this neu zu erstellen, sobald btrfs raid5- und raid6-unterstützung hat.
Arthur Ulfeldt
11

Dies hängt davon ab, welches Profil Sie für die Datenblöcke des Btrfs-Dateisystems mit mehreren Geräten verwenden.

  • Wenn Sie RAID0 (die Standardeinstellung für Datenblöcke) verwenden, kann jede Festplatte nur bis zur Kapazität der kleinsten Festplatte im Array gefüllt werden.

  • Wenn Sie das "einzelne" Profil für die Datenblöcke verwenden, wird jede Festplatte mit ihrer vollen Kapazität gefüllt. z.Bmkfs.btrfs -d single /dev/sda /dev/sdb

Ich habe einen Dateiserver mit einer 2-TB- und einer 3-TB-Festplatte. Es bootet Ubuntu 12.10 von einem USB-Stick. Zuerst habe ich das Btrfs-Dateisystem ohne die -d singleOption erstellt:

mkfs.btrfs /dev/sda /dev/sdb

Das Ergebnis war, dass ich nur ungefähr 4 TB (3,45 binäre TB-Dateidaten) speichern konnte.

# 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

Beachten Sie die used 1.82TBfür das 3-TB-Laufwerk.

Dann habe ich den Befehl "balance" verwendet, um die Datenblöcke von RAID0 in das Profil "single" zu konvertieren:

btrfs balance start -dconvert=single /mnt/btrfs1

Es dauerte sehr lange (ungefähr 30 Stunden), um die 4 TB-Daten auszugleichen. Aber nachdem es abgeschlossen ist, könnte ich die vollen 5 TB (4,36 binäre TB-Dateidaten) verwenden.

# 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
Christian d'Heureuse
quelle
2

Ich habe mehrere Geräte mit BTRFS in Ubuntu verwendet, und es hat gut funktioniert. Beachten Sie, dass btrfs keine Standard-RAID-Levels implementiert. Es implementiert optionales Striping und Mirroring, jedoch kein echtes RAID.

Michael Trausch
quelle
1

Es ist möglich, Laufwerke mit unterschiedlicher Größe in btrfs zu kombinieren.
Gegenwärtig verarbeitet btrfs ENOSPC (No space left on device) jedoch nicht sehr gut.

ZB habe ich 3 Laufwerke in einem RAID0-Array (Striped) installiert. 1x500 GB, 1x250 GB, 1x160 GB.
Sie würden davon ausgehen, dass Sie einen Speicherplatz zwischen 800-900 GB haben.

Dies ist , was df -hzeigt:
/ dev / sdf 848 g 615G 234G 73% / media / Btrfs

Ich kann jedoch keine weiteren Daten auf dem Array speichern. (Kein Platz frei)

btrfs filesystem df /media/btrfszeigt mir dies:
Daten: insgesamt = 612,51 GB, verwendet = 612,51 GB
Metadaten: insgesamt = 1,62 GB, verwendet = 990,73 MB
System: insgesamt = 12,00 MB, verwendet = 48,00 KB

Sogar das Neuausbalancieren hat nicht geholfen.

Auf einer Mailingliste sah ich diese Aufforderung:
Größe des kleinsten Laufwerks * Anzahl der Laufwerke im Array
(obwohl ich etwas mehr Speicherplatz habe: 612 GB statt 160 GB * 3 = 480 GB)

Nach dem derzeitigen Entwicklungsstand können Sie möglicherweise nicht den gesamten verfügbaren Speicherplatz nutzen, obwohl btrfs unterschiedliche Größen in einem Array unterstützt.

Ich verwende Ubuntu 10.10 mit 2.6.35-22-generischem Kernel.

torusJKL
quelle
Ich denke nicht, dass es jemals unterstützen wird, was Sie wollen, zumindest nicht, bis es verschiedene RAID-Level pro Datei / pro Verzeichnis unterstützt. Für raid0 (Stripe) ist btrfs erforderlich, um gleich große Teile jeder Datei auf allen drei Geräten zu speichern. Wie kann es das tun, wenn Sie alle 500 GB eines Geräts verwenden können? Wenn Sie anstelle von "raid0" "single" verwendet haben (nicht sicher, ob diese Option beim Posten verfügbar war), versucht btrfs nicht, Dateien irgendwo zu duplizieren, und lässt Sie den gesamten Speicherplatz auf allen Geräten nutzen. Für Schlachtzugsstufen ist dies jedoch nicht sinnvoll: Sie versuchen, die Definition der Schlachtzugsstufe zu verletzen.
Bobpaul
Egal, ich liege falsch. btrfs raid0 / 1 streift / spiegelt nur 1 anderes Gerät, nicht alle Geräte, sodass 1 TB + 500 GB + 500 GB genauso gut funktionieren wie 1 TB + 1 TB für raid0 und raid1 (mindestens ab Linux 3.0). Vor Linux 3.0 gab es das von Ihnen beschriebene Problem.
Bobpaul
1

Update: Die Antwort unten wurde geschrieben, bevor Linux 3.0 veröffentlicht wurde. Linux 3.0 enthält den Quasi-Round-Robin-Patch.

Beim Datenspiegeln oder Striping muss der zweite Spiegel- oder Stripe-Block auf einem anderen Gerät mit freiem Speicherplatz zugewiesen werden. BTRFS weist den Geräten im Round-Robin-Verfahren Blöcke zu, die bei Geräten unterschiedlicher Größe Platzverlust verursachen können.

Es ist ein Quasi-Round-Robin-Patch in der Pipeline, um dies zu verbessern. Natürlich ist es immer noch unmöglich, alle Chunks auf verschiedenen Geräten zu koppeln, wenn Sie über eine 500-GB- und eine 2-TB-Festplatte verfügen. Der Patch ist eher für Situationen wie 1 x 1 TB + 2 x 500 GB gedacht, in denen jede kleine Festplatte es vorziehen sollte, mit der großen Festplatte anstelle der anderen kleinen Festplatte zu spiegeln / zu streifen.

In Ihrer Situation würde ich nur den "Single" -Modus für Ihre Daten verwenden ( mkfs.btrfs -d single). Chunks sind in diesem Modus nicht gepaart, daher würde es meines Erachtens kein Problem mit Geräten unterschiedlicher Größe geben. Ich habe es aber nicht getestet.

Wim Coenen
quelle
0

Dieses Problem tritt nur bei btrfs-raid1-Setups auf der Gotchas- Seite auf:

  • Die Allokation erfolgt im Round-Robin-Verfahren. Wenn Sie eine RAID1-Strategie für ein Volume haben, das aus nicht übereinstimmenden Laufwerken (Volumes unterschiedlicher Größe) besteht, füllt sich möglicherweise Ihr kleineres Volume, und auf dem größten Laufwerk bleibt viel Speicherplatz frei. Sie können überprüfen , dass dies ein Problem ist , wenn es eine Diskrepanz zwischen dem , ‚df‘ und "Btrfs - Dateisystem df [einhängepunkt] UND wenn der letztere Befehl zeigt auch , dass„total“und„gebraucht“das gleiche auf der„Data“line . Eine Neuverteilung kann dieses Problem mindern. (2.6.33)
    • Wenn sich Ihr Volume auf diese Weise füllt, kann eine Neuverteilung schnell zu einem Hoppla! Von ENOSPC ("Fehler, dass kein SPaCe auf dem Gerät verbleibt") führen. Möglicherweise müssen Sie eine relativ große Datei löschen, um diese Sackgasse zu beheben. Dann ist eine Neuverteilung erfolgreich. (2.6.33)
    • Ein Neuausgleich kann über einen längeren Zeitraum zu einer sehr intensiven CPU-Auslastung führen. (2.6.34 & 2.6.35)
OneOfOne
quelle
Es tut mir leid, dass Sie sich wiederholen müssen, aber ich bin dabei, das neue Gerät hinzuzufügen, und ich muss sicher sein. Alle Quellen, die auf RAID0 geprüft wurden, geben an, dass die Festplatten dieselbe Größe haben müssen (z. B. das freebsd-Geom-Dokument: "Jede Festplatte in einem RAID0-Stripe muss dieselbe Größe haben, da E / A-Anforderungen zum Lesen oder Schreiben verschachtelt sind auf mehrere Festplatten gleichzeitig. "). Kannst du bitte bestätigen, dass es mit Btrfs funktioniert?
Fokenrute
Es tut mir leid, ich habe keine BTRFS mit mehreren Geräten, die ich nicht bestätigen kann. Nichts, was ich finden kann, sagt etwas über die gleiche Gerätegröße für raid0 + BTRFS aus. Wenn Sie jedoch genügend Zeit haben, teilen Sie die neue Festplatte auf 1tb / 1tb, sichern Sie die alte Festplatte auf einer der Partitionen, hängen Sie die leere 1tb an, wenn es funktioniert, hängen Sie die 2. Partition an.
OneOfOne