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
?
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.
D'un tableau RAID1 de deux disques, un /dev/sda
qui est défectueux et un autre /dev/sdc
connu-bien:
/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.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.
-o degraded
mode.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.Sudo btrfs device remove missing /mountpoint
Pour supprimer le périphérique défectueux "manquant".Sudo btrfs balance start -mconvert=dup /mountpoint
Pour restaurer la redondance des métadonnées. Cela prend quelques minutes sur mon système.single
mode, avec toutes les redondances supprimées.