Dado qualquer arquivo em um sistema de arquivos ext4, é possível (usando filefrag -v
) obter a lista de deslocamentos + comprimentos reais onde esse arquivo está localizado no dispositivo de bloco subjacente.
É seguro abrir o dispositivo e gravar neles, tudo isso enquanto o sistema de arquivos está montado para leitura e gravação? Isso pode causar corrupção no FS?
Estou perguntando porque vou implementar um loop
driver alternativo, que irá ignorar completamente a camada do sistema de arquivos, tendo portanto um desempenho muito melhor.
Se bem me lembro, swapfile é implementado exatamente dessa maneira. Por favor, corrija-me se disser algo errado.
A resposta depende do sistema de arquivos? O que pode acontecer se o arquivo for excluído repentinamente e essas compensações forem reutilizadas para alguns metadados ?
Finalmente, existe uma maneira de impedir que um arquivo seja realocado e4defrag
ou algo semelhante? Qual é a melhor maneira de evitar que um arquivo seja excluído (estando no espaço do kernel)? Existem alguns componentes internos do kernel que posso usar para obter a lista de extensões de arquivos?
Se as gravações forem apenas nos blocos do arquivo, isso não corromperá o sistema de arquivos ext4. No entanto, há definitivamente um risco maior de que algum erro no código possa corromper o sistema de arquivos, o que não aconteceria com um dispositivo de loop regular que usa apenas o mapeamento de arquivos.
A questão é se escrever diretamente no dispositivo de bloco realmente fará diferença no desempenho?
Você pode evitar que o arquivo seja excluído marcando-o como imutável com
chattr +i FILENAME
.