web-dev-qa-db-fra.com

Linux BTRFS - Convertir en un seul avec un lecteur raté

Une petite quantité de backstory:

J'ai un système de fichiers multimédia sur lequel je stocke divers films et émissions de télévision utilisées pour mon configuration HTPC. Ceci a été configuré à l'origine, en utilisant btrfs, sur un lecteur externe de 1 To WD.

Plus tard, j'ai décidé d'acheter un autre lecteur, de donner à ce système de fichiers RAID1 Capacités de miroir1. Ce lecteur est un Seagate Barracuda (2 To, Barracuda 7200.14 Famille). Malheureusement, ce n'était pas un bon choix de route. Le lecteur a commencé à développer de grandes quantités d'erreurs de lecture sous peu, bien que BTRFS ait pu les corriger.

Récemment, la quantité d'erreurs de lecture de ce lecteur a épidé avec son état aggravant régulièrement. BTRFS commence maintenant à cracer:

kernel: RSP: 0018:ffff88005f0e7cc0  EFLAGS: 00010282
kernel: RIP: 0010:[<ffffffffa0081736>]  [<ffffffffa0081736>] btrfs_check_repairable+0xf6/0x100 [btrfs]
kernel: task: ffff88001b5c4740 ti: ffff88005f0e4000 task.ti: ffff88005f0e4000
kernel: Workqueue: btrfs-endio btrfs_endio_helper [btrfs]
kernel: CPU: 1 PID: 3136 Comm: kworker/u8:3 Tainted: G           O    4.5.3-1-Arch #1
kernel: invalid opcode: 0000 [#1] PREEMPT SMP 
kernel: kernel BUG at fs/btrfs/extent_io.c:2309!
kernel: ------------[ cut here ]------------
kernel: BTRFS info (device sdc1): csum failed ino 73072 extent 1531717287936 csum 3335082470 wanted 3200325796 mirror 0
kernel: ata3: EH complete
kernel: BTRFS error (device sdc1): bdev /dev/sda3 errs: wr 0, rd 18, flush 0, corrupt 0, gen 0
kernel: blk_update_request: I/O error, dev sda, sector 2991635296

Je voudrais supprimer le lecteur défectueux de la matrice RAID1, revenant à aucune redondance sur un seul lecteur. Malheureusement, il semble y avoir un manque de documentation sur la façon de faire cela.

Je suis conscient que l'on peut exécuter ce qui suit:

Sudo btrfs balance start -dconvert=single /media

pour convertir le profil de données en mode single, mais je ne suis pas sûr de l'endroit où les données seront placées. Comme l'un des lecteurs échoue, j'aimerais pouvoir m'assurer que BTRFS n'efface pas consciencieusement toutes les données sur le bon lecteur et placez une copie unique sur le mauvais lecteur - à la place, j'aimerais simplement agir comme si l'autre lecteur n'a jamais existé (comme dans, convertir à mon ancien configuration)

Cela ne fonctionne pas:

$ Sudo btrfs device delete /dev/sda3 /media
ERROR: error removing device '/dev/sda3': unable to go below two devices on raid1

Que dois-je faire? De l'aide serait grandement appréciée.

TL; DR: Commencé avec 1 lecteur dans BTRFS single, a ajouté un autre lecteur, l'a fait RAID1, autre lecteur est maintenant erroné, comment puis-je revenir à un seul lecteur (spécifiquement le bien connu) avec single?

12
eeeeeta

D'accord, je l'ai compris avec l'aide de ce lien Trello . Au cas où quelqu'un d'autre veut faire cela, voici la procédure.

Procédure

D'un tableau RAID1 de deux disques, un /dev/sda qui est défectueux et un autre /dev/sdc connu-bien:

  1. Désactiver le montage automatique de ce tableau dans /etc/fstab, Redémarrez . Fondamentalement, nous voulons que BTRF oublie que ce tableau existe, car il y a un bogue où il essaiera toujours d'utiliser l'un des lecteurs si elle est débranchée.
  2. Maintenant que votre tableau est démontré, exécutez:

    echo 1 | Sudo tee /sys/block/sda/device/delete

    remplacer sda avec le nom de périphérique défectueux. Cela entraîne la retournement du disque (vous devez vérifier cela dans DMESG) et devenir inaccessible au noyau.

    Alternativement : Prenez simplement le lecteur hors de l'ordinateur avant de démarrer! J'ai choisi de ne pas opter pour cette méthode, car ce qui précède fonctionne bien pour moi.

  3. Montez votre tableau, avec -o degraded mode.
  4. Commencez une opération de rééquilibrage avec Sudo btrfs balance start -f -mconvert=single -dconvert=single /mountpoint. Cela réorganisera les étendons sur le disque bien connu, la convertissant en single (non-raid). Cela prendra presque une journée à compléter, en fonction de la vitesse de votre lecteur et de votre taille de votre tableau. (la mienne avait ~ 700 Gib et rééquilibré à Un tarif de 1 morceau de 1Gib par minute) Heureusement, cette opération peut être en pause et conservera la matrice en ligne lorsqu'elle se produit.
  5. Une fois que cela est fait, vous pouvez émettre Sudo btrfs device remove missing /mountpoint Pour supprimer le périphérique défectueux "manquant".
  6. Commencer une seconde rééquilibre avec Sudo btrfs balance start -mconvert=dup /mountpoint Pour restaurer la redondance des métadonnées. Cela prend quelques minutes sur mon système.
  7. Vous avez terminé! Votre tableau est maintenant single mode, avec toutes les redondances supprimées.
  8. Prenez votre voiture défectueuse à l'extérieur et battez-la avec un marteau.

Dépannage

  • Aide, BTRFS a essayé d'écrire sur mon disque défectueux, erroné, et l'a forcé à readonner ! [.____]
    • Avez-vous suivi l'étape 1 et redémarrez avant de continuer? Il est probable que BTRFS pense toujours que le lecteur que vous avez tourné est présent. Le redémarrage fera que BTRF soit oublier des erreurs et vous permettra de continuer.
12
eeeeeta