Замена жесткого диска: BTRFS с RAID 6

На тестовой машине я установил четыре жестких диска, и они настроены как 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 ответ

Решение

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

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

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

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

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

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

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, так что это тоже сработало, как и ожидалось. Все было хорошо после скраба.

Другие вопросы по тегам