Digamos que seu programa esteja gravando informações em um arquivo. Como o disco recupera seu arquivo se houver uma falha no sistema?

6

E esse travamento do sistema acontece enquanto seu arquivo está sendo gravado pelo seu programa?

Além disso, é o caso de quando seu programa grava no arquivo, ele não está escrevendo diretamente no disco, mas sim na memória?

Porque parece que seria mais eficaz para o sistema transferir os dados gravados para a memória e, em seguida, quando é completamente escrito para transferir as coisas de volta para o disco.

Em qualquer caso, como o disco recupera dados se o seu programa grava diretamente no disco, ou se o arquivo final está sendo copiado pelo sistema para vários locais no disco?

    
por Kaitlyn Mcmordie 24.10.2011 / 21:54

2 respostas

7

Because it just seems like it would be more effective for the system to transfer the written data to memory, and then when it's completely written to transfer things back to the disk.

Nos sistemas operacionais modernos, o acesso a arquivos é armazenado em buffer. Seu programa grava em uma parte da memória que é mantida pelo sistema operacional e, quando essa área fica cheia, ou quando você fecha o arquivo, o buffer é gravado no disco. Dessa forma, você pode escrever vários gigabytes de dados aleatórios em um arquivo, se quiser, mas não consome muita memória enquanto faz isso. Ao mesmo tempo, o subsistema de disco fica livre para fazer outras coisas enquanto seu programa está escrevendo alguns bytes de cada vez.

In any case, how does the disk recover data whether your program writes directly to disk, or whether the finished file is in the process of being copied over by the system to various locations on the disk?

Depende do sistema operacional e do sistema de arquivos específico. Muitas vezes, os dados são gravados em um novo arquivo no disco. Quando o programa fecha o arquivo, o buffer é liberado e o diretório é atualizado para apontar para o novo arquivo, em vez do antigo, que pode ser excluído posteriormente. Isso evita corrupção de dados se o sistema falhar durante a gravação - a alteração do diretório no último momento cria a ilusão de gravações "atômicas".

Você pode querer ler sobre os sistemas de arquivos registrados e sistemas de arquivos transacionais .

Outras estratégias também são possíveis. Livros inteiros estão disponíveis em sistemas de arquivos e tolerância a falhas.

Finalmente, às vezes, o sistema de arquivos não pode recuperar seu arquivo. Às vezes não pode se recuperar de jeito nenhum. As estratégias que mencionei acima são respostas aos tipos de problemas que você está perguntando e, até onde eu sei, elas são muito eficazes em manter o disco em um estado consistente. Os sistemas de arquivos mais antigos não eram tão bons, e se você perdesse energia apenas quando o disco estivesse sendo gravado, o arquivo ou o disco inteiro poderia ficar comprometido. Costumava haver um grande mercado para utilitários de reparo de disco, como o Norton Disk Doctor. Esse mercado parece ter diminuído com implementações de sistema operacional mais confiáveis, mas alguns desses produtos ainda estão disponíveis.

    
por 24.10.2011 / 22:10
5

A maioria dos sistemas de arquivos modernos são registrados . Isso significa que há um diário de alterações no arquivo / sistema de arquivos. Em falhas, a última entrada pode ser revertida se não estiver marcada como concluída; ou se houver informação suficiente, pode ser promulgada.

A Wikipedia tem isto:

To prevent this [data loss on crash], a journaled file system allocates a special area—the journal—in which it records the changes it will make, ahead of time. After a crash, recovery simply involves reading the journal from the file system and replaying changes from this journal until the file system is consistent again. The changes are thus said to be atomic (or indivisible) in that they either: succeed (succeeded originally or are replayed completely during recovery), or are not replayed at all (are skipped because they had not yet been completely written to the journal before the crash occurred).

No Windows (vista e além), existe uma tecnologia chamada Volume Shadow Copy (VSS), que faz o sistema de arquivos agir de maneira "copy-on write", ou seja, quando você escreve em um arquivo, esse arquivo antigo não está sendo destruído, e é de fato mantido intacto. Isso permite a restauração após falhas, mas, mais importante, também permite acesso à última versão estável do arquivo no caso de um bloqueio de arquivo e um processo (como um serviço de backup) precisa ler esse arquivo.

    
por 24.10.2011 / 22:07