btrfs kann nicht bereitgestellt werden, da der Vorgang zum Ersetzen von Geräten ausgeführt wird

530
Taryck Bensiali

Ich habe Daten von einer neuen Festplatte auf eine neue übertragen. Allerdings hat der neue IronWolf 12Tb eines Seagate Probleme (möglicherweise zu empfindlich für die Ausgangsspannung). Der Ersetzungsvorgang stoppt trotzdem mit einer Nachricht, die ich nicht beachtet habe.

Ich musste also einen Neustart durchführen, um die Seagate-Festplatte zu entfernen. Ich führe eine Btrfs-Prüfung auf der ursprünglichen Festplatte durch, die ohne Fehler endet, stoppe den Server, entferne de 12 TB-Festplatte und starte neu ...

Bei einem Boot-Fehler, da mein Btrfs-Gerät nicht geladen wird mit:

mount: wrong fs type, bad option, bad superblock on /dev/sdd1, missing codepage or helper program, or other error  In some cases useful info is found in syslog - try dmesg | tail or so. 

Also führe ich (wie Sie es tun sollten): dmesg | Schwanz und bekommen:

[ 2833.182505] BTRFS info (device sdd1): disk space caching is enabled [ 2833.182515] BTRFS info (device sdd1): has skinny extents [ 2833.321953] BTRFS warning (device sdd1): cannot mount because device replace operation is ongoing and [ 2833.321962] BTRFS warning (device sdd1): tgtdev (devid 0) is missing, need to run 'btrfs dev scan'? [ 2833.321969] BTRFS error (device sdd1): failed to init dev_replace: -5 [ 2833.339466] BTRFS: open_ctree failed 

Nun, ich stimme mit der Situation überein, jedoch erfordern die "btrfs replace cancel" einen Mount-Punkt. Und das System weigert sich zu montieren ... der Hund schaut aus seinem Schwanz.

usage: btrfs replace cancel <mount_point> 

Ich habe viele Suchen gemacht und keine praktikable Lösung gefunden. Ich habe nach "Ersetzen-Vorgang ist laufend" gesucht und habe hoffentlich eine Seite mit dem Quellcode von: dev-replace.c gefunden, wenn dieser Block gefunden wurde:

 /* * allow 'btrfs dev replace_cancel' if src/tgt device is * missing */ if (!dev_replace->srcdev && !btrfs_test_opt(dev_root, DEGRADED)) { ret = -EIO; pr_warn("btrfs: cannot mount because device replace operation is ongoing and\n" "srcdev (devid %llu) is missing, need to run 'btrfs dev scan'?\n", (unsigned long long)src_devid); } if (!dev_replace->tgtdev && !btrfs_test_opt(dev_root, DEGRADED)) { ret = -EIO; pr_warn("btrfs: cannot mount because device replace operation is ongoing and\n" "tgtdev (devid %llu) is missing, need to run btrfs dev scan?\n", (unsigned long long)BTRFS_DEV_REPLACE_DEVID); 

}

Nicht es ist ein kleiner Ratschlag, der der „offizielle“ Grund des Fehlers ist, dass das Btrfs Volumen abgebaut . Hoffentlich las ich diese Seite zur gleichen Zeit: Btrfs mit mehreren Geräten verwenden, bei denen ich las:

Ersetzen ausgefallener Geräte

Verwenden Sie btrfs replace

Wenn Sie ein Gerät haben, das gerade ausfällt oder in einem RAID-Array ausgefallen ist, sollten Sie den Befehl btrfs replace verwenden, anstatt ein neues Gerät hinzuzufügen und das ausgefallene zu entfernen. Dies ist eine neuere Technik, die beim Hinzufügen und Löschen von Geräten für mich nicht funktioniert hat. Es kann jedoch hilfreich sein, die Mailingliste des IRC-Kanals vor dem Wiederherstellen zu konsultieren.

Listen Sie zunächst die Geräte im Dateisystem auf. In diesem Beispiel haben wir ein fehlendes Gerät, das wir durch ein neues Laufwerk gleicher Größe ersetzen werden. In der folgenden Ausgabe sehen wir, dass die endgültige Gerätenummer (die fehlt) Gerät 6 ist:

enter code here  user@host:~$ sudo btrfs filesystem show Label: none uuid: 67b4821f-16e0-436d-b521-e4ab2c7d3ab7 Total devices 6 FS bytes used 5.47TiB devid 1 size 1.81TiB used 1.71TiB path /dev/sda3 devid 2 size 1.81TiB used 1.71TiB path /dev/sdb3 devid 3 size 1.82TiB used 1.72TiB path /dev/sdc1 devid 4 size 1.82TiB used 1.72TiB path /dev/sdd1 devid 5 size 2.73TiB used 2.62TiB path /dev/sde1 *** Some devices missing 

Dies ist nicht meine genaue Situation, da ich nicht "*** Einige Geräte fehlt" habe, aber es ist ziemlich nahe. Ich habe folgendes gelesen:

Wenn das Gerät vorhanden ist, ist es einfacher, die erforderliche numerische Geräte-ID zu ermitteln.

Bevor Sie das Gerät austauschen, müssen Sie das Array einhängen. Wenn Sie ein fehlendes Gerät haben, müssen Sie den folgenden Befehl verwenden:

sudo mount -o degraded /dev/sda1 /mnt 

Hier war es der Weg, ein degradiertes btrfs zu mounten, um einen unterbrochenen Ersetzungsvorgang abzubrechen.

0

1 Antwort auf die Frage

0
Taryck Bensiali

Hier also die vollständige Lösung:

[root@home disk]# mount /dev/sdd1 /store/backup_big_btrfs/ mount: wrong fs type, bad option, bad superblock on /dev/sdd1, missing codepage or helper program, or other error  In some cases useful info is found in syslog - try dmesg | tail or so. [root@home disk]# dmesg | tail [ 2833.182505] BTRFS info (device sdd1): disk space caching is enabled [ 2833.182515] BTRFS info (device sdd1): has skinny extents [ 2833.321953] BTRFS warning (device sdd1): cannot mount because device replace operation is ongoing and [ 2833.321962] BTRFS warning (device sdd1): tgtdev (devid 0) is missing, need to run 'btrfs dev scan'? [ 2833.321969] BTRFS error (device sdd1): failed to init dev_replace: -5 [ 2833.339466] BTRFS: open_ctree failed [root@home disk]# btrfs replace cancel btrfs replace cancel: too few arguments usage: btrfs replace cancel <mount_point>  Cancel a running device replace operation.  [root@home disk]# btrfs replace cancel /store/backup_big_btrfs ERROR: not a btrfs filesystem: /store/backup_big_btrfs [root@home disk]# mount -o degraded /dev/sdd1 /store/backup_big_btrfs/ [root@home disk]# btrfs replace cancel /store/backup_big_btrfs/ [root@home disk]# umount /store/backup_big_btrfs/ [root@home disk]# mount /dev/sdd1 /store/backup_big_btrfs/ 

Wenn Sie Btrfs aufgrund eines fehlgeschlagenen Ersetzungsvorgangs nicht bereitstellen können, gilt Folgendes:

  1. Überprüfen Sie Ihr Btrfs-Volume
  2. mounte es mit der Option -o degraded
  3. den Ersetzungsvorgang abbrechen
  4. mounten Sie den Btrfs-Datenträger
  5. montiere es ohne Option