Hallo,
vor etwa einem Jahr habe ich mit dem YaST Partitioner ein Btrfs-basiertes RAID1 erstellt. Dabei habe ich auch die Option zur Festplattenverschlüsselung aktiviert.
Nun lässt sich der RAID-Verbund plötzlich nicht mehr mit LUKS öffnen.
Warum jetzt aufeinmal sowas ?
Die Fehlermeldung für das RAID /dev/md/NAS lautet:
LUKS keyslot 4 is invalid.
Device /dev/md/NAS is not a valid LUKS device.
Auch sei anzumerken das keyslot 4 gar nicht genutzt wurde. Nur Keyslot 1 und 2 wurden gesetzt...
Der Output von `mdadm --detail` und `mdadm --examine` zeigt Folgendes:
nasserver:/home/admin # mdadm --detail /dev/md/NAS
/dev/md/NAS:
Version : 1.0
Creation Time : Mon May 22 06:00:38 2023
Raid Level : raid1
Array Size : 15625879360 (14.55 TiB 16.00 TB)
Used Dev Size : 15625879360 (14.55 TiB 16.00 TB)
Raid Devices : 3
Total Devices : 3
Persistence : Superblock is persistent
Intent Bitmap : Internal
Update Time : Wed Jul 31 01:48:24 2024
State : clean
Active Devices : 3
Working Devices : 3
Failed Devices : 0
Spare Devices : 0
Consistency Policy : bitmap
Name : any:NAS
UUID : bbf107f6:69f4d874:565b9db2:bd1a37b7
Events : 604873
Number Major Minor RaidDevice State
0 8 32 0 active sync /dev/sdc
1 8 0 1 active sync /dev/sda
2 8 16 2 active sync /dev/sdb
nasserver:/home/admin # mdadm --misc --examine --verbose /dev/sd[abc]
/dev/sda:
Magic : a92b4efc
Version : 1.0
Feature Map : 0x1
Array UUID : bbf107f6:69f4d874:565b9db2:bd1a37b7
Name : any:NAS
Creation Time : Mon May 22 06:00:38 2023
Raid Level : raid1
Raid Devices : 3
Avail Dev Size : 31251759016 sectors (14.55 TiB 16.00 TB)
Array Size : 15625879360 KiB (14.55 TiB 16.00 TB)
Used Dev Size : 31251758720 sectors (14.55 TiB 16.00 TB)
Super Offset : 31251759088 sectors
Unused Space : before=0 sectors, after=296 sectors
State : clean
Device UUID : e65eef70:fe0e7627:2a07bd6a:2ae8cd7c
Internal Bitmap : -72 sectors from superblock
Update Time : Wed Jul 31 01:48:24 2024
Bad Block Log : 512 entries available at offset -8 sectors
Checksum : d8035600 - correct
Events : 604873
Device Role : Active device 1
Array State : AAA ('A' == active, '.' == missing, 'R' == replacing)
/dev/sdb:
Magic : a92b4efc
Version : 1.0
Feature Map : 0x1
Array UUID : bbf107f6:69f4d874:565b9db2:bd1a37b7
Name : any:NAS
Creation Time : Mon May 22 06:00:38 2023
Raid Level : raid1
Raid Devices : 3
Avail Dev Size : 35156656040 sectors (16.37 TiB 18.00 TB)
Array Size : 15625879360 KiB (14.55 TiB 16.00 TB)
Used Dev Size : 31251758720 sectors (14.55 TiB 16.00 TB)
Super Offset : 35156656112 sectors
Unused Space : before=0 sectors, after=3904897320 sectors
State : clean
Device UUID : 4eefa158:7e983fa6:9b63c49b:636d4179
Internal Bitmap : -72 sectors from superblock
Update Time : Wed Jul 31 01:48:24 2024
Bad Block Log : 512 entries available at offset -8 sectors
Checksum : 3d7a5196 - correct
Events : 604873
Device Role : Active device 2
Array State : AAA ('A' == active, '.' == missing, 'R' == replacing)
/dev/sdc:
Magic : a92b4efc
Version : 1.0
Feature Map : 0x1
Array UUID : bbf107f6:69f4d874:565b9db2:bd1a37b7
Name : any:NAS
Creation Time : Mon May 22 06:00:38 2023
Raid Level : raid1
Raid Devices : 3
Avail Dev Size : 35156656040 sectors (16.37 TiB 18.00 TB)
Array Size : 15625879360 KiB (14.55 TiB 16.00 TB)
Used Dev Size : 31251758720 sectors (14.55 TiB 16.00 TB)
Super Offset : 35156656112 sectors
Unused Space : before=0 sectors, after=3904897320 sectors
State : clean
Device UUID : f187ec83:6ce4ae41:e5e52705:0f0fc0da
Internal Bitmap : -72 sectors from superblock
Update Time : Wed Jul 31 01:48:24 2024
Bad Block Log : 512 entries available at offset -8 sectors
Checksum : cf165a1a - correct
Events : 604873
Device Role : Active device 0
Array State : AAA ('A' == active, '.' == missing, 'R' == replacing)
Laut `mdadm` sind alle Prüfsummen in Ordnung. Ein SMART-Test mit den Herstellertools hat ebenfalls ergeben, dass alle Festplatten fehlerfrei sind. Daher gehe ich nicht von einem Hardwarefehler aus.
Ich habe System mit Snappy in einen alten Zustand versetzt, bei dem das RAID noch ohne Probleme funktionierte. Dies sorgte allerdings für keinen Unterschied. Daher gehe ich nicht von einen Fehler aus, welcher durch fehlerhaft installierter Software verursacht wurde.
Ich konnte feststellen, dass sich auf der Festplatte mit der Verwendungsnummer 2 (Device Role: Active device 2, aktuell `/dev/sdb`) am Anfang ein gültiger LUKS-Header befindet. Dieser wird auch erkannt, wenn die Festplatte direkt ohne `mdadm` angesprochen wird.
Daher habe ich mit `mdadm --create` einen neuen `mdadm` RAID-Verbund erstellt. Nun befindet sich die Festplatte mit dem LUKS-Header an erster Stelle. Der Pfad wurde von `/dev/sdX` auf `/dev/mapper/sdX` geändert, da ich ab diesem Zeitpunkt mit Overlays von `sdX` arbeite:
mdadm --create /dev/md/NAS --assume-clean --level=1 --metadata=1.0 --raid-devices=3 /dev/mapper/sdb /dev/mapper/sdc /dev/mapper/sda
mdadm: /dev/mapper/sdb appears to be part of a raid array:
level=raid1 devices=3 ctime=Mon May 22 06:00:38 2023
mdadm: /dev/mapper/sdc appears to be part of a raid array:
level=raid1 devices=3 ctime=Mon May 22 06:00:38 2023
mdadm: /dev/mapper/sda appears to be part of a raid array:
level=raid1 devices=3 ctime=Mon May 22 06:00:38 2023
mdadm: largest drive (/dev/mapper/sdb) exceeds size (15625879360K) by more than 1%
Continue creating array? y
Beim Erstellen wird die Fehlermeldung "largest drive exceeds size by more than 1%" angezeigt. Da jedoch keine tatsächliche Neuformatierung vorgenommen wird, sollte dies kein Problem darstellen. Oder sehe ich das falsch?
Jetzt lässt sich der RAID-Verbund wieder über LUKS einbinden.
Ein Test mit `btrfs check` ergibt, dass das Dateisystem fehlerhaft ist und nicht alle Prüfsummen gefunden werden. Auf die Daten selbst kann jedoch zugegriffen werden.:
btrfs check --check-data-csum /dev/mapper/data
Opening filesystem to check...
Checking filesystem on /dev/mapper/data
UUID: b7398a14-99e6-4245-b152-85d4a22e7155
[1/7] checking root items
[2/7] checking extents
[3/7] checking free space cache
[4/7] checking fs roots
root 259 inode 17447 errors 1000, some csum missing
root 7968 inode 17447 errors 1000, some csum missing
root 8540 inode 17447 errors 1000, some csum missing
root 10472 inode 17447 errors 1000, some csum missing
root 11035 inode 17447 errors 1000, some csum missing
root 12429 inode 17447 errors 1000, some csum missing
root 13718 inode 17447 errors 1000, some csum missing
root 14494 inode 17447 errors 1000, some csum missing
root 15513 inode 17447 errors 1000, some csum missing
root 17341 inode 17447 errors 1000, some csum missing
root 19777 inode 17447 errors 1000, some csum missing
root 19897 inode 17447 errors 1000, some csum missing
root 20018 inode 17447 errors 1000, some csum missing
root 20139 inode 17447 errors 1000, some csum missing
root 20260 inode 17447 errors 1000, some csum missing
root 20380 inode 17447 errors 1000, some csum missing
root 20501 inode 17447 errors 1000, some csum missing
root 20621 inode 17447 errors 1000, some csum missing
root 20743 inode 17447 errors 1000, some csum missing
root 20864 inode 17447 errors 1000, some csum missing
root 20869 inode 17447 errors 1000, some csum missing
root 20874 inode 17447 errors 1000, some csum missing
root 20879 inode 17447 errors 1000, some csum missing
root 20884 inode 17447 errors 1000, some csum missing
root 20889 inode 17447 errors 1000, some csum missing
root 20894 inode 17447 errors 1000, some csum missing
root 20899 inode 17447 errors 1000, some csum missing
root 20904 inode 17447 errors 1000, some csum missing
root 20909 inode 17447 errors 1000, some csum missing
root 20914 inode 17447 errors 1000, some csum missing
root 20919 inode 17447 errors 1000, some csum missing
root 20924 inode 17447 errors 1000, some csum missing
root 20929 inode 17447 errors 1000, some csum missing
root 20934 inode 17447 errors 1000, some csum missing
root 20939 inode 17447 errors 1000, some csum missing
root 20944 inode 17447 errors 1000, some csum missing
root 20949 inode 17447 errors 1000, some csum missing
root 20954 inode 17447 errors 1000, some csum missing
root 20959 inode 17447 errors 1000, some csum missing
root 20964 inode 17447 errors 1000, some csum missing
root 20969 inode 17447 errors 1000, some csum missing
ERROR: errors found in fs roots
found 4455135825920 bytes used, error(s) found
total csum bytes: 4337800852
total tree bytes: 12935102464
total fs tree bytes: 4029333504
total extent tree bytes: 3621240832
btree space waste bytes: 2327492901
file data blocks allocated: 444362249580544
referenced 10789058260992
Was bedeutet dabei "errors 1000" ? Ist das die Anzahl der Fehler ?
Und waren alle Blöcke von Btrfs, welche über csums verfügen frei von fehlern?
Jetzt habe ich folgende Fragen:
- Sollte ich den aktuellen Ansatz verfolgen und die Dateisystemfehler in Btrfs mit `btrfs fix` reparieren lassen? Wenn nicht, wie sieht ein besserer Ansatz aus?
- Ich verstehe noch nicht ganz, warum auf Blockgeräteebene `mdadm` verwendet wird. Eigentlich sollte doch Btrfs das RAID managen. Oder wird nach der LUKS-Verschlüsselung ein weiteres RAID-System genutzt, diesmal gemanagt über Btrfs? Müsste Btrfs nicht bewusst sein, welche physischen Blockgeräte unter der LUKS-Verschlüsselungsebene existieren?
- Was passiert, wenn die Festplatte, die den LUKS-Header enthält, ausfällt? Bei einem RAID1 sollte der Ausfall einer Festplatte möglich sein, ohne dass Daten verloren gehen. Oder befindet sich der LUKS-Header noch irgendwo auf einer anderen Festplatte? Ich habe jetzt auch schon ein Backup des LUKS-Headers erstellt. Leider habe ich keine Ahnung, wie dieser wiederhergestellt werden kann, falls die besagte Platte ausfallen sollte.
Vielen Dank schon mal im Voraus für die Beantwortung meiner Fragen.
Mein System:
NAME="openSUSE Leap"
VERSION="15.6" ID="opensuse-leap"
ID_LIKE="suse opensuse"
VERSION_ID="15.6"
PRETTY_NAME="openSUSE Leap 15.6"
ANSI_COLOR="0;32"
CPE_NAME="cpe:/o:opensuse:leap:15.6"