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

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

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라는 태그를 달았으니 괜찮기를 바랍니다.]

관련 정보