grep

Engineering

Sparse file 소개

NHN

2015년 11월 30일

원문에서 보기 ↗

안녕하세요. NHN엔터테인먼트 이진우입니다. 업무 상 iSCSI - Disk Image를 다루면서 알게된 Sparse file에 대해 소개를 해보려고 합니다.

*** 도움말) iSCSI : IP기반의 스토리지 네트워킹 표준**

보통 사람들은 컴퓨터에 운영체제를 설치할 때, Disk 용량 산정에 있어서 그렇게 큰 고민을 하지는 않습니다. 그러나 Disk Image ** Server를 구축해야하는 일이 생긴다면, 최소한의 저장 공간으로 최대한 많은 Disk Image들을 관리해야 할 필요가 생기게 됩니다. **

일반적으로는 M GB짜리 Disk Image를 N개 다뤄야 한다면, M*N GB만큼의 저장공간이 소요됩니다. 이럴 때 아래와 같은 용량 산정 고민이 발생할 수 있습니다.

** 용량 산정 고민 **

위의 해결방안대로 크기 상한선을 넉넉히 둘 수 있습니다. 하지만 많은 공간을 빈 상태로 두게 된다면 저장 공간이 낭비될 수 있으며, 해당 Disk Image를 백업하고 싶을 때도 워낙 할당된 File Size가 커서 백업이 다소 버거울 수 있습니다.

그러면 이 문제를 어떻게 해결해야 할까요? 해결책으로 'Sparse file'이 사용될 수 있습니다. wiki에서 발췌한 Sparse file 설명을 보겠습니다.

Sparse File : In computer science, a sparse file is a type of computer file that attempts to use file system space more efficiently when the file itself is mostly empty. This is achieved by writing brief information (metadata) representing the empty blocks to disk instead of the actual "empty" space which makes up the block, using less disk space. The full block size is written to disk as the actual size only when the block contains "real" (non-empty) data.

1.png

A sparse file: The empty bytes don't need to be saved, thus they can be represented by metadata.

Sparse file은 생성될 때 전체 크기를 할당하지 않고 실제 데이터가 존재하는 영역만 생성하며, 쓰기가 있을 때만 블럭이 할당되므로 디스크 공간을 효율적으로 사용할 수 있습니다.

Sparse file은 Disk image, DB의 Snapshot 등에 사용된다고 합니다. 그럼 Disk image에 사용된 Sparse file 예시를 보겠습니다.

Sparse Disk File

2.png

h81m-windows7.img는 Windows OS가 설치된 Sparse disk file입니다. iSCSI 표준을 이용한 Remote Disk Service를 제공하기 위해 제작한 Disk image인데요.

ls 옵션 중에서 -s를 주면 실제로 할당된 크기를 볼 수 있습니다.

좌측의 Physical file size는 23GB, Logical file size는 50GB인 것을 볼 수 있습니다. 실제로 27GB가 아직 남아있기 때문에 그 만큼의 공간에 다른 파일을 저장할 수 있는 장점이 있습니다. 실제 파일 크기가 작으니 백업이 가벼운 점도 있겠지요.

그러면 Sparse file은 좋은 점만 있는건가요? 장점이 있는 만큼 단점 또한 있습니다.

장)

  1. 디스크 공간 절약
  2. 가용한 디스크 공간보다 큰 파일 생성 가능

단)

  1. 쓰기 작업 도중 문제 발생 가능 ( 저장장치 꽉참 또는 디스크 크기 할당량 초과 )
  2. 모든 복사/백업 소프트웨어에서 완벽한 지원이 보장되지는 않음

단점은 어떻게 해결해야 하나요? 실제로 Sparse file을 다루려면 사용하는 프로그램이 Sparse 옵션을 지원하는지 알아봐야 합니다. 다음에 포스팅을 하게 되면, Sparse file을 지원하는 프로그램에 대해 써보려고 합니다.

그럼 글을 마치겠습니다. 고맙습니다.

참고 link : http://en.wikipedia.org/wiki/Sparse_file