Le disque BTRFS RAID5 a échoué lors de l'équilibrage

1

Si vous avez cliqué sur le lien vers ce sujet: Merci!

J'ai la configuration suivante:

6x disques durs de 500
Go 1x NVME-SSD de 32 Go (Intel Optane)

J'ai utilisé bcache pour configurer le disque SSD en tant que périphérique de mise en cache et les six autres lecteurs sont des périphériques de sauvegarde. Après tout ce qui était en place, j'ai formaté les six HHD avec btrfs en RAID5. Tout fonctionne comme prévu depuis 7 mois maintenant.

A présent, j'ai une réserve de 6 disques durs de 2 To et je souhaite remplacer les anciens disques de 500 Go, l'un après l'autre. J'ai donc commencé avec le premier en le supprimant du fichier btrfs. Cela a bien fonctionné, je n'ai eu aucun problème là-bas. Après cela, j'ai détaché proprement le disque vide de bcache, mais tout va bien, je l'ai donc retiré. Voici les lignes de commande pour cela:

sudo btrfs device delete /dev/bcacheX /media/raid
cat /sys/block/bcacheX/bcache/state
cat /sys/block/bcacheX/bcache/dirty_data
sudo sh -c "echo 1 > /sys/block/bcacheX/bcache/detach"
cat /sys/block/bcacheX/bcache/state

Après cela, j'ai installé l'un des disques de 2 To, je l'ai attaché à bcache et je l'ai ajouté au raid. L'étape suivante consistait à équilibrer les données sur le nouveau disque. S'il vous plaît voir les lignes de commande:

sudo make-bcache -B /dev/sdY
sudo sh -c "echo '60a63f7c-2e68-4503-9f25-71b6b00e47b2' > /sys/block/bcacheY/bcache/attach"
sudo sh -c "echo writeback > /sys/block/bcacheY/bcache/cache_mode"
sudo btrfs device add /dev/bcacheY /media/raid
sudo btrfs fi ba start /media/raid/ 

La balance a fonctionné jusqu'à environ 164 Go sur le nouveau disque, ce qui représente environ 50% des données à équilibrer. Soudain, des erreurs d’écriture sur le disque apparaissent. Le Raid est lentement devenu inutilisable (j'utilisais 3 VM du RAID tout en effectuant un équilibrage). Je pense que cela a fonctionné pendant un certain temps en raison du SSD commettant les écritures. À un moment donné, l'équilibrage s'est arrêté et je n'ai pu tuer que les ordinateurs virtuels. J'ai vérifié les E / S sur les disques et le disque SSD a craché une lecture constante de 1,2 Go / s. Je pense que le bcache a en quelque sorte livré des données au btrfs et il a été rejeté là-bas et redemandé, mais ce n'est qu'une supposition. Quoi qu'il en soit, j'ai fini par réinitialiser l'hôte et j'ai déconnecté physiquement le disque cassé et mis un nouveau disque en place. J'ai également créé un périphérique de support bcache sur celui-ci et émis la commande suivante pour remplacer le disque défectueux:

sudo btrfs replace start -r 7 /dev/bcache5 /media/raid

Le système de fichiers doit être monté en lecture / écriture pour que cette commande fonctionne. Il fait maintenant son travail, mais très lentement, à environ 3,5 Mo / s. Malheureusement, le syslog rapporte beaucoup de ces messages:

...
scrub_missing_raid56_worker: 62 callbacks suppressed
BTRFS error (device bcache0): failed to rebuild valid logical 4929143865344 for dev (null)
...
BTRFS error (device bcache0): failed to rebuild valid logical 4932249866240 for dev (null)
scrub_missing_raid56_worker: 1 callbacks suppressed
BTRFS error (device bcache0): failed to rebuild valid logical 4933254250496 for dev (null)
....

Si j'essaie de lire un fichier à partir du système de fichiers, la commande de sortie échoue avec une simple erreur d'entrée-sortie et le syslog affiche des entrées similaires à celles-ci:

BTRFS warning (device bcache0): csum failed root 5 ino 1143 off 7274496 csum 0xccccf554 expected csum 0x6340b527 mirror 2

Jusqu'ici, tout va bien (ou mal). Il a fallu environ 6 heures pour 4,3% du remplacement jusqu'à présent. Aucune erreur de lecture ou d'écriture n'a été signalée pour la procédure de remplacement ("btrfs replace status"). Je le laisserai à sa fin jusqu'à la fin. Avant que le premier disque de 2 To ne tombe en panne, 164 Go de données ont été écrites conformément à "btrfs filesystem show". Si je vérifie la quantité de données écrites sur le nouveau lecteur, les 4,3% représentent environ 82 Go (selon / proc / diskstats). Je ne sais pas comment interpréter cela, mais de toute façon.

Et maintenant enfin mes questions: Si la commande de remplacement se termine avec succès, que dois-je faire ensuite. Un gommage? Un équilibre? Une autre sauvegarde? ;-) Voyez-vous quelque chose que j'ai mal fait dans cette procédure? Les avertissements et les erreurs signalés par btrfs signifient-ils que les données sont perdues? :-(

Voici quelques informations supplémentaires ( éditées ):

$ sudo btrfs fi sh
Total devices 7 FS bytes used 1.56TiB
Label: none  uuid: 9f765025-5354-47e4-afcc-a601b2a52703
devid    0 size 1.82TiB used 164.03GiB path /dev/bcache5
devid    1 size 465.76GiB used 360.03GiB path /dev/bcache4
devid    3 size 465.76GiB used 360.00GiB path /dev/bcache3
devid    4 size 465.76GiB used 359.03GiB path /dev/bcache1
devid    5 size 465.76GiB used 360.00GiB path /dev/bcache0
devid    6 size 465.76GiB used 360.03GiB path /dev/bcache2
*** Some devices missing

$ sudo btrfs dev stats /media/raid/
[/dev/bcache5].write_io_errs    0
[/dev/bcache5].read_io_errs     0
[/dev/bcache5].flush_io_errs    0
[/dev/bcache5].corruption_errs  0
[/dev/bcache5].generation_errs  0
[/dev/bcache4].write_io_errs    0
[/dev/bcache4].read_io_errs     0
[/dev/bcache4].flush_io_errs    0
[/dev/bcache4].corruption_errs  0
[/dev/bcache4].generation_errs  0
[/dev/bcache3].write_io_errs    0
[/dev/bcache3].read_io_errs     0
[/dev/bcache3].flush_io_errs    0
[/dev/bcache3].corruption_errs  0
[/dev/bcache3].generation_errs  0
[/dev/bcache1].write_io_errs    0
[/dev/bcache1].read_io_errs     0
[/dev/bcache1].flush_io_errs    0
[/dev/bcache1].corruption_errs  0
[/dev/bcache1].generation_errs  0
[/dev/bcache0].write_io_errs    0
[/dev/bcache0].read_io_errs     0
[/dev/bcache0].flush_io_errs    0
[/dev/bcache0].corruption_errs  0
[/dev/bcache0].generation_errs  0
[/dev/bcache2].write_io_errs    0
[/dev/bcache2].read_io_errs     0
[/dev/bcache2].flush_io_errs    0
[/dev/bcache2].corruption_errs  0
[/dev/bcache2].generation_errs  0
[devid:7].write_io_errs    9525186
[devid:7].read_io_errs     10136573
[devid:7].flush_io_errs    143
[devid:7].corruption_errs  0
[devid:7].generation_errs  0

$ sudo btrfs fi df /media/raid/
Data, RAID5: total=1.56TiB, used=1.55TiB
System, RAID1: total=64.00MiB, used=128.00KiB
Metadata, RAID1: total=4.00GiB, used=2.48GiB
GlobalReserve, single: total=512.00MiB, used=0.00B

$ uname -a
Linux hostname 4.15.0-36-generic #39-Ubuntu SMP Mon Sep 24 16:19:09 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux

$ btrfs --version
btrfs-progs v4.15.1

$ cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=18.04
DISTRIB_CODENAME=bionic
DISTRIB_DESCRIPTION="Ubuntu 18.04.1 LTS"

Merci encore pour votre lecture et j'espère que vos commentaires / réponses!

EDIT 2

Le 'remplacement de l'appareil' vient de se terminer. Il était proche de la barre des 9%. Je pense que ce pourcentage correspond à la quantité de données écrite sur le lecteur: 164 Go sur une taille totale de 1,82 Tio. Donc, 100% signifierait un remplaçant complet de 2 To. Donc voici quelques sorties supplémentaires:

$ btrfs replace status -1 /media/raid/
Started on 30.Oct 08:16:53, finished on 30.Oct 21:05:22, 0 write errs, 0 uncorr. read errs

$ sudo btrfs fi sh
Label: none  uuid: 9f765025-5354-47e4-afcc-a601b2a52703
Total devices 6 FS bytes used 1.56TiB
devid    1 size 465.76GiB used 360.03GiB path /dev/bcache4
devid    3 size 465.76GiB used 360.00GiB path /dev/bcache3
devid    4 size 465.76GiB used 359.03GiB path /dev/bcache1
devid    5 size 465.76GiB used 360.00GiB path /dev/bcache0
devid    6 size 465.76GiB used 360.03GiB path /dev/bcache2
devid    7 size 1.82TiB used 164.03GiB path /dev/bcache5

La lecture des fichiers est toujours interrompue avec des erreurs d'E / S, syslog affiche toujours:

BTRFS warning (device bcache0): csum failed root 5 ino 1143 off 7274496 csum 0x98f94189 expected csum 0x6340b527 mirror 1
BTRFS warning (device bcache0): csum failed root 5 ino 1143 off 7274496 csum 0xccccf554 expected csum 0x6340b527 mirror 2

Donc, je pense que l'action la plus inoffensive est un nettoyage en lecture seule, je viens de commencer le processus. Les erreurs et les avertissements inondent le syslog:

$ sudo btrfs scrub start -BdrR /media/raid # -B no backgroud, -d statistics per device, -r read-only, -R raw statistics per device
$ tail -f /var/log/syslog
BTRFS error (device bcache0): bdev /dev/bcache5 errs: wr 0, rd 0, flush 0, corrupt 2848, gen 0
BTRFS warning (device bcache0): checksum error at logical 4590109331456 on dev /dev/bcache5, physical 2954104832, root 5, inode 418, offset 1030803456, length 4096, links 1 (path: VMs/Virtualbox/Windows 10 Imaging VMs/Windows 10 Imaging/Windows 10 Imaging-fixed.vdi)
BTRFS error (device bcache0): bdev /dev/bcache5 errs: wr 0, rd 0, flush 0, corrupt 2849, gen 0
BTRFS warning (device bcache0): checksum error at logical 4590108811264 on dev /dev/bcache5, physical 2953977856, root 5, inode 1533, offset 93051236352, length 4096, links 1 (path: VMs/Virtualbox/vmrbreb/vmrbreb-fixed.vdi)
BTRFS error (device bcache0): bdev /dev/bcache5 errs: wr 0, rd 0, flush 0, corrupt 2850, gen 0
BTRFS warning (device bcache0): checksum error at logical 4590109335552 on dev /dev/bcache5, physical 2954108928, root 5, inode 418, offset 1030807552, length 4096, links 1 (path: VMs/Virtualbox/Windows 10 Imaging VMs/Windows 10 Imaging/Windows 10 Imaging-fixed.vdi)
BTRFS error (device bcache0): bdev /dev/bcache5 errs: wr 0, rd 0, flush 0, corrupt 2851, gen 0
BTRFS warning (device bcache0): checksum error at logical 4590108815360 on dev /dev/bcache5, physical 2953981952, root 5, inode 621, offset 11864412160, length 4096, links 1 (path: VMs/Virtualbox/Win102016_Alter-Firefox/Win102016_Alter-Firefox-disk1.vdi)
BTRFS error (device bcache0): bdev /dev/bcache5 errs: wr 0, rd 0, flush 0, corrupt 2852, gen 0
BTRFS warning (device bcache0): checksum error at logical 4590109339648 on dev /dev/bcache5, physical 2954113024, root 5, inode 418, offset 1030811648, length 4096, links 1 (path: VMs/Virtualbox/Windows 10 Imaging VMs/Windows 10 Imaging/Windows 10 Imaging-fixed.vdi)
BTRFS error (device bcache0): bdev /dev/bcache5 errs: wr 0, rd 0, flush 0, corrupt 2853, gen 0
BTRFS warning (device bcache0): checksum error at logical 4590109343744 on dev /dev/bcache5, physical 2954117120, root 5, inode 418, offset 1030815744, length 4096, links 1 (path: VMs/Virtualbox/Windows 10 Imaging VMs/Windows 10 Imaging

Mes questions restent toujours: que dois-je faire ensuite. Un gommage? Un équilibre? Ai-je fait quelque chose de complètement faux? Comment interpréter les erreurs et les avertissements issus du nettoyage en lecture seule, est-ce que btrfs peut les corriger?

Oliver R.
la source
5
Votre configuration cache les erreurs matérielles derrière le cache. Ce n'est pas une bonne idée. Si vous avez vraiment besoin de la mise en cache de blocs , placez-la devant la matrice RAID. Btrfs ne peut actuellement pas faire cela. Pour atténuer les problèmes liés à la configuration actuelle, envisagez de passer à la mise en cache à écriture directe.
Daniel B
Souhaitez-vous mentionner le système d'exploitation * ix et la version que vous utilisez? S'il vous plaît cliquer sur editci-dessus à gauche pour éditer le post original.
K7AAY
Si c'est BTRFS, c'est soit Linux soit ReactOS (oui, ils ont en fait un pilote). En supposant que c'est Linux étant donné le contexte, auquel cas la sortie de uname -aet btrfs --versiondevrait également être ajoutée.
Austin Hemmelgarn
Merci pour vos commentaires. J'ai ajouté toutes les informations demandées dans le dernier bloc de l'article. Le processus se termine 13 heures plus tard, 8,7% étant terminé; 160 Gio écrit
Oliver R.
EDIT 2 - remplacement de l’appareil terminé - voir poste principal
Oliver R.