Yazılım baskını resync'i nasıl kesebilirim?


50

Debian sıkıştırmalı bir yazılım saldırısı üzerinde çalışan bir resync işlemini kesmek istiyorum. (Bu düzenli zamanlanmış karşılaştırma yeniden senkronizasyonudur. Baskın dizi böyle bir durumda hala temizdir. Bir disk başarısız olduktan ve değiştirildikten sonra bunu yeniden yapılanma ile karıştırmayın.)

Çalışırken bu zamanlanmış yeniden eşleme işlemi nasıl durdurulur? Bir başka baskın dizisi de "resync beklemede" dir, çünkü hepsi aynı gün (pazar gecesi) birbiri ardına kontrol edilir. Bu pazar gecesi yeniden canlandırmanın tamamen durmasını istiyorum.

[Düzen: sudo kill -9 1010durdurmuyor, 1010 md2_resync işleminin PID'si]

Resyncs ve remainig süresi arasındaki zaman aralıklarını bir sonrakine kadar nasıl kontrol edebileceğimi de bilmek istiyorum.

[Düzen2: Şimdi yaptığım şey resync'i çok yavaşlatmaktı, bu yüzden artık rahatsız etmiyor:

sudo sysctl -w dev.raid.speed_limit_max=1000

http://www.cyberciti.biz/tips/linux-raid-increase-resync-rebuild-speed.html adresinden alınmıştır.

Gece boyunca tekrar yüksek bir değere ayarlayacağım, böylece resync sonlandırılabilir.

Bu geçici çözüm çoğu durum için iyidir, yine de sorduğum şeyin mümkün olup olmadığını bilmek ilginç olurdu. Örneğin, bir diziyi büyütmek mümkün görünmüyor, bu sırada "beklemede" ifadesini yeniden veya yeniden çizerken]


Bir resync'i iptal edecek toplarım olduğunu sanmıyorum. Bir daha asla başlayamayacağından korkuyorum.
Tom O'Connor,

1
@ Tom: bu, her şey eşleşirse her pazar gününü kontrol eden normal bir yeniden senkronizasyondur. durdurulursa (örneğin, makineyi kapatarak) bir sonraki açılışta devam eder.
Adam5

Ah tamam. Sorun değil o zaman
Tom O'Connor,

Yanıtlar:


48

Eğer diziniz md0öyleyseecho "idle" > /sys/block/md0/md/sync_action

'boşta' etkin bir resync / kurtarma vs.'yi durduracak. Başka bir resync / kurtarma işleminin otomatik olarak tekrar başlatılamayacağının garantisi yoktur, ancak bunu tetiklemek için bir olay gerekebilir.

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


İzinlerini değiştirdikten sonra textfile dosyasını güncelleyebilirim ancak dosyanın içeriği aynı durumda arkadan "resync" olarak değiştirildi. Ve resync diğer dizide de devam ediyor (eskiden "beklemede"). Diğer dizinin dosyasına "boşta" yazdığımda yine değişiyor, fakat hiç durmuyor.
Adam5,

2
Birden fazla baskınınız varsa: echo idle | sudo tee / sys / blok / md * / md / sync_action
Ole Tange

Aslında "boşta" sadece kontrolü duraklatır. Bir sonraki "kontrol" /sys/block/md0/md/sync_min’. To reset this write bu dosyaya 0'dan devam eder .
rudimeier,

33

Başka bir bilgisayarda bazı şeyleri yedeklemek üzere G / Ç tasarrufu yapmak için yeniden başlatma işlemini yavaşlatmak veya duraklatmak istedim. Bu konu bana yardımcı oldu ama başka bir çözüm buldum.

Debian Lenny'mde:

  • echo "idle" > /sys/block/md0/md/sync_action çalışır ancak resync işlemi derhal yeniden başlatılır.

  • checkarray -x --all : çalışır, ancak aynı sonuç: resync işlemi hemen yeniden başlatılır.

Bu yüzden bu yöntemi kullanıyorum: echo 0 > /proc/sys/dev/raid/speed_limit_max


1
İlginç yaklaşım Ayrıca speed_limit_min içindeki değeri düşürmeniz gerektiğini de tespit ettim.
Diomidis Spinellis,

1
speed_limit_minResync'i tamamen duraklatmak için 0'a da ihtiyacım vardı .
njahnke

12

Aşağıdaki komut dizisini (root olarak) kullanarak devam eden dizi resync iptal edebilirsiniz:

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

Not Bu tutarsız bir durumda dizinizi bırakabilir . Dizinin iyi durumda olduğundan emin değilseniz bunu yapmayın ve senkronizasyonu daha sonra tekrar çalıştırın.

(Kredinin ödenmesi gereken kredi: bu ipucunu bu konuda bulduk .)


8

Yukarıda bahsedildiği gibi, Debian / Ubuntu sistemlerinde script, yeniden senkronizasyon kontrollerini başlatmak için /etc/cron.d/mdadmbetiği çağırır /usr/share/mdadm/checkarray.

Bu betiğin tüm çalışan senkronizasyon kontrollerini iptal etme seçeneği var:

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

3

Yeniden senkronizasyonun nasıl iptal edileceğinden emin değilsiniz ancak program /etc/cron.d/mdadmDebian / Ubuntu sistemleri tarafından kontrol ediliyor .

Senaryo /usr/share/mdadm/checkarray, sorunuzun diğer tarafına ışık tutabilir, çünkü buna cron denir.


3

Eğer md cihazınız md0 ise ve resync yazma işlemini durdurmak istiyorsanız:

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

3

Bunun için olası bir çözüm, ayrıntılara girmek için biraz aldı.

Sistemim: CentOS 6.5 mdadm v3.3.2

Her hafta sürekli kontroller, bunlardan birini duraklatmak istedim, RAID temiz, haftalık olarak çalıştırılan /etc/cron.d/raid-check betiği ile çek çağrıldı.

Kontrolü iptal etmek için, --misc --action işlevini kullanın. RAID cihazının / dev / md0 olduğunu ve bunun sadece bir haftalık arıza kontrolü olduğunu ve bir cihaz arızası olmadığını varsayarsak, root olarak:

mdadm - misc --action = boşta / dev / md0

Aynı şekilde, tutarlılık kontrolünü başlatmak için

mdadm - misc --action = çek / dev / md0


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

/ Sys / block / md * / md / sync_action "resync" olduğunda çalışmaz (durumunun "check" veya "repair" olmasından farklı olarak. Synle_action dosyasına "boşta" eko yazabilirsiniz, ancak . ilerleme Bu çekirdek belgeleri dosya burada yanlış işe belirtiyor, ancak benim için hiç çalışmamış:

'boşta' etkin bir resync / kurtarma vs.'yi durduracak. Başka bir resync / kurtarma işleminin otomatik olarak tekrar başlatılamayacağının garantisi yoktur, ancak bunu tetiklemek için bir olay gerekebilir.


1
Bununla birlikte, "resync" oranını / sys / block / md * / md / sync_speed_max ile bu durumda etkileyebilirsiniz. Belgelendirmenin neden yanlış olduğunu bilmiyorum, belki kimse bilmiyor
brian

Stack Exchange etiketleme sözdizimini öğrenmek için biraz zaman ayırın ( meta.serverfault.com/editing-help )
Sven

0

Bunun 4 yaşında bir gönderi olduğunu biliyorum, ancak bunu da yapabilirsiniz (dizge olarak md0 ve yeniden boyutlandırma "disk" olarak sdb4 varsayarsak):

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

Bu komut, sdb4'ün başarısız bir disk gibi görünmesine neden olur ve bu nedenle diziden başlayarak resync'i durdurur. Resync-stop işlemi sırasında hata yoksa, bu komut sdb4'ü md0 dizisinden de kaldıracaktır. Herhangi bir hata varsa, disk başarısız durumda kalır ancak dizide kalır.

Herhangi bir yerinde bir disk arızalanırsa mdadm, mantıksal olarak başarısız olduğunu belirlersiniz . Dizi temizse (bozulmamışsa), disk tutarlı kalır ve --add << disk >> - assume-clean seçeneği ile korkusuz olarak yeniden eklenebilir. Varsa herhangi bir eylem o sonra müstakil (örn., Yeniden senkronize yeniden, hatta bir yazma) daha sonra --assume-temiz probalby başarısız ve hemen bir resync eylemi başlayacaktır.

Değişmek raid.speed_limit_minve raid.speed_limit_maxbir şekilde kötü bir fikir çünkü sadece resync / rebuild hızlarını değil, aynı zamanda normal çalışma hızlarını da etkiliyor ve muhtemelen RAID dizilerini kullanarak kazandığınız performansı çok kaybedeceksiniz.


5
RAID'den sağlıklı bir disk çıkarmanın kötü bir fikir olduğunu düşünüyorum. Çoğu zaman herhangi bir soruna yol açmayabilir, ancak her yaptığınızda veri kaybına veya veri bozulmalarına neden olma riski vardır.
kasperd

1
Bunu asla yapma. --assume-cleanCanlı bir sistemde bir disk eklerseniz ve kalan diskte herhangi bir yazı olsaydı , sorun mu istiyorsunuz?
sanmai
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.