Como descartar / TRIM um intervalo em um arquivo aberto?

4

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

Minha pergunta é

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

    
por Wu Xingbo 20.06.2014 / 21:45

1 resposta

7

Você está procurando fallocate ' FALLOC_FL_PUNCH_HOLE . Cabe então ao sistema de arquivos descartar / aparar / desmapear esses blocos. Eu acredito que o ext4 fará isso.

Por exemplo, você faria algo assim para descartar 2MiB iniciando 1MiB em:

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

No sucesso, leituras futuras desses bytes devem dar 0s.

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

    
por 20.06.2014 / 22:26