Güç kaybında ext4 / Linux sürücüsünde veri bozulmasını önleme


9

Ben işletim sistemi olarak gömülü linux ile Amerikan Megatrends bios çalışan bazı gömülü panoları var. Benim sorunum endüstriyel flash ide's güç kaybında bozulur olmasıdır. Ben ext4 olarak biçimlendirilmiş var. Bu olduğunda, genellikle flaşı fsck ile düzeltebilirim, ancak dağıtımlarımızda bu mümkün olmayacaktır. Yazma önbelleğini devre dışı bırakmanın yardımcı olacağını duydum, ancak nasıl yapılacağını anlayamıyorum. Ayrıca, yapmam gereken başka bir şey var mı?

Daha fazla bilgi

Sürücü 4 gb ide flaş modülüdür. Ben ext4 olan bir bölüm var. İşletim sistemi bu bölüme yüklenir ve grub benim bootloader'ımdır.

fdisk -l, / dev / sda'yı flash modülüm olarak / dev / sda1'i birincil bölüm olarak gösterir.

Bir güç kaybından sonra genellikle önyükleme başlatma komut dosyalarından tamamlayamıyorum.

Sürücüyü başka bir bilgisayara taktığımda fsck / dev / sda1 komutunu çalıştırıyorum. Her zaman gibi mesajlar gösterir

"zero datetime on node 1553 ... fix (y)?"

Onları tamir ediyorum ve bir sonraki güç kaybına kadar iyi çalışıyor.

Yarın ofise geldiğimde fdisk -l'nin gerçek çıktısını yayınlayacağım

Sistemin nasıl çalıştığı hakkında tek bildiğim bu. Sistem sorumlusu değilim, iş tanımının dışında tahminlere girme alışkanlığına sahip bir Yazılım Mühendisiyim. Sürücüleri biçimlendirmeyi, önyükleyiciyi kurmayı, yazılım yazmayı ve bir işletim sistemine hacklemeyi nasıl yapacağımı biliyorum.

İşte dumpe2fs çıktısı

#sudo dumpe2fs /dev/sda1
dumpe2fs 1.41.12 (17-May-2010)
Filesystem volume name:   VideoServer
Last mounted on:          /
Filesystem UUID:          9cba62b0-8038-4913-be30-8eb211b23d78
Filesystem magic number:  0xEF53
Filesystem revision #:    1 (dynamic)
Filesystem features:      ext_attr resize_inode dir_index filetype extent flex_bg sparse_super large_file huge_file uninit_bg dir_nlink extra_isize
Filesystem flags:         signed_directory_hash 
Default mount options:    (none)
Filesystem state:         not clean
Errors behavior:          Continue
Filesystem OS type:       Linux
Inode count:              245760
Block count:              977949
Reserved block count:     48896
Free blocks:              158584
Free inodes:              102920
First block:              0
Block size:               4096
Fragment size:            4096
Reserved GDT blocks:      239
Blocks per group:         32768
Fragments per group:      32768
Inodes per group:         8192
Inode blocks per group:   512
Flex block group size:    16
Filesystem created:       Fri Feb  4 15:12:00 2011
Last mount time:          Sun Oct  2 23:48:37 2011
Last write time:          Mon Oct  3 16:34:01 2011
Mount count:              2
Maximum mount count:      26
Last checked:             Tue Oct  4 07:44:50 2011
Check interval:           15552000 (6 months)
Next check after:         Sun Apr  1 07:44:50 2012
Lifetime writes:          21 GB
Reserved blocks uid:      0 (user root)
Reserved blocks gid:      0 (group root)
First inode:              11
Inode size:           256
Required extra isize:     28
Desired extra isize:      28
Default directory hash:   half_md4
Directory Hash Seed:      249d2b79-1e20-49a3-b324-6cb631294a63
Journal backup:           inode blocks

Yanıtlar:


6

Yazma önbelleğinin genellikle BIOS ile bir ilgisi yoktur, çoğunlukla disk önbellek ayarlarını değiştirme seçeneği yoktur. Linux ile kullanmak hdparm -W 0yardımcı olacaktır.

Ayar kalıcıdır, bu nedenle üretim sistemlerinizde oynamak için hdparm'ınız yoksa, farklı bir sistemdeki disk yazma önbelleğini devre dışı bırakabilmeniz ve diski yeniden takabilmeniz gerekir.

BTW: Yazılabilir olmayan bir kök dosya sistemi fikrini ikinci olarak düşünürdüm (böylece sisteminiz bir tür "kurtarma modu" nda önyüklenebilir ve yazılabilir dosya sistemi herhangi bir nedenle monte edilemese bile uzaktan erişime izin verebilir). Donanım tasarımını değiştirebiliyorsanız, jffs2 gibi flash uyumlu bir dosya sistemine sahip IDE / SATA diskleri yerine mtd aygıtları kullanmayı düşünün . Bu kombinasyonu birkaç yıl boyunca iyi sonuçlarla birkaç gömülü cihazla (çoğunlukla sahada VPN yönlendirici çözümleri) kullanıyoruz.

Güncelleme: Sorununuzun kökü, günlük kaydı devre dışı bırakılmış bir ext4 dosya sistemi çalıştırıyormuşsunuz gibi görünüyor - listede has_journaleksik Filesystem features. Sadece tüm hizmetleri kapatın, hala açık dosyaları kullanarak herhangi bir şeyin açık olup olmadığını kontrol edin lsof +f -- /, kök bölümünüzü salt okunur olarak yeniden bağlayın mount -o remount,ro /, günlüğü etkinleştirin tune2fs -O has_journal /dev/sda1ve "sipariş edilen" günlük modunu varsayılan bağlama seçeneği olarak ayarlayın tune2fs -o journal_data_ordered /dev/sda1- yeniden yapmanız gerekecek fsck'i çalıştırın (tercihen bir kurtarma sisteminden) ve bu işlemden sonra kök / yeniden başlatmayı yeniden yapın.

Bu ayarlar uygulandığında, ani elektrik kesintisi durumunda bile meta verilerin dergiden kurtarılabileceği garanti edilir. Gerçek veriler de sürekli olarak diske yazılır, ancak önyüklemede elektrik kesintisinden önce birkaç saniye veri görebilirsiniz. Bu kabul edilebilir değilse, tune2fs -o journal_data /dev/sda1dosya seçeneğini sisteminizle birlikte bağlama seçeneğini kullanmayı düşünebilirsiniz - bu, günlükteki diske yazılan tüm verileri içerir - bu açıkça daha iyi veri tutarlılığı sağlar, ancak performans cezası ve daha yüksek aşınma seviyesi pahasına SSD'nizde.


Yazma önbelleği benim sorunum mu yoksa başka bir şey mi?
Jonathan Henson

Peki, nasıl bilmeliyim, sonuçta sizin sisteminiz :-) Kullanılan dosya sistemi bağlama seçenekleri hakkında bazı ayrıntılar vermelisiniz (uzantıları etkinleştirdiniz mi? Ne tür veri / günlük modu?) Ve yolsuzluk türü daha ayrıntılı bir analiz için görmek (fsck çıktısı en iyisi olacaktır).
the-wabbit

Tamam teşekkürler. Bildiğiniz çaresiz bir yazılım mühendisiyim :). Bazı detayları öğreneceğim. Birkaç dakika içinde bazı ayrıntılar ekliyorum.
Jonathan Henson

Uzantıların ne olduğunu bilmiyorum ve Dergi modunun ne olduğundan emin değilim.
Jonathan Henson

Ah, anlıyorum. Çıktının ilk satırlarını dumpe2fs /dev/sda1(veya bu sistem için cihaz / bölüm adınız ne olursa olsun) gönderin - ilgili tüm bilgileri içermelidir. Ve / etc / fstab kök dosya sistemi için de montaj seçenekleri de yardımcı olacaktır.
the-wabbit

5

Yazma önbellek önerisi iyi bir başlangıç ​​ama bu mimari tasarım hatası gibi görünüyor. Gömülü bir sistemde, dahili flaş, nadir durumlar dışında muhtemelen R / W monte edilmemelidir. Gerçekten bir bellek dosya sistemindeki işlerin çoğunu yapmalı ve bazı kullanıcı komutları veya düzenli aralıklarla değişiklikleri RW flaşına senkronize etmelisiniz. Gömülü bir sistemin normal çalışma sırasında rw modunda normal bir dosya sistemini (ext4 gibi) kullanması gerçekten nadirdir. Çok fazla depolama alanına ihtiyaç duyduğunuz bir uygulama gereksinimi varsa, sistem bölümünüzü farklı hale getirmeyi ve veri bölümünün başlangıçta bir parçası olarak fsck -y'ed olabilecek şekilde tasarlamayı düşünmelisiniz.

Bazı başlangıç ​​noktalarına ihtiyacınız varsa, insanların Disksiz Linux sistemlerini nasıl kurduklarına bakarım:

http://frank.harvard.edu/~coldwell/diskless/

ve oradan başlayın. Genel fikir, sistem ikili dosyalarınızın ve verilerinizin salt okunur olarak monte edilebilmesi, böylece dosya sisteminizin bozulmamasıdır. Bununla birlikte, belirli alanlara yazabilmeniz gerekir, bu nedenle genellikle bellek dosya sistemi / tmp, / var / tmp için bir şeye ihtiyacınız vardır. Bazı şeylerin yazılabilir olması gerekse bile, bölümü r + w olarak monte etmek ve daha sonra değişiklikleri uygulamak için bir komut dosyası oluşturursunuz, daha sonra salt okunur olarak geri dönersiniz.

Bunun gerçekten harika bir örneği Cyclades donanımı, gömülü linux'u ve yapılandırma değişikliklerini her yaptığınızda, aslında yapılandırmaları yeniden çağıran ve bunları flash'a yazan bir kaydetme komut dosyası yürütmeniz gerekir.


Uygulama tarafından düzenlenmesi gereken yapılandırma dosyaları, / etc / ağları ve ana bilgisayar adı dosyası vardır. Bana bir öneri verebilir misiniz, örneğin böyle bir bölüme ve başka türdeki yapılandırma dosyalarınız için başka bir bölüme ihtiyacınız var mı? Bunlar hakkında gerçekten hiçbir fikrim yok. Yazılım yazıyorum ve sihirli bir şekilde tam olarak bilmesi bekleniyor (nix yazılımı yazmak için yeterince bilmiyorum, ama kesinlikle özel bir sistem adamı kadar bilmiyorum) donanımın işverenim tarafından nasıl çalışması gerektiğini.
Jonathan Henson

Elbette, cevabı biraz daha bilgi içerecek şekilde güncelledim. Bu, birçok linux iç ile uğraştığı için bir soruyu ele almak için oldukça karmaşık bir konudur. Uygulama gereksinimlerinizi anlamak ve güvenilir bir çözüm tasarlamadan önce disksiz / pxe / katıştırılmış sistemler yapmış birini denemek ve sözleşme yapmak isteyebilirsiniz.
polinom

En kötü durumda, bir sistem bölümü (hiçbir zaman yazılamaz) ve iki yapılandırma bölümü kullanabilirsiniz. Birincil bölüm okunamıyorsa veya eksikse, ikincil bölümden önyükleme yapın, birincil bölümü yeniden biçimlendirin ve ikincil bölümü içine kopyalayın. Çakışan olmayan işlemlerde birincil ve ikincil öğeleri güncelleyin.
David Schwartz

Tamam, cevabımı güncelledim. Muhtemelen tavsiyenizi alacağım ve bunu lisansüstü programımdaki eski bir profesöre götüreceğim. Bu arada, en azından beni bir tavada kıçımı içermeyen daha iyi bir konuma getirecek hızlı ve kirli mi?
Jonathan Henson

Yazma önbelleğini kapatmak veya düzenli olarak 'senkronizasyonu' çalıştırmak kısa vadede yardımcı olacaktır.
polinom
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.