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