열린 파일에서 범위를 삭제/트림하는 방법은 무엇입니까?

열린 파일에서 범위를 삭제/트림하는 방법은 무엇입니까?

ioctl()SSD의 경우 with 명령을 사용하여 행 장치를 열고 일련의 페이지를 삭제할 수 있습니다 BLKDISCARD.

내 질문은

열린 파일의 경우 특정 범위의 데이터를 삭제하는 방법은 무엇입니까? 이는 기본 파일 시스템 구현에 따라 달라지나요?

답변1

당신이 찾고있는fallocate~의FALLOC_FL_PUNCH_HOLE. 그런 다음 이러한 블록은 파일 시스템에 의해 폐기/잘라내기/매핑 해제됩니다. 나는 ext4가 이것을 한다고 믿는다.

예를 들어 다음을 수행하여 1MiB부터 2MiB를 삭제할 수 있습니다.

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

성공하면 향후 이 바이트 읽기는 0을 반환해야 합니다.

[참고: POSIX에서는 이를 수행할 방법이 없습니다. 위의 fallocate는 Linux에만 해당됩니다. 하지만 질문에 Linux라는 태그를 달았으니 괜찮기를 바랍니다. ]

관련 정보