왜 어쨌든 파티션을 해야만 하는거지? 글쎄, 하나의 파티션으로 구성된 시스템에서도 리눅스 시스템은 완벽하게 동작할 수 있으며 이렇게 설정하는 것이 약간 더 쉽다. 하지만 저장 장치를 여러개의 파티션으로 쪼개두는 것은 많은 잇점이 있다.
하나의 큰 파티션만 있던 디스크에서도 리눅스가 잘 돌아간다는 것은 사실이지만, 디스크를 최소한 네개의 주요 파일 시스템 (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 를 키우는 것이 좋다.
다음은 다양한 마운트 위치와 파일 시스템 정보에 대한 설명이다. 이를 통하여 어떻게 사용자의 요구에 맞춰 파티션의 크기를 최적으로 배분할 것인지에 대한 아이디어를 얻게 될 것이다:
/ (root) - 임시 파일, 리눅스 커널과 부트 이미지, 중요한 바이너리 파일 (/usr 파티션을 마운트하기 전에 필요한 것들) 그리고 더 중요하게는 로그 파일, 인쇄 작업과 보내는 메일을 위한 스풀 영역, 사용자가 받는 메일 등을 저장하는데 쓰인다. 소스 RPM 파일로부터 RPM 패키지를 만드는 것 처럼, 특정 기능을 수행하는데 필요한 임시 공간으로도 사용된다. 따라서, 전자메일을 많이 사용하는 사용자가 많거나 임시 공간이 많이 필요할 것 같으면 이 공간을 크게 하여야 한다. 파티션 종류는 디폴트 값인 83 (리눅스 네이티브) 으로 두어야 한다. 그리고 부팅가능 플래그를 켜서 여기에 부팅 정보를 저장하도록 하여야 한다.
/usr/ - 리눅스에 필요한 대부분의 바이너리 파일과 별도로 설치된 소프트웨어, 웹 페이지, Squid 프록시 캐시, 삼바 공유 서비스, 일부 별도로 설치된 소프트웨어의 로그 파일 등이 여기에 저장되기 때문에 가장 큰 파티션이다. 파티션 종류는 디폴트 값인 83 (리눅스 네이티브) 로 두어야 한다.
/home/ - 사용자들에게 쉘 계정을 제공하지 않는다면 이 파티션을 매우 크게 할 필요는 없다. (학교 웹 페이지 처럼) 사용자에게 홈 페이지를 제공하는 경우에는 예외로서 이 파티션의 크기가 큰 것이 보탬이 된다. 마찬가지로 이 파티션의 종류도 디폴트 값인 83 (리눅스 네이티브)으로 두어야 한다.
(swap) - 리눅스는 시스템에 설치된 실제 램보다 더 많은 메모리를 사용할 수 있도록 하는 "가상 메모리" 기능을 제공한다. 스왑 파티션은 이 기능을 수행하는데 사용된다. 대충의 규칙은, 스왑 파티션은 시스템에 설치된 실제 램의 최소 두배가 되어야 한다.
만약 시스템에 두개 이상의 실제 하드 드라이브가 있다면 여러개의 스왑 파티션을 만들 수 있다. 이렇게 하면 병렬 디스크 액세스의 장점을 살려 스와핑의 성능을 개선할 수 있다. 예를 들어, 네개의 드라이브가 있고 램이 256 Mb인 시스템이 있다면 128 Mb 짜리 스왑 파티션을 네개를 만들어 전체적으로는 256 Mb 램에 512 Mb의 스왑을 만들겠다. (이렇게 하면 전체 가상 메모리의 크기는 768 Mb가 된다.) 파티션의 종류는 82 (리눅스 스왑) 으로 바꾸어 주어야만 한다.
참고: 주의 : 리눅스에서 스왑의 크기는 128 Mb로 제한된다고 흔히 오해하고 있다. 이는 과거에는 사실이었지만 최근의 리눅스 배포판에서는 사용하는 시스템의 아키텍쳐에 따라 다르다. (예를 들어, 인텔 시스템에는 스왑 크기를 2 Gb까지 잡을 수 있다.) 그 외의 정보는 ``man mkswap'' 라고 타이핑하면 얻을 수 있다.
/var/ (선택 사항) - / (root) 파티션을 더 쪼개고 싶을 때가 있다. /var 디렉토리는 메일 스풀 (보내는 메일과 받는 메일 모두), 인쇄 작업, 프로세스 락 등과 같이 실행중에 필요한 저장공간으로 사용된다. 이 디렉토리를 / (root) 아래에 그냥 두게 되면 (예를 들어) 받는 메일이 많이 와서 파티션을 채울 수도 있으므로 위험하게 된다. / (root) 파티션이 꽉 차게 되면 나쁜 일 (예컨데 시스템 크래시?) 이 벌어질 수 있는데 /var 를 별도의 독자적인 파티션으로 만들어서 이 문제를 피할 수 있다. / (root) 에 할당을 얼마를 하건간데 이를 두배로 하여 절반은 / (root) 로 나머지는 /var 로 하면 나의 경우에는 항상 성공적이었다. 파티션의 종류는 디폴트 값인 83 (리눅스 네이티브) 로 두어야만 한다.
/boot/ (선택 사항) - 특별한 환경에서는 (예를 들어 소프트웨어 RAID 구성으로 시스템을 셋업하는 경우) 리눅스 시스템이 부팅하기 위한 파티션을 분리해둘 필요가 있는 경우가 있다. 부팅을 하고 다른 파일 시스템을 읽어들이는데 필요한 드라이버들을 탑재하는데 이 파티션이 사용된다. 이 파티션의 크기는 겨우 몇 Mb 정도로 작다; 나는 대략 10 Mb 정도 (이 정도면 커널과 초기 램디스크 이미지, 백업커널 한 두개 정도를 저장하는데 충분하다) 를 추천하고 싶다. 파티션의 종류는 디폴트인 83 (리눅스 네이티브) 로 두어야 한다.
/archive/ (선택 사항) - 여분의 공간이 있다면 별도의 파티션을 예컨데 /archive 라는 이름으로 만들어 두는 것이 유용하기도 하다. 이 /archive 디렉토리는 백업 파일, 크기가 크거나 자주 사용되지 않는 파일들, 삼바 파일 서비스 그 외 아무 것이나 필요하다고 생각되는 것을 저장하는데 사용하면 된다. 이 파티션의 종류는 디폴트 값인 83 (리눅스 네이티브)로 둘 수도 있고 만약 리눅스와 다른 운영체제에서 동시에 활용하고 싶다면 다른 값 이를테면 6 (16비트 도스, 32 M 이상 크기지원) 으로 할 수도 있다.
추가로 드라이브를 더 달게 되면 새 드라이브에는 추가의 파티션이 만들어지고 필요에 따라 다양한 위치에 마운트하면 된다 -- 따라서, 리눅스 시스템에서는 저장공간이 부족한 경우를 걱정할 필요가 없다. 예를 들어, 만약 앞으로 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 파티션으로 사용된다.
파티션 정보를 셋업하고 나면 새로운 파티션을 디스크에 기록해야 한다. 이렇게 하고 나면 레드햇 설치 프로그램은 파티션 테이블을 메모리로 다시 가져와서 설치 과정의 나머지 과정을 진행할 수 있도록 한다.