이전페이지 다음페이지 차례

2. 파티션이란 무엇인가?

PC의 하드디스크가 발명되고 얼마 지나지 않아, 사람들은 하나의 디스크밖에 없는 시스템에 여러 운영 체제를 설치하고 싶어하게 되었다. 이에 따라 하나의 물리적 디스크를 여러 개의 논리적 디스크로 분할하는 기술이 필요하게 되었는데, 이것이 바로 파티션이다. 대부분의 운영 체제가 하드디스크 상의 인접한 블록 섹션들을 완전히 별개의 디스크인 양 취급한다.

파티션이 겹쳐서는 안 된다는 것은 자명하다. 같은 컴퓨터에 설치된 다른 운영 체제가 구획 중복 때문에 중요한 정보를 덮어 써 버린다면, 어떤 운영 체제이건 기뻐할 리 만무하다. 인접한 파티션 사이에 빈 공간이 있어서도 안 된다. 이런 배치가 해로운 것은 아니지만, 구획 사이의 값비싼 디스크 공간을 낭비하게 되는 까닭이다.

디스크 전체를 파티션으로 분배할 필요는 없다. 디스크 끝에 지금 설치된 어떤 운영 체제에도 속하지 않은 빈 공간을 남겨두기로 할 수도 있다. 나중에 당신이 어떤 운영 체제를 가장 많이 쓰는지 분명해지면, 이 자투리 공간을 분배해서 파일 시스템을 설치하면 된다.

파티션을 옮기거나 그 크기를 바꾸면 그 안의 파일 시스템은 파괴된다. 따라서 파티션을 변경할 때에는 대개 영향을 받는 모든 파일들을 백업해서 보관하게 된다. 실제로 파티션을 변경하면 많은 것들이 뒤죽박죽이 되는 일이 보통이므로, fdisk 같은 것을 건드리기 전에 그 컴퓨터 상의 모든 디스크의 모든 것들을 백업해야 한다.

(혹시 운이 좋다면) 특정한 파일 시스템의 파티션은 자료 손실 없이 둘로 나눌 수 있다. 예를 들어 "fips"라는 프로그램은 MS-DOS를 다시 설치하지 않고도 리눅스 설치를 위한 공간을 마련하기 위해 MS-DOS 파티션을 둘로 나눌 수 있다. 하지만 아직은 이런 일을 하기 전에 컴퓨터 안의 모든 것들을 조심해서 백업해두어야만 한다

2.1 백업이 중요하다.

테이프는 가장 친근한 백업 장치이다. 테이프는 빠르고 믿을 만 하며 사용하기 편하므로 백업을 자주 쉽게 자동으로 받을 수 있다.

Step on soapbox: 필자는 디스크 컨트롤러에 의해 작동되는 ftape 따위가 아니라 진짜 테이프를 이야기하고 있다. SCSI를 사는 것도 고려해 볼 만 하다. 리눅스는 SCSI를 기본적으로 지원하고 있다. 리눅스에서는 ASPI 드라이버를 띄울 필요가 없으므로, 귀중한 HMA를 잃어버릴 일이 없다. 그리고 일단 SCSI 호스트 어댑터가 설치되면 디스크나 테이프, 시디롬 등을 어댑터에 붙이기만 하면 된다. 더 이상 I/O 어드레스나 IRQ 조작이 필요 없고, 마스터/슬레이브와 PIO 레벨을 맞출 필요도 없다.

덧붙임: 적절한 SCSI 호스트 어댑터는 별다른 CPU 부담 없이 입출력 성능의 향상을 가져다준다. 디스크를 심하게 써도 괜찮은 반응 속도를 경험할 수 있다. 리눅스 시스템을 유즈넷 뉴스 서버나 ISP 사업용으로 쓸 계획이라면, SCSI 없는 시스템은 꿈도 꾸지 말라. Climb of soapbox.

2.2 장치 번호와 장치의 이름

인텔에 기반한 시스템의 파티션 개수는 애초부터 제한되어 있었다. 원본 파티션 테이블이 부트 섹터의 일부로 설치되어 있고 네 개의 파티션이 들어갈 자리밖에 없다. 이 파티션들은 프라이머리 파티션이라 불린다. 시스템에 더 많은 파티션들이 필요하다는 것이 분명해 지자, 논리 파티션이 고안되었다. 논리 파티션의 개수에는 제한이 없다. 각각의 논리 파티션은 다음 논리 파티션을 가리키는 포인터를 하나씩 가지고 있다. 따라서 파티션은 꼬리에 꼬리를 물고 끝없이 이어질 수도 있다.

호환성 때문에, 논리 파티션이 차지하는 모든 공간은 프라이머리 파티션에 속해야만 한다. 논리 파티션을 쓰고 있다면, 프라이머리 파티션 하나가 "확장 파티션"으로 표시되어서 논리 파티션들이 차지하는 영역의 처음부터 끝까지 덮고 있게 된다. 이것은 모든 논리 파티션들에 할당된 공간이 연결되어 있어야만 한다는 것을 뜻한다. 확장 파티션은 하나 뿐이다. 어떤 fdisk 프로그램도 둘 이상의 확장 파티션을 만들 수 없다.

리눅스는 드라이브 당 제한된 수의 파티션만을 다룰 수 있다. 리눅스는 4개의 프라이머리 파티션(논리 파티션을 쓰고 있다면 이 가운데 3개를 쓸 수 있다)을 가질 수 있고, 디스크 하나 당 SCSI의 경우 최대 15개, IDE라면 최대 63개의 파티션을 가질 수 있다.

리눅스에서는 디바이스 파일이 파티션을 나타낸다. 디바이스 파일은 c(버퍼 캐쉬를 쓰지 않는 "character" 디바이스)나 b(버퍼 캐쉬를 사용하는 "block" 디바이스) 형식을 갖는 파일이다. 리눅스에서는 모든 디스크가 block 디바이스로만 표시된다. 다른 유닉스 시스템들과는 달리 리눅스는 디스크와 파티션에 대해 "버퍼를 거치지 않는" character 디바이스를 제공하지 않는다.

디바이스 파일에서 중요한 것은 파일 크기 대신 표시되는 주 장치 번호(major device number)와 부 장치 번호(minor device number) 뿐이다.



$ ls -l /dev/hda

brw-rw----   1 root     disk       3,   0 Jul 18  1994 /dev/hda

                                   ^    ^

                                   |    부 장치 번호

                                   주 장치 번호

디바이스 파일에 접근할 때, 주 장치 번호가 입/출력을 수행하기 위해 호출될 디바이스 드라이버를 결정한다. 이 호출은 부 장치 번호를 매개변수로 수행되며, 부 장치 번호가 해석되는 방식은 전적으로 드라이버에 달려있다. 보통 드라이버에 관한 문서에 이 부 장치 번호가 사용되는 방식이 기술되어 있다. IDE 디스크라면 /usr/src/linux/Documentation/ide.txt에 기술되어 있다. SCSI 디스크에 대한 문서는 /usr/src/linux/Documentation/scsi.txt일 것이라고 추측하겠지만, 이런 문서는 없다. 확실한 것을 알아보려면 드라이버의 소스(/usr/src/linux/driver/scsi/sd.c:184-196)를 살펴보아야만 한다. 다행히도 Peter Anvin의 디바이스 번호 및 이름 목록인 /usr/src/linux/Documentation/devices.txt이 있다. IDE는 주 번호 3, 22, 33, 34, SCSI는 주 번호 8인 block 디바이스 목록을 보라. 주 번호와 부 번호는 각각 한 바이트로 지정되며, 이런 까닭으로 디스크 당 파티션 수가 제한되는 것이다.

관례에 따라 디바이스 파일은 특정한 이름을 가지며, 많은 시스템 프로그램들은 컴파일될 때부터 이 이름을 알고 있다. IDE 디스크는 /dev/hd*, SCSI 디스크는 /dev/sd*라는 이름을 갖는 것이 관례다. 디스크들은 a, b, c 등으로 번호를 부여받는다. 따라서 /dev/hda가 첫 번째 IDE 디스크, /dev/sda가 첫 번째 SCSI 디스크의 이름이다. 이 두 디바이스들은 모두 1번 블록에서 시작되는 전체 디스크를 나타낸다. 잘못된 도구로 이 디바이스들에 쓰는 것은 이 디스크들에 있는 master boot loader와 파티션 테이블을 파괴할 것이며, 디스크 상의 모든 자료를 사용 불가능하게 하고 당신의 시스템을 부팅 불가능하게 만들 것이다. 디바이스들에 쓰는 일을 하기 전에, 무엇을 하고 있는지 알아야 하며, 그리고 다시 한 번 말해 두거니와, 백업을 해 두어야만 한다.

디스크 상의 프라이머리 파티션은 1, 2, 3, 4이다. 따라서 /dev/hda1가 첫 번째 IDE 디스크의 첫 파티션이 된다. 논리 파티션은 5 이상의 번호를 가지며, 따라서 /dev/sdb5가 두 번째 SCSI 디스크의 첫 번째 논리 파티션이다.

각 파티션에는 할당된 공간의 시작 및 끝 블록 주소와 형식이 등록되어 있다. 형식이란 특정 파티션을 어떤 형식의 운영 체제에 지정하는 (1 바이트의) 수치 부호이다. 컴퓨터 참조(computing consultant) 상의 편의를 위해 파티션 형식 부호는 단일하지 않으며, 언제나 두 개의 운영 체제가 같은 형식 부호를 가질 확률이 있다.

리눅스는 형식 부호 0x82를 스왑 파티션으로, 0x83를 "고유의(native)" 파일 시스템 (대부분의 경우 ext2) 정해두고 있다. 한 때 인기 있었지만 이제는 구식이 된 Linux/Minix 파일 시스템의 파티션은 0x81 부호를 쓰며, OS/2와 윈도즈 NT의 NTFS의 파티션은 0x07의 형식 부호로 표시된다. MS-DOS는 다양한 FAT 파일 시스템의 취향에 따라 여러 가지 형식 부호를 할당한다. 0x01, 0x04, 0x06이 알려져 있다. DR-DOS는 보호된 FAT 파티션을 표시하기 위해 0X81을 사용하며, 이 경우 Linux/Minix아 충돌을 일으킨다. 하지만 Linux/Minix와 DR-DOS는 이제는 널리 사용되지 않으므로 별 문제가 아니다. 논리 파티션을 담기 위해 쓰이는 확장 파티션은 0x05의 형식을 갖는다.

fdisk 프로그램으로 파티션을 만들거나 지우게 된다. 쓸만한 운영 체제라면 fdisk 프로그램을 포함하여 배포된다. 이 프로그램은 거의 모든 운영 체제에서 전통적으로 fdisk(혹은 FDISK.EXE)라고 부른다. DOS 등의 fdisk는 다른 운영 체제의 파티션을 다루는데 한계를 갖는다. 이 한계에는 다른 운영 체제의 부호와 관련된 것을 전혀 다룰 수 없는 점이나 1024를 넘는 실린더 수를 다룰 수 없다는 점, 끝이 실린더 경계와 일치하지 않는 파티션은 만들 수도 인식할 수도 없다는 점등이 포함된다. 예를 들어 MS-DOS의 fdisk는 NTFS 파티션을 지울 수 없으며, OS/2의 fdisk는 리눅스의 fdisk가 만든 끝이 실린더 경계와 일치하지 않는 파티션을 묻지도 않고 "수정"한다고 알려져 있다. DOS와 OS/2의 fdisk는 모두 1024 실린더 이상의 디스크를 다루는데 문제가 있다. (이런 디스크에 대한 자세한 내용이 필요하면 "large-disk" 미니 하우투를 보라.)


이전페이지 다음페이지 차례