Sadece fişi çekmek iyi mi?


18

Pi'mi her kapattığımda sudo poweroff, (anladığım kadarıyla) tüm süreçleri durdurmanın ve kapatmanın güvenli bir yolu olduğunu kullanıyorum.

Bazen Pi'yi her zaman Pi'ye SSHing olmadığım gömülü projeler için kullanırken, genellikle telefonumu veya dizüstü bilgisayarımı çıkarmak ve Pi'ye bağlanmak için bağlanmak için zaman harcıyor gibi geliyor.

Konuştuğum bazı insanlar, kapatmak istediklerinde sadece güç çıkışını kırdıklarını ve bununla ilgili herhangi bir sorun fark etmediklerini söylediler.

Peki Pi'yi fişten çekerken neyi yanlış yapabiliriz? Sadece fişini çekmeye başlamam gerekir mi?

Not: Bu durumda veri kaybı konusunda fazla endişelenmiyorum. Düzenli yedeklemeler kaydediyorum ve bu Pi'deki tek önemli veriler GitHub'ımda.


1
Sadece fişi olduğu gibi çekmemenizi, sürekli olarak güç kablosunu takıp çıkarmanız Pi üzerindeki konektör ömrünü azaltacaktır. İkincisi, SD kartı fişi çektiğinizde bir işlem gerçekleştirmenin ortasında olabilir - bu muhtemelen bozuk olacaktır. Ve bu, verilerinizi ne kadar iyi yedeklediğinize bakılmaksızın bir rahatsızlık olacaktır.
Darth Vader

2
@DarthVader 'Konektör ömrünü kısalt' ile ne demek istiyorsun? Daha sık takıp takmam, kapatmadan önce çıkarmam. SD kartın bozulması bunun dışında tek sorun mu? SD kartı biçimlendirmek kartı tekrar kullanılabilir hale getirir mi?
James Vickery

1
Hala Pi'yi takılı bırakmak ve duvardaki gücü kapatmak daha iyi olduğunu düşünüyorum. seçtiğiniz işletim sistemini biçimlendirerek ve yeniden yükleyerek bozuk bir SD kartı kurtarabilirsiniz, ancak SD kartı ilk etapta bozmamak kesinlikle tavsiye edilir. Başka bir sorun, Pi'nin bir kısmının bir şey yapma sürecinde olabileceğidir ve yaptıkları işi bitirme fırsatı verilmeden gücü kesmiş olursunuz.
Darth Vader

Yanıtlar:


23

Başsız bir pi ağını kaybettiğim hariç , pi'yi düzgün bir şekilde kapatmaktan kaçınmak için pi'yi çıkarmayı alışkanlık yapmıyorum , bu durumda genellikle bir klavye takmak için çok tembelim.

Genellikle her zaman yeşil ACT ışığının o noktada yanmadığından emin olurum; son modellerde (veya bellenimde?) SD karta erişilemediğinde bu durum kapalı olacaktır. Emin olmak istediğiniz şey budur. Sürekli yazmıyorsanız, bu yeterince basit olmalıdır; serbest RAM'de yeterli miktarda boş yer olduğu sürece (bağlama göre 50-100 + MB diyelim), o zaman sık sık yeniden kullanılmaya eğilimli olan ancak herhangi bir anda bir işlem tarafından yüklenmeyen şeyler içinde olacak serbest bellekte önbelleğe ve OS değil, gerçek fiziksel ortam ile oradan yeniden. Tüm çağdaş genel amaçlı işletim sistemleri bu şekilde çalışır.

Pi SD karttan yararlanıyorsa, risk asgari düzeydedir : karttaki dosya sistemi bellek durumuyla senkronize değil. Normalde, bu büyük bir sorun değildir; yeni başlayanlar için, çoğu pis dosyada varsayılan olarak kullanılan dosya sistemi günlüğü , dosya sistemi temiz bir şekilde sökülmezse, önyüklemede otomatik olarak uygulanması gereken fsck'e karşı bir savunma olabilir . Neden kısaca "olabilir" ve "değil" dediğimi açıklayacağım, çünkü bu bağlamda sık sık olmayabilir .

Bildiğim kadarıyla, fişi çekerken dosya sistemi bozulması veya veri kaybı ile sonuçlanmadım, bu da yıllar boyunca yüz veya daha fazla kez yapmış olabilirim. Ancak yine de alışkanlık olarak yapmıyorum. Günde birkaç kez yaparsanız, sonuçta istatistiksel risk seviyesi ne olursa olsun karşılaşabilirsiniz ve potansiyel olarak kötü bir yakalama söz konusudur.

İşte SORUN:

Son zamanlarda bana, işletim sistemi / dosya sistemi mekanizmalarının güçsüz olabileceği ve bazılarının neden fs bozulması ile, özellikle sistemden bağımsız olarak kabloyu çekenlerde sürekli sorun yaşadığını açıklayabilecek bir SD kartla ilgili bir sorun olduğu ortaya çıktı. devlet - örneğin, son zamanlarda burada birisi, yolsuzluğun bu tür elektrik kesintilerinde sistemi ~ 1/40 oranında önyüklenemez bıraktığı hesaplama modülleri çalıştırdığını iddia etti.

Özetle , SD kartların doğasını dikkate almadan , sistem meşgul olsa bile bu olmamalıdır, çünkü bozuk olma olasılığı en yüksek olan şey, etkili olan herhangi bir sistem yazılımı değil, yazılan kritik olmayan şeylerdir. salt okunurdur ve yalnızca güncellemeler sırasında değiştirilir.

Bitler etrafında hokkabazlanıyorsa ve çeşitli bitlerin saklandığı dosya sistemi meta bilgileri bozulursa olabilir. Yine de, dergi ve fsck bununla başa çıkabilmelidir, bu da çekirdeğin önyüklenmesini gerektirir, ancak pi'deki çekirdek kullanım sırasında da sökülebilecek ayrı bir önyükleme bölümündedir (güncelleme sırasında hariç). sistem önyüklendikten sonra bunların hiçbiri kullanılmaz. Yani bölümle ilgili bilgiler, monte edilmiş olarak bırakılsa bile etkili bir şekilde bozulmamalıdır.

Fakat...

SD kartlar, işletim sistemi için kara bir kutudur. Bundan kurtulmanın bir yolu yok. Bilgisayar donanımının bir parçası olan SD kart denetleyicileri için belirli sürücüler olsa da (pi'de, bu SoC'nin bir parçasıdır) Farklı, belirli marka ve modeller için sürücü diye bir şey yoktur.

Yine de, hepsinin içinde çok farklı şekillerde çalışabilen mikro denetleyiciler var. 1. Kartı kara kutu yapan budur; işletim sistemi ile standart bir SD protokolü üzerinden etkileşime girer ve işletim sisteminin sahip olduğu son kontrol noktası budur.

Geleneksel eğirme disklerinden farklı olan SD kartların ve diğer katı hal ortamlarının yaptığı şeylerden biri opak sanal adresleme kullanmaktır; işletim sisteminin algıladığı sekanslarda fiziksel olarak bilgi depolamazlar. Bu çoğunlukla iyi bir şeydir, aksi takdirde farklı kart markaları vb. İçin farklı sürücülere gerçekten ihtiyaç duyabiliriz ve kartların ömrünü önemli ölçüde uzatan aşınma seviyelendirmesini (opak bir şekilde) gerçekleştirmesine izin verir .

Güventikleri başka bir şey de nispeten büyük "silme blokları" dır; bir bloktaki verilerin değiştirilmesi gerektiğinde, tüm blok silinir ve yeniden yazılır. Dosya sistemleri de elbette bu tür bir şey yaparlar, ancak bunun bir sistem yazılımı düzeyinde olduğunu ve bundan kaynaklanan sorunların tam olarak günlükleme ve fsckilgilenme sorunları olduğunu unutmayın.

Daha aşılmaz bir problemin temelinde, SD dosyalarının yaptığı ölçek dosya sistemleri genellikle SD kartların yaptığı ölçeklerden çok daha küçüktür. Değilse, bir dosya sistemi bloğu yalnızca bir dosyadan veri içerebileceğinden, büyük miktarda depolama alanı harcarsınız. Blok 2 MB ise ve sadece birkaç kB veri varsa, geri kalanı boşa gider. Yani dosya sistemi blokları 1/2 KiB ila 4 KiB arasında değişme eğilimindedir.

SD kartların bunu yapamadıkları ve aslında yapamadıkları oldukça açıktır, çünkü SD karttaki denetleyicinin "dosya", "dosya sistemi" ve hatta "cihaz bölümü" gibi sınırlar hakkında hiçbir bilgisi yoktur. Sadece OS'nin istediği veri parçalarıyla, fiziksel bir seviyede herhangi bir şeyin olabileceği kara bir kutunun içinden opak bir katman aracılığıyla ilgilenir .

Açıkçası nedenlerinden biri (öncül kartların yanı sıra "ilk etapta bunu yapamadı"), bu bloklar genellikle oldukça büyüktür, ancak kartlar tüm alanı kullanmak için iyi bir iş yapıyor gibi görünüyor. Silme bloğu birkaç megabayt boyutunda olabilir. Dahası, detaylar özeldir. İşletim sisteminin karttan silme bloğu boyutunu isteyebileceği mekanizmalar olsa da, kartın bunu sağlaması gerekmez, bu konuda yalan söyleyebilir ve işletim sistemi kaldıraç kullanmaya çalışırsa saçma olur.

Bundan şu sonuca varır:

  1. SD kart denetleyicisinin, tutarlı dosya sistemleri ve parititions anlamında "doğru" hangi verilerin ait olduğu konusunda hiçbir fikri yoktur ve

  2. SD kart, işletim sisteminin gerçekten göremediği bir kara kutudur,

Daha sonra, bir kartın 4 KiB veya daha küçük dosya sistemi bloklarını kullanan birkaç bölüm içerdiği belirli bir 1 MB silme bloğunda ne var, kart yeterince kullanıldıktan sonra (ve muhtemelen çok fazla kullanılmamış olsa bile) herşey). İşletim sistemini daha büyük / karşılık gelen blok boyutlarını kullanmaya zorlasanız bile bu muhtemelen doğrudur; sonunda yanlış hizalanmış olacaklar.

Yani:

SD kart bir bloğu değiştirmenin ortasındayken güç kesilirse, bu , karttan herhangi bir şey olabilen oldukça büyük miktarda rasgele veri kaybına neden olabilir . "Salt okunur" olarak işaretlenmiş bilgi olabilir. Hatta monte edilmemiş bir bölümden ve açıkça kullanılmayan önyükleme bölümünden bilgi olabilir.

Bu olursa ve kartın kendine özgü bir koruma sistemi yoksa (ki bazıları olabilir, ancak eminim çoğu yok), o zaman FUBAR durumuna bakabilirsiniz. Yolculuk, bölüm sınırlarını bile tanımayan rastgele MB boyutunda bozulmaya karşı koruma sağlamaz. Veya fsck.

Ya da, kartın donanımı genellikle tescilli olduğundan, kart üreticisi tarafından üretilen yazılım haricinde herhangi bir şey olabilir - ki bu makul. Hiç böyle bir şey duymadım. Bu, kartları daha karmaşık, daha pahalı ve kullanımı daha zor hale getirecektir. Amaç bu değil.

Başka bir deyişle, SD kartların bu şekilde güvenilir bir şekilde kullanılması amaçlanmamıştır . Ucuz ve çok kullanışlıdırlar, ancak bu protokolde bir değiş tokuşun sonucudur: Genel olarak, kartın gücünü keyfi olarak öldürürseniz, karttaki herhangi bir şey için veri bütünlüğü garantisi yoktur.

Pi'yi fişten çekerken neyi yanlış yapabiliriz? Sadece fişini çekmeye başlamam gerekir mi? Not: Bu durumda veri kaybı konusunda fazla endişelenmiyorum.

Pi'ye fiziksel olarak zarar vermez, hayır, sadece "veri kaybının" tamamen yeniden biçimlendirilmesi gereken "yararsız kart" a kadar genişleyebileceğine dikkat edin. Ancak, yeşil ACT ışığı kapalıyken bunu yapmanın çok düşük olduğunu söyleyebilirim.


  1. Bazı belirli kartların / modellerin neden bazı insanlar için diğerlerinden daha kötü olduğunu açıklarken bu önemli olabilir. Ne yazık ki, aynı şekilde etiketlenen iki kart belirtilen özellikler (boyut, hız, vb.) İle aynı olsa da, üreticiler bunları kurucu parçalar açısından gerçekten% 100 aynı yapmak zorunda değildir.

1

Büyük ölçüde işletim sisteminizin çalışma düzenine bağlıdır:

  • Standart bir şema kullanıyorsanız, SD kartınızı gerçek veriler için r / w modunda kullanırken (takas bölümleri burada sayılmaz) - o zaman her zamanki "PC'yi güç takma" durumunda olduğu gibi bir sorundur : Google'ın her yerinde, bu yüzden dava hakkında bir sürü bilgiye sahip olacaksınız. Aynı şey: aynı problemler, aynı riskler ve eşit etki.
  • Eğer ediyorsanız sadece veri okuma SD kartınızdan, yani birlikte SD kartınızdan her veri içeren bölüm bağlama roseçeneği, o zaman hiçbir sorun sadece fişi çekmeye defenately: Bunu servislerin çalışmalarını bitirmek üzereyiz, bunlar hakkındadır verileri harici bir yazılabilir depoya yedeklemek için (örneğin NAS veya NFS / SMB / CIFS paylaşımı gibi) ve hizmetler kapatıldıktan sonra - evet, fişi çekin: RAM / tmpfs disklerinize ihtiyacınız yok ) ve hiçbir şeye zarar vermeyeceksiniz

1
İlk noktanız yanlış; SD kart, sorunu "tam olarak aynı" yapmayan komplikasyonlar ortaya çıkarır; örneğin, derleme ve denetlemenin etkili olması gereken dönen diskler veya çoğu zaman ek donanıma sahip olabilecek daha pahalı SSD ortamları ve SD medyaya karşı daha katı standart. Qv cevabım nerede konuşacağım "Özetle, SD kartların doğasını hesaba katmadan ..."
goldilocks

1
@goldilocks tabii ki depolama ortamı mekaniğinin derin müdahalelerinde farklıdır. Burada daha genel olarak konuşuyorum, yani "tüm verilerinizin güvenli ve kesin olarak kaydedildiğinden emin değilseniz neden fişi çekmek kötü".
Alexey Vesnin

@goldilocks Mükemmel cevaplarınız için her ikinize de teşekkür ederim. Goldilocks'ın cevabını kabul etmeye karar vermiş olmama rağmen, ikiniz de mükemmel puanlar verdiniz, çünkü hala soruyu cevaplarken çok sayıda alakalı bilgi veriyor; ancak, her iki yanıtı da iptal ettim.
James Vickery

1

@Goldilocks'ın yanıtladığı gibi, çok az risk vardır, ancak çoğumuz bunu yapmayız.

Başsız Pi'mde kullandığım güvenli bir güç anahtarı eklemek çok basit. Bkz güvenle Ahududu Pi kapatmak için nasıl? bu, neredeyse hiç kaynak kullanmaz - biraz RAM ve basit bir düğme dışında.

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.