Сбой диска BTRFS RAID5 во время балансировки

663
Oliver R.

Если вы нажали на ссылку на эту тему: Спасибо!

У меня есть следующие настройки:

6x 500 ГБ жестких дисков
1x 32 ГБ NVME-SSD (Intel Optane)

Я использовал bcache для настройки SSD в качестве устройства кэширования, а все остальные шесть дисков являются резервными. После всего, что было на месте, я отформатировал шесть HHD с помощью btrfs в RAID5. Все работает, как и ожидалось, за последние 7 месяцев.

К настоящему времени у меня есть запасные жесткие диски емкостью 6x по 2 ТБ, и я хочу заменить старые диски емкостью 500 ГБ один на один. Итак, я начал с первого, удалив его из btrfs. Это работало нормально, у меня не было проблем там. После этого я аккуратно отсоединил пустой диск от bcache, все еще все в порядке, поэтому я удалил его. Вот командные строки для этого:

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 

После этого я установил один из дисков объемом 2 ТБ, подключил его к bcache и добавил в рейд. Следующим шагом было перенести данные на новый диск. Пожалуйста, смотрите командные строки:

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/  

Весы работали нормально, пока на новый диск не было записано ~ 164 ГБ, это примерно 50% данных, которые будут сбалансированы. Внезапно появляются ошибки записи на диск. Raid постепенно стал непригодным для использования (во время балансировки у меня было 3 виртуальных машины RAID). Я думаю, что это работало в течение некоторого времени из-за SSD, совершающего записи. В какой-то момент балансировка прекратилась, и я смог убить только виртуальные машины. Я проверил операции ввода-вывода на дисках, и SSD выкладывал постоянные 1,2 ГБ / с чтения. Я думаю, что bcache каким-то образом доставил данные в btrfs, и его там отклонили и запросили снова, но это всего лишь предположение. В любом случае, я перезагружал хост и физически отключил сломанный диск и установил новый. Я также создал на нем устройство резервного копирования bcache и выполнил следующую команду для замены неисправного диска:

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

Файловая система должна быть смонтирована для чтения / записи, чтобы эта команда работала. Сейчас он делает свою работу, но очень медленно, около 3,5 МБ / с. К сожалению, системный журнал сообщает о многих из этих сообщений:

... 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) .... 

Если я пытаюсь прочитать файл из файловой системы, команда output завершается неудачно с простой ошибкой ввода-вывода, а в системном журнале отображаются записи, подобные этой:

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

Пока все хорошо (или плохо). Пока что на замену у 4,3% ушло около 6 часов. Не было ошибок чтения или записи для процедуры замены («btrfs replace status»). Я отпущу это до конца. До выхода из строя первого диска объемом 2 ТБ было записано 164 ГБ данных в соответствии с «шоу файловой системы btrfs». Если я проверю объем данных, записанных на новый диск, то 4,3% представляют около 82 ГБ (согласно / proc / diskstats). Я не знаю, как это интерпретировать, но все равно.

А теперь, наконец, мои вопросы: если команда замены завершается успешно, что мне делать дальше. Скраб? Баланс? Еще одна резервная копия? ;-) Видите ли вы что-нибудь, что я сделал неправильно в этой процедуре? Означают ли предупреждения и ошибки, о которых сообщают btrfs, что данные потеряны? :-(

Вот некоторая дополнительная информация ( отредактированная ):

$ 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" 

Еще раз спасибо за чтение и, надеюсь, ваши комментарии / ответы!

РЕДАКТИРОВАТЬ 2

«Замена устройства» только что завершена. Это было рядом с отметкой 9%, я думаю, что этот процент совпадает с записанным объемом данных на диске: 164 ГиБ из общего размера 1,82 ТиБ. Таким образом, 100% будет означать полную замену 2 ТБ. Итак, вот некоторые дополнительные выводы:

$ 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 

Чтение файлов все еще прерывается с ошибками ввода / вывода, syslog по-прежнему показывает:

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 

Поэтому я думаю, что самое безобидное действие - это очистка только для чтения, я только начал процесс. Ошибки и предупреждения заполняют системный журнал:

$ 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 

Мои вопросы все еще остаются: что мне делать дальше. Скраб? Баланс? Я сделал что-то совершенно не так? Как интерпретировать ошибки и предупреждения из скраба только для чтения, может ли btrfs их исправить?

1
Ваша настройка скрывает аппаратные ошибки за кешем. Это не очень хорошая идея. Если вам действительно нужно * block * кэширование, вы должны разместить его перед RAID-массивом. Btrfs в настоящее время не может этого сделать. Чтобы устранить проблемы с текущей настройкой, рассмотрите возможность переключения на сквозное кэширование. Daniel B 6 лет назад 5
Не могли бы вы упомянуть, какую * ix OS и версию вы используете? Пожалуйста, нажмите на `edit` выше слева, чтобы отредактировать оригинальное сообщение. K7AAY 6 лет назад 0
Если это BTRFS, то это либо Linux, либо ReactOS (да, у них действительно есть драйвер). Предполагая, что это Linux с учетом контекста, в этом случае следует также добавить выходные данные из `uname -a` и` btrfs --version`. Austin Hemmelgarn 6 лет назад 0
Спасибо за ваши комментарии. Я добавил всю запрашиваемую информацию в последний блок поста. Процесс завершается на отметке 13 часов, выполнено 8,7%; 160 ГиБ написано Oliver R. 6 лет назад 0
РЕДАКТИРОВАТЬ 2 - замена устройства завершена - см. Основной пост Oliver R. 6 лет назад 0

0 ответов на вопрос

Похожие вопросы