Evitar corrupção de arquivos

2

Eu tenho um aplicativo que grava arquivos em um diretório específico no FS. Este sistema, sob nenhuma circunstância, pode perder um único arquivo escrito.

Quando tenho algum problema no HD, como badblocks ou bloqueia diferenças de bitmap, arquivos novos e até existentes podem ser corrompidos, mas o rsync e o .tar backup acontecem normalmente e eu sei que o arquivo tem um problema apenas quando tento abri-lo.

Eu preciso de uma maneira de saber que um arquivo é corrompido assim que acontece ou, melhor ainda, saber que o disco tem um problema antes que ele quebre meus arquivos.

Eu estava pensando em manter um arquivo com o hash de cada arquivo e verificá-lo todos os dias, mas ele passaria mais tempo do que eu. Outra ideia seria colocar esses arquivos no SGDB, mas gostaria de saber se existe uma maneira melhor de resolver isso.

Tenho certeza de que estou sentindo falta de algo, mas sou cego.

Sistema: Debian 6 e Debian 7 32bit e 64bit (o aplicativo está instalado em muitos lugares). Todos os sistemas são ext4 (existe algum outro mais confiável?)

    
por slacker 28.04.2015 / 13:20

4 respostas

4

Se alguém conseguisse detectar facilmente quando setores estão prestes a ficar ruins ou ir mal, provavelmente teria sido trabalhado no sistema de arquivos até agora. Devido à natureza do erro, ele geralmente fica em silêncio. Você precisa de um sistema de arquivos que faz checksum. No GNU / Linux, o BTRFS pode ser uma boa aposta desde que eu olhei online e aparentemente o suporte foi introduzido no Debian 6.

Basicamente você precisa de checksum + raid (de algum tipo). Um sistema de arquivos só pode corrigir automaticamente se tiver pelo menos duas pernas em uma configuração RAID. Sem uma segunda etapa para ir, ela não tem para onde ir, a fim de encontrar uma cópia verificável do arquivo. Felizmente, você deve ser capaz de criar uma matriz RAID1 usando duas partições diferentes no mesmo disco (ou volumes lógicos, o que quer que você tenha disponível):

Obviamente,colocá-losnomesmodisconãoprotegecontraumdiscocompletamentedefeituoso,masprotegecontrasetorescomfalha.SimularumsetorfalidoéprovavelmentemaistrabalhodoqueeudeveriacolocaremumarespostaSE,mas esse cara (teste começa no 24:30 marca) atravessa uma demonstração para você.

Basicamente, o BTRFS recuperará opacamente o arquivo e o espaço do usuário não saberá que algo aconteceu. Você pode usar o btrfs scrub para detectar erros após o fato. Você pode executar isso em um cronjob e mandar um e-mail para uma de suas contas locais. Depois disso, você pode configurar /etc/aliases para encaminhar a saída do comando para sua conta de e-mail real.

    
por 28.04.2015 / 14:53
3

Você pode instalar e configurar as ferramentas de monitoramento do SMART. No Debian o pacote é chamado de smartmontools . Isso não impedirá a falha do disco, mas ajudará a identificar os precursores para possíveis falhas no disco.

Não há configuração na instalação do pacote, portanto, primeiro é necessário ativar o monitoramento SMART no arquivo /etc/default/smartmontools :

# uncomment to start smartd on system startup
start_smartd=yes

e edite o arquivo de configuração /etc/smartd.conf :

# The word DEVICESCAN will cause any remaining lines in this
# configuration file to be ignored [...]
# [...] Most users should comment out DEVICESCAN and explicitly
# list the devices that they wish to monitor.
#DEVICESCAN -d removable -n standby -m root -M exec /usr/share/smartmontools/smartd-runner


# Short test nightly, Long test on Sunday mornings; append "-m [email protected]" to email errors
/dev/sda -a -s (S/../.././02|L/../../6/03)
/dev/sdb -a -s (S/../.././04|L/../../6/05)
/dev/sdc -a -s (S/../.././06|L/../../6/07)
# /dev/sdd -a -s (S/../.././06|L/../../6/07) -m [email protected]

Por fim, inicie o subsistema de monitoramento, invoke-rc.d smartmontools start .

Há também algumas respostas muito boas em Monitorar a integridade do disco usando smartd (em smartmontools) em um servidor RAID 1 de software de alta disponibilidade

    
por 28.04.2015 / 14:02
2

Como não é possível prever quando e onde um disco está corrompido, a maneira mais fácil de evitar que o backup seja substituído por uma cópia corrompida é fazer um backup rotativo.

Então, basicamente, você pode fazer backups diários em locais diferentes. Quando você notar uma falha de disco e você tiver vários backups para restaurar, mesmo se o último for substituído por um corrompido.

Deve ser uma tarefa fácil com cron e rysnc e existem vários scripts para esse propósito.

    
por 28.04.2015 / 13:30
1

Esse tipo de segurança não deve ser tentado implementar do zero em cima de um sistema de arquivos. Em vez disso, sugiro reorganizar seu sistema e usar o ZFS. Com o ZFS, qualquer consistência é tratada no nível do sistema de arquivos, sem a necessidade de controlar as somas de verificação ou outros meios, e sem precisar explicitar o estado do arquivo em cada acesso ou com todas as ferramentas que acessam arquivos.

    
por 28.04.2015 / 15:15