본문 바로가기

카테고리 없음

윈도우즈 파일 시스템의 진화

출처 : http://cafe.naver.com/piepie00/179

윈도 2000의 설치과정에서 반드시 거쳐야 하는 부분이 바로 파일 시스템을 결정하고 파티션을 결정하는 과정입니다. 이 과정은 운영체제의 설치에서 밑바탕이 되므로 어떠한 시스템을 선택하느냐에 따라 전체의 성능에도 영향을 미칠 수 있는 중요한 요인이 됩니다. 따라서 윈도 2000의 첫 강좌로 파일 시스템에 대해 다루어보도록 하겠습니다. File System 도스, 윈도95나 윈도 98에서는 파일을 관리하기 위해 'FAT(File Allocation Table)'라는 방법을 사용하고 FAT은 다시 어떤 Entry를 사용하느냐에 따라 크게 FAT16, FAT32로 나뉘게 되고 FAT16의 확장된 개념인 VFAT가 있습니다. 또한 Windows NT의 경우 File system으로 NTFS 4.0을 Windows 2000의 경우 NTFS 5.0을 OS/2의 경우 HPFS를, Linux는 Ext2를 사용합니다. 이렇듯 운영체제에 따라 각각의 지원하는 File System을 가지고 있음에 주목해야 합니다. 지금부터 우리는 여러 가지 파일 시스템 중에서 윈도시리즈에서 사용하는 FAT와 NTFS에 대해 각각의 특징을 살펴보도록 하겠습니다.

FAT

FAT은 오랫동안 사용되었던 파일 시스템이기 때문에 윈도 NT, Win95/98, Macintosh, Linux, Unix 일부 버전 등 대부분의 운영체제가 FAT를 지원하고 있습니다. FAT 파일 시스템은 파일 이름을 8.3 이름 규칙에 따라 제한합니다. 다시 말해 확장자 전의 파일 이름은 8자 이상이 될 수 없으며 확장자는 3자로 제한합니다. FAT 파일 시스템의 파일 이름은 글자나 숫자로 시작해야 하며 공백 문자는 포함할 수 없고 대소문자를 구별하지 않습니다. FAT는 디스크를 일정한 크기의 영역으로 분할할 때, 그 하나하나의 영역의 사용상태(즉, 파일의 크기)와 영역의 논리적인 연결을 기록하기 위한 것입니다. 디스크를 일정한 크기로 분할할 때, 각 영역을 '클러스터'라고 부릅니다. 윈도(95/98)에서 사용되는 하드디스크의 섹터 크기는 대부분의 경우 512B가 사용되기 때문에 클러스터 크기의 현실적은 상한은 32KB로 제한되고 있습니다. 결국 클러스터 크기는 512, 1024, 2048, …., 32768B중의 어느 것을 취하게 됩니다.
FAT의 역사
FAT에 의한 관리방식은 1977년에 등장한 마이크로소프트의 DISK BASIC 시대부터 사용되어오고 있습니다. 그 당시 랜덤 액세스 미디어로는 160KB의 5인치 플로피디스크밖에 없었습니다. 'MS-DOS 1.25'가 등장했을 때는 디스크 베이직과의 파일호환성을 유지하기 위해 파일시스템으로 FAT가 사용되었습니다. 이 MS-DOS에서는 FAT엔트리가 12비트로 확장되어, 최대 128KB까지의 파일시스템을 구축할 수 있게 되었습니다. 'MS-DOS 2.11'이 등장할 때까지 10MB정도의 하드디스크밖에 없고, 또 매우 고가의 디스크였기 때문에 FAT12로도 충분히 여유가 있었습니다. 그러나 'MS-DOS 3.1'이 등장할 때에는 100MB 정도의 하드디스크가 등장하게 되었고, FAT12에 추가된 형태로 FAT16 지원이 추가되었습니다. 그 후 'MS-DOS 4.x'에서는 엔트리를 16비트로 확대하고 최대 2GB까지의 하드디스크를 지원했습니다. 이것이 그대로 윈도 95로 이어진 것입니다.

16비트 FAT의 한계

윈도 95의 등장 이래, 응용프로그램이 사용하는 파일수의 증가와 데이터의 거대화가 급속히 진행되고, 하드디스크의 용량도 점점 증가했습니다. 결국 새로 2GB 이하의 하드디스크를 찾는 것 자체가 어려워지게 됩니다. FAT16을 이용해 대용량 하드디스크를 이용하려면 2GB마다 파티션을 분할해, 최대 4개까지 동시에 액세스할 수 있는 파티션을 만들 수 있습니다. 결국 최대 8GB가 사실상의 한계 용량이 됩니다. 이처럼 하드디스크의 용량이 OS의 관리 가능 범위를 초월하는 비정상적인 상태를 맞게 되자, 사태는 긴급한 해결을 요구하게 됩니다.

FAT16에서 FAT32로

FAT를 32비트화 하려면 단순히 FAT 엔트리를 32비트화하는 것만으로는 안됩니다. FAT 파일 시스템에 관한 데이터 구조의 변경, API의 추가와 확장 및 유틸리티 등의 FAT32 지원이 필요합니다. 또 FAT의 크기가 커지는 데 따라 발생하는 문제도 처리해야 합니다. 오래된 디스크 유틸리티를 사용할 경우, FAT32에서 포맷된 하드디스크를 이용할 수 없게 되므로 주의해야 합니다. FAT16의 디스크 크기는 512KB에서 8KB, 2GB의 디스크에서 32KB가 되고 있습니다. FAT16에서 2GB의 하드를 이용하는 경우, 1KB의 파일을 만들 때 32KB의 용량을 사용하게 됩니다. 한편, FAT32에서는 8GB의 드라이브에서도 4KB 클러스터가 이용되고, 마찬가지로 1B의 파일을 만들 때 4KB 클러스터가 이용됩니다. 이러한 이유로 FAT32를 사용하게 되면 FAT16을 사용할 때보다 일반적인 디스크 용량의 이용효율이 10~20퍼센트 정보 향상된다고 알려지고 있습니다. FAT16의 확장, VFAT VFAT 파일 시스템은 FAT 파일 시스템이 확장된 것으로 Windows 95와 함께 도입되어 많이 알려진 파일 시스템입니다. 이 파일 시스템은 FAT와 호환되며 FAT보다 제한이 적어 파일 이름도 최고 255자까지 만들 수 있고 공백이나 여러 개의 구두점도 포함할 수 있습니다. 대소문자는 지정한 대로 보존되기는 하나 구별하지는 않습니다. VFAT로 긴 파일 이름을 만들 때 파일 시스템은 사실 두 가지 파일 이름을 만듭니다. 하나는 실제 파일 이름이고, Windows 95, Windows 98, Windows NT 4.0 이상 버전에서 나타납니다. 다른 파일 이름은 MS-DOS용 파일 이름으로 긴 파일 이름의 단축형입니다. MS-DOS용 파일 이름은 실제 긴 파일 이름의 공백 문자를 제외한 처음 6글자와 틸드(~) 그리고 숫자로 이루어져 있습니다. 예를 들면 Onlinewithyounet.txt의 MS-DOS용 파일 이름은 ONLINE~1.txt입니다. 이러한 파일 이름을 만드는 방식은 뜻하지 않은 결과를 가져올 수 있습니다. VFAT로 긴 파일 이름을 만들 때 MS-DOS용 이름으로 디렉터리 항목을 하나 사용하고 파일 이름 13자마다 항목을 하나씩 사용합니다. 이론상으로 보면 긴 파일 이름 하나가 최고 21개의 디렉터리 항목을 차지할 수 있습니다. 루트 디렉터리는 512개의 파일을 포함할 수 있지만, 루트 디렉터리에 255자의 가장 긴 파일 이름을 만들면 포함할 수 있는 파일 수가 24개로 줄어듭니다. 따라서 루트 디렉터리에는 가능하면 긴 파일 이름을 사용하지 않는 것이 좋습니다. 다른 디렉터리는 이러한 제한 사항의 영향을 받지 않습니다. 이 글에서 VFAT를 언급하는 것에 대해 의아할 수도 있지만 현재 FAT보다 VFAT가 더 일반적으로 사용되고 있습니다. 그러나 위에 언급한 차이점 외에 VFAT 사용에도 제한 사항이 있습니다. Windows NT에서 분할 영역을 FAT로 포맷하면 VFAT로 포맷됩니다. Windows NT 4.0에서 FAT 분할 영역을 사용하려면 MS-DOS 같은 다른 운영 체제로 분할 영역을 포맷해야 합니다.

FAT32

FAT32 FAT32는 FAT와 VFAT가 확장된 파일 시스템으로, Windows 95 OEM Service Release 2(OSR2)에서 처음 도입되었습니다. FAT32에서는 '대용량 디스크의 지원', '신뢰성 향상', '성능 향상' 등을 꾀하고 있습니다.

▶빈공간 재계산 억제
지금까지의 FAT 시스템에서는 디스크의 빈 공간을 계산하려면 FAT를 모두 읽어 미사용 부분의 계산을 처리했습니다. 그러나 FAT32에서 2GB의 드라이브를 취급하는 경우, 이 데이터를 읽어내게 되면, 약 2MB 정도의 분량을 읽게 됩니다. 이 문제를 해결하기 위해 빈 공간을 보존하기 위한 'FSINFO'라고 불리는 영역이 새로 추가되었습니다. 파일을 읽고 쓸 때마다 이 수치를 갱신해 빈 공간의 용량을 계산할 때에도 고속으로 처리할 수 있게 되었습니다. 그러나 FSINFO와 실제의 빈 공간의 용량의 차이가 없도록 해야 합니다. 특히 윈도 95나 98의 셧다운이 제대로 이루어지지 않으면 FAT와 FSINFO에 장애가 발생합니다. 이를 해결하기 위해 윈도의 비정상 종료시 다음 시작에 스캔디스크가 실행되는 것입니다.

▶파일 저장의 고속화
FSINFO에는 파일의 최종저장 섹터번호까지 저장되도록 되어 있어, 추가로 저장할 경우에도 FAT의 처음부터 최종 저장번호까지 읽지 않고 그대로 추가 저장할 수 있습니다. 이것으로 디스크 액세스의 최소화를 실현하고, 디스크 캐시 메모리를 유효하게 이용할 수 있게 됩니다.

▶신뢰성과 효율성 향상
FAT32에서는 FAT16에 비해 신뢰성 향상도 꾀하고 있습니다. FAT16 시스템에서는 FAT영역을 2개 만들어두고, 보통의 경우에는 제1 FAT를 참조합니다. 만약 제1 FAT가 손상되어 읽을 수 없게 될 때는 몇 번 정도 재시도를 반복하고 그대로 안되면 예비로 있는 제2 FAT에 액세스합니다. FAT32에서는 FAT 영역이 늘어나기 때문에 FAT에 불량이 발생할 확률이 FAT16에 비해 크게 높아졌습니다. 이 문제에 대해서는 장애가 발생한 FAT 부분만을 예비 FAT에서 적극적으로 이용하는 것으로 FAT에 불량이 발생한 경우에도 처리를 계속할 수 있게 되었습니다. 같은 2GB의 하드디스크를 사용하는 경우, FAT16의 경우는 하나의 클러스터가 32KB, FAT32의 경우 하나의 클러스터가 4KB가 됩니다. 만약 1KB의 파일이 있을 때 1클러스터가 소비되므로 28KB의 사용 용량의 차이가 발생합니다. 만약 1KB의 파일이 100개 있을 때, FAT16은 3.2M를 FAT32는 400KB의 용량을 소비하게 되므로 FAT32는 FAT16보다 하드디스크의 사용 효율이 8배나 높아지게 됩니다.

NTFS 4.0

FAT, VFAT, FAT32 파일 시스템을 살펴보았으니 NTFS 파일 시스템에 대해 알아보겠습니다. NTFS는 New Technology File System의 약자로 마이크로소프트에서 결함 허용(fault tolerance) 증가와 보안 향상 등 FAT의 기능을 추가 보완하고 OS/2의 HPFS에서 속도와 유연성을 받아들여 개발(예를 들어 HPFS의 성능향상 기법중의 하나인 B-Tree를 지원)한 것이며 Windows NT에서부터 알려졌고 Windows 2000에서 NTFS 5.0으로 새로운 기능추가와 함께 거듭나게 되었습니다.

▶호환성
어떤 파일 시스템을 사용할지 결정하기 전에 호환성을 알아 보아야 합니다. 여러 운영 체제가 분할 영역을 액세스하는 경우 모든 종류의 운영 체제에서 읽을 수 있는 파일 시스템을 사용해야 합니다. 이는 모든 운영 체제와 호환되는 FAT 파일 시스템을 사용해야 한다는 것을 의미합니다. NTFS의 경우 Windows NT와 Windows 2000에서만 사용할 수 있습니다. 그러나 이러한 제한 사항은 로컬 컴퓨터에만 적용됩니다. 예를 들어, Windows NT와 Windows 98이 같은 컴퓨터에서 실행 중이고 같은 분할 영역을 액세스한다면 FAT로 포맷해야 합니다. 그러나 Windows NT의 단일 운영 체제인 컴퓨터라면 NTFS로 포맷해도 네트워크에서 다른 운영 체제를 실행 중인 컴퓨터가 분할 영역을 액세스할 수 있습니다.

▶볼륨 크기
파일 시스템 선택에 있어서 중요한 것은 분할 영역의 물리적인 크기입니다. FAT는 최고 2GB의 분할 영역 크기를 지원합니다. 분할 영역 크기가 2GB보다 크면 FAT32나 NTFS로 포맷하거나 분할 영역을 작게 나누어야 합니다. 그러나 이 때 NTFS로 포맷할 경우 향상된 기능으로 인해 FAT보다 오버헤드가 디스크 공간을 많이 차지하게 됩니다. NTFS는 사용되는 모든 볼륨에 대하여 대략 5MB를 소모합니다. 분할 영역이 200MB보다 작을 경우 NTFS와 연결된 오버헤드 때문에 디스크 공간이 손실되지 않도록 FAT로 포맷해야 합니다. NTFS 분할 영역의 최대 크기는 16 exabytes입니다.

▶결함 허용
일단 분할 영역의 크기와 호환성 문제가 해결되었으면 파일 시스템 선택이 자유로워집니다. 이제 고려해야 할 사항은 결함 허용인데 Windows NT는 속도와 결함 허용을 증가시키는 몇 가지 다른 디스크 액세스 방법을 소프트웨어를 통해 지원합니다. 이러한 옵션에는 디스크 스트라이핑과 패리티가 있는 디스크 스트라이핑이 있는데, 대부분 이러한 옵션들은 NTFS 파일 시스템에서 사용할 수 있습니다. 그러나 하드웨어 기반의 스트라이프 세트의 경우는 다른 파일 시스템에서도 사용할 수 있습니다. 고급 결함 허용 옵션이 없어도 NTFS는 FAT나 FAT32보다 훨씬 뛰어난 결함 허용 기능이 내장되어 있습니다. 예를 들면 NTFS에서 하드 디스크의 내용을 변경할 때 로그 파일에 변경 사항에 대한 기록을 만들기 때문에 전원 공급이 중단되거나 디스크 오류의 경우에도 Winodws NT는 로그 파일을 사용하여 데이터를 복구할 수 있습니다. 또한 NTFS는 오류 메시지를 표시하지 않고 하드 디스크 오류를 자동으로 복구합니다. 즉, Windows NT에서 NTFS가 분할 영역에 파일 쓰기를 할 경우, 파일을 복사하여 메모리에 저장하고 다시 파일을 읽어들인 후 메모리의 파일 복사본과 비교하여 두 파일이 일치하지 않으면 해당 하드 디스크 섹션을 불량으로 표시하고 다시 사용하지 않습니다. 대신 메모리에 저장된 파일의 복사본을 이용하여 하드 디스크의 다른 장소에 파일을 다시 씁니다. 반면 FAT와 FAT32 파일 시스템에는 이러한 안전 기능이 없습니다. FAT와 FAT32 파일 시스템에서는 2개의 파일 할당 테이블 복사본을 만들어 파일이 손상될 경우를 대비하지만 오류 자동 복구 기능은 없고 대신 디스크 읽기와 같은 유틸리티를 실행해야 합니다.

▶보안
NTFS에는 보안 시스템이 내장되어 있어서 디렉터리와 개별적인 파일에 대한 사용 권한을 허가할 수 있고 파일과 디렉터리를 원격 또는 로컬 침입자로부터 보호할 수 있습니다. 예를 들어, 누군가가 사용이 제한된 파일을 액세스하려고 하면 NTFS의 내장된 보안 시스템이 이 파일을 보호합니다. FAT나 FAT32를 사용하는 경우 공유 사용 권한 기능을 통해 보안을 유지하는데, 비록 네트워크에서는 파일을 보호할 수 있지만 로컬 침입자로부터 파일을 보호할 수는 없습니다. 로컬 PC에 직접 가서 얼마든지 사용 제한된 파일을 액세스할 수 있기 때문입니다. 또한 공유 사용 권한 기능은 자칫 관리하기가 힘들어질 수 있습니다. 각각 고유 디렉터리를 가지는 사용자 수 백명이 한 서버를 사용한다고 가정하면 이들 각각에 대해 공유 사용 권한을 허가해야 하고 이들의 일부가 겹치게 되어 추가적인 문제가 발생할 수 있습니다.

▶파일 압축
NTFS의 또 한 가지 장점은 본래 파일의 압축을 지원한다는 것입니다. MS-DOS 6.22 파일 압축 프로그램을 사용해 본 사용자라면 이미 알고 있겠지만, 파일 압축을 하려면 전체 분할 영역을 압축해야 하고 시간도 오래 걸릴 뿐 아니라 완료된 후에는 PC의 파일 액세스 속도가 눈에 띄게 느려지고, 사소한 디스크 문제가 전체 분할 영역을 못쓰게 만들 수도 있습니다. 한편 FAT32의 경우는 압축 기능을 제공하지 않습니다. NTFS의 압축 기능은 이전 것보다 훨씬 뛰어난데 이 기능으로 파일이나 디렉터리를 선택하여 개별적으로 압축할 수 있습니다. 파일을 개별적으로 압축할 수 있기 때문에 사소한 하드 디스크 문제가 발생해도 압축 구성표에 영향을 미치지 않고 전체 분할 영역을 못쓰게 하는 문제는 발생하지 않습니다. 또한 잘 사용하지 않는 파일만 선택해서 압축함으로써 사용할 때만 이 파일들을 압축 해제할 수도 있습니다.

NTFS 5.0의 신기능

앞에서도 잠시 언급했듯이 윈도우 95 OSR2 버전부터 지원하기 시작한 FAT32 파일시스템을 윈도우NT 4.0에서 지원하지 못했으므로 윈도 95나98과 함께 멀티부팅으로 사용했던 사용자들은 파일 공유를 하지 못하여 어려움을 많이 겪어야 했습니다. 또한 하드디스크의 대용량화를 따르지 못하는 NTFS 4.0의 기능에 불만이 커갈 수밖에 없었습니다. 이에 따라 윈도우 2000부터 제공되는 새로운 파일 시스템 NTFS 5.0은 FAT32 파일 시스템을 지원하며, 이로 인해 2GB의 제약에서 해방되어 부트 파티션을 4GB 이상 사용할 수 있게 되었습니다. 이것은 기존 NTFS 4.0의 특징인 압축과 보안 기능에 여러 가지 기능이 더 추가된 파일 시스템입니다. 이외에도 개별적인 파일의 허가되지 않은 사용을 막기 위해 파일 레벨의 보안(암호화: Encryption)를 지원하며, 재부팅하지 않고 하드디스크 용량을 확장할 수 있습니다. 윈도 NT 4.0에서는 하드디스크를 넓게 쓰기 위해 용량을 확장하면 반드시 재부팅을 해야 했습니다. 단축 아이콘을 만들었는데 단축 아이콘의 대상 프로그램을 다른 곳으로(다른 하드디스크나 서버, 파티션) 이동시켜 버렸을 때 전에는 이동되어진 대상을 찾기 힘들었는데, 윈도우 2000은 분산 링크 트래킹(Distributed Link Tracking)을 지원해 이동된 대상 프로그램을 쉽게 찾을 수 있습니다. 그래서 한번 단축 아이콘을 만들어두면 원래 프로그램을 어디로 옮겨 놓아도 단축 아이콘의 링크는 자동으로 그 이동된 곳으로 링크가 바뀌어 집니다. 유닉스를 포함한 다른 NOS에는 포함되었던 디스크 쿼터 기능(사람마다 사용할 수 있는 용량을 제한 할 수 있는 기능)이 NTFS 5.0에는 포함되어 있습니다. 예를 들어 사용자별로 일정한 용량만 할당해 주고 더 이상은 못쓰게 제한하는 기능이 추가된 것입니다. 또한 하드디스크를 추가하면 일반적으로 하나의 디스크가 한 개의 드라이브 문자를 사용해왔습니다. 그래서 NT가 설치된 시스템에 하드디스크를 추가했을 때 드라이브 명이 바뀌어서 혼란스러워 했던 경험이 있을 것입니다. D:, E:, F: 같은 드라이브 문자에 대한 필요성을 없애기 위해서 NTFS directory에 다른 볼륨을 접목시킬 수 있는 마운트 포인트 기능과 파일이나 문서들의 빠른 검색을 지원하기 위하여 풀 텍스트와 프로퍼티 인덱싱(Full text and property indexing)기능이 추가되었습니다.

파일 시스템 선택
Windows 2000을 단독으로 설치할 경우 운영체제의 기능을 최대한 활용하고 싶을 경우 NTFS를 사용하는 것이 유리하며 다양한 운영체제를 이용하고 특히 리눅스 윈95/98/NT등과 멀티부팅으로 사용하면서 자료의 이동이 많을 경우 FAT16을 사용하는 것이 유리합니다. 하지만 대용량 하드디스크를 사용하면서 역시 윈도 95/98등과 같이 사용하는 경우 FAT32를 사용하는 것이 권장됩니다. 위에서 언급한 내용은 사용자의 시스템에 따라 다양한 방법으로 사용이 가능하고 특히 최근 파티션 설정 유틸리티(예를 들어 파워퀘스트사의 파티션 매직등)의 등장과 Windows 95/98에서 NTFS를 인식할 수 있도록 하는 유틸리티등의 프로그램이 다양하게 나오고 있으므로 차차 파일시스템간의 벽은 그리 높지만은 않다고 할 수 있습니다. 다양한 시도끝에 자신의 시스템에 가장 알맞는 파일 시스템을 설정하는 것이 가장 좋은방법이라 할 수 있습니다.