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