Як перервати повторну синхронізацію програмного забезпечення?


50

Я хочу перервати запущену операцію пересинхронізації на рейді програмного забезпечення для стискання Debian. (Це регулярне планове порівняння ресинхронізації. Масив рейду все ще чистий у такому випадку. Не плутайте це з відновленням після того, як диск вийшов з ладу і був замінений.)

Як зупинити цю заплановану операцію пересинхронізації під час її запуску? Інший рейдовий масив - "перезавантаження в очікуванні", тому що всі вони перевіряються в один і той же день (в неділю вночі) один за одним. Я хочу повної зупинки цієї недільної ночі ресинсингу.

[Редагувати: 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: це лише звичайний пересигнал, який перевіряє щонеділі, чи все відповідає. якщо вона зупинена (наприклад, після вимкнення машини), вона продовжується при наступному завантаженні.
Адам5

О, добре. Тоді все нормально
Том О'Коннор

Відповіді:


48

Якщо масив , md0тоecho "idle" > /sys/block/md0/md/sync_action

"в режимі очікування" зупинить активне пересинхронізацію / відновлення тощо. Немає гарантії, що інше повторне синхронізація / відновлення не може бути автоматично запущене знову, хоча для його запуску знадобиться якась подія.

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


Я міг би оновити текстовий файл після зміни його дозволів, але вміст файла змінено назад на "пересинхронізацію" ззаду в тому ж екземплярі. І відновлення триває в іншому масиві (який раніше був "в очікуванні"). Коли я записую "простою" у файл іншого масиву, він знову поміняється, але ніколи не зупиняється.
Адам5

2
Якщо у вас кілька рейдів: відлуння простою | sudo tee / sys / block / md * / md / sync washing
Ole Tange

Насправді "бездіяльність" лише призупиняє перевірку. Наступна "перевірка" буде продовжена на /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.
Diomidis Spinellis

1
Також мені потрібно було встановити speed_limit_min0, щоб повністю призупинити пересинхронізацію.
njahnke

12

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

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, і це лише щотижнева перевірка узгодженості, а не збій пристрою, ви, як кореня:

mdadm --misc - реакція = простою / dev / md0

Так само для початку перевірки консистенції

mdadm --misc - реакція = перевірка / dev / md0


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

Не працює, коли / sys / block / md * / md / syncgery є "resync" (на відміну від того, якщо його стан є "check" або "repair". Ви можете відлучити "простою" у файлі синхронізації, однак це не впливає на Цей файл документації ядра тут неправильно стверджує, що він буде працювати, але він ніколи не працював для мене:

"в режимі очікування" зупинить активне пересинхронізацію / відновлення тощо. Немає гарантії, що інше повторне синхронізація / відновлення не може бути автоматично запущене знову, хоча для його запуску знадобиться якась подія.


1
Однак ви можете вплинути на швидкість "resync" за допомогою / sys / block / md * / md / sync_speed_max у цьому стані. Я не впевнений, чому документація невірна, можливо, ніхто не знає
Брайан

Будь ласка, знайдіть хвилину часу, щоб вивчити синтаксис розмітки стека Exchange ( meta.serverfault.com/editing-help )
Sven

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 без будь-якого страху. Якщо після її від'єднання була якась дія (наприклад, відновлення, відновлення або навіть запис), то --assume-clean пробалбі не вдасться і негайно розпочнеть дію повторної синхронізації.

Зміна raid.speed_limit_minі raid.speed_limit_maxякось погана ідея, оскільки вона впливає не тільки на швидкість відновлення / відновлення, але і на нормальні швидкості роботи, і, ймовірно, ви втратите велику продуктивність, отриману за допомогою RAID-масивів.


5
Я думаю, що це погана ідея видалити здоровий диск із RAID. Більшість випадків це може не спричинити жодних проблем, але кожен раз, коли ви це робите, існує ризик втрати даних або пошкодження даних.
kasperd

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