Gömülü Linux için yolsuzluk geçirmez SD kart dosya sistemi?


36

Son zamanlarda, müşterimizle ilgili oldukça rahatsız edici bir durum yaşadık - Raspberry Pi tabanlı "kiosk", uzaktan algılama verilerini görüntülemek için kullanılır (veri toplama sunucusundan kendini güncelleyen bir web sayfasını görüntüleyen bir kiosk modu tarayıcısından daha fazla fantezi yoktur) nedeniyle önyükleme yapamadı dosya sistemi bozulması. Ext4, Manuel fsck gerekli, sistem yarınki önemli sunumun bir parçası olacak, servis hemen gerekli. Elbette, müşteriyi gece kapatırken sistemi güzel bir şekilde kapatmasını talep edemeyiz; sistem bu tür kötü muameleye dayanmalıdır.

Gelecekte bu tür durumlardan kaçınmak istiyorum ve işletim sistemini bu durumu önleyecek bir dosya sistemine taşımak istiyorum. MTD cihazlarına yönelik bir sürü dosya sistemi var, bunların SD kartta çalışmasını sağlamak (standart bir blok cihaz) bazı ciddi bir çember atlama gerektiriyor. Yolsuzluğa karşı iyi bir dirence sahip başka dosya sistemleri de var (dergiler vb.). Artıları ve eksileri ile ilgili makul bir karşılaştırma yapmam gerekiyor.

Linux'ta bulunan hangi dosya sistemi beklenmedik elektrik kesintilerinde yolsuzluğa karşı en iyi direnci sağlar ve SD'ye takmak için yatlar2 gibi imkansız çemberlerin üzerinden atlamayı gerektirmez .

Aşınma dengeleme bir artıdır, ancak bir zorunluluk değildir - SD kartların genellikle mükemmel olmadıklarından daha azsa kendi mekanizmaları vardır, bununla birlikte sistemin "flaş için yumuşak" olması gerekir (NTFS gibi sistemler bir ay içinde bir SD kartı öldürebilir).


1
Şahsen, ben öbür tarafa gider ve kapanış yapmak için yeterli bir yer sağlamak için büyük olasılıkla bir kapak kullanarak güç çıkışında güvenli bir kapatma üzerinde çalışırdım.
Scott Seidman

Birinin temiz bir kapatma için sadece yeterli gücü sağlayan modülü tasarlamasını, uyarının dikkate alınması ve gerçekte kapatılması için gereken sistem desteğini görmek isterim. Pi, BeagleBone ve diğer küçük Linux makinelere mantıklı bir eşlik etmesi gerekiyor gibi görünüyor, ancak bu makinelerin kullanıcılarına damgalı bir ürün olarak görünmüyor.
RBerteig

@ScottSeidman: Bu RPI, oldukça güç aç - 15V için 5V de 800mA düşünüyorum. Çok fazla kapasiteye sahip bir şey değil, tüm süper kapak piline yatırım yapmazsanız.
SF.

@RBerteig: Şarj edilebilir pilli bir kutu, şarj etmek için uygun elektronikler, çıkış gerilimini sabitleme (muhtemelen kendi pilinden kendiliğinden yükselme), kapatma sinyali gönder, kapatma tamamlandıktan sonra çıkış gücünü kes, giriş gücü geri yüklenene kadar kendini kapat - her şeyin yapılabildiğinden emin olun, ancak bunu toplu olarak üretmezseniz, RPI'nin maliyetini iki katına çıkarır (her ne kadar kiosk varsa, TV seti 10 kat daha pahalıdır ...)
SF.

1
@SF. - Powerfail dosya sistemine karşı güçlü olan iki sorun olduğunu unutmayın. Birincisi, FS'nin kendisinin sağlam olması, ikincisi, temel donanımın, verileri diske akıtmaktan kaynaklanmamasıdır. Dönen disklerin son yıllarda belirgin performanslarını artırmak için yalan söylediklerini biliyorum, SD kartlarınızın aynı olmadığından emin olmak isteyeceksiniz.
Michael Kohne,

Yanıtlar:


17

Tek bir SD kartta bozulmaya karşı en iyi direnç, BTRFS tarafından RAID1 modunda önceden belirlenmiş her zaman otomatik fırçalama çalışmasında sunulacaktır .

Faydalar:

  1. dosya sistemine RW tutma yeteneği
  2. Şeffaf sıkıştırma ve anlık görüntüler gibi RPI için çok kullanışlı seçeneklere sahip modern, tam özellikli bir dosya sistemi
  3. akılda kalıcı flash bellek ile tasarlanmış (diğer şeylerin yanı sıra)

İşte nasıl yapılacağı:

RaspberryPi'mi ArchARM linux üzerinde çalıştırıyorum ve kartım SD okuyucuda bulunuyor, bu yüzden bu talimatları diğer dağıtımlar ve / dev arayüzleri için uygun şekilde değiştirin.

İşte örnek bir bölüm düzeni:

/dev/mmcblk0p1: fat32 boot partition
/dev/mmcblk0p2: to be used as btrfs partition
/dev/mmcblk0p3: to be used as btrfs partition (mirrored with the above)
/dev/mmcblk0p4 (optional): swap

Btrfs’nin RAID1’e girmesi için aşağıdaki gibi dosya sistemini oluşturursunuz:

mkfs.btrfs -m raid1 -d raid1 /dev/mmcblk0p2 /dev/mmcblk0p3

Daha sonra rsync -aAXvönceden yedeklenmiş sisteminize.

Raid1'de BTRFS'den önyükleme yapmak için initramfs komutunu değiştirmeniz gerekir . Bu nedenle, sisteminizi hala eski dosya sisteminizde çalıştırırken aşağıdakileri yapmanız gerekir.

Ahududu normalde mkinitcpio kullanmaz, bu yüzden yüklemelisin. Daha sonra mkinitcpio.conf içindeki MODULES dizisine “btrfs” eklemeniz ve initramfs ile yeniden oluşturmanız gerekir.

mkinitcpio -g /boot/initrd -k YOUR_KERNEL_VERSION

YOUR_KERNEL_VERSION yerine ne yazacağınızı bilmek için, çalıştırın

ls /lib/modules

Çekirdeği güncellerseniz, yeniden başlatmadan önce initramfs'ı yeniden oluşturmanız GEREKİR.

Ardından, RPi'nin önyükleme dosyalarını değiştirmeniz gerekir.

Cmdline.txt dosyasında

root=/dev/mmcblk0p2 initrd=0x01f00000 rootfstype=btrfs

ve config.txt dosyasında, eklemeniz gerekir

initramfs initrd 0x01f00000

Bunları yaptıktan ve btrfs RAID1 sisteminize başarıyla başlattıktan sonra, geriye kalan tek şey sistemli zamanlayıcı (tercih edilen) veya cron (dcron) ile aşağıdaki gibi periyodik fırçalama yapmaktır:

btrfs scrub start /

Herhangi bir yolsuzluk bulursa, tüm sistemlerin sağlama toplamlarını karşılaştırarak ve onları (doğru kopya ile değiştirerek) düzelterek dosya sisteminizde çalışır.

BTRFS RAID1, tekli ortam ve Raspberry Pi'nin kombinasyonu bu oldukça hoş bir şey. Tüm parçaları bir araya getirmek biraz zaman aldı ve çalışıyor, ama işte burada.


Her açılıştan sonra da 'fırçalamayı' eklemeli miyim?
SF.

@SF. Hayır, gerekli değil. Her X günde bir periyodik fırçalama yeterlidir. Tercihen en az kullanım saatlerinde.
lockheed

Üzgünüm, anlayamıyorum - şişman bir /bootbölüm tutarsam, yine de initramfs'ı değiştirmem gerekir mi?
Bex,

Bex, evet. Btrfs'nin raid1 özelliğiyle, yağ / önyükleme bölümü ile ilgisi yoktur.
lockheed

@@@ GÜNCELLEME: @@@ Şu an itibariyle, RAID1 yerine dup-mode kullanmaya çalışılabilir: "mkfs.btrfs --data dup --metadata dup" ama RAID1 kadar esnek olduğundan% 100 emin değilim tek bir sürücüde.
Lockheed

10

Pek çok nedenden dolayı iyi flaşlı depolama manyetik depodan daha çok istenir, ancak bu uygulama için temelde hareketli parçalar olmadığı için söyleyeceğim. Olduğu söyleniyor, dışarıda bir 'yolsuzluk kanıtı' dosya sistemi olduğunu sanmıyorum, ancak dışarıda bazı sağlam dosya sistemleri (ext4 bir tane) ve yolsuzluğun azaltılmasına yardımcı olacak bazı taktikler var.

RAM Diski

RPI'nin imajı etmezse sahip değişime ve öyle değil gibi bir şey deneyecek (veya çalışıyor olmalıdır) diske yazma eğer, sesler, sonra olmak için oluşturulmuş bir kök dosya sistemini kullanmayı deneyin RAM'e paketlenmemiş . Buradaki fikir, açılışta RAM'e açılmış sıkıştırılmış bir kök dosya sisteminizin olmasıdır. Tüm değişiklikler RAM diskte gerçekleşir, bu nedenle SD Kart'a yalnızca sıfırdan yazma etkin bir şekilde sıfır yazılabilir. bu işlem sürücünün okur / yazarsa ömrünü kısaltır. Bu sizi yaptıklarından benzer bir CD'den linux çizme ve neler ilk şeylerden biridir zaman linux açılışına .


10

Başka bir yoldan gider ve salt okunur bir dosya sistemi kullanırdım. Ahududu pi'mi sd kartta bir okuma-yazma kök dosya sistemi kullanırken yeterince kararlı hale getiremiyorum. Kökünüzü sadece çekirdek cmdline (ro) ile önyükleyebilir veya tüm sisteminizi içeren omurgalı bir initramfs kullanabilirsiniz.

Her ikisi de ev yapımı yapım sistemim OpenADK ile oluşturulabilir. ( http://www.openadk.org )


RO dosya sistemi yardımcı olur ... ancak sorunu tamamen çözmez.
Piskvor

7

Eh, burada yaşadığınız sorun ext * gibi "modern" bir dosya sistemi kullanmanın SD Kartınızı yıpratmasıdır; Bir yıl içinde olan tecrübelerime göre, ya da daha üst seviyeye çıkarsanız bir sonraki yıl.

Sorun, modern dosya sistemlerinin her zaman veri parçalanmasını önlemek için blokları dolaşıyor olmalarıdır. Hangi disklerin disk üzerinde iyi bir şey, tüm verilerinizi önbelleğe yüklerken harmanlamak istediğiniz. Dezavantajı ise, fazla G / Ç olmadığında toparlanma işlenirken önbelleklenemeyen daha fazla yazı yazmasıdır.

Ayrıca, yerleşik aygıtınızda hata ayıklama yaparken yapmak isteyebileceğiniz çok fazla günlük kaydı yaptığınızda da oluyor. Günlük yazma en kötü yazma türüdür, çünkü düzenli olarak gerçekleşen çok sayıda küçük yazma olur ve bu da çok fazla parçalanma yaratır.

Sisteminizin aynı zamanda sensör verilerini de taşıdığını söylediğiniz gibi, onları geldikleri anda flaşın üzerine koymanız muhtemeldir. Ve bunlar günlük verileri kadar kötü.

Karşılaştığınız aynı soruna girdim ve işte sonuçlarım. "Daha sağlam" olarak satılan SD Kartlarını aramaya çalıştım, yani diğerlerinden daha fazla yazı yazmayı başarabildim, ancak SSD'deki göstergelerden farklı olarak, piyasaya odaklanan hiçbir kriter bulamadım. Hepsi yalnızca hıza odaklandıklarından, bellek bloğu başına yazma sayısını ve SDCard'da kullanılan teknolojiyi bilmek imkansızdır.

Rağmen, "endüstriyel" dereceli sandisklerin isimsiz olan daha uzun bir ömrü olduğunu fark ettim. Bu şaşırtıcı değil, daha fazla ödeme yaparken daha fazlasını alırsın.

Ancak, sonunda, yoğun bir şekilde günlüğe kaydetme etkinken, bir yıl içinde en fazla ölümün meydana geldiği bir yıldan daha uzun bir ömre sahip hiçbir SD Kart bulamadım.

Karşılaştığım çözüm @ BigHomie ve @wbx'in çözümleri: Salt Okunur bir extX dosya sistemi kullanıyorlar (günlüğe kaydetme artık gerekli olmadığından eski güzel ext2'ye bile geri dönebilirsiniz). Günlükleri oturum içinde tutmak veya geçici dosyalar yazmak istiyorsanız, her zaman bir RAMDISK kullanabilirsiniz.

Yalnızca ramdisk'in salt okunur bölümlerin içindeki verilerle doldurulmasına yardımcı olan eğitimler ve komut dosyaları vardır, böylece bunları oturum için düzenleyebilirsiniz.

Not: Deneyim, 20 sensör cihazının deneme çalışması sırasında bir Beaglebone üzerinde Angstrom Linux kullanıyor. Bu sistemin günlüğü, sistem günlüğünü kullanarak çok ayrıntılıydı.


4

Linux birçok dosya sistemi sunar. ext4 , kendime daha fazla güvendiğim bir konudur. Şüphe duyulduğunda, ext4 okuma-yazma olan herhangi bir bölüm için kullanılmalıdır.

Ext2 dosya sistemi çok daha kırılgan. Salt okunur şekilde bağlayabilen veya doğru şekilde çıkarabilen sistemler için mükemmel bir dosya sistemidir. Ama yolsuzluk üzerinde bir güç kesintisi ile son derece muhtemeldir ext2 .

Diğer seçenek düşünme ihtimaliyle jfs jfs dosya sistemi bazı Linux sürümlerinde güvenilir olmadığı halde. Yolsuzluk daha az olasıdır jfs ile daha ext4 . Jfs ayrıca hızlı bir montaj süresine ve dosya sistemi kontrol süresine sahiptir.


2
Evet, ext4 harika ve sunucularımın çoğu için kullanıyorum. AMA bu soru sd kartlarındaki kök sistem dosya sistemleri ile ilgili . Bu farklı bir ortam. Tavsiyeniz genel midir yoksa gerçekten ext4 kartlarını mı kullanıyorsunuz?
guettli
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.