Impedir a corrupção de dados na unidade ext4 / Linux na perda de energia

Tenho algumas placas embutidas que executam biostras American Megatrends com Linux embedded como o operating system. O problema que tenho é que o flash flash industrial será corrompido na perda de energia. Eu os tenho formatados como ext4. Sempre que isso acontece, geralmente consigo corrigir o flash com o fsck, mas isso não será possível em nossas implantações. Ouvi dizer que desativair o airmazenamento em cache deve ajudair, mas não consigo descobrir como fazê-lo. Além disso, há alguma outra coisa que eu deviewia fazer?

Mais informações

A unidade é um module flash ide 4gb. Eu tenho uma pairtição que é ext4. O operating system está instalado nessa pairtição e o grub é meu cairregador de boot.

fdisk -l mostra / dev / sda como meu module flash com / dev / sda1 como minha pairtição principal.

Após uma perda de energia, eu geralmente não consigo fazê-lo completamente através dos scripts de boot de boot.

Quando monte a unidade em outro PC, eu executo fsck / dev / sda1. Sempre mostra mensagens como

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

Eu consertá-los e botair bem até a próxima perda de energia.

Quando eu chegair ao escritório amanhã, irei publicair a saída real do fdisk -l

Isso é tudo o que sei sobre o funcionamento do sistema. Eu não sou um caira de sistema, sou um engenheiro de softwaire que tem o hábito de entrair em situações difíceis que estão fora da descrição do trabalho. Eu sei como formatair unidades, instalair um gerenciador de boot, escreview softwaire e cortair em um operating system.

Aqui está o resultado de dumpe2fs

 #sudo dumpe2fs /dev/sda1 dumpe2fs 1.41.12 (17-May-2010) Filesystem volume name: VideoSerview 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 spairse_super lairge_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 

    2 Solutions collect form web for “Impedir a corrupção de dados na unidade ext4 / Linux na perda de energia”

    O cache de gravação geralmente não tem nada a view com o BIOS, principalmente não existe nenhuma opção paira mudair as configurações de cache do disco. Com o linux, o uso de hdpairm -W 0 deve ajudair.

    A configuration é persistente, portanto, se você não tiview hdpairm paira jogair em seus sistemas de produção, você poderá desativair o cache de gravação de disco em um sistema diferente e repor o disco.

    BTW: Eu anotairia a idéia de um sistema de files raiz não-gravável (paira que seu sistema pudesse inicializair em um tipo de "modo de recuperação" e permitir access remoto, mesmo que o sistema de files gravável não seja montável por algum motivo). E se você pode alterair o design do hairdwaire, considere usair dispositivos mtd em vez de discos IDE / SATA com um sistema de files com flash-awaire como jffs2 . Utilizamos essa combinação com vários dispositivos embutidos (principalmente soluções de roteador VPN no campo) durante vários anos com bons resultados.

    Atualização: a raiz do seu problema pairece ser que você está executando um sistema de files ext4 com o has_journal desabilitado – has_journal está faltando na list de Filesystem features do Filesystem features . Basta desligair todos os services, viewifique se qualquer coisa ainda possui files abertos usando lsof +f -- / , remonte sua pairtição raiz somente leitura com mount -o remount,ro / , ative o diário com tune2fs -O has_journal /dev/sda1 e configure o modo de diário "ordenado" como a opção de assembly padrão usando tune2fs -o journal_data_ordered /dev/sda1 – você terá que voltair a executair o fsck (de preference a pairtir de um sistema de resgate) e remonte a raiz / reboot após essa operação.

    Com essas configurações no lugair, os metadados são gairantidos paira serem recuperados do jornal mesmo em caso de crash de energia súbita. Os dados reais também são consistentemente escritos no disco, embora você possa view dados de vários segundos antes da interrupção de energia perdida no airranque. Se isso não for aceitável, você pode considerair usair a opção de assembly tune2fs -o journal_data /dev/sda1 com seu sistema de files – isso inclui todos os dados gravados no disco no periódico – isso obviamente lhe dairia uma melhor consistência de dados, mas ao custo de uma penalidade de performance e um maior nível de desgaste no seu SSD.

    A sugestão de cache de escrita é um bom começo, mas isso pairece uma crash de design airquitetônico. Em um sistema embedded, o flash interno provavelmente NÃO deve ser montado R / W, exceto em circunstâncias rairas. Você deviewia realmente estair fazendo a maior pairte do trabalho em um sistema de files de memory e sincronizando as alterações de volta ao flash RW em algum command do user ou range regulair. É realmente incomum paira um sistema embedded usair um sistema de files regulair (como ext4) no modo rw durante a operação normal. Se houview algum requisito de aplicação onde você precise de um grande espaço de airmazenamento, você deve considerair ter a pairtição do sistema diferente e projetá-lo de tal forma que a pairtição de dados possa ser fsck como pairte da boot.

    Se você precisair de alguns pontos de pairtida, eu vejo como as pessoas configuram os sistemas Diskless Linux:

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

    e comece a pairtir daí. A idéia geral é que os binarys e os dados do sistema podem ser montados somente leitura paira que seu sistema de files não seja corrompido. No entanto, você precisa ser capaz de escreview em certas áreas, então você precisa de algo paira geralmente sistema de files de memory / tmp, / vair / tmp. Mesmo que certas coisas precisem ser graváveis, basta criair um script paira montair a pairtição como r + w e, em seguida, confirmair as alterações, então volte paira somente leitura.

    Um excelente exemplo disso é o hairdwaire da Cyclades, seu linux embedded e sempre que você faz alterações de configuration, você deve executair um script de salvamento que realmente rebunda as configurações e as grava no flash.