4.3. 하드 드라이브 파티션하기

왜 어쨌든 파티션을 해야만 하는거지? 글쎄, 하나의 파티션으로 구성된 시스템에서도 리눅스 시스템은 완벽하게 동작할 수 있으며 이렇게 설정하는 것이 약간 더 쉽다. 하지만 저장 장치를 여러개의 파티션으로 쪼개두는 것은 많은 잇점이 있다.

하나의 큰 파티션만 있던 디스크에서도 리눅스가 잘 돌아간다는 것은 사실이지만, 디스크를 최소한 네개의 주요 파일 시스템 (root, usr, home, swap) 으로 파티션해두는 것은 몇가지 장점이 있다. 그 장점은 다음과 같다:

첫째 (부팅하는 중에 또는 수작업으로 fsck를 돌려서) 파일 시스템을 검사하는데 필요한 시간을 줄여준다. 왜냐하면 이러한 검사를 병렬로 처리할 수 있기 때문이다. (그런데, 절대로 마운트된 파일 시스템에 대하여 fsck를 실행하면 않된다!!! 당신은 그 결과 때문에 확실히 후회하게 될 것이다. 예외로서 파일 시스템이 읽기전용으로 마운트된 경우에는 그래도 안전하다.) 또한, 여러 파티션이 있는 시스템에서는 파일 시스템 검사를 하기가 훨씬 수월하다. 예를 들어, /home 파티션에 문제가 있다는 것을 알았다면 그 파티션의 마운트를 해제하고 파일 시스템 검사를 한 뒤 수리된 파일 시스템을 다시 마운트하기만 하면 된다. (반대로, 파티션이 나뉘어 있지 않다면 응급 복구 디스켓으로 시스템을 부팅한 뒤 싱글 유저 모드에서 이러한 수리작업을 진행해야 한다.)

둘째, 여러 파티션이 있으면 당신이 원하기만 한다면 몇개의 파티션은 읽기전용으로 마운트할 수 있다. 예를 들어, /usr 파티션에 있는 파일은 심지어 루트라고 하더라도 건드리지 못하도록 하고 싶다면 /usr 파티션을 읽기 전용으로 마운트하면 된다.

마지막으로, 파티션으로 나누는 것의 가장 중요한 혜택은 파일 시스템을 보호할 수 있다는 것이다. (사용자의 실수나 시스템의 오류로) 파일 시스템에 어떤 일이 벌어지게 되었을 때, 파티션으로 나뉜 시스템에서는 어떤 한 파일 시스템에 있는 파일만 날리게 된다. 만약 파티션을 하지 않은 시스템이라면 모든 파일 시스템을 날리게 될 것이다.

이 작은 사실은 대단한 강점이 될 수 있다. 예를 들어, 당신의 root 파티션이 깨져서 부팅을 할 수 없다면 복구 디스켓으로 부팅하고 root 파티션을 마운드한 뒤 복사가능한 파일들을 home과 같은 다른 파티션으로 복사하고 (또는 백업으로부터 가져와도 된다; 어떻게 파일을 백업하고 다시 복원하는지에 대하여는 8장을 보기 바란다) 다시 복구 디스켓으로 부팅한 다음, "mount root=/dev/hda3" (임시로 root 파일 시스템으로 사용할 파티션이 hda 디스크의 세번째 파티션이라고 가정) 라고 타이핑하면 완전히 동작하는 리눅스 시스템으로 부팅할 수 있다. 그러고 나서 마운트 되지 않은 깨진 root 파티션에 대하여 fsck를 실행하면 된다.

나는 파일 시스템이 완전히 망가지는 것을 개인적으로 경험한 적이 있다. 그리고 여러 파티션으로 나누어 두었기 때문에 손상이 특정 파티션에 국한되었다는 것이 매우 기뻤다.

마지막으로, 리눅스는 다른 운영체제(들) (윈도 95/98/NT, BeOS, 그외 무엇이든)을 셋업하는 것을 허용하여 듀얼 (또는 트리플, ...) 부트를 할 수 있기 때문에 이의 장점을 살리기 위해서 추가의 파티션을 셋업할 필요가 있을 것이다. 각각의 운영체제를 위해서 최소한 하나의 파티션은 셋업해야 한다. 리눅스에는 훌륭한 부트 로더(인텔버전은 LILO, 알파버전은 MILO, 스팍버전은 SILO 라고 부른다)가 들어있는데 전원을 켰을 때, 어느 운영체제를 부팅할 것인지를 지정할 수도 있고 적당한 시간이 지나면 선호하는 디폴트 운영체제(아마, 리눅스겠지?)로 부팅이 된다.

디스크는 필요에 맞추어 파티션을 하여야 한다. 인텔, 알파, 스팍 플랫폼에서 나의 경험에 비추어 볼 때, (집에서 쓰는 데스크탑 시스템이건 회사에서 쓰는 인터넷 서버이건 간에) 적절한 양의 작업을 처리하는 적절한 수준의 로드가 걸리는 (기능을 제대로 써먹는) 시스템이면 파티션 크기를 결정하는데 다음과 같은 추정치를 사용하면 꽤 효과적이라는 사실을 발견하였다.

주어진 상황:
X Mb/Gb 의 디스크          (예. 2 Gb)
(또는 하나 이상의 디스크가 있는 경우 그 용량의 합이 X Mb/Gb)
계산방법:
(swap)    대략 메인 램의 2배   (예. 64 Mb 시스템이면 swap은 128 Mb)
/ (root)  전체 용량의 대략 10% (예. 200 Mb)
/home     전체 용량의 대략 20% (예. 400 Mb)
/usr      남은 공간 전체       (예. 1272 Mb)
/var     (선택사양 -- 아래를 참조하시요)
/boot    (선택사양 -- 아래를 참조하시요)
/archive (선택사양 -- 아래를 참조하시요)

물론 위에서 제시한 크기는 대략의 가이드라인일 뿐이다. 물론 당신의 리눅스 시스템을 무슨 일에 쓸 것인지에 따라 위의 비율을 적당히 조절해나가야 할 것이다. 워드퍼펙트나 넷스케이프와 같은 큰 응용 프로그램이나 일본어 폰트와 같이 많은 양을 추가로 깔고 싶다면 /usr 공간을 좀 많이 확보하는 것이 좋을 것이다.

내가 볼 때에는 항상 /home 에 많은 공간이 비어 있었다. 따라서 사용자가 너무 많은 공간을 쓰지 않도록 하거나 (또는 엄격한 쿼터를 부여하거나) 또는 쉘 계정과 개인 웹 페이지를 제공하려는 것이 아니라면 /home 공간은 줄이고 대신 /usr 를 키우는 것이 좋다.

다음은 다양한 마운트 위치와 파일 시스템 정보에 대한 설명이다. 이를 통하여 어떻게 사용자의 요구에 맞춰 파티션의 크기를 최적으로 배분할 것인지에 대한 아이디어를 얻게 될 것이다:

추가로 드라이브를 더 달게 되면 새 드라이브에는 추가의 파티션이 만들어지고 필요에 따라 다양한 위치에 마운트하면 된다 -- 따라서, 리눅스 시스템에서는 저장공간이 부족한 경우를 걱정할 필요가 없다. 예를 들어, 만약 앞으로 sda6 가 꽉 찰 것이 명백하다면 다른 드라이브를 추가한 다음 넉넉한 크기로 파티션을 만들어 /usr/local 에 마운트하고 현재 /usr/local 에 들어있던 모든 것을 새 드라이브로 옮기면 된다. 이렇게 하더라도 어떤 시스템이나 응용 프로그램도 "깨지지"는 않는다. 왜냐하면 리눅스는 어느 드라이브에 있든지 /usr/local 을 볼 수 있기 때문이다.

파티션의 사례를 보여주기 위하여 나는 (윈도 95와 리눅스 듀얼 부트) 인텔 시스템을 다음과 같은 파티션 구조로 만들어 보았다:

   Device Boot   Begin    Start      End   Blocks   Id  System
/dev/hda1  *         1        1      254  1024096+   6  DOS 16-bit >=32M
/dev/hda2          255      255      782  2128896    5  Extended
/dev/hda5          255      255      331   310432+  83  Linux native
/dev/hda6          332      332      636  1229728+  83  Linux native
/dev/hda7          637      637      749   455584+  83  Linux native
/dev/hda8          750      750      782   133024+  82  Linux swap

첫번째 파티션인 /dev/hda1 는 다른 운영체제 (윈도 95) 를 저장하는데 사용되는 도스 포맷의 파일 시스템이다. 위의 예에서는 그 운영체제에 1 Gb의 공간을 할당하였다.

두번째 파티션인 /dev/hda2 는 드라이브의 나머지 부분 전체를 차지하는 ("확장 파티션" 이라고 불리는) 실제 파티션이다. 이 파티션은 나머지 논리 파티션을 묶는데 사용된다. (한 디스크에는 실제 파티션이 4개밖에 있을 수 없는데 위의 경우에는 4개를 초과하는 파티션이 필요하므로 나머지 파티션을 위해서는 논리 파티션 기법을 사용해야만 한다.)

세번째부터 다섯번째 파티션인 /dev/hda5, /dev/hda6, /dev/hda7 는 모든 e2fs 포맷의 파일 시스템으로서 각각 / (root), /usr, /home 로 사용된다.

마지막에 있는 여섯번째 파티션인 /dev/hda8 는 스왑 파티션으로 사용된다.

또 하나의 예는 이번에는 알파 박스인데 두개의 하드 드라이브를 갖고 있으며 리눅스로만 부트되는 시스템으로서 다음과 같은 파티션 구조를 갖고 있다:

   Device Boot   Begin    Start      End   Blocks   Id  System
/dev/sda1            1        1        1     2046    4  DOS 16-bit <32M
/dev/sda2            2        2      168   346859   83  Linux native
/dev/sda3          169      169      231   130851   82  Linux swap
/dev/sda4          232      232     1009  1615906    5  Extended
/dev/sda5          232      232      398   346828   83  Linux native
/dev/sda6          399      399     1009  1269016   83  Linux native
/dev/sdb1            1        1      509  2114355   83  Linux native
/dev/sdb2          510      510     1019  2118540   83  Linux native

첫번째 파티션인 /dev/sda1 는 도스 포맷의 파일 시스템으로서 MILO 부트 로더를 저장하는데 사용된다. 알파 플랫폼은 인텔 시스템과는 부팅할 때 사용되는 방식이 약간 다르다. 따라서, 리눅스는 부트 정보를 FAT 파티션에 저장하였다. 이 파티션은 가능한 가장 작은 크기의 파티션이면 충분한데 여기에서는 그 크기가 2 Mb 이다.

두번째 파티션인 /dev/sda2 는 e2fs 포맷의 파일 시스템으로서 / (root) 파티션으로 사용된다.

세번째 파티션인 /dev/sda3 는 스왑 파티션으로 사용된다.

네번째 파티션인 /dev/sda4"확장" 파티션이다. (상세한 내용은 이전의 예를 참조하시요.)

다섯번째와 여섯번째 파티션인 /dev/sda5/dev/sda6 는 e2fs 포맷의 파일 시스템이며 각각 /home 과 /usr 파티션으로 사용된다.

일곱번째 파티션인 /dev/sdb1 은 e2fs 포맷의 파일 시스템이며 /archive 파티션으로 사용된다.

여덟번째이며 마지막 파티션인 /dev/sdb2 는 e2fs 포맷의 파일 시스템으로서 /archive2 파티션으로 사용된다.

파티션 정보를 셋업하고 나면 새로운 파티션을 디스크에 기록해야 한다. 이렇게 하고 나면 레드햇 설치 프로그램은 파티션 테이블을 메모리로 다시 가져와서 설치 과정의 나머지 과정을 진행할 수 있도록 한다.