|
|
파티션은 나누기다
Partition(파티션)의 평범한 뜻은 ‘분할’, ‘분배’ 정도로 말할 수 있다는 건 사전 한 번 들쳐보면 누구나 알 수 있습니다. 리눅스에서 말하는 ‘파티션’이란 것도 같은 뜻입니다. 중요한 건 ‘무엇을’, ‘왜’, ‘어떻게’ Partitioning 하느냐 하는 것이죠.
그 대상이 되는 것은 하드디스크(HDD)입니다.
하드디스크 들여다 보기
하드디스크를 쓰기 좋게 나누기 전에 먼저 이놈이 어떻게 생겼는지 들여다보겠습니다 . 하드디스크의 뚜껑을 열어보면 대부분 아래와 같은 구조를 가진 하드디스크가 나옵니다.
|
|

|
|
마치, 턴 테이블을 연상시키죠? 둥근 원판이 디스크이고, 그 위에 움직이며 데이터를 읽는 것이 헤드 입니다.
하드디스크는 매우 민감한 장치로, 아주 작은 이물질에 의해서도 데이터의 기록 부분이 손상될 수 있습니다.
하드디스크의 디스크 부분은 눈으로는 구분이 안되지만, 트랙(Track), 섹터(Sector), 실린더(Cylinder)로 구분되어 있습니다.
“트랙”은 운동장의 트랙처럼, 디스크의 중심에서 같은 거리에 있는 점들을 이은 원에 해당합니다.
“섹터”는 원을 피자처럼 잘랐을 때 생겨나는 피자 한 쪽에 해당하는 부채꼴 모양 중, 한 트랙에 속해 있는 한 부분을 말합니다. 예전에는 안쪽의 트랙과 바깥쪽의 트랙이 같은 섹터 수를 가졌지만, 최근에는 바깥쪽의 트랙이 더 많은 섹터 수를 가지는 하드디스크도 있습니다. 섹터는 데이터 저장의 최소 단위로서 보통 하나의 섹터는 512Bytes 저장공간과 68Bytes의 정보 저장소를 가지고 있는데, 각 섹터마다 고유 번호가 있어서 이것으로 데이터 저장 위치를 알아 내는 것이죠.
둥근 원판에 해당하는 디스크는 보통 1개~8개까지 있을 수 있습니다. 한 디스크는 앞뒤면 모두 트랙을 가지고 있고, 이 디스크들의 같은 위치에 있는 트랙들을 합하면 원통형을 상상할 수 있는데, 이것을 “실린더”라고 합니다. 이 실린더는 파티션을 나눌 때 기준이 됩니다.
그림을 보면 보다 구체적으로 이해 할 수 있을 것입니다.
|
|

|
|
헤드는 디스크 위를 회전하면서 데이터를 읽고 씁니다. 보통은 디스크 수의 두 배에 해당하는 헤드를 갖지만, 요즘의 하드디스크들은 보다 나은 속도를 위해 그 이상의 헤드를 갖습니다.
이제 설명할 내용 중 섹터니, 실린더니 하는 말들을 보게 되면, 이 그림들을 떠올려 보세요.
참고 사이트 : http://soback.kornet21.net/~intelpro/hardware/list.htm
|
하드디스크에 저장하기
그러면, 하드디스크는 뭘 하는 장치일까요. 하드디스크의 기능은 간단히 말하면, 데이터를 저장해두고, 다시 꺼내 쓸 수 있도록 하는데 있습니다.
우리가 아무 것도 하지 않은 상태에서의 하드디스크는 아무 것도 쓰거나 그려져 있지 않은 백지와 같습니다. 여기서 우리는 하드디스크에 무엇을 저장할 것인가를 생각하기 전에, 먼저 ‘어떻게’ 저장할 것인가를 생각해야 합니다.
바로 어떻게 쓸 것인가를 알 수 있도록 밭을 가는 작업이 “Format” 입니다.
포맷이란, 일반적으로 하드디스크의 빈 공간에 규칙을 생성하는 것으로, 좀더 전문적인 말로 파일시스템을 만드는 것이라 할 수 있습니다.
포맷을 하게 되면, 디스크의 일부는 이 파일 시스템의 정보를 기록하는데 쓰이고, 나머지 부분은 작은 영역, 즉 적당한 크기의 세그먼트들로 나뉘어 지는데, 리눅스에서는 이런 세그먼트들을 inodes라고 부르죠. 이렇게 해서 파일이나 디렉토리를 만드는 것이 가능해 집니다.
그러나, 모든 운영체제가 각기 다른 규칙들을 가지고 있어서 서로의 규칙은 알아보지 못하는 경우가 많이 있습니다. 다행히도 리눅스는 다양한 파일 시스템을 지원함으로써, 데이터를 주고 받는데 융통성이 있습니다.
이렇게 뭔가를 쓸 수 있도록 준비된 디스크에 데이터가 저장되면, 모든 파일들은 적어도 하나 이상의 inode를 갖게 되는데, 사용된 inode들이 반드시 근접한 영역에 존재하는 것이 아니고, 사용된 것과 미 사용된 inode들이 혼재되어 있습니다. (이런 것을 Fragmention(파편화)라고 하죠.)
|
|

|
|
[공장에서 갓 나온 디스크] [파일시스템이 설정된 디스크] [데이터가 기록된 디스크]
파티션은 왜 나누나?
디스크를 만드는 기술이 발달 되면서, 디스크는 점점 더 커졌습니다. 물론, 외형의 크기가 아니라, 그 용량이 말입니다. 사람들은 생각하게 되었죠. 과연 이 커다란 디스크 전체를 하나로 사용하는 것이 잘하는 것인가. 그리고, 디스크를 나누어 써야 하는 몇 가지 필연적인 이유들이 생겨 났습니다.
파티션을 나누는 이유는 크게 두 가지로 생각해 볼 수 있습니다.
그 첫번째는 대형의 디스크 전체를 하나로 사용하게 되면, 블록의 크기가 크게 잡혀서 블록 단위로 데이터가 저장되는데 있어서 블록을 다 채우지 못하는 크기의 데이터가 저장될 경우, 저장 공간이 낭비될 수 있다는 이유입니다. 적당한 크기로 디스크를 나누어 쓴다면, 블록의 크기가 작게 잡혀 대형의 디스크를 저장공간 손실 없이 쓸 수 있게 되죠. 또한, 몇몇 파일시스템은 대용량 하드디스크를 지원하지 못했고, 지원하더라도, 그 파일시스템에 의한 오버헤드가 무척 커졌습니다.
두번째는 우리가 좀 더 구체적으로 공부하게 될 부분입니다.
바로, 하나의 디스크에 여러 개의 운영체제를 사용하고 싶다고 생각하는 사람들이 생겨나게 되었고, 그 필요에 의해 디스크를 완전히 다른 디스크인 것처럼 멋지게 나누어 쓰는 방법이 생겨났는데, 각각의 운영체제가 자리잡게 되는 각각의 영역을 파티션이라고 부르고 있는 것입니다.
파티션을 나눔으로써 물리적인 하나의 디스크가 마치 여러 개의 디스크를 가진 시스템처럼 완벽하게 동작할 수 있게 된 것이죠.
|
잠깐 알아보는 운영체제의 로딩 과정
여기서 잠깐 운영체제가 돌아 가기까지의 과정에 대해 잠깐 알아 보겠습니다.
먼저 컴퓨터에 전원을 넣게 되면, ROM BIOS에 들어 있는 작은 프로그램, 이름을 말하자면 Bootstrap Loader 라는 프로그램이 하드디스크의 첫번째 트랙, 첫번째 섹터에 해당하는 MBR(Master Boot Record)에 있는 프로그램을 실행 시킵니다. MBR에는 그 프로그램 외에도 파티션 테이블이 들어 있는데, 다음과 같은 정보를 포함하고 있습니다.
- 파티션의 시작과 끝을 나타내는 주소 (파티션의 크기와 위치를 알 수있습니다.) - 부팅 가능한 파티션인지의 Flag - 파티션 타입 (2자릿수의 ID로 표현, 파티션이 어떤 용도로 사용될 것인지를 나타내나, 표준이 아니고, 파일시스템마다 사용하는 값이 다를 수 있습니다.)
MBR안의 작은 프로그램은 이 정보를 바탕으로 부팅 가능한 운영체제의 부트 섹터로 제어권을 넘기게 되고, 제어권을 넘겨 받은 부트섹터는 자신의 운영체제를 메모리 안으로 끌어들이기 위한 부트 프로그램을 실행시킵니다.
|
|

|
파티션의 종류
파티션 정보를 포함하고 있는 파티션 테이블에는 파티션 정보를 4개까지 밖에 저장할 수 없는 제한이 있었습니다. 이 4개의 파티션을 Primary 파티션이라 부르고 있는 것입니다.
그러나, 많은 경우 보다 여러 개의 파티션을 원하게 되었고, 그래서 생겨난 것이 Logical Partition이라는 개념입니다.
초기에는 파티션을 4개까지 생성 가능한 것으로 정해져 있습니다. 이는 분할된 파티션에 대한 정보를 담고 있는 파티션 테이블의 용량이 제한 되어있기 때문이죠. 이것을 Primary 파티션이라 부릅니다. 그러나, 많은 경우 보다 많은 파티션을 원하게 되었고, 그래서 생겨난 것이 Extended 라는 이름의 파티션입니다. 하나의 물리적인 디스크에는 4개의 Primary 파티션이 가능하고, 이 중 하나만을 Extended 파티션으로 쓸 수가 있습니다. 그리고, 이 Extended 파티션 안에 원하는 만큼의 Logical 파티션이라 불리는 논리적 개념의 파티션을 만들 수 있습니다. 각가의 Logical 파티션은 다음 Logical 파티션의 주소를 가지고 있습니다. Extended 파티션은 그 자체로는 사용되지 않으며, Logical 파티션에 대한 정보만을 가진 테두리쯤으로 말할 수 있습니다. 디스크 하나 당 SCSI 하드디스크는 15개, IDE 하드디스크는 63개의 파티션을 가질 수 있지만, 하나의 물리적인 디스크 안에 12개 이상 파티션을 만드는 것은 좋지 않은 것으로 알려져 있습니다.
어떤 운영체제들은 논리파티션에 운영체제를 설치할 수 없는데, MS Windows의 경우도 반드시 Primary 파티션에 OS를 설치해야 하므로, 설치 시, 이 점을 고려해야 합니다.
파티션은, 실린더를 기준으로 나뉘어지게 됩니다. 파티션을 나누면 아래 그림처럼, 선택한 용량만큼 실린더 범위를 할당 받게 됩니다.
|
|
|
|
[파티션이 나뉘어진 디스크]
위와 같이 파티션을 나누고 여러 개의 운영체제를 설치하여, 선택적으로 운영하기 원할 경우, MBR(Master Boot Record)에 다중 부팅 관리 프로그램을 설치해야 하며, 부트 프로그램 중 원하는 것을 선택하면, 연결되어 있는 해당 운영체계를 실행시킬 수 있습니다. LILO는 이런 것을 가능하게 하는 대표적인 프로그램입니다.
| | 대용량 디스크에 다중 운영체제 설치시 문제점 ?
1024 실린더 안에 설치해야…
요즘 나오는 하드디스크의 평균 용량은 20G 정도인 것 같습니다. 아직은 윈도우의 편의성을 무시할 수 있을 만큼 리눅스 환경이 데스크탑 유저들에게 다가와 있지 않은 관계로 많은 분들이 윈도우와 리눅스를 같이 설치하여 사용하기를 원할 것입니다.
이런 경우 파티션을 나눌 때 주의 해야 할 문제가 하나 있습니다.
시스템이 부팅되려면 부팅에 필요한 정보의 위치를 알아야 하는데, 이 위치정보를 가지고 있는 BIOS의 실린더 번호를 저장하는 곳의 크기가 10bit로 제한 되어 있기 때문에, 210, 즉 1024까지 밖에 저장을 할 수가 없습니다. 그러므로, 부팅 가능한 영역이 1024실린더 바깥에 있으면, BIOS에 저장을 할 수가 없는 것이지요. 그래서, 하나의 운영체계만을 설치하는 경우는 문제가 되지 않겠지만, 다른 운영체제와 함께 사용할 경우에는 적어도 /boot 파티션이 1024 실린더 안쪽에 설치 되어야 한다는 것입니다.
그러나, 최근에 발표된 Lilo 0.21.4.3 버전에서는 1024 실린더 문제를 해결하여 더 이상 이 문제를 고려하지 않고도 윈도우와 리눅스를 자유롭게 설치할 수 있게 되었습니다. 와우리눅스 6.2 Update에서도 이 Lilo를 지원하고 있습니다.
|
|
파티션 나누기
여기서는 파티션을 나누기 위해 어떤 방법이 있는지 살펴 보겠습니다.
파티션은 크게 두가지 방법으로 나눌 수 있습니다.
첫번째는, fdisk를 이용한 방법으로 기존의 정보를 보존하지 않는 방법이며, 두번째는, 파티션 분할 유틸리티를 이용하는 방법으로 기존의 데이터를 보존하면서 새로운 파티션을 생성할 수 있는 방법입니다.
<fdisk를 이용한 방법>
MS-DOS에서도 FDISK.EXE를 제공하지만, 이것은 다른 운영체계에서 분할된 파티션을 제대로 인식하지 못하며, 실행 후 모든 정보가 파괴됩니다. 리눅스도 파티션을 생성, 삭제하는 프로그램인 fdisk를 가지고 있으므로, 기존의 운영체제와 데이터를 보존하지 않고 리눅스를 설치하는 경우 이것을 이용할 수 있습니다.
리눅스의 fdisk는 파티션 설정 후 바로 데이터가 손실되는 것이 아니므로, 재부팅 이전이라면 기존의 파티션 설정 정보(실린더 번호등)를 알고 있다면, 다시 복구가 가능합니다. 미리 파티션 정보를 백업해 두는 것도 좋겠습니다.
시스템을 처음 설치하는 경우에는 설치 순서에 따라 진행하다가, fdisk를 사용할 것을 선택하면, 리눅스의 fdisk를 사용하여 자신이 원하는 상태로 파티션을 나누어 줄 수 있습니다.
|
|

|
|
[fdisk 실행 화면]
<파티션 분할 유틸리티를 이용한 방법>
이미 윈도우 같은 운영체제가 설정되어 있는 상태에서, 운영체제와 데이터를 보존하면서 파티션을 새로 생성하여 리눅스를 설치하려고 할 경우에는 이런 것을 가능하게 하는 프로그램을 사용해야 합니다. 가장 기본적인 프로그램은 대부분 배포판의 /dosutils/fips20/ 디렉토리 내에 포함되어 있는 fips.exe(First Nondestructive and Interactive Partition Splitting)와 Partition Magic등을 들 수 있습니다.
|
|

|
|
[파티션 매직과 파티션 매니저 실행 화면]
이 경우, 기존의 정보를 보호하는 것을 원칙으로 하지만, 앞에서 설명한 것과 같이 데이터가 흩어져 있을 수 있으므로, 먼저 디스크 조각 모음 작업을 해서 데이터를 앞쪽으로 모아 준 후 실행하는 것이 좋습니다. 또한, 만약의 경우를 대비하여 중요 데이터는 백업한 후 실행하는 것이 안전하겠죠.
어떤 방법이 되었든 스스로 파티션을 구성해보고, 원하는 분할이 이루어 졌는지 직접 확인해 보아야 확실한 파티션 Skill을 익힐 수 있을 것입니다. | |
|
내 파티션 알아보기
나뉘어진 파티션은 fdisk 혹은 cfdisk 명령을 통해 확인해 볼 수가 있습니다.
|
|

|
|
우리가 흔하게 보아왔던 윈도우에서는 파티션을 나눈 경우, C,D,E와 같은 식의 드라이브 이름을 가지지만, 리눅스에서는 파일 이름과 비슷한 형식의 이름을 갖습니다.
먼저, IDE 디스크는 /dev/hda, /dev/hdb, …와 같이 앞쪽에 ‘hd’가 붙고, SCSI 디스크인 경우에는 /dev/sda, /dev/sdb,…와 같이 ‘sd’가 붙습니다. 뒤에 순차적으로 붙는 a,b,c등은 물리적인 하드디스크가 추가될 때 순차적으로 붙는 것입니다.
그리고, 이렇게 정해진 디스크이름에, Primary Partition은 1,2,3,4를 순차적으로 붙이고, Logical Partition은 Primary Partition의 개수와 상관 없이 5 이후의 번호가 붙여집니다.
그래서, /dev/hda1은 IDE디스크의 첫번째 Primary Partition을 나타내는 것이며, /dev/hda5는 IDE디스크의 첫번째 Logical Partition을 나태내는 이름입니다.
Start와 End 항목은 파티션이 시작되는 실린더와 끝나는 실린더 번호를 나타냅니다.
위 그림을 보면, 크게 Primary Partition과 Extended Partition으로 나뉘어 졌고, 그 Device Name이 hda1, hda2이고, hda5, hda6, hda7은 Extended Partition을 쪼개 놓은 것을 알 수 있습니다.
그 중 부팅 가능한 파티션의 Boot항목에 ‘*’표시가 있습니다.
| 퍼포먼스 높이는 파티션 나누기 (각 파티션의 적정 용량 및 파티션의 위치)
위에서는 언급하지 않았지만, 파티션을 나누게 된 또 하나의 이유는, 리눅스를 포함한 몇몇 파일 시스템에 있어서는 파티션을 여러 개로 나누는 것이 시스템을 효과적으로 운영하는데 유리했기 때문입니다.
예를들어, 리눅스의 SWAP 파티션의 경우, 메모리를 대체하는 것이므로, 하드디스크를 빠르게 검색할 수 있도록 해야 합니다. 레코드 판을 생각해 보면 알 수 있듯이 디스크의 헤드는 같은 트랙에 있는 데이터를 읽을 때가, 다른 트랙에 있는 데이터를 읽는 것 보다 빠르게 읽을 수 있으므로, 헤드의 움직임을 줄일 수 있는 위치에 스왑 파티션을 두는 것이 좋겠지요. 그보다 더 좋은 방법은 헤드가 다른 파티션을 참조하느라 바쁘지 않도록 아예 전용 파티션을 두면 좋을 것입니다. 또, 용량면에서 스왑은 128M 이상은 사용하지 않으므로, 더 크게 파티션을 잡아 주어도 사용되지 않습니다. 만약, 그 이상의 스왑 용량이 필요하다면, 스왑 파티션을 하나 더 두어야 합니다. 이런 스왑 파티션은 16개까지 추가로 잡아 줄 수가 있습니다.
또 한가지는 백업을 염두에 두고 파티션을 정하는 것인데, 주기적으로 백업을 받아야 하는 디렉토리인 경우 파티션을 분리해 두고, 하나의 저장 장치 용량과 비슷한 크기로 할당한다면, 빈번한 백업을 좀 더 효과적으로 할 수 있을 것입니다. 또한, 수시로 자료가 생성, 삭제 되어 디스크 파편화가 많은 파티션은 그렇지 않은 파티션과 분리해 두어야 파편화에 의한 디스크의 성능저하를 피할 수 있을 것입니다. 또한 기능별 파티션의 분리는 시스템의 일부를 재설정 해야 할 경우에도 유용합니다.
파티션 설정에 있어서 이런 것을 고려하는 것은 크게 눈에 띄는 성능의 향상을 느낄 수는 없겠지만, 전체적으로 안정되고, 효율적인 시스템을 만드는 기초가 될 것입니다.
참고 사이트 : http://kldp.org/Translations/html/SysAdminGuide-KLDP/x931.html http://kldp.org/HOWTO/mini/html/Partition/Partition.html http://kldp.org/HOWTO/mini/html/Large-Disk/Large-Disk.html
참고 문서 : 한빛 미디어 ‘러닝리눅스’, 사이버 출판사 ‘레드햇 리눅스 완벽 가이드’
|