Как прервать программную рейд ресинхронизацию?


50

Я хочу прервать текущую операцию повторной синхронизации в программном рейде Debian Squeeze. (Это обычная запланированная повторная синхронизация при сравнении. Массив raid в этом случае остается чистым. Не путайте это с перестройкой после сбоя диска и его замены.)

Как остановить запланированную операцию повторной синхронизации во время ее работы? Другой массив raid - «reync pending», потому что все они проверяются в один и тот же день (воскресная ночь) один за другим. Я хочу полностью прекратить это воскресное ночное воссоздание.

[Редактировать: sudo kill -9 1010это не останавливает, 1010 - это PID процесса md2_resync]

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

[Edit2: я сделал, чтобы повторная синхронизация прошла очень медленно, чтобы она больше не мешала:

sudo sysctl -w dev.raid.speed_limit_max=1000

взято с http://www.cyberciti.biz/tips/linux-raid-increase-resync-rebuild-speed.html

В течение ночи я верну ему высокое значение, чтобы повторная синхронизация могла завершиться.

Этот обходной путь подходит для большинства ситуаций, тем не менее, было бы интересно узнать, возможно ли то, что я спросил. Например, кажется, что невозможно увеличить массив во время повторной синхронизации или повторной синхронизации «в ожидании»]


Я не думаю, что у меня есть шары, чтобы отменить повторную синхронизацию. Я боюсь, что это никогда не может начаться снова.
Том О'Коннор

1
@Tom: это только обычная повторная синхронизация, которая проверяет каждое воскресенье, если все совпадает. если он остановлен (например, при выключении машины), он продолжится при следующей загрузке.
Adam5

О хорошо Это нормально
Том О'Коннор

Ответы:


48

Если ваш массив md0тогдаecho "idle" > /sys/block/md0/md/sync_action

«idle» остановит активную повторную синхронизацию / восстановление и т. д. Нет никакой гарантии, что другая повторная синхронизация / восстановление может не запуститься автоматически снова, хотя для ее запуска потребуется какое-то событие.

http://www.mjmwired.net/kernel/Documentation/md.txt#477


Я мог бы обновить текстовый файл после изменения его разрешений, но содержимое файла изменилось обратно на «resync» сзади в том же экземпляре. И повторная синхронизация продолжается в другом массиве (который ранее "ожидал"). Когда я записываю «холостой» в файл другого массива, он снова переставляется, но никогда не останавливается.
Adam5

2
Если у вас несколько рейдов: echo idle | sudo tee / sys / block / md * / md / sync_action
Оле

На самом деле «холостой» только приостанавливает проверку. Следующая проверка будет продолжена в /sys/block/md0/md/sync_min’. To reset this write 0` к этому файлу.
rudimeier

33

Я хотел замедлить или приостановить процесс повторной синхронизации, чтобы сохранить некоторые операции ввода-вывода для резервного копирования некоторых данных на другой компьютер. Эта тема помогла мне, но я нашел другое решение.

На моем Debian Lenny:

  • echo "idle" > /sys/block/md0/md/sync_action работает, но процесс повторной синхронизации немедленно перезапускается.

  • checkarray -x --all : работает, но результат тот же: процесс повторной синхронизации немедленно перезапускается.

Поэтому я использую этот метод: echo 0 > /proc/sys/dev/raid/speed_limit_max


1
Интересный подход. Я обнаружил, что вам также нужно уменьшить значение в speed_limit_min.
Диомидис Спинеллис

1
Мне также нужно было установить speed_limit_min0, чтобы полностью приостановить повторную синхронизацию.
njahnke

12

Вы можете отменить повторную синхронизацию массива, используя следующую последовательность команд (как root):

echo frozen > /sys/block/md0/md/sync_action
echo none > /sys/block/md0/md/resync_start
echo idle > /sys/block/md0/md/sync_action

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

(Кредит, где кредит должен: нашел это заклинание в этой теме .)


8

Как упоминалось выше, в системах Debian / Ubuntu /etc/cron.d/mdadmсценарий вызывает /usr/share/mdadm/checkarrayсценарий, чтобы инициировать повторную синхронизацию.

Этот скрипт имеет опцию для отмены всех запущенных проверок синхронизации:

/usr/share/mdadm/checkarray -x --all

3

Не уверен в том, как отменить повторную синхронизацию, но расписание контролируется /etc/cron.d/mdadmв системах Debian / Ubuntu.

Сценарий /usr/share/mdadm/checkarrayможет пролить некоторый свет на другую часть вашего вопроса, так как это то, что называется Cron.


3

Если ваше устройство md - md0, и вы хотите остановить повторную синхронизацию, напишите:

echo "idle" > /sys/block/md0/md/sync_action

3

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

Моя система: CentOS 6.5 mdadm v3.3.2

Постоянные проверки каждую неделю, хотел приостановить один из них, RAID чист, проверка была вызвана через скрипт /etc/cron.d/raid-check, который запускается еженедельно.

Чтобы отменить проверку, вы используете функцию --misc --action. Предполагая, что RAID-устройством является / dev / md0, и это всего лишь еженедельная проверка целостности, а не сбой устройства, вы должны были бы от имени root:

mdadm --misc --action = idle / dev / md0

Кроме того, чтобы начать проверку согласованности

mdadm --misc --action = check / dev / md0


2
echo "idle" > /sys/block/md0/md/sync_action

Не работает, когда / sys / block / md * / md / sync_action имеет значение «resync» (в отличие от состояния «check» или «repair». Вы можете отобразить «idle» в файле sync_action, однако это не влияет на Прогресс. Этот файл документации ядра здесь неправильно утверждает, что он будет работать, но он никогда не работал для меня:

«idle» остановит активную повторную синхронизацию / восстановление и т. д. Нет никакой гарантии, что другая повторная синхронизация / восстановление может не запуститься автоматически снова, хотя для ее запуска потребуется какое-то событие.


1
Тем не менее, вы можете повлиять на скорость «повторной синхронизации» с помощью / sys / block / md * / md / sync_speed_max в этом состоянии. Я не уверен, почему документация неверна, может быть, никто не знает
Брайан

Пожалуйста, уделите минуту времени на изучение синтаксиса разметки Stack Exchange ( meta.serverfault.com/editing-help )
Свен

0

Я знаю, что это пост за 4 года, но вы также можете сделать это (предполагая, что md0 в качестве массива и sdb4 в качестве ресинсингующего «диска»):

    mdadm /dev/md0 --fail /dev/sdb4 && mdadm /dev/md0 --remove /dev/sdb4

Эта команда делает вид, что sdb4 является неисправным диском, и, следовательно, удаляет его из массива, останавливая повторную синхронизацию. Если во время действия resync-stop ошибки не было, эта команда также удалит sdb4 из массива md0. Если произошла какая-либо ошибка, диск остается в сбойном состоянии, но остается в массиве.

Если вы где-то отказали диск mdadm, вы установите его логически не удалось. Если массив был чистым (не поврежден), то диск остается согласованным и может быть добавлен с помощью параметра --add << disk >> --assume-clean без каких-либо опасений. Если после его отсоединения было какое-либо действие (например, resync, rebuild или даже запись), то --assume-clean не выполнится и сразу же начнет действие reync.

Изменение raid.speed_limit_minи, raid.speed_limit_maxкак-то, плохая идея, потому что это влияет не только на скорость повторной синхронизации / перестроения, но и на нормальную скорость работы, и, вероятно, вы потеряете большую производительность, полученную при использовании RAID-массивов.


5
Я думаю, что это плохая идея удалить здоровый диск из RAID. В большинстве случаев это может не вызывать каких-либо проблем, но каждый раз, когда вы делаете это, существует риск потери или повреждения данных.
Касперд

1
Никогда не делай этого. Если вы добавляете диск с --assume-cleanработающей системой, и на оставшемся диске происходят какие-либо записи , вы напрашиваетесь на неприятности.
sanmai
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.