Linux BTRFS-преобразование в сингл с неисправного диска

небольшое количество Предыстория:

у меня есть небольшая файловая система, на которой я храню различные фильмы и телешоу, которые используются для моей установки HTPC. Это было первоначально настроено, используя btrfs, на внешнем диске 1 ТБ WD.

позже я решил приобрести другой диск, чтобы дать этой файловой системе возможности зеркального отображения RAID1. Этот диск Сигейт Барракуда (2ТБ, семейство Барракуда 7200.14). К сожалению, это не был хороший выбор дисков. Диск начал разработка большого количества ошибок чтения в ближайшее время, хотя BTRFS смог их исправить.

в последнее время количество ошибок чтения с этого накопителя резко возросло, а его состояние постоянно ухудшается. BTRFS начинает аварийно завершать работу:

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

Я хотел бы удалить неисправный диск из массива RAID1, возвращаясь к избыточности на одном диске. К сожалению, как представляется, отсутствует документация о том, как это сделать.

Я знаю, что можно запустить следование:

sudo btrfs balance start -dconvert=single /media

для преобразования профиля данных в single режим, но я не уверен, где будут размещены данные. Как один из накопителей не в состоянии, я хотел бы быть в состоянии обеспечить то, что Btrfs не покорно стереть все данные на хороший диск, и поставить одну копию на плохой диск, я хотела бы, чтобы просто действовать, как будто другой диск Никогда не существовало (как, конвертировать обратно в мой старый сетап)

это не работает:

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

что я делать? Помощь будет принята с благодарностью.

TL; DR: запуск с 1 диска в BTRFS single, добавил еще один диск, сделал это RAID1, другой диск теперь erroring, как я могу вернуть только один диск (особенно удачной) с single?

14
задан eeeeeta
08.11.2022 20:13 Количество просмотров материала 3660
Распечатать страницу

2 ответа

хорошо, я понял это с помощью это Trello ссылка. В случае, если кто-то еще хочет сделать это, вот процедура.

процедура

из массива RAID1, состоящего из двух дисков, один /dev/sda который неисправен и другое /dev/sdc удачной:

  1. отключить автоматическое монтирование этого массива в /etc/fstab,перезагрузка. В принципе, мы хотим, чтобы btrfs забыл, что этот массив существует, так как есть ошибка, когда он все равно попытается использовать его дисков, если они отключены.
  2. теперь, когда массив размонтирован, выполните:

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

    замена sda с неисправным именем устройства. Это приводит к тому, что диск вращается вниз (это следует проверить в dmesg) и становится недоступным для ядра.

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

  3. монтировать массив, с -o degraded режим.
  4. начните операцию перебалансировки с sudo btrfs balance start -f -mconvert=single -dconvert=single /mountpoint. Это реорганизует экстенты на хорошо известном диске, преобразуя их в single (non-RAID). это займет почти сутки, в зависимости от скорости вашего диска и размер массива. (у меня было ~700 гигабайт и перебалансировано со скоростью 1 1 гигабайт в минуту) к счастью, эта операция может быть приостановлена и будет держать массив в Сети, пока это происходит.
  5. как только это будет сделано, вы можете выдать sudo btrfs device remove missing /mountpoint удалить "отсутствует" неисправное устройство.
  6. начните вторую балансировку с sudo btrfs balance start -mconvert=dup /mountpoint для восстановления избыточности метаданных. Это займет несколько минут в моей системе.
  7. ты молодец! Теперь Ваш массив single режим, с удалением избыточности.
  8. выньте неисправный диск наружу и ударьте его молотком.

устранение неисправностей

  • помогите, btrfs попытался записать на мой неисправный диск, ошибся, и заставил его только для чтения!
    • вы выполнили Шаг 1 и перезагрузились, прежде чем продолжить? Вполне вероятно, что btrfs все еще думает, что диск, который вы развернули, присутствует. Перезагрузка заставит ее забыть все ошибки, и позволит вам продолжить.
9
отвечен eeeeeta 2022-11-10 04:01

Спасибо за ваш пост. У меня была идея, что я могу протестировать raid, вытащить диск из моего отсека hotswap, использовать другой диск, а затем снова вставить raid-диск. Оглядываясь назад, это была плохая идея, и теперь мне нужен мой hotswap bay.

вот что я нашел. Как root:

# sudo btrfs fi show
Label: 'disk'  uuid: 12817aeb-d303-4815-8bba-a3440e36c62c
Total devices 2 FS bytes used 803.10GiB
    devid    1 size 931.51GiB used 805.03GiB path /dev/sda1
    devid    2 size 931.51GiB used 805.03GiB path /dev/sdb1

обратите внимание на devid, указанный для каждого диска. Man for brtrfs balance привел меня к опции devid, взял пару попыток разобраться как работают фильтры (изначально пробовал devid= / dev / sdb1). Так ваша первая попытка будет выглядеть примерно так.

# btrfs balance start -dconvert=single,devid=2 -mconvert=single,devid=2 /mnt

что дало мне ошибку.

ERROR: error during balancing '/media/.media': Invalid argument
There may be more info in syslog - try dmesg | tail    

вот ошибка из dmesg:

BTRFS error (device sdb1): balance will reduce metadata integrity, use force if you want this

Итак, это финал, который работал:

# btrfs balance start -f -dconvert=single,devid=2 -mconvert=single,devid=2 /mnt

надеюсь, это поможет кому-то еще.

5
отвечен P.G. 2022-11-10 06:18

Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]

Ваш ответ

Опубликуйте как Гость или авторизуйтесь

Имя
Вверх