ubuntuusers.de

Hinweis: Dies ist ein statischer Snapshot unseres Wikis vom 25. März 2013 und kann daher nicht bearbeitet werden. Der aktuelle Artikel ist unter wiki.ubuntuusers.de zu finden.

Installieren auf Btrfs-Dateisystem

Achtung!

Das Btrfs-Dateisystem befindet sich noch in der Entwicklungsphase und ist daher nicht für den produktiven Einsatz gedacht. Außerdem können GRUB und GRUB 2 bis Ubuntu 10.10 nicht mit btrfs umgehen. Erst ab Ubuntu 11.10 ist es uneingeschränkt möglich, von einem Btrfs-Dateisystem zu booten, jedoch gibt es immer noch Probleme mit GRUB 2-Funktionen, die ein Schreiben auf den Datenträger erfordern. Siehe dazu die Hinweise u.a. unter GRUB 2/Skripte

Dieser Artikel wurde für die folgenden Ubuntu-Versionen getestet:

Artikel für fortgeschrittene Anwender

Dieser Artikel erfordert mehr Erfahrung im Umgang mit Linux und ist daher nur für fortgeschrittene Benutzer gedacht.

Zum Verständnis dieses Artikels sind folgende Seiten hilfreich:

Hinweis:

Die nachfolgende Beschreibung basiert auf den btrfs-tools der Version 0.19 von 2010 und ist für ältere Ubuntu-Versionen nur als Information anwendbar. Um den aktuellen Befehlsumfang zu btrfs zu erhalten (Optionen, Ergänzungen), sollte man den jeweiligen Befehl im Terminal [1] ohne Option (entspricht der Option --help) abfragen - die Manpages sind teilweise fehlerhaft bzw. Hinweise fehlen ganz! Eine aktuelle Version der btrfs-tools steht unter den Links bereit.

btrfs_logo.png

Installation auf Btrfs

Dieser Artikel befasst sich mit der Installation auf einem Btrfs-Dateisystem und verweist auf jeweilige Besonderheiten, die man beachten sollte - soweit diese den Autoren bekannt sind bzw. erwähnenswert eingestuft wurden.

Eine dieser Besonderheiten ist, dass bei einer Installation gleich die Unterlaufwerke (Subvolumes) für das Rootverzeichnis mit @ und für das Homeverzeichnis mit @home angelegt werden. Damit kann man dann auf einfache Art entsprechende Schnappschüsse (Quasi-Backups) anlegen.

Im separaten Artikel Befehle für das Btrfs-Dateisystem sind alle Befehle aufgelistet und deren Anwendung beschrieben, die für den Einsatz und die Überprüfung eines Btrfs-Dateisystems verfügbar sind.

Die Installation wird wie bei allen anderen Installationen ausgeführt, entweder über:

Experten-Info:

Man sollte beachten, dass eine Installation von GRUB 2 nur unter besonderen Bedingungen in einen Partitionsbereich (PBR) möglich ist. Will man den bestehenden MBR nicht antasten, muss ein anderer Bootloader / Bootmanager benutzt werden, um das System zu starten. Dann sind entsprechende Vorbereitungen zu treffen. Diese sind hinsichtlich einem Btrfs-Dateisystem noch zu erweitern - siehe die ergänzenden Hinweise zu Externer GRUB_2.

Btrfs Vorbereitung

Will man ein Betriebssystem mit Ubuntu bzw. eines der Derivate bootfähig mit einem Btrfs-Dateisystem auf einem Rechner installieren, sollte dieses vorab vorbereitet werden. Eine zusätzliche Installation (Multiboot), die von einem anderen Linux aus aufgerufen werden soll (via configfile oder Vergleichbarem), kann ggf. ohne weitere Vorbereitung normal ausgeführt werden. Siehe dazu auch die Ausführungen unter Zusätzliche Maßnahmen. Dazu muss und darf dann auch kein PBR gesetzt werden!

Partitionierung

Zur Vorbereitung einer bootfähigen Installation auf einem Btrfs-Dateisystem, sollten in jedem Fall die Festplatte(n) vorab den Wünschen / Bedürfnissen entsprechend vorbereitet werden. Diese Partitionierung kann man am Desktop eines Livesystemes oder mit anderen Partitionierungstools, z.B. PartedMagic ausführen. Dabei ist es unwichtig, mit welchem Typus das Dateisystem vorbereitet wird. Man sollte nur darauf achten, dass bei der ersten Partition ein nicht belegter Freiraum entsteht - die aktuellen Partitionierungswerkzeuge lassen diesen für die erste Partition in der Regel automatisch frei - trotzdem hinschauen!

Diese Vorbereitung wird empfohlen, weil die beiden integrierten Installer erst ab Precise Pangolin die notwendigen Parameter für eine Installation des MBR (ausreichender Freiraum für die Imagedateien von GRUB 2) berücksichtigen, andererseits nicht alle Parameter anbieten (z.B. um Metadaten zu konfigurieren).

Weitergehende Informationen zur Aufbereitung von Datenträgern, insbesondere bei GUID, siehe auch unter GRUB 2 Grundlagen

Vergleich Ergebnisse

Nachfolgend das Ergebnis für eine Partitionierung mit Installer alter Art:

   Gerät  boot.     Anfang        Ende     Blöcke   Id  System
/dev/sdc1              62    10566659     5283299   83  Linux
/dev/sdc2        10566660    15650907     2542124   83  Linux
....

Und hier das vergleichbare Ergebnis mit GParted bzw. Installer neuer Art:

   Gerät  boot.     Anfang        Ende     Blöcke   Id  System
/dev/sdc1            2048    10565631     5281792   83  Linux
/dev/sdc2        10566660    15650907     2542124   83  Linux
....

Insbesondere sei hier darauf hingewiesen, dass andere Partitionstabellen als der Standard (= MSDOS) ohnehin nur mit den Werkzeugen für eine Partitionierung erstellt werden können - als Beispiel das Ergebnis für eine "GUID"-Formatierung:

   Gerät  boot.     Anfang        Ende     Blöcke   Id  System
/dev/sdc1               1    15663103     7831551+  ee  GPT

Btrfs einrichten

Das nachfolgende Werkzeug ist in der Regel auf den Installationsmedien enthalten

  • btrfs-tools

Wiki/Vorlagen/Installbutton/button.png mit apturl

Paketliste zum Kopieren:

sudo apt-get install btrfs-tools 

sudo aptitude install btrfs-tools 

und enthält alle Programme zum Einrichten und Arbeiten mit einem Btrfs-Dateisystem.

Nachdem man die Partitionierung für die Installation und Einteilung abgeschlossen hat (Root-Partition, SWAP und ggf. getrennte Home- bzw. Datenpartition), kann man diese mit einem Btrfs-Dateisystem versehen. Dazu werden die nachfolgend beschriebenen Befehle ausgeführt. Bei der späteren, eigentlichen Installation muss man darauf achten, dass die so eingerichteten Partitionen nicht mehr formatiert werden sollen! Die diesbezüglichen Warnhinweise bei der Installation kann man ignorieren!

Der mkfs.btrfs Befehl

Hinweis:

Der Befehl mkfs.btrfs kann keine Partition erstellen, sondern nur mit einem Btrfs-Dateisystem formatieren. Zum eigentlichen Erstellen einer Partition benutzt man die allgemein bekannten grafischen Werkzeuge für eine Partitionierung oder verwendet im Terminal [1] z.B. den Befehl cfdisk [3]. Die in den nachfolgenden Beispielen verwendeten Begriffe und sonstige Angaben sind dem eigenen System sinngemäß anzupassen.

Eine Information über den Befehl erhält man mit der Eingabe in das Terminal [1] von:

mkfs.btrfs 

Die Ausgabe enthält eine Übersicht zu den Optionen:

Optionen mkfs.btrfs

Hinweis:

Die folgenden Vorgaben hinsichtlich der Optionen -A bzw. -b betreffen nur interne Daten innerhalb vom festgelegten Rahmen der Partition. Diese Einstellungen werden nur im Regelbetrieb bei der Belegung der Partition berücksichtigt!

Mögliche Optionen für das Formatieren eines Btrfs-Dateisystemes, einzusetzen vor der Bestimmung von einem oder mehrerer Laufwerke, sind:

Optionen zum Formatieren eines Btrfs-Dateisystems
-A
--alloc-start
Einen nicht zugewiesenen Bereich zwischen dem Start der Partition (nach einer normalen Partitionierung) und dem Start der eigentlichen Datenablage in Bytes bestimmen (Integerzahl mit Faktor: g= GB, m= MB, k= KB).
-b
--byte-count
Größe des Laufwerkes, die Angabe erfolgt als Integerzahl mit Faktor: g= GB, m= MB, k= KB
-d
--data
Datenprofil -> raid0, raid1, raid10 or single (siehe auch folgenden Hinweis)
-m
--metadata
Metadatenprofile, Werte wie bei (-d) Datenprofil
-l
--leafsize
Größe btree leaves -> Default = Seitengröße
-n
--nodesize
Größe der btree nodes -> Default = Seitengröße
-s
--sectorsize
minimale Größe der Sektoren in Byte -> Default = 4096
-L
--label
Dem Laufwerke eine Bezeichnung zuordnen. -> "HD_NAME"

Experten-Info:

Die Option -d single (= keine Redundanz) sollte man nur mit Bedacht wählen - denn defekte Metadaten bedeuten unlesbares Laufwerk! Die Standardwerte der Optionen -l, -n und -s sollte man nur in begründeten Fällen setzen.

Formatierung Partition

Eine normale Formatierung kann man mit den bekannten Werkzeugen für eine Partitionierung ausführen oder man gibt in das Terminal [1] ein:

sudo mkfs.btrfs /dev/sda1 

Die angegebene Partition wird mit einem Btrfs-Dateisystem mit den Vorgabewerten versehen und löscht dabei alle Daten auf dieser Partition. Soll dabei die Option -L "HD_NAME" benutzt werden, muss dieses gleich mit eingegeben werden. Ein selektives Nachsetzen von Optionen, z.B. von

  • -L "HD_NAME"

ist zur Zeit (mit den Standard-btrfs-tools) nicht möglich und führt zu einem erneuten Formatieren mit Datenverlust.

Formatierung RAID-Verbund

Für die Formatierung eines Btrfs-RAID-Verbundes mit einer Bezeichnung gibt man (beispielhaft) im Terminal [1] ein:

sudo mkfs.btrfs -m raid1 -d raid1 -L "BTRFS_RAID" /dev/sda1 /dev/sdb1 

Bei der eigentlichen Installation wird dann nur eines der Laufwerke aus dem Btrfs-Raid-Verbund herangezogen / bestimmt. Die Information zur erfolgreichen Erstellung fragt man ab mit der Eingabe in ein Terminal [1] von:

sudo blkid 
/dev/sdb1: LABEL="BTRFS_RAID" UUID="2f613613-85b4-46cf-bbbe-90a1748f7753" UUID_SUB="e88dd65c-f471-415a-827b-2fc47359ba2d" TYPE="btrfs" 
/dev/sda1: LABEL="BTRFS_RAID" UUID="2f613613-85b4-46cf-bbbe-90a1748f7753" UUID_SUB="80eb4ebe-9e95-4052-8162-dbc2a48f3899" TYPE="btrfs"

Zu beachten ist, dass auch bei einem Btrfs-RAID-Verbund für die Partitionen die gleiche UUID - jedoch je Partition eine unterschiedliche UUID_SUB vergeben wurde. In die /etc/fstab wird nur einmal die gemeinsame UUID eingetragen - das Dateisystem ordnet das schon richtig zusammen. Nachfolgend ein beispielhafter Eintrag für die Root-Partition eines Btrfs-RAID-Verbundes in der /etc/fstab:

UUID=2f613613-85b4-46cf-bbbe-90a1748f7753 / btrfs  defaults,subvol=@,compress	0   1

Hinweis:

Es darf die Option errors=remount -ro bei einem Btrfs-Dateisystem nicht benutzt werden!

Formatierung überprüfen

Nach Abschluss der Formatierung und bevor man an die eigentliche Installation geht, kann und sollte man die Partitionen überprüfen - dazu dient der Befehl:

sudo btrfs filesystem show 

Dann werden alle Laufwerke angezeigt, unabhängig von Mount-Status. Für alle ohne Btrfs-Dateisystem erhält man für ein einzelnes Btrfs-Laufwerk folgende (beispielhaften) Informationen:

failed to read /dev/sde
failed to read /dev/sdd

Für ein einzelnes Laufwerk mit einem Btrfs-Dateisystem folgende (beispielhaften) Informationen:

Label: 'HD_NAME'  uuid: ed1545d8-dc26-415c-b82b-e00d7f85d4c1
	Total devices 1 FS bytes used 58.71MB
	devid    1 size 2.00GB used 445.31MB path /dev/sda1

Für einen Btrfs-RAID-Verbund folgende (beispielhaften) Informationen:

Label: 'BTRFS_RAID'  uuid: 2f613613-85b4-46cf-bbbe-90a1748f7753
	Total devices 2 FS bytes used 2.55GB
	devid    2 size 232.76GB used 2.76GB path /dev/sdc1
	devid    1 size 232.76GB used 2.76GB path /dev/sdb1

Experten-Info:

Ausgehend vom obigen Beispielen kann und sollte der Bootloader bei einem Btrfs-RAID-Verbund nacheinander jeweils in eine der Festplatten geschrieben werden (siehe auch Defektes Btrfs-Raid). Von Interesse sind dabei für einen Btrfs-RAID-Verbund die "Device ID's", nur die Festplatte mit der höchsten, hier devid = 2, sollte in einem Btrfs-RAID-Verbund als sogenannte erste Festplatte im BIOS zum Booten verwendet werden. Man sollte bei der Bestimmung im BIOS zur ersten Festplatte (von der gebootet werden soll) erst sicherstellen, dass das auch funktioniert. Bei der Wahl der "falschen" Festplatte wird der Suchvorgang nach den GRUB 2-Imagedateien abgebrochen und dann neu gebootet (Dauerschleife)!

Der Befehl mit einer Option

btrfs filesystem show /dev/sda1 

begrenzt die Informationen auf das gewählte Laufwerk. Mögliche Option sind dabei (entweder!)

  • Device, Eingabe = /dev/sda1

  • UUID, Eingabe = ed1545d8-dc26-415c-b82b-e00d7f85d4c1

  • Label, Eingabe= HD_NAME

Zusätzliche Maßnahmen

Nachfolgend sind einige Maßnahmen aufgeführt, die während der Installation standardmäßig nicht abgearbeitet werden, jedoch für den Betrieb von Interesse sein können. Teilweise ist ohne eine entsprechende Nachbearbeitung das Betriebssystem nicht uneingeschränkt nutzbar.

Daten komprimieren

Man kann einerseits sowohl am Speicherplatz etwas einsparen - wesentlicher ist jedoch die Zugriffszeit auf den Speicherbereich zu optimieren. Dazu dient die Mountoption compress. Da dieses bei der normalen Installation nicht berücksichtigt wird (und auch nur mit Risiken realisierbar ist), kann man das am frischen System nachholen. Als Beispiel wird hier davon ausgegangen, dass sich das Rootverzeichnis @ auf der Partition /dev/sda1 befindet.

Dazu startet man ein Live-System und gibt dort nacheinander in ein Terminal [1] ein:

sudo mount -o compress /dev/sda1 /mnt 

sudo btrfs subvolume create /mnt/@plus 

sudo chmod -R 755 /mnt/@plus 

sudo cp -apr /mnt/@/* /mnt/@plus/ 

Dieser Vorgang kann je nach Rechnerleistung etwas dauern!

sudo btrfs subvolume delete /mnt/@ 

sudo mv /mnt/@plus /mnt/@ 

Bei dieser Gelegenheit kann man auch gleich den ersten Schnappschuss (Bezeichnung beispielhaft) angelegen mit:

sudo btrfs subvolume snapshot /mnt/@ /mnt/root-datum 

Das System wird dann ausgehangen mit:

sudo umount /dev/sda1 

Aufgrund der geringen Datenmenge kann das beim Homeverzeichnis (@home) vernachlässigt werden - in die /etc/fstab sollte man die Mountoption compress aber auf jeden Fall einbringen!

fstab ergänzen

Während der Installation werden in der /etc/fstab bei den Optionen nur die Basisparameter eingetragen. Bei einer Installation auf einem Btrfs-Dateisystem sollte man zusätzlich in der /etc/fstab folgende Positionen überprüfen und soweit erforderlich nachtragen.

Solid State Drive

Die Option ssd und weitere:
Wurde die Installation auf ein Solid State Drive (Halbleiterlaufwerk) aufgebracht, so wird der entsprechende Eintrag (ssd) dafür unter den Optionen in die /etc/fstab eingebracht. Es können noch weitere, nützliche Parameter verwendet werden - siehe hierzu die Artikelserie SSD sowie diese speziellen Ausführungen.

Komprimierung

Die Option Mountoptionen compress:
Dieser Eintrag in die /etc/fstab muss manuell nachgetragen werden und sorgt für eine Komprimierung der Daten, wenn diese auf das Laufwerk geschrieben werden. Diese Arbeit wird beim Komprimieren bzw. Dekomprimieren von der CPU erledigt und ist Teil der Kernelroutinen. Diese Zusatzbelastung dürfte aber bei heutigen CPUs keine fühlbaren Auswirkungen mehr haben, bringt jedoch eine Einsparung beim Speicherplatz und beschleunigt das Auslesen erheblich. Beispielhaft für das Rootverzeichnis kann dann diese Ergänzung wie folgt aussehen:

UUID=2f613613-85b4-46cf-bbbe-90a1748f7753  /   btrfs  defaults,compress,subvol=@  0   1

Fehlerbehandlung Rootlaufwerk

Die Option errors=remount -ro
darf bei einem Btrfs-Dateisystem nicht benutzt werden! Dieses führt zu einem nicht betriebsfähigen System.

GRUB_2 einrichten

Da der GRUB 2-Bootloader in der Standardkonfiguration schreibende Zugriffe in der Regel auf

  • das Verzeichnis /@/boot/grub und die Datei grubenv

ausführt und dieses zu einem Fehlerhinweis während des Bootvorganges führt (nervig - aber nicht kritisch!), sollte man das durch ein Skript abstellen. Dazu kopiert man das folgende Skript als 01_no-saving ausführbar nach

  • /etc/grub.d/01_no-saving

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
#! /bin/sh
set -e

echo	"No-Saving Skript für Btrfs-Dateisystem eingefügt" >&2

cat << EOF
function recordfail {
  set recordfail=1
}
EOF

Auch das Schreiben, ausgelöst durch die Variable GRUB_SAVEDEFAULT=true in der Datei /etc/default/grub sollte man nicht benutzen - es kann ohnehin der jeweils ausgewählte Menüeintrag nicht auf einem Btrfs-Dateisystem abgespeichert werden.

Mit der Eingabe in ein Terminal [1] von:

sudo update-grub 

wird es dann in die Datei grub.cfg aufgenommen und der nächste Bootvorgang erfolgt dann ohne Unterbrechung.

Experten-Info:

Da diese Funktionen in der Reihenfolge bei der Deklarierung hinter den gleich lautenden aus dem Skript 00_header liegen, werden die aus dem Skript 01_no-saving und nicht die Originalfunktionen ausgeführt!

Externer GRUB_2

Da in der Regel bei einem Btrfs-Dateisystem während der Installation Unterlaufwerke (Subvolume = @, @home usw.) angelegt werden, kann dieses (sekundäre) Betriebssystem nicht so ohne Weiteres über die Funktion des Skriptes

  • /etc/grub.d/30_os-prober

aus einem anderen (primären) Betriebssystem heraus gefunden werden!

Man muss das primäre System (mit dem aktiven Bootloader) für den Zugriff auf das sekundäre System entsprechend einrichten.

Hinweis:

Der Bootloader des nachfolgend als primär bezeichneten Systems muss in der Lage sein, ein Btrfs-Dateisystem zu lesen. Im Verzeichnis /boot/grub sollte die Datei btrfs.mod vorhanden sein! Man kann dieses u.a. damit prüfen, dass man in der Befehlszeile des Bootloader-Menü insmod btrfs eingibt. Es darf dabei keine Fehlermeldung erfolgen.

GRUB_2 primäres System

Zum Einbinden des neuen Systems legt man sich das folgende Skript ausführbar im primären System ab unter:

  • /etc/grub.d/nn_btrfs-suchen

(wobei mit der Zahl (hier "nn") die Position im Grub-Menü festgelegt werden kann). Die Liste der zu ladenden Module (hier z.B. insmod gzio) sowie die der Kernel-Optionen (hier z.B. vt.handoff=7) muss man aus dem sekundären System einmalig in das Skript übernehmen.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#! /bin/bash
set -e

###FIXME die Bezeichnung "DEVICE" muss auf die reale Partition
# mit dem Btrfs-Dateisystem angepasst werden!

DEVICE="/dev/sda5";

AUSSTIEG () {
echo "Das Laufwerk ${DEVICE} ist kein \"Btrfs-Dateisystem\"!" >&2
exit 1
}

TEST_UUID=$( blkid ${DEVICE} | grep btrfs ) >/dev/null || AUSSTIEG;
UUID_BTRFS=$( blkid -c /dev/null -o value -s UUID ${DEVICE} );
 
echo "UUID = ${UUID_EINTRAG} vom Btrfs-Dateisystem gefunden" >&2
echo "Startmenü für ein Btrfs-Dateisystem eingefügt" >&2

cat << EOF
menuentry "Ubuntu (auf Btrfs-Dateisystem) starten" --class gnu-linux --class gnu --class os {
	recordfail
	insmod gzio
	insmod part_msdos
	insmod btrfs
	search --no-floppy --fs-uuid --set=root ${UUID_BTRFS}
	linux	/@/boot/vmlinuz root=UUID=${UUID_BTRFS} ro rootflags=subvol=@ ${GRUB_CMDLINE_LINUX_DEFAULT} ${GRUB_CMDLINE_LINUX} vt.handoff=7
	initrd	/@/boot/initrd.img
}
EOF

Mit der Eingabe in das Terminal [1] von:

sudo grub-mkconfig 

kann man die erfolgreiche Suche überprüfen und dann mit der Eingabe von:

sudo update-grub 

dieses in den aktiven Bootloader übernehmen.

GRUB_2 sekundäres System

Damit das primäre System immer einen aktuellen Kernel aufruft und somit die Daten unabhängig vom Zustand / Upgrade des sekundären Systems sind, wird im sekundären System das folgende Skript abgelegt unter:

  • /etc/grub.d/09_K-aktuell

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
#!/bin/sh
# Hiermit wird bei einem 'update-grub' der aktuelle Kernel
# intern auf eine einheitliche Form innerhalb '/boot' verlinkt.
set -e

SETZE_LINK () {
rm -f ${SUCHE_WAS};
list=$( for i in ${SUCHE_WAS}-* ; do
    echo -n "$i " ; done )
[ "x$list" = "x" ] && exit 
linux=$( version_find_latest $list )
ln -s "$linux" ${SUCHE_WAS} > /dev/null
echo "Link für $linux eingefügt"  >&2;
}

. /usr/lib/grub/grub-mkconfig_lib
cd /boot;

SUCHE_WAS="vmlinuz" && SETZE_LINK;
SUCHE_WAS="initrd.img" && SETZE_LINK;

Nach jedem

sudo update-grub 

und somit auch bei einem Kernel-Upgrade wird damit automatisch eine Verlinkung zum jeweils aktuellen Kernel hergestellt. Dieses ist erforderlich, weil der normale Link im Rootverzeichnis zum Zeitpunkt, wenn das Btrfs-Dateisystemes noch nicht konfiguriert (eingehängt) ist, ins Leere weist.

Probleme und Abhilfe

Achtung!

Falls es beim Booten in Zusammenhang mit dem Festplattentest zu einer Fehlermeldung kommt, sollte man überprüfen, ob es im Verzeichnis /sbin einen Link von fsck.btrfs nach btrfsck gibt und diesen ggf. im Terminal [1] anlegen mit:

sudo ln -s /sbin/btrfsck /sbin/fsck.btrfs 

fsck.btrfs

Experten-Info:

Eine Prüfung der Partitionen wird in der Regel beim Hochfahren des Systems aufgerufen, sofern in der /etc/fstab am Ende der Zeile zum Einbinden des Laufwerkes bzw. Unterlaufwerkes (Subvolume) die zweitletzte Prüfzahl ungleich 0 gesetzt ist. Man kann alle Prüfzahlen auf 0 0 setzen und verkürzt damit die Bootzeit je Eintrag erheblich. Dann sollte man aber in regelmäßigen Abständen eine Prüfung manuell bzw. mittels Cron mit dem Befehl btrfsck ausführen!

Der Befehl fsck.btrfs ist kein direkter Befehl aus den Paket btrfs-tools, sondern wird in der Regel bei der Installation im Verzeichnis /sbin als Link auf den Befehl btrfsck angelegt.

Damit wird sichergestellt, das mountall eine relevante Sequenz für die Prüfung des Dateisystemes beim Booten findet. mountall bildet aus fsck und dem Eintrag in der /etc/fstab btrfs als Angabe zum Dateisystem dann den Befehl fsck.btrfs

Defektes Btrfs-Raid

Wird in einem Btrfs-Dateisystem mit einem Btrfs-RAID-Verbund ein Teillaufwerk als defekt erkannt und das System will nicht mehr booten, so bieten sich zwei Varianten an:

  • Annahmen zum Beispiel

    • /dev/sda1 sei intakt

    • /dev/sdb1 sei defekt

    • /dev/sdc1 sei die Reserve

Sofern noch das Bootmenü erscheint, startet man mit der ersten Variante, ansonsten muss man gleich die zweite Variante benutzen.

  • Variante 1: Man drückt im Bootloader-Menü die Taste E

nachdem man die relevante Startzeile mit den Pfeiltasten / aufgerufen hat und ergänzt / editiert die folgenden Zeilen:

1
2
3
	set root='(hd1,msdos1)'
	search --no-floppy --fs-uuid --set=root 2f613613-85b4-46cf-bbbe-90a1748f7753
	linux	/@/boot/vmlinuz-3.2.0-7-generic root=UUID=2f613613-85b4-46cf-bbbe-90a1748f7753 ro rootflags=subvol=@ …
  • Die Zeile 1

Sofern erforderlich, muss man hier die Daten auf die noch intakte Festplatte ändern, ausgehend vom Beispiel also auf:

set root='(hd0,msdos1)'
  • Die Zeile 2

Musste Zeile 1 angepasst werden, dann deaktiviert man die Zeile 2 durch Voranstellen mit # (man beachte US-Tastatur = + 3 )

  • Die Zeile 3

Man editiert / ergänzt die Zeile 3 bei den rootflags um ,degraded:

ro rootflag=subvol=@,degraded ...

und startet dann den Bootprozess mit F10 .

  • Variante 2: Man startet ein Live-System und überprüft als erstes mit

sudo btrfsck /dev/sdXY 

nacheinander die relevanten Laufwerke dahingehend, welches keine Feheler aufweist und bindet das Laufwerk ohne Fehler, nachfolgend mit /dev/sda1 angenommen, ein. Weisen die Laufwerke keine Fehler auf, kann man versuchen, durch das Einsetzen von Schnappschüssen eine Lösung zu finden.

Hinweis:

Man kann erst einmal versuchen, das nicht funktionsfähige Laufwerk neu zu formatieren und dieses als Ersatz einzusetzen, so lange nicht andere, eindeutige Hinweise die Verwendung ausschließen.

Bei beiden Varianten gibt man am jeweiligen Desktop nacheinander in ein Terminal [1] ein:

sudo mount -o degraded /dev/sda1 /mnt 

sudo btrfs device add /dev/sdc1 /mnt 

sudo btrfs device delete missing /mnt 

Mit dem letzten Befehl wird gleichzeitig ein Abgleich der Daten vom ersten Laufwerk auf das neue Laufwerk eingeleitet - dieses kann je nach Umfang eine Zeit in Anspruch nehmen. Erst danach sollte man das defekte Laufwerk auch physisch aus dem Rechner entfernen.

Mit dem Befehl btrfs filesystem show überprüft man die korrekte Ausführung - es sollte jetzt das Laufwerk /dev/sdc1 mit einer neuen devid belegt und ein Teil des RAID-Verbundes sein. Man sollte noch (ggf. in einer chroot-Umgebung) den Zustand von GRUB_2 erneuern bzw. wieder herstellen.

Defekter Superblock

Für den Fall, dass beim Mounten einer Partition - hier beispielhaft für /dev/sdb1 - der Fehler

Bad superblock on /dev/sdb1 error

erscheint, so kann man diesen aufgrund der Struktur des Btrfs-Dateisystemes in den meisten Fällen reparieren - zumindest kann man damit die Daten retten.

Die nicht eingebundene Partition wird mit der Eingabe in ein Terminal [1]

sudo mke2fs -n /dev/sdb1 

nach den Sicherungen der Superblöcke abgefragt. Damit wird eine Liste generiert, die beispielhaft am Ende so aussehen kann:

Superblock-Sicherungskopien gespeichert in den Blöcken: 
	32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208, 
	4096000

Dieses sind die Adressen der Sicherungen des Superblocks, eine Adresse davon kann nun anstelle des fehlerhaften Superblocks im Terminal [1] eingesetzt werden mit:

sudo e2fsck -y -b <Adresse> /dev/sdb1 

(die Option -y unterbindet eine Interaktion) und setzt damit die neue Adresse von einem (nun hoffentlich noch lesbaren) Superblock. Danach sollte das Mounten dieser Partition wieder funktionieren.

ubuntuusers.local › WikiInstallieren auf Btrfs-Dateisystem