메아리 저널

파일 크기가 의미해야 하는 것

Engineering Windows 7에 올라온 글을 보고 생각을 좀 해 봤다. (솔직히 저 글 번역체가 물씬 풍기는데…)

파일 크기와 실제 사용하는 크기가 차이나는 이유는 크게 몇 가지가 있다. 이건 대부분의 "현대적인" 파일 시스템(NTFS, ext3, XFS, ReiserFS, 등등등)에 모두 통용되는 얘기다.

  • 일단 파일 크기 이외에도 파일을 관리하는 데 사용되는 영역이 있을 수 있다. (FAT 같은 경우 할당 테이블)
  • 한 파일에 여러 개의 데이터 스트림(fork라고도 함)이 붙어 있을 수도 있으며, 메타데이터가 잔뜩 붙어 있을 수도 있다.
  • 파일 시스템 수준에서 파일이 압축되어 있을 수도 있다.
  • 해당하는 파일의 실체가 다른 곳에 중복되어 있어서(심볼릭 링크 같은 경우) 굳이 다시 셀 필요가 없는 경우.

위의 글에서는 WinSxS를 들면서 왜 저게 실제로 디스크 공간을 잡아 먹는 게 아닌지 설명하고 있는데, 나는 그럴 거면 왜 "사용하는 크기" 란에 하드 링크 용량도 넣어서 사람들을 헷갈리게 만드냐고 되묻고 싶다. 물론 하드 링크라는 것이 실제로는 일반 파일과 의미상으로 차이가 나는 건 아니지만1 조금만 신경 쓰면 적어도 이런 상황에 대해서 경고 정도는 해 줄 수 있지 않을까 싶다. 예를 들어 inode를 가리키는 파일이 여러 개 있으면 "여기에 있는 파일 중 일부는 다른 디렉토리에 있는 파일과 중복되어 별도의 디스크 공간을 더 사용하지 않습니다" 정도의 메시지는 띄워 줄 수 있지 않겠냐는 거지.

컴퓨터에서 사용자를 고려할 수 있는 모든 기술은 사용자 인터페이스에 대한 고려가 꼭 있어야 한다고 생각하는데 이것도 그런 상황이 아닐까 싶다.


  1. 유닉스에서 말하는 식으로 하자면, 파일은 inode라고 하는 실제 데이터 영역의 레퍼런스에 불과하다. 그리고 하드링크는 원래 파일과 같은 inode를 가리키도록 만들어진 것이라 원래 파일과 의미상으로는 구분이 불가능하다.

이 글은 본래 http://mearie.org/journal/2009/01/what-should-file-size-mean에 썼던 것을 옮겨 온 것입니다.


(rev 797ba6fb3720)