Como o fsync trata os links de diretório?

0

Qual é o significado da seguinte declaração da página man do fsync

Calling fsync() does not necessarily ensure that the entry in the directory containing the file has also reached disk. For that an explicit fsync() on a file descriptor for the directory is also needed.

Isso significa que o fsync não atualizará os metadados do diretório quando eu chamar o fsync em um arquivo?

Outra citação para o mesmo problema é (de Robert Love's Book of Linux System Programming):

Neither function guarantees that any updated directory entries containing the file are synchronized to disk. This implies that if a file’s link has recently been updated, the file’s data may successfully reach the disk but not the associated directory entry, rendering the file unreachable.

Por que os dados de um arquivo precisam alcançar um link de diretório? Corrija-me se estiver errado, mas os diretórios contêm apenas o nome do arquivo e o número do inode para esse arquivo. Os dados reais estão no arquivo. Qual é o significado de "os dados chegarão ao arquivo, mas não ao link do diretório"

    
por ng.newbie 04.01.2018 / 12:26

1 resposta

1

Isso significa:

if a file’s link has recently been updated

the file’s data may successfully reach the disk but

a entrada do diretório associado pode não alcançar o disco com sucesso

rendering the file unreachable.

Especificamente, isso pode ser uma preocupação ao criar um novo arquivo. Eu ignoraria a generalização para "um link de arquivos", a menos que você saiba que os hard links estão sendo criados.

Does it mean that fsync won't update the directory metadata when I call fsync on a file?

Sim. Ou melhor, você não pode confiar nisso. (É possível que algumas implementações sempre o atualizem antes do fsync retornar).

    
por 04.01.2018 / 12:56