Em alguns sistemas de arquivos, ao criar um arquivo, é necessário chamar fsync() não apenas no arquivo em si, mas também no diretório pai, para tornar a criação do arquivo durável. Caso contrário, a entrada do diretório poderá ser perdida em uma desmontagem impura; o inode do arquivo ficaria órfão.
Isso ainda é verdade para o ext4 ou o jornal cuida disso?
Muitos aplicativos (por exemplo, vim, verificado pelo strace) parecem chamar fsync apenas no arquivo. Isso é seguro?
Atualização: Emcometer 14ece1028b3ed53ffec1b1213ffc6acaf79ad77cpara o kernel, ext4 é alterado especificamente para que,com registro no diário desativado, a entrada do diretório pai é automaticamente fsync() executada ao fsync() do próprio arquivo. Mas e quanto ao registro no diário habilitado? O diretório fsync() está implícito, pois faz parte da mesma transação que a criação do novo inode?
Responder1
Eu diria que "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 eles são ou não confirmados imediatamente depende em parte das configurações de hardware.
No caso em que o ext4 é montado com pelo menos registro no diário de metadados e o subsistema não está armazenando gravações em cache, sugiro que você não precise sincronizar o diretório.
No entanto, a partir'ext4 vs fsync' de Larsson:
Deve-se notar que o POSIX e até mesmo o ext4 não oferecem garantias de que o arquivo sobreviverá a uma falha do sistema, mesmo usando o fsync.
Não é uma resposta completa, mas a postagem do blog em questão aborda questões de registro no diário e perda de dados. Embora não seja recente, acredito que ainda representa o status do ext4 hoje e seus comentários sobre quando usar ou não o fsync têm mérito.