ZFS에는 두 가지 블록 크기가 존재함. 하나는 zVol의 블록 크기인 volblocksize, 다른 하나는 파일시스템의 블록 크기인 recordsize임.


기본값으로 volblocksize는 16KiB, recordsize는 128KiB로, 하나의 파일이 기본적으로 8개의 block으로 쪼개져 분산 저장될 수 있게 구성되어 있음.


그러니까, ZFS를 쓰면 파일은 이미 '조각나서' 저장됨. 단지 병렬 읽기와 ARC로 그 영향을 최소화 하는 거지.



실제로 문제가 되는 지점은, '쓰기 공간이 단편화 되는 것' 이고, 이 영향은 당연히 플래시 미디어보다 회전 디스크에서 훨씬 크게 나타남.


사실 플래시 미디어를 쓴다면 쓰기 공간 단편화를 걱정할 필요는 없고, 회전 디스크를 쓰는 경우에도 ZFS 동기 쓰기는 slog에 먼저 커밋되고 디스크에 기록되기 때문에, 이로 인한 지연 시간은 사용자에게 감춰지게 됨.


지속 쓰기로 인해 slog flush가 느려지고, slog가 '넘치게' 되면, 그 때부터는 지연시간이 직접 노출되겠지만, 이런 사용 사례는 매우 드물고, 일반적인 파일 쓰기가 이런 상황을 만들 가능성은 거의 없음.



현대의 Log-structured File System들은 로그 단위 기록 + 주기적인 재배치로 이러한 여유공간 단편화를 줄이는 메커니즘을 가지고 있지만, ZFS는 그렇지 않음.


ZFS의 구조가 마음에 들지 않는다면 상용 스토리지를 쓰십시오.