Há um erro nesta questão. A questão implicava que este cenário fosse totalmente <-em-safe sem falhas por auto_da_alloc
. Isso não é verdade para o ext4. Eu presumo que não seja verdade no antigo ext3 também. No entanto, é verdadeiro para btrfs e para bcachefs.
Recent ext4 does have a special workaround to reduce the chance of replace-via- rename producing zero-length files by forcing out the new data blocks upon rename . However, rename does not wait for this flush to complete, and therefore provides no atomicity guarantee—it is possible to end up with only partial new content after a crash. Of the file systems we tested, btrfs is the only one that provides the replace-via-rename atomicity guarantee.
btrfs
documentação diz renomear () no btrfs fornece total atomicidade, e não precisa de um fsync () explícito para proteger os dados contra falhas. Acho que foi adicionado quase ao mesmo tempo que ext4 auto_da_alloc
. Também vemos uma afirmação de que a implementação do btrfs evita a degradação do desempenho, pois não faz com que a chamada rename () espere.
bcachefs
atualmente parece fornecer o nível total de proteção, embora eu não tenha encontrado nenhuma documentação. Verifique o código no link
XFS
rejeitou adicionando soluções alternativas de segurança contra falhas para renomear (). Ele aparentemente ganhou código que reduz (mas não remove) o risco de perda de dados em um caso diferente.
UBIFS
(usado, por exemplo, em muitos dispositivos Openwrt) não inclui nenhuma solução alternativa de segurança contra falhas para renomear (). Poderia ser aceito, mas exigiria muito trabalho. link