Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- devicedriver
- fastpath
- buddy_system
- commit
- slowpath
- vm_area_struct
- slub
- Network
- blk-mq
- Android
- Kernel
- proc
- lruvec
- Linux
- strex
- spinlock
- kmalloc
- BLOCK
- pmap
- memory
- 카프카
- allocator
- vmalloc
- slab
- mm_struct
- page
- NDK
- multiqueue
- kafka
- Apache
Archives
- Today
- Total
Art of Pr0gr4m
File Hole Hint 본문
프로그램이 파일의 끝 너머로 파일 오프셋을 옮기고 쓰기 작업을 하면, 파일 중간에 빈 공간이 생긴다.
이전의 파일 끝과 새로 쓴 바이트들 사이의 이 공간을 파일 구멍(file hole)이라고 한다.
프로그래밍 관점에서 보면 파일 구멍 속에서도 바이트들이 존재하고, 읽을 시 0으로 채워진 바이트들의 버퍼를 리턴한다.
하지만 파일 구멍은 디스크 공간을 차지하지 않고 파일 시스템은 나중에 파일 구멍에 데이터가 쓰여질 때 디스크 블록을 할당한다.
여기서, 디스크 공간 할당에 대해서 블록 할당의 개념을 잘 알아둬야 한다.
대부분의 파일 시스템이 파일 공간을 블록 단위 (1K / 2K / 4K 등)로 할당하기 때문에
파일 구멍이 블록 경계에 걸치지 않고 블록 안에 들어간다면, 구멍이 있든 없든 똑같이 블록 하나가 온전히 할당되며
구멍에 해당되는 부분이 널로 채워질 뿐이다.
아무튼, File hole이 존재할 수 있기 때문에, 파일의 명목상 크기와 실제 사용하는 디스크 저장소 크기보다 더 클 수 있다.
따라서, 파일 구멍 중간에 바이트들을 작성하면 파일의 크기는 변하지 않는데 디스크 할당량은 늘어날 수 있다. (빈 공간이 줄어들 수 있다.)
이는 다시 말해 write 작업으로 파일 크기가 변하지 않아도 디스크 공간 부족으로 실패 하는 일이 있을 수 있는 것이다.
이와 관련해서 SUSv3에서는 디스크 공간 할당이 보장되는 함수 posix_fallocate를 정의하고 있다.