Primeiro, você está certo ao suspeitar que "todos os dados" não significam todo o arquivo. Na verdade, essa camada do sistema de arquivos opera em blocos de arquivos de tamanho fixo, não em arquivos inteiros. Nesse nível, é importante manter uma quantidade limitada de dados, portanto, trabalhar em arquivos inteiros (que podem ser arbitrariamente grandes) não funcionaria.
Em segundo lugar, há um equívoco na sua pergunta. O comportamento de registro no diário não é algo que você pode observar observando o conteúdo do diretório com ls
, ele funciona em um nível muito mais baixo. Com ferramentas normais, você sempre verá que o arquivo está lá. (Seria catastrófico se a criação de um arquivo não aparecesse, você sabe, crie-o.) O que acontece sob o capô é que o arquivo pode ser armazenado de maneiras diferentes. Primeiramente, os primeiros blocos são salvos no diário. Então, tão logo quanto possível, os dados são movidos para o seu local final. Ainda é o mesmo arquivo no mesmo diretório, apenas armazenado de forma diferente.
A única maneira de observar o comportamento do registro em diário é ver o que o kernel está gravando no disco ou analisar o conteúdo do disco após uma falha. Em operação normal, o diário é um detalhe de implementação: se você pudesse vê-lo em ação (diferente de desempenho), ele seria seriamente quebrado.
Para mais informações sobre os periódicos do sistema de arquivos, eu recomendo começar com o artigo da Wikipedia . Em termos ext3, um data=journal
garante que, se o sistema travar, cada arquivo estará em um estado que teve em algum momento antes do travamento (nem sempre é o estado mais recente devido ao armazenamento em buffer). A razão pela qual isso não acontece automaticamente é que o kernel reordena as gravações de disco para eficiência (isso pode fazer uma grande diferença). Isso é chamado de “diário físico” no artigo da Wikipedia. Os outros dois modos ( data=ordered
e data=writeback
) são formas de "diário lógico" : eles são mais rápido, mas eles podem levar a arquivos corrompidos. A revista limita o risco de corrupção a alguns arquivos contendo lixo; O ext3 sempre usa um diário completo para metadados. Sem um diário para metadados, os metadados podem se perder, levando a uma grande corrupção do sistema de arquivos. Além disso, sem um diário, a recuperação após uma falha exige uma verificação completa da integridade do sistema de arquivos, enquanto que, com a recuperação de um diário, é necessário repetir algumas entradas no diário.
Note que mesmo com um journal, sistemas de arquivos unix típicos não garantem a consistência global do sistema de arquivos, somente a consistência por arquivo no máximo. Isto é, suponha que você grave no arquivo foo
, então você escreve no arquivo bar
, então o sistema trava. É possível que bar
tenha o novo conteúdo, mas foo
ainda tenha o conteúdo antigo. Para ter consistência completa, você precisa de um sistema de arquivos transacional .