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