-9'u öldürdüğümde veya gücü çektiğimde * tam olarak * ne olur?


13

Kurmak

Bir süredir programcıyım ama hala derin, içsel şeyler üzerinde biraz bulanıkım.

Şimdi. Ben de bu iyi bir fikir olmadığını biliyorum:

  1. öldür -9 bir süreç (kötü)
  2. çalışan bir bilgisayar veya sunucudaki elektrik fişini kendiliğinden çekin (daha da kötüsü)

Ancak, bazen sadece düz yapmak zorundasınız. Bazen bir işlem ne yaparsanız yapın yanıt vermeyebilir ve bazen bir bilgisayar ne yaparsanız yapın yanıt vermez.

Diyelim ki Apache 2, MySQL 5, PHP 5 ve Python 2.6.5 ile mod_wsgi.

Not: Burada en çok Mac OS X ile ilgileniyorum, ancak herhangi bir UNIX sistemi ile ilgili bir cevap bana yardımcı olacaktır.

Endişem

Bunlardan birini, özellikle ikincisini her yapmam gerektiğinde, bir süre kırıldığından çok endişeleniyorum. Bir yerdeki bazı dosyalar bozuk olabilir - kim hangi dosyayı bilir? Bilgisayarda 1.000.000'dan fazla dosya var.

Sık sık OS X kullanıyorum, bu yüzden Disk İzlencesi aracılığıyla bir "Diski Doğrula" işlemi yapacağım. Hiçbir sorun bildirmeyecek, ama yine de bununla ilgileniyorum.

Bir yerlerde bir yapılandırma dosyası bozulursa ne olur. Ya da daha da kötüsü, bir yerde bir ikili dosya bozuksa. Ya da bir yerlerde bir betik dosyası bozuk. Bazı donanımlar hasar görürse ne olur?

Önümüzdeki aya kadar, kritik bir senaryoda, yolsuzluk veya hasar bir felakete neden olduğunda bunu öğrenmezsem ne olur?

Ya da, eğer değerli veriler zaten kaybolursa?

Umudum

Umarım bu endişeler ve endişeler asılsızdır. Sonuçta, bunu daha önce birçok kez yaptıktan sonra, henüz gerçekten kötü bir şey olmadı. En kötüsü, bazı MySQL tablolarını tamir etmek zorunda kaldım, ancak herhangi bir veri kaybetmiş gibi görünmüyorum.

Ancak, endişelerim asılsız değilse ve her iki durumda da 1 veya 2'de gerçek hasar meydana gelebilirse, umudum, onu tespit etmenin ve buna karşı önlemenin bir yolu olmasıdır.

Sorularım)

Bunun nedeni, modern işletim sistemlerinin bu senaryolarda hiçbir şeyin kaybolmamasını sağlayacak şekilde tasarlanmış olması olabilir mi? Bunun nedeni, modern yazılımın hiçbir şeyin kaybolmamasını sağlayacak şekilde tasarlanmış olması olabilir mi? Modern donanım tasarımı ne olacak? Elektrik fişini çektiğinizde ne gibi önlemler alınmaktadır?

Benim sorum şu, bu senaryoların her ikisi için de tam olarak neyin yanlış gidebileceği ve bunu düzeltmek için hangi adımlar atılması gerekiyor?

Yanlış gidebilecek bir şey, bazı programların verilerini diske akıtmamış olabileceği izlenimi altındayım, bu yüzden diske yazılması gereken son derece yeni veriler (örneğin, güç çekmeden birkaç saniye önce ) kaybolabilir. Ama bunun ötesinde ne olacak? Ve bu 5 saniyelik veri kaybı sorunu bir sistemi bozabilir mi?

Sabit disklerimdeki büyük dosya ormanlarında bir yerde saklanan rastgele dosyaların bozulması hakkında ne söyleyebilirim?

Donanım hasarı ne olacak?

Bana En Çok Ne Yardım Eder?

  1. Bir süreci -9 öldürdüğünüzde veya tüm sistemdeki gücü çektiğinizde dahili olarak neler olduğu hakkında ayrıntılı açıklamalar. (anlık görünüyor, ancak birisi benim için yavaşlatabilir mi?)

  2. Bu senaryolarda (elbette kaba) olasılıklarla birlikte yanlış gidebilecek her şeyin açıklaması (yani, bu pek olası değildir, ancak bu muhtemelen) ...

  3. Bu senaryolar meydana geldiğinde hasar veya bozulmayı önlemek için modern donanım, işletim sistemleri ve yazılımda uygulanan önlemlerin açıklamaları. (beni rahatlatmak için)

  4. Bir sürücünün herhangi bir yerinde bozuk veya hasarlı olmadığından emin olmak için, bir öldürme -9 veya güç çekildikten sonra "diski doğrulamanın" ötesinde ne yapılacağıyla ilgili talimatlar.

  5. Bir bilgisayar kurulumunu güçlendirmek için alınabilecek önlemler, böylece bir şeylerin öldürülmesi veya gücün çekilmesi gerekiyorsa, olası hasarlar azaltılabilir.

  6. İkili dosyalar hakkında bazı bilgiler - apache ikili dosyasının veya bazı kütüphanelerin ortasında rastgele bir bayt veya ikisinin bozuk olabileceği doğru değil mi? Bunun güç çekilmesi veya öldürme sonucu gerçekleşmediğini nasıl garanti edebilirim?

Çok teşekkürler!


Kill -9'u hangi süreçlere gönderiyorsunuz? 'Apache 2, MySQL 5, PHP 5 ve Python 2.6.5 - mod_wsgi' den bahsediyorsunuz. Bunlardan bazılarını mı öldürüyorsun? Ne öldürdüğünüzü bilmek, bunu yapmanın sonuçlarına daha doğrudan yanıt verilmesini sağlayacaktır. Ayrıca, süreçleri öldürmek istemenizi sağlamak için gerçekte ne oluyor. Bunu bilin ve sadece kaba kuvvet yönteminizin düzeltmek için ne anlama geldiğini anlamaktansa probleminizin temel nedenlerini tanımlayabilir. MacOS X üzerinde BTW, modern makineler için sadece güç çekmek yerine güç düğmesini 10 saniye basılı tutun, daha az acımasızdır.
Graham Dumpleton

Kill -9'u bilmiyorum ama bir çeşit yedek güç kaynağınız yoksa, fişi çektiğinizde HER ŞEYİN öldürüldüğünü söylemek oldukça güvenli olduğunu düşünüyorum.
John Gardeniers

Yanıtlar:


9

Gücü çekmek, uyarı olmadan her şeyin uçuşta durmasına neden olur. kill -9, tek bir işlem üzerinde aynı etkiye sahiptir ve SIGKILL ile zorla sonlandırır .

Bir işlem çekirdek veya elektrik kesintisi ile öldürülürse, temizleme işlemi gerçekleştirilmez. Bu, yarı yazılı dosyalara, tutarsız durumlara veya önbellekleri kaybedebileceğiniz anlamına gelir. Günlük kaydı, çıkış durumu ve pil yedeklemesi nedeniyle genellikle bunlardan endişelenmenize gerek yoktur.

/ Tmp içindeki geçici dosyalar, tmpfs içinde olduklarında otomatik olarak silinir, ancak yine de, kaldırılacak, uygulamaya ve firefox için .parentlock gibi, uygulamaya özgü kilit dosyalarınız olabilir.

Çoğu yazılım, başarılı bir çıkış durumu kaydetmezse bir işlemi yeniden denemek için yeterince akıllıdır. Buna iyi bir örnek tipik bir posta sistemidir. Bir ileti iletiliyor ancak ortada kesiliyorsa, gönderen başarılı olana kadar daha sonra yeniden dener.

Dosya sisteminiz büyük olasılıkla günlüğe kaydedilir. Bir dosyayı taşıyorsanız veya yazıyorsanız ve akış ortasında ölüyorsa, günlüklü dosya sistemi yine de orijinal belgeye başvurur. Günlüğe kaydedilen dosya sistemi, eski kopyadan çıkarak zarar vermeden değişiklikler yapar ve yeni kopyaya, yalnızca eski kopyaların diskte kapladığı alanı geri kazanmadan önce son adım olarak başvurur.

Şimdi bir RAID diziniz varsa, performansı artırmak ve bir elektrik kesintisinde güvenilirlik sağlamak için her türlü bellek arabelleğine sahiptir. Büyük olasılıkla dosya sisteminiz aygıttaki önbellekleri ve durumlarını bilmeyecektir, bu nedenle diskte bir değişiklik yapıldığını düşünmektedir, ancak yine de bir yerlerde RAID önbelleğinde bulunmaktadır. Peki güç öldüğünde ne olur? Umarım RAID kasanızda işlevsel bir pil vardır ve onu izlersiniz. Aksi takdirde fsck için bozuk bir dosya sisteminiz var.

Evet, bir çiftte birkaç bit bozulabilir, ancak modern donanımda bu kadar endişelenmeyeceğim. Gerçekten paranoyaksanız, disklerinizin ve RAID'inizin sağlığını uygun araçlarla izleyebilirsiniz, ancak yine de yapmanız gerekir. Düzenli yedeklemeler yapın ve Kesintisiz Güç Kaynağı edinin.


5

Beklenmedik bir kapanmada, bozulması gereken tek dosya yazmaya açık dosyalardır. Çoğu sistemde herhangi bir anda, muhtemelen bir dosyaya yazmıyorsunuzdur. Muhtemelen.

1 öldür -9

POSIX SIGKILL ve uygulamaya bağlıdır. Bu sinyali alan işleme, onu işlemek için bir fırsat verilmeyecektir.

1 Güç kapalı

donanıma bağlıdır. Kafalar sürücü momentumu altında otomatik olarak park eder ve yazma önbelleğinizdeki her şey DRAM yenilemesini kaybeder ve saniyeler içinde geri alınamaz yolsuzluğa dönüşür. Aynı şey sistem belleğiniz, CPU önbelleğiniz, kayıtlarınız vb. İçin de geçerlidir.

Wdc.com adresinden (google: site: wdc.com Koruyucu Kafa Park Etme)

Güç kesildi: Sabit sürücü sıfırlandı. Kafa, iğ enerjisi kullanılarak iniş bölgesine park edilir. İş mili motoru durdu.

2 - ne ters gidebilir

açık bırakılan dosyalar eksik yazılmıştır. Bir dosya yazmak için açılırsa, veri bozulması olur. Modern donanımdaki dosya yazma işlemleri hızlıdır ve modern PC'ler normalde IO ile vurgulanmaz. Sessiz bir köy yolunda gözü kapalı yürüyüş gibi. Çoğu zaman, iyi olacaksın.

3 - karşı önlemler

disklerin ne yaptığını görmek için yukarıya bakın.

Günlüklü dosya sistemlerine bakın, artık normaller: http://en.wikipedia.org/wiki/Journaling_file_system

MS Word veya vi gibi yazılımlar orijinalden ziyade geçici bir dosyaya yazacaktır. Amaç, sistemi hiçbir zaman diskte tutarlı bir kopyanın olmadığı bir durumda bırakmaktır.

Windows kayıt defterinin kopyalarını tutar (çok önemlidir) Wikipedia: "Windows 2000, kayıt defteri kovanlarının (.ALT) alternatif bir kopyasını tutar ve yolsuzluk algılandığında bu klasöre geçmeye çalışır" (O zamandan beri ağır teknik destek yapmadım Win2k, bu yüzden MS'in yeni mekanizmalarının ne olduğundan emin değilim)

4 - ne yapmalı

Zorluk sırasına göre (kolay-zor)

  • Yedekleri sakla
  • En son ne üzerinde çalıştığınızı kontrol edin
  • Ayrı bir diskten önyükleme yapın ve sistemin çökme sırasında ne yaptığını anlamak için son değiştirilme tarihlerini / saatlerini arayın
  • Ayrı bir diskten önyükleme yapın ve tüm dosyalarınızın md5sums değerlerini çevrimdışı bir kopyayla karşılaştırın.

Yedekleri saklamak en uygun cevaptır, iyi yedeklemeler daha önce değiştirilmiş sürüme geri dönmenizi sağlar.

5

Yedek güç? Son kullanıcı eğitimi? güç düğmesi üzerine bant ve karton koymak?

6

Donanım arızaları, bozuk disk sürücüleri, bozuk bir işletim sistemi çekirdeği, yükseltme sırasında sağlama toplamı veya çökme olmaması, ikili dosyalar ve kütüphaneler okuma-yazma açılmaz, böylece bozulmazlar. Bu olur, ancak nadirdir.


# 6 için +1
Bigbio2002

4

Öldürme -9'a gelince, bu, işleme hemen yerinde "ölmek" için bir sinyal gönderir. İşlem ölür (kesintisiz uykuda değilse, bu durumda bir zombi olur). Hiçbir dosya kapatılmaz, hiçbir veri yazılmaz ve program bu sinyali yakalayamaz ve başka bir şey yapamaz. Temizlik yok, hiçbir şey yok: sadece ölüyor.

Günümüzde dosya sistemleri çok sağlamdır; XFS, JFS, ext3 ve ext4 gibi şeylerin hepsinde dosya sistemi meta verilerini sağlam tutmak için günlükler ve başka şeyler bulunur.

Apache'nin kendisi ve diğerleri gibi ikili dosyaların ani bir güç kaybından veya bir sistem öldürmesinden dolayı, bellekte veya okunmakta oldukları için bozulma olasılığı yoktur; okunuyorlarsa (örneğin, Apache HTTP başlıyor), bir güç dalgalanmasının ikiliyi bozması olasıdır, ancak olası görünmemektedir.

Ben bir Mac Mini insanlar soğuk kapatmak istiyorum gibi görünüyor (kaç kez onlara söylemek ..... olursa olsun) ve sadece devam ediyor.

Çoğunlukla, -9'u öldürmeye veya düzenli olarak kapatmaya güvenmediğiniz sürece, çok fazla endişelenmeyeceğim. Geçmişte işler çok daha kötüydü; Solaris 2.6 hakkında (örneğin) Solaris 10'dan (ve benzerlerinden) daha fazla endişelenirim.



3

Bir "kill -9", bekleyen bir ES operasyonunu senkronize etmez. Bu genellikle bir sorun değildir, ancak sistem ağır IO yükü altındaysa, veri kaybedebilirsiniz.

RAID denetleyicisinin (pil destekli önbellek olmadan) verileri önbelleğe alabileceği ve verilerinizi kaybedebileceği sunucularda daha fazla sorun var.

Düzenleme : Bir şey daha ... ağa bağlı sürücüler bağlı ve açık dosya tanıtıcıları varsa, çok tutarsız veya bozuk dosya bırakmak olasıdır. Windows'ta bunun klasik örnek olarak, kullanıcılar Outlook PST dosyalarını bir paylaşıma bağlayıp güç veya ağ bağlantısını kaybettikleri görülmektedir.

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.