Trans:GentooX86Handbook1-4

Gentoo Korea Wiki
둘러보기로 가기 검색하러 가기

디스크 준비하기

블록 장치 소개

블록 장치

이제 우리는 젠투 리눅스의 디스크 측면의 모습과 리눅스 파일 시스템, 파티션, 블록 장치를 포함한 일반적인 리눅스의 모습을 취할 것입니다. 그 다음 디스크와 파일시스템의 이모저모에 익숙해지고 나면 젠투 리눅스 설치를 위한 파티션과 파일 시스템의 처리과정을 안내받을 것입니다.

시작에 즈음하여 블록 장치를 소개하도록 하겠습니다. 가장 잘 알려진 블록 장치는 아마도 리눅스 시스템에서 첫 번째 드라이브로 나타나는 /dev/sda가 아닌가 싶습니다. SCSI와 직렬 ATA 드라이브들 모두 /dev/sd*로 표시합니다. 게다가 커널의 새로운 libata 프레임워크에서는 IDE 드라이브 조차도 /dev/sd*로 표시합니다.만약 오래된 장치 프레임워크를 사용한다면, 첫번째 IDE 드라이브는 /dev/hda 입니다.

위에 나타난 이 블록장치는 디스크의 추상 인터페이스입니다. 사용자 프로그램은 드라이브가 IDE인지 SCSI인지 그 말고 다른 장치인지 전혀 신경쓰지 않고 디스크와 상호작용하기 위해 이 블록 장치를 사용할 수 있습니다. 프로그램은 연속된, 임의 접근가능한 512 바이트 블록의 모음으로 디스크의 저장소에 주소를 지정할 수 있습니다.

파티션

리눅스 시스템을 저장하기 위해 이론적으로 디스크의 전체 구역을 사욜할 수 있지만 실제로는 거의 그렇게 하지 못합니다. 대신 전체 디스크 블록장치는 작은 부분으로 나뉘어 좀 더 관리하기 쉬운 블록 장치가 됩니다. x86 시스템에서는 이를 파티션이라고 부릅니다.

파티션은 주 파티션, 확장 파티션, 논리 파티션 세 가지 형태로 나눕니다.

주 파티션은 MBR(주 부트 레코드)에 정보를 저장하는 파티션입니다. MBR 이 매우 작은(512 바이트) 만큼 네 개의 주 파티션만을 지정할 수 있습니다. (예를 들어 /dev/sda1 부터 /dev/sda4 까지 입니다).

확장 파티션은 더 많은 파티션을 포함할 수 있는 특별한 주 파티션(가능한 네 개의 주 파티션 중에 하나는 반드시 확장 파티션이 되어야 한다는 의미)입니다. 본래 어떤 파티션의 경우 존재할 수 없지만 네 개로는 부족할 때, 이전 호환성을 잃지 않고 구성계획을 확장할 수 있는 기회를 가져왔습니다.

논리 파티션은 확장 파티션 내부에 있는 파티션입니다. 이들 설정 내용은 MBR 안에 들어가 있지 않고 확장 파티션 안에 들어가 있습니다.

고급 저장장치

x86 설치 CD는 LVM2를 지원합니다. LVM2는 파티션 설정을 통해 유연성을 증대시킵니다. 설치 설명 중에, 우리는 "일반" 파티션에 초점을 맞추겠지만, LVM2을 지원한다는 사실에 대해 알고 있는 것 또한 좋습니다.

파티션 모양새 설계

기본 파티션 모양새

여러분의 시스템에 대한 파티션 모양새를 그려보는데 관심이 없다면, 이 책을 통해 우리가 사용한 파티션 모양새를 사용해보실 수도 있습니다.

파티션 파일 시스템 사이즈 설명
/dev/sda1 ext2 32M 시동 파티션
/dev/sda2 (swap) 512M 스왑 파티션
/dev/sda3 ext3 디스크 나머지 공간 루트 파티션

파티션의 크기가 얼마나 되어야 하는지 심지어 얼마나 많은 파티션이 필요한지 알고 싶으시다면 계속 읽어내려가시기 바랍니다. 그렇지 않다면 디스크를 분할하기 위해 fdisk 사용하기 또는 디스크를 분할하기 위해 parted 사용하기 (둘 다 파티션 도구인데, fdisk는 잘 알려져 있고 안정적입니다. parted는 좀 최근에 나왔는데 2TB이상의 파티션을 지원합니다)를 읽어 분할을 계속 진행하도록 합니다.

얼마나 많이, 얼마나 크게 할까요?

많은 파티션들은 환경에 크게 의존합니다. 사용자가 많이 있다면 보안성을 증대하고 백업을 쉽게하기 위해 /home 을 따로 나누고 싶어할 것입니다. 젠투 시스템을 메일서버로 동작하게끔 하려면 /var에 모든 메일이 저장되므로 /var를 나눌 것입니다. 파일시스템에 대한 좋은 선택은 여러분이 가진 시스템의 성능을 극대화 할 것입니다. 게임서버라면 대부분의 게임 서버가 /opt에 설치 되므로 이것을 나눌 것입니다. 이유는 /home 과 비슷합니다. 보안과 백업이죠. /usr 는 커지는 그대로라도 유지하고 싶어할 것입니다. 주요 프로그램들이 들어가 있을 뿐만 아니라 다양한 소스코드를 제외한 500MB 가량의 포티지 트리들이 이 곳에 저장됩니다.

여러분이 아시는 바와 같이 여러분이 무엇을 저장하고 싶은지에 크게 달려있습니다. 각각의 파티션과 볼륨은 다음 장점을 지니고 있습니다

  • 각각의 파티션과 볼륨에 대해 가장 잘 동작하는 파일 시스템을 선택할 수 있습니다.
  • 어떤 기능을 상실한 도구가 계속 파일을 기록하는 경우 빈 공간이 부족해져 전체 시스템을 동작할 수가 없습니다.
  • 필요한 경우 파일시스템 점검을 동시에 여러 부분에 대한 검사를 수행하여 시간을 줄입니다 (여러 파티션이 있을 때보단 여러 디스크가 있을 수록 좋겠지만).
  • 일부 파티션이나 볼륨을 읽기 전용, nosuid(setuid 비트를 무시합니다), noexec(실행 비트를 무시합니다) 등으로 마운트하여 보안성을 향상할 수 있습니다.

그러나 이 뿐만 아니라 여러 파티션을 나누면 단점이 있가도 합니다. 제대로 설정하지 않으면 어떤 파티션은 남은 공간이 많지만 어떤 파티션은 그렇지 않을 것입니다. 다른 귀찮은 것 하나는 나누어 놓은 파티션인데 특히 /usr나 /var같은 중요한 마운트 지점은 종종 관리자가 다른 시동 스크립트를 시작하기 전에 파티션에 마운트 하게끔 initramfs로 시동하는 것이 필요합니다. 비록 항상 일어나는 일은 아니지만요. 이렇게 다양한 이득이 있습니다.

SCSI 와 SATA에서는 GPT 레이블을 사용하지 않는한 15개의 분할구역 갯수 제한이 있습니다.

(웹서버, 메일서버, 그놈 등이 들어있는)시연 랩탑에서 보여드리기 위해 20GB 디스크에 대한 구역 분할의 예를 보여드리겠습니다:


코드 예제 2.1: 파일시스템 사용 예제
$ df -h
Filesystem    Type    Size  Used Avail Use% Mounted on
/dev/sda5     ext3    509M  132M  351M  28% /
/dev/sda2     ext3    5.0G  3.0G  1.8G  63% /home
/dev/sda7     ext3    7.9G  6.2G  1.3G  83% /usr
/dev/sda8     ext3   1011M  483M  477M  51% /opt
/dev/sda9     ext3    2.0G  607M  1.3G  32% /var
/dev/sda1     ext2     51M   17M   31M  36% /boot
/dev/sda6     swap    516M   12M  504M   2% <not mounted>

(나중에 사용하기 위해 남겨둔 용량: 2 GB)


/usr은 여기서는 용량이 차 있지 않(83% 사용)지만 모든 프로그램을 설치하면 /usr 사용량은 더이상 늘어나려고 하지 않을 것입니다. 비록 /var의 디스크 용량이 지나치게 적은 기가바이트의 용량을 할당한 것 같지만, 포티지가 패키지를 컴파일하는데 기본으로 이 파티션을 사용할 것임을 기억해 두시기 바랍니다. 만약 /var 를 1GB 용량 만큼 좀 더 합당한 공간을 유지하려면 /etc/make.conf에 PORTAGE_TMPDIR 변수를 통해 오픈오피스와 같은 엄청나게 큰 패키지를 컴파일하기 위해 충분한 빈 공간을 가진 파티션을 여러분이 가리킬 필요가 있을 것입니다.

fdisk를 사용하여 디스크 분할하기


중요: 2TB보다 큰 용량의 파티션을 다룰 환경이라면 parted를 사용하여 디스크 분할하기방법을 대신 이용해주시기 바랍니다. fdisk 는 대형 파티션을 다룰 수 없습니다.


다음 부분에서는 fdisk를 사용해서 어떻게 파티션 배치를 만드는지 설명합니다. 파티션 배치 예제는 앞에서 설명했습니다.

파티션 설명
/dev/sda1 시동 파티션
/dev/sda2 스왑 파티션
/dev/sda3 루트 파티션

여러분의 취향에 따라 파티션 배치를 바꿔보세요.

현재 파티션 배치 보기

fdisk는 여러분의 디스크를 파티션으로 나누는 잘 알려진 강력한 도구입니다. fdisk를 여러분의 디스크에 대해 실행합니다. (저희 같은 경우는 /dev/sda를 사용합니다)


코드 예제 3.1: fdisk 시작하기
# fdisk /dev/sda


fdisk를 실행하면 다음과 같은 프롬프트를 맞이하게 될 것입니다.


코드 예제 3.2: fdisk 프롬프트
Command (m for help):


p를 입력하여 현재 디스크의 파티션 설정을 표시합니다


코드 예제 3.3: 파티션 설정 예제
Command (m for help): p

Disk /dev/sda: 240 heads, 63 sectors, 2184 cylinders
Units = cylinders of 15120 * 512 bytes

   Device Boot    Start       End    Blocks   Id  System
/dev/sda1   *         1        14    105808+  83  Linux
/dev/sda2            15        49    264600   82  Linux swap
/dev/sda3            50        70    158760   83  Linux
/dev/sda4            71      2184  15981840    5  Extended
/dev/sda5            71       209   1050808+  83  Linux
/dev/sda6           210       348   1050808+  83  Linux
/dev/sda7           349       626   2101648+  83  Linux
/dev/sda8           627       904   2101648+  83  Linux
/dev/sda9           905      2184   9676768+  83  Linux

Command (m for help): 


이 디스크 부분은 ("Linux swap"으로 표시한)스왑 파티션과 ("Linux"라고 표시한 제각각의)7개의 Linux 파일 시스템을 적재하도록 설정했습니다.

모든 파티션 제거

먼저 이 디스크에 있는 기존의 모든 파티션을 제거할 것입니다. 파티션을 삭제하려면 d를 입력합니다. 기존의 /dev/sda1를 삭제하는 것을 예로 들어보겠습니다.


코드 예제 3.4: 파티션 삭제
Command (m for help): d

Partition number (1-4): 1


파티션은 지워지는 것으로 계획되었습니다. p를 입력하면 더이상 보이지 않겠지만 여러분이 바꾼 내용을 저장하기 전에는 지워지지 않을 것입니다. 여러분이 실수를 했고 바꾼 내용을 저장하지 않고 멈추려면, q라고 바로 입력하고 Enter 키를 누르면 삭제하지 않을 것입니다.

이제 여러분이 시스템에 있는 모든 파티션을 싹 날리려고 한다면, p를 입력해서 파티션 목록을 출력하고 d를 입력해서 많은 파티션을 지우는 일을 반복합니다.이렇게 하면 파티션 테이블에 아무것도 남지 않은 상황으로 끝낼 것입니다.

{{

코드 예제 3.5: 빈 파티션 테이블
Disk /dev/sda: 30.0 GB, 30005821440 bytes
240 heads, 63 sectors/track, 3876 cylinders
Units = cylinders of 15120 * 512 = 7741440 bytes

Device Boot    Start       End    Blocks   Id  System

Command (m for help):


이제 메모리에 있는 파티션 테이블은 비어있고 파티션을 만들 준비가 되었습니다. 앞에서 설명한대로 기본 파티션 모양새를 사용할 것입니다. 물론 여러분이 똑같은 파티션 모양새를 쓰고 싶지 않다면 글자 그대로의 방법을 따라가지 않아도 됩니다.

부트 파티션 만들기

먼저 작은 부트 파티션을 만들어보겠습니다. n을 입력하여 새로운 파티션을 만들고 p를 입력하여 주 파티션을 선택한 다음 첫번째 주 파티션을 선택하기 위해 1을 입력합니다. 첫번째 실린더를 물어볼 때, Enter키를 누르고, 32MB 크기의 파티션을 만들기 위해 +32M를 입력한 다음 시동가능 플래그를 설정합니다.


코드 예제 3.6: 부트 파티션 만들기
Command (m for help): n

Command action

 e   extended
 p   primary partition (1-4)

p Partition number (1-4): 1 First cylinder (1-3876, default 1): (Hit Enter) Using default value 1 Last cylinder or +size or +sizeM or +sizeK (1-3876, default 3876): +32M


스왑 파티션 만들기

루트 파티션 만들기

parted를 사용하여 디스크 분할하기

파일 시스템 만들기

마운트