본문 바로가기

Linux

하드디스크 파티션에 대해서


출처 : http://wiki.kldp.org/Translations/html/RedHat6-KLDP/linux_fdisk.html

5. 하드디스크 파티션에 대해서

※참고 나우누리 유성태(alloying)님의 글 입니다.
하드디스크 파티션에 대해서 쉽고 간결한 핵심적인 내용요약입니다.

하드디스크 파티션은 알고 보면 쉬운 것이지만, 처음 당하는 경우에는 골치 아픈 것임에 틀림없다. 이 강좌의 주목적은 fidsk의 사용법을 설명하는 것이 아니라 하드디스크 파티션의 구조를 설명하는 것이다. 그리고 IDE HDD를 기준으로 설명할 것이다.

요즘의 PC에는 IDE channel(하드디스크 연결하는 곳)이 2개 있으며 대개는 마더보드에 위치한다. 각 채널은 primary와 secondary로 구분된다. 각 채널에는 HDD를 두개까지 설치할 수 있으며 따라서 HDD를 최대 4개 까지 설치할 수 있다. 사운드 카드에 IDE 채널이 있는 경우라면 6개 까지도 설치할 수 있다. 사운드 카드에 있는 IDE 채널을 이용하고자 한다면 사운드 카드의 매뉴얼을 보고 사운드 카드의 IDE 채널이 이용하는 irq와 io address를 확인해야 할 것이다. 그리고 커널 소스의 ide.txt 문서를 읽어보아야 할 것이다.

각 채널에 설치된 HDD는 master와 slave로 구분하며 HDD의 jumper(일종의 스위치)를 세팅하여 master 또는 slave로 지정할 수 있다. 케이블에 HDD를 연결하는 순서와 master, slave 구분은 상관이 없다.

리눅스에서는 하드디스크를 하나의 파일로서 취급하며 /dev/hda, /dev/hdb와 같이 나타낸다. 그렇다면 hda는 어느 하드디스크를 지칭하는 것인가? primary IDE 채널에 연결된 master HDD를 지칭하는 것이다. primary IDE 채널에 연결된 slave HDD는 hdb로 표시한다. 그럼 hdc는? 당연히 secondary IDE 채널에 연결된 master HDD 이다. 다음과 같은 그림으로 표현할 수 있을 것이다.

┏━━━━━━━━━━━━━━┓ primary IDE secondary IDE ┃ ┃ ┏━━━┻━━━┓ ┏━━━┻━━━┓ master HDD slave HDD master HDD slave HDD (/dev/hda) (/dev/hdb) (/dev/hdc) (/dev/hdd)

IDE CD-ROM을 master로 설정하여 secondary IDE 채널에 연결하였다면 /dev/hdc는 CD-ROM을 지칭하게 된다. 참고로 4배속 이상의 CD-ROM 중에서 SCSI 카드에 연결해서 사용하는 CD-ROM이 아니라면 대부분 IDE CD-ROM 이라고 보면 된다.

이제 hda를 예로 들어 파티션에 대한 이야기를 해보자. 먼저 파티션의 종류에 대하여 알아보자. 파티션은 primary, extended, logical 파티션으로 구분할 수 있다. 하나의 하드디스크에는 최대 4개의 primary 파티션이 존재할 수 있다. 하나의 하드디스크에 5개 이상의 파티션이 필요할 경우 extended 파티션을 만들어 그 안에 여러 개의 logical 파티션을 둘 수 있는 것이다. 이때 하나의 하드디스크에 만들 수 있는 extended 파티션의 개수는 무조건 하나이다. 그리고 extended 파티션을 만든다면 primary 파티션은 최대 3개까지 만들 수 있다.
또한 만들 수 있는 logical 파티션의 개수도 59개로 제한된다. 따라서 하나의 하드디스크에 만들 수 있는, 그리고 데이타의 저장이 가능한 파티션의 최대 개수는 62개인 (primary 3개, logical 59개) 셈이다. extended 파티션에는 데이타를 저장할 수 없다. extended 파티션은 logical 파티션들을 감싸고 있는 껍데기라고 생각하면 된다.

hda를 네 개의 primary 파티션으로 나눈다면 각 파티션은 hda1, hda2, hda3, hda4 와 같이 나타낸다. 그리고 logical 파티션은 hda5 부터 시작한다. 예를 들어, 세개의 primary 파티션을 만든 후 네 번째는 extended 파티션으로 지정하고, extended 파티션 안에 세개의 logical 파티션을 만든다면 각각의 파티션은 다음과 같이 나타낼 수 있을 것이다.

hda1, hda2, hda3, hda4(hda5, hda6, hda7)
hda1 - primary 파티션 ,hda2 - primary 파티션
hda3 - primary 파티션 ,hda4 - extended 파티션
hda5, hda6, hda7 - logical 파티션

hda ┏━━━━━┳━━┻━━┳━━━━━┓ hda1 hda2 hda3 hda4 (primary) (primary) (primary) (extended) ┃ ┏━━━━━╋━━━━━┓ hda5 hda6 hda7 (logical) (logical) (logical)

대개는 primary 파티션을 세 개씩 만들지는 않을 것이다. primary 파티션을 하나 만들고 나머지를 extended 파티션으로 지정하여 그 안에 logical 파티션을 만드는 것이 보통이다. 그리고 위에서 hda4를 extended 파티션으로 지정하였는데, 반드시 hda4를 extended 파티션으로 지정할 이유는 없다. fdisk를 사용하여 파티션을 나눈다면 hda1, hda2, hda3, hda4 중에서 사용자 마음대로 지정할 수 있다. 심지어는 하나의 하드디스크 전체를 extended 파티션으로 지정할 수도 있다. 그리고 hda3를 extended 파티션으로 지정하려고 하는데 hda3가 이미 primary 파티션으로 지정되어 있다면 당연히 hda3를 extended 파티션으로 지정할 수 없다.

이제까지의 이야기는 hdb, hdc, hdd ... 모두에 똑같이 적용된다.

실제로 파티션을 나누기 위해서는 fdisk 라는 프로그램을 이용하게 되는데 명령 행 방식이라 사용하기가 간편하지는 않다. 대신에 cfdisk를 사용하면 좀더 쉽게 파티션을 나눌 수 있을 것이다. 자세한 사용법은 실전을 통해서 익히는 이상으로 빠른 것은 없다. (c)fdisk를 사용하여 파티션을 지우고 만들고 한다 하더라도 마지막에 write를 하지 않고 빠져 나오면 기존의 파티션에는 아무런 영향을 주지 않는다. 그래도 조심은 해야 할 것이다. 한순간의 실수로 모든 데이타가 사라져 버릴 테니까 말이다.

새 하드디스크를 리눅스 박스에 설치한 후 원하는 대로 파티션을 하였다면, 그리고 각 파티션에 ext2 파일시스템을 만들어 주어야 데이타를 저장할 수 있다. 새 하드를 slave 로 설정하여 secondary 채널에 설치하고 전체를 primary 파티션으로 지정하였다고 가정하다. 그렇다면 이 파티션은 hdd1 으로 표시된다. 이 파티션에 ext2 파일시스템을 만들어 주려면,

mke2fs /dev/hdd1

그러나 이렇게 하면 하드디스크 전체 용량의 95% 만을 일반 이용자들이 사용할 수 있으며 나머지 5%는 root 사용자 이외에는 이용할 수가 없다. 즉 하드디스크 전체가 데이타 파일들로 꽉 채워져도 나머지 5%는 비워져 있으며 root는 나머지 5%의 공간에 파일을 저장할 수 있는 것이다. 다음과 같이 하면 이와 같은 상황을 방지할 수 있다.

mke2fs -m 0 /dev/hdd1

이제는 hdd1을 적당한 곳에 마운트하여 파일을 읽고 쓰면 된다.

mount /dev/hdd1 /mnt

이상으로 하드디스크 파티션에 대한 설명을 하였으며 마운트의 개념에 대하여 잠깐 설명하고 이 글을 마치고자 한다.

MS-DOS에서는 하드디스크 파티션을 C:, D: ... 등으로 구분을 한다. 이것을 마운트의 개념으로 설명하면, " C: 라는 '마운트 포인터'에 하드디스크 파티션 하나를 '마운트' 하였다" 라고 할 수 있다. 리눅스에서는 예를 든다면, '/usr'라는 마운트 포인터에 임의의 하드디스크 파티션 하나를 마운트해서 사용하는 것이다. 적절한 설명인지는 모르겠으나 마운트라는 개념을 이해하는데 도움이 되었으면 한다.

파티션에 대한 HOWTO 문서도 있으니 읽어보면 도움이 될 것이다. 물론 한글로 번역이 되어 KLDP에 등록되어 있다.

'Linux' 카테고리의 다른 글

리눅스용 텍스트 브라우저 W3m 사용기  (0) 2012.06.15
Ubuntu에 NFS4 쓰기  (1) 2012.06.14
nohup을 대체 하는 screen  (0) 2012.04.30
tar, gzip, split  (0) 2012.04.04
vi 키맵핑 차이점  (0) 2012.03.21