Como descartar/TRIM um intervalo em um arquivo aberto?

Como descartar/TRIM um intervalo em um arquivo aberto?

Para um SSD, posso abrir o dispositivo de linha e descartar um intervalo de páginas usando ioctl()o BLKDISCARDcomando.

Minha pergunta é

para um arquivo aberto, como descartar um intervalo de dados? e isso depende da implementação do sistema de arquivos subjacente?

Responder1

Você está procurandofallocatedeFALLOC_FL_PUNCH_HOLE. Cabe então ao sistema de arquivos descartar/cortar/desmapear esses blocos. Eu acredito que o ext4 fará isso.

Por exemplo, você faria algo assim para descartar 2MiB começando com 1MiB em:

err = fallocate(fd, FALLOC_FL_PUNCH_HOLE|FALLOC_FL_KEEP_SIZE, 1048576, 2097152);
if (0 != err) {
    /* handle error */
}

Em caso de sucesso, as leituras futuras desses bytes deverão fornecer 0s.

[Nota: POSIX não tem como fazer isso. O fallocate acima é específico do Linux. Mas você marcou sua pergunta como Linux, então espero que esteja tudo bem.]

informação relacionada