1

на тестовой машине я установил четыре жестких диска, и они настроены как RAID6. Для теста я удалил один из дисков (/dev/sdk), когда том был смонтирован, и на него были записаны данные. Насколько я понимаю, это сработало хорошо. Некоторые ошибки ввода / вывода были записаны в / var / log / syslog, но том продолжал работать. К сожалению, команда "btrfs fi sh" не показала пропущенные диски. Поэтому я перемонтировал громкость в деградированном режиме: «mount -t btrfs /dev/ sdx1 -o remount, rw, degraded, noatime / mnt». Таким образом, рассматриваемый диск был пропущен. Затем я снова подключил жесткий диск (опять же, разумеется, /dev/sdk) и начал балансировку: «btrfs filesystem balance start / mnt». Теперь объем выглядит так:

$ btrfs fi sh
Label: none  uuid: 28410e37-77c1-4c01-8075-0d5068d9ffc2
    Total devices 4 FS bytes used 257.05GiB
    devid    1 size 465.76GiB used 262.03GiB path /dev/sdi1
    devid    2 size 465.76GiB used 262.00GiB path /dev/sdj1
    devid    3 size 465.76GiB used 261.03GiB path /dev/sdh1
    devid    4 size 465.76GiB used 0.00 path /dev/sdk1

Как мне начать заново /dev /sdk1? Запуск "$ btrfs fi ba start /mnt" не помогает. Я пытался удалить жесткий диск, но

$ btrfs de de /dev/sdk1 /mnt/
ERROR: error removing the device '/dev/sdk1' - unable to go below four devices on raid6 

Замена также не работает таким образом:

$ btrfs replace start -f -r /dev/sdk1 /dev/sdk1 /mnt
/dev/sdk1 is mounted

Есть ли другие способы заменить / перезапустить жесткий диск, а затем преобразовать в RAID 5?

1 ответ1

1

Я повторил этот тест на тестовой системе с ядром 4.3.

Как и вы, я создал массив BTRFS RAID-6 с 4 дисками:

# mkfs.btrfs -m raid6 -d raid6 /dev/sdb /dev/sdc /dev/sdd /dev/sde

Затем я подключил его и начал записывать данные.

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

Что еще более важно, BTRFS увеличил количество ошибок (dev stats devs) для ошибок записи и сброса. Так что, если бы это была производственная система, она была бы отслежена, такой нападающий, как этот, сгенерировал бы электронное письмо с уведомлением:

MAILTO=admin@myserver.com
@hourly /sbin/btrfs device stats /mnt/tmp | grep -vE ' 0$'

Тогда, я не побежал баланс , но скраб, потому что я хотел Btrfs сканировать всю файловую систему и исправить все ошибки, что это именно то , что делает скраб.

# btrfs scrub start -B /mnt/tmp

Наконец, я сбрасываю счетчик ошибок BTRFS обратно на ноль (это остановит предупреждающие сообщения, если эта файловая система отслеживается):

# btrfs device stats -z /mnt/tmp

Другой скраб не нашел больше ошибок.

И файл, который я писал во время теста, правильный. Его сумма MD5 соответствует оригиналу.

Конечно, каждый тест отличается. Если 3-му диску (sdd) назначено новое имя, например, sdf , вы можете заменить его на себя, эффективно обновив его:

# btrfs replace start 3 /dev/sdf /mnt/tmp

Кстати, вы упомянули удаление диска. Вам не нужно этого делать, это только смешает ваши делиды и будет неэффективным. Команда замены была как всегда.

Btw. в одном случае BTRFS вызывал сбой тестовой системы, пока я пытался прочитать поврежденную файловую систему перед запуском скраба. В конце концов, в отличие от большинства частей этой файловой системы, BTRFS RAID-5/RAID-6 по-прежнему считается экспериментальным (хотя он постоянно совершенствуется, поэтому это утверждение может быть устаревшим, это относится к 4.3). Но это был только один раз, я повторил тест, и тогда он не рухнул. Кроме того, это говорит нам о том, что, хотя BTRFS RAID-6 может аварийно завершить работу, пока он еще экспериментален, он защищает ваши данные, и очистка надежно сообщает вам, если есть ошибки, поскольку использует проверенные контрольные суммы для проверки файлов.

Я также повторил тест, вызывая ошибки на 2 дисках. Это RAID-6, так что это тоже сработало, как и ожидалось. Все было хорошо после скраба.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .