A criação de arquivos é durável no ext4?

2

Em alguns sistemas de arquivos, ao criar um arquivo, é necessário chamar fsync () não apenas no próprio arquivo, mas também no diretório pai, para tornar a criação do arquivo durável. Caso contrário, a entrada do diretório pode se perder em uma desmontagem impura; o arquivo inode seria órfão.

Isso ainda é verdade para o ext4, ou o jornal cuida disso?

Muitos aplicativos (por exemplo, vim, como verificado por strace) parecem chamar fsync somente no arquivo. Isso é seguro?

Atualização: Em envie 14ece1028b3ed53ffec1b1213ffc6acaf79ad77c para o kernel, o ext4 é alterado especificamente para que , com journaling desativado , a entrada de diretório pai é automaticamente fsync () ed quando fsync () o próprio arquivo. Mas e o journaling habilitado? O diretório fsync () é implícito, já que faz parte da mesma transação que a criação do novo inode?

    
por lxgr 25.09.2012 / 18:18

1 resposta

2

Eu diria "depende" em parte, porque o ext4 pode ter suas opções de diário alteradas, de modo que arquivos inteiros ou apenas metadados sejam registrados, e se estes são ou não imediatamente comprometidos, depende em parte das configurações de hardware.

No caso em que o ext4 é montado com pelo menos registro em metadados e o subsistema não está gravando em cache, eu sugiro que você não precise fsync no diretório.

No entanto, de "ext4 vs fsync" de Larsson :

It should be noted that POSIX, and even ext4 gives no guarantees that the file will survive a system crash even if using fsync.

Não é uma resposta completa, mas a postagem do blog em questão elabora problemas de registro no diário e de perda de dados. Embora não seja recente, acredito que ainda represente o status do ext4 hoje e seus comentários sobre quando usar ou não usar o fsync têm mérito.

    
por 25.09.2012 / 19:33