Handbook:MIPS/Blocks/Disks/ko

From Gentoo Wiki
Jump to: navigation, search
This page is a translated version of the page Handbook:MIPS/Blocks/Disks and the translation is 100% complete.


공간 분할

이론적으로는 리눅스 시스템을 전체 디스크에 넣을 수 있지만, 실제론 거의 불가능합니다. 대신 전체 블록 장치를 작게 나누어 더욱 관리하기 쉬운 블록 장치를 만들 수 있습니다. 이를 분할 영역(파티션)이라고 부릅니다.

분할 배치 설계

분할 영역을 얼마나 많이, 크게 할까요?

분할 영역의 수는 환경에 따라 다릅니다. 예를 들어, 사용자가 많을 경우 보안성을 개선하고 백업을 쉽게 하기 위해 /home/을 나누는 것이 좋습니다. 젠투를 메일 서버로 설치한다면, /var/에 모든 메일을 저장하므로 /var/를 나누어야 합니다. 파일 시스템의 탁월한 선택은 성능을 극대화합니다. 게임 서버는 게임 서버를 설치할 /opt/를 따로 나눕니다. 이유는 /home/과 비슷합니다: 보안과 백업이죠. 대부분의 상황에서 /usr/는 거대한 상태고 남아있습니다. 주요 프로그램을 저장할 뿐만 아니라, (보통 /usr/portage에 기본으로 들어가는) 젠투 이빌드 저장소는 거의 650MB를 차지합니다. 이 디스크 공간은 보통 이빌드 저장소내에 저장하는 packages/distfiles/ 디렉터리는 제외하고 추산합니다.

관리자 취향에 달려있습니다. 분할 영역 또는 볼륨을 나누면 다음과 같은 장점이 있습니다:

  • 각 분할 영역 또는 볼륨에 대해 최상의 동작을 수행하는 파일 시스템을 선택합니다.
  • 제 기능을 상실한 도구가 분할 영역 또는 볼륨에 계속 파일을 기록할 경우, 남아 있는 공간이 없어져 전체 시스템이 동작하지 않습니다.
  • 필요한 경우, (이 장점은 여러 개의 분할 영역보다는 여러 대의 디스크에서 더 돋보이지만) 동시에 여러 분할 영역을 검사할 수 있어, 파일 시스템 검사 시간을 줄일 수 있습니다.
  • 일부 분할 영역 또는 볼륨을 읽기 전용, nosuid(setuid 무시), noexec(실행 비트 무시) 등으로 마운트하여 보안성을 개선할 수 있습니다.

그러나, 마찬가지로 다중 분할 영역에는 단점도 존재합니다. 제대로 설정하지 않으면 어떤 분할 영역에는 공간이 상당히 남지만, 다른 분할 영역은 그렇지 않을 수 있습니다. 다른 골칫거리는 분할 영역이 나뉘어져 있는 상황입니다. /usr/ 또는 /var/와 같은 중요한 마운트 지점은 특히 그렇습니다. 다른 부팅 스크립트를 시작하기 전에 분할 영역을 마운트하려면 관리자가 종종 initramfs로 부팅해야합니다. 항상 있는 경우는 아니기 때문에 결과가 다양하게 나타납니다.

디스크에서 GPT 레이블을 사용하지 않으면 SCSI와 SATA에서는 분할 영역 갯수가 15개로 제한되어있습니다.

스왑 공간이 무엇인가요?

완벽한 스왑 분할 영역 값은 없습니다. 스왑 영역의 존재 목적은 내부 메모리(RAM)가 용량 고갈에 처해있을 때 커널에서 디스크 공간을 제공하려는 것입니다. 스왑 영역은 커널에서 곧 접근하지 않을 메모리 페이지를 디스크(스왑 또는 페이지-아웃)에 옮기고 메모리를 확보할 수 있도록 합니다. 물론 메모리가 갑자기 필요할 때도 이 페이지를 메모리에 되돌려놓습니다만(페이지-인), 시간이 오래걸립니다(내부 메모리에 비해 디스크는 비교적 매우 느립니다).

시스템이 메모리를 집중적으로 사용하는 프로그램을 실행하려 하지 않거나 시스템에 충분한 메모리가 있을 경우 많은 스왑 영역이 필요하지 않을지도 모릅니다. 그러나 스왑 영역은 최대 절전모드 기능을 사용할 경우 전체 메모리 공간을 사용하기도 합니다. 시스템을 최대 절전모드로 진입하려 한다면, 더 큰 스왑 영역이 필요하며, 최소한, 종종 시스템에 대용량의 메모리를 설치합니다.


fdisk 사용

SGI 머신: SGI 디스크 레이블 만들기

SGI 시스템의 모든 디스크는 SGI 디스크 레이블이 필요한데 썬과 MS-DOS의 디스크 레이블의 기능과 비슷합니다. 여기에는 디스크 분할 영역 정보를 저장합니다. 새 SGI 디스크 레이블을 만들면 디스크에 다음 두가지 특별한 분할 영역을 만듭니다.

  • SGI 볼륨 헤더(9번째): 이 분할 영역은 중요합니다. 부트로더가 위치할 곳이며 어떤 경우는 커널 이미지도 들어갑니다.
  • SGI 볼륨(11번째): 이 분할 영역은 썬 디스크 레이블의 세번째 "전체 디스크" 분할 영역과 유사한 목적으로 씁니다. 이 분할 영역은 전체 디스크를 차지하며, 건드려선 안됩니다. 문서상에 남기지 않은 방식(또는 어떤 방식에 있어서는 IRIX에서 사용)으로 PROM의 동작을 보조하는 다른 분할 영역과는 달리 특별한 목적으로 쓰지 않습니다.
경고
SGI 볼륨 헤더는 0번 실린더부터 시작해야합니다. 이게 실패하면 디스크 부팅이 실패한다는 의미입니다.

다음은 fdisk 세션에서 발췌한 예제입니다. 개인 취향에 맞춰 읽어내려가면서 설정을 적당히 바꾸십시오...

root #fdisk /dev/sda

전문가 모드로 전환하십시오:

Command (m for help):x

m을 눌러 전체 메뉴 옵션을 표시하십시오:

Expert command (m for help):m
Command action
   b   move beginning of data in a partition
   c   change number of cylinders
   d   print the raw data in the partition table
   e   list extended partitions
   f   fix partition order
   g   create an IRIX (SGI) partition table
   h   change number of heads
   m   print this menu
   p   print the partition table
   q   quit without saving changes
   r   return to main menu
   s   change number of sectors/track
   v   verify the partition table
   w   write table to disk and exit

SGI 디스크 레이블을 만드십시오:

Expert command (m for help):g
Building a new SGI disklabel. Changes will remain in memory only,
until you decide to write them. After that, of course, the previous
content will be irrecoverably lost.

메인 메뉴로 돌아가십시오:

Expert command (m for help):r

현재 분할 영역 배치를 살펴보십시오:

Command (m for help):p
Disk /dev/sda (SGI disk label): 64 heads, 32 sectors, 17482 cylinders
Units = cylinders of 2048 * 512 bytes
  
----- partitions -----
Pt#     Device  Info     Start       End   Sectors  Id  System
 9:  /dev/sda1               0         4     10240   0  SGI volhdr
11:  /dev/sda2               0     17481  35803136   6  SGI volume
----- Bootinfo -----
Bootfile: /unix
----- Directory Entries -----
참고
디스크에 기존의 SGI 디스크 레이블이 남아있다면 fdisk에서 새 레이블을 만들 수 없습니다. 이런 문제를 회피할 수 있는 방법이 두가지가 있는데 하나는 썬 또는 MS-DOS 디스크 레이블을 만들고, 디스크에 바뀐 내용을 기록한 후, fdisk를 다시 시작하는 방법입니다. 다른 방법은 다음 명령으로 분할 영역 테이블에 널 데이터를 엎어쓰는 방법입니다:dd if=/dev/zero of=/dev/sda bs=512 count=1

SGI 볼륨 헤더 크기 조절

중요
이 단계는 fdisk 버그 때문에 자주 필요합니다. 이런 문제 때문에 볼륨 헤더를 제대로 만들지 못하며, 시작/끝 실린더 값이 0이 됩니다. 이 동작은 다중 분할 영역을 만들지 못하게 합니다. 이 문제를 벗어나려면 ... 계속 읽어내려가십시오.

이제 SGI 디스크 레이블을 만들었고 분할 영역을 지정할 차례입니다. 위 예제에서 이미 두 분할 영역을 지정했습니다. 이 분할 영역은 위에서 언급한 대로 특별하며 일반 분할 영역으로 바꿀 수 없습니다. 그러나 젠투를 설치할 때는 부트로더를 불러와야 하고 가능하다면 여러가지 커널 이미지(시스템 형식에 따름)를 볼륨 헤더에 바로 넣어야합니다. 볼륨 헤더 자체는 어떤 크기로든 8개 문자 이름까지만 허용하는 여덟 개의 이미지를 가질 수 있습니다.

볼륨 헤더를 더 크게 만드는 과정은 쉽지 않습니다. 약간 요령을 피워야합니다. 간단하게 지울 수 없으며 fdisk 기능이 모자란 상황이라 볼륨 헤더를 다시 추가할 수 없습니다. 아래 보여드릴 예제에서 50MB /boot 분할 영역과 결합한 50MB 볼륨 헤더를 만들겠습니다. 실제 디스크의 배치는 다양하지만, 여기선 예제 목적입니다.

새 분할 영역을 만드십시오:

Command (m for help):n
Partition number (1-16): 1
First cylinder (5-8682, default 5): 51
 Last cylinder (51-8682, default 8682): 101

어떻게 fdisk에서 1번 분할 영역을 최소한 실린더 5로 시작하는 분할 영역으로 다시 만들었을까요? SGI 볼륨 헤더를 이 방식으로 삭제하고 다시 만들면 우리가 인식하는 동일한 문제가 반복됩니다. 이 예제에서는 /boot/를 50MB로 설정하려 했으므로 실린더 51(볼륨 헤더는 실린더 0으로 시작한다고 했죠? 아마?)에서 /boot/를 시작하고, 마지막 실린더를 101로 설정하여 거의 50MB(1-5MB 내외 차이)가 되도록 설정하겠습니다.

분할 영역을 삭제하십시오:

Command (m for help):d
Partition number (1-16): 9

이제 다시 만드십시오:

Command (m for help):n
Partition number (1-16): 9
First cylinder (0-50, default 0): 0
 Last cylinder (0-50, default 50): 50

fdisk를 쓰는 방법을 모르겠다면 Cobalt에서 하드 디스크 공간 분할하는 절차를 계속 읽어내려가십시오. 개념은 완전히 동일합니다. 단지 볼륨 헤더와 전체 디스크 분할 영역을 남겨놓는걸 기억하시면 됩니다.

이 과정을 끝내면 필요한만큼 나머지 분할 영역을 만듭니다. 나머지 모든 분할 영역을 배치하고 나면 스왑 분할 영역 ID를 리눅스 스왑 82번으로 설정했는지 확인하십시오. 기본값은, 리눅스 네이티브 83번입니다.

Cobalt 드라이브 공간 분할

Cobalt 머신에서 BOOTROM은 MS-DOS MBR을 찾으므로 드라이브 공간 분할은 상대적으로 쉽습니다. 사실 인텔 x86 머신에서 진행하는 동일한 방법으로 끝냅니다. 그러나 알아두어야 할 몇가지가 있습니다.

  • 앞으로 준비할 /dev/sda1 분할 영역의 Cobalt 펌웨어는 ext2 리비전 0로 포맷한 리눅스 분할 영역입니다. ext2 리비전 1 분할 영역으로는 동작하지 않습니다!(Cobalt BOOTROM은 ext2r0만 인식합니다)
  • 위에 언급한 분할 영역에는 커널로서 읽어들이려 gzip으로 압축한 ELF 이미지 vmlinux.gz를 분할 영역의 루트에 넣어야합니다.

이런 이유로 CoLo와 커널을 설치할 분할 영역 /boot/은 EXT2r0로 포맷하고 20MB 미만의 공간으로 만드는 것이 좋습니다. 이를 통해 사용자는 루트 파일 시스템을 최신 파일 시스템(EXT3 또는 ReiserFS)를 다룰 수 있습니다.

예제를 통해 나중에 /boot/ 분할 영역으로 마운트할 /dev/sda1를 만들었다고 가정하겠습니다. / 를 만들려면 PROM의 기대 요구 값을 기억해두십시오.

따라서 계속 진행하겠습니다. 프롬프트에서 fdisk /dev/sda를 입력하여 분할 영역을 만드십시오. 주로 사용하는 명령은 다음과 같습니다:

코드 중요한 fdisk 명령 목록
    o: Wipe out old partition table, starting with an empty MS-DOS partition table
    n: New Partition
    t: Change Partition Type
        Use type 82 for Linux Swap, 83 for Linux FS
    d: Delete a partition
    p: Display (print) Partition Table
    q: Quit -- leaving old partition table as is.
    w: Quit -- writing partition table in the process.
root #fdisk /dev/sda
The number of cylinders for this disk is set to 19870.
There is nothing wrong with that, but this is larger than 1024,
and could in certain setups cause problems with:
(1) software that runs at boot time (e.g., old versions of LILO)
(2) booting and partitioning software from other OSs
   (e.g., DOS FDISK, OS/2 FDISK)

기존 분할 영역을 지우는걸로 시작합니다:

Command (m for help):o
Building a new DOS disklabel. Changes will remain in memory only,
until you decide to write them. After that, of course, the previous
content won't be recoverable.
  
  
The number of cylinders for this disk is set to 19870.
There is nothing wrong with that, but this is larger than 1024,
and could in certain setups cause problems with:
(1) software that runs at boot time (e.g., old versions of LILO)
(2) booting and partitioning software from other OSs
   (e.g., DOS FDISK, OS/2 FDISK)
Warning: invalid flag 0x0000 of partition table 4 will be corrected by w(rite)

p 명령으로 분할 영역 테이블을 비웠는지 확인하십시오:

Command (m for help):p
Disk /dev/sda: 10.2 GB, 10254827520 bytes
16 heads, 63 sectors/track, 19870 cylinders
Units = cylinders of 1008 * 512 = 516096 bytes
  
   Device Boot      Start         End      Blocks   Id  System

/boot 분할 영역을 만드십시오:

Command (m for help):n
Command action
   e   extended
   p   primary partition (1-4)
p
Partition number (1-4): 1
First cylinder (1-19870, default 1):
Last cylinder or +size or +sizeM or +sizeK (1-19870, default 19870): +20M

분할 영역 내용을 표시할 때, 새로 만든 분할 영역을 확인하십시오:

Command (m for help):p
Disk /dev/sda: 10.2 GB, 10254827520 bytes
16 heads, 63 sectors/track, 19870 cylinders
Units = cylinders of 1008 * 512 = 516096 bytes
  
   Device Boot      Start         End      Blocks   Id  System
/dev/sda1               1          40       20128+  83  Linux

이제 나머지 디스크 영역을 차지하는 확장 분할 영역을 만들겠습니다. 확장 분할 영역에서 나머지 분할 영역(논리 분할 영역)을 만들겠습니다:

Command (m for help):n
Command action
   e   extended
   p   primary partition (1-4)
e
Partition number (1-4): 2
First cylinder (41-19870, default 41):
Using default value 41
Last cylinder or +size or +sizeM or +sizeK (41-19870, default 19870):
Using default value 19870

이제 /, /usr, /var 등의 분할 영역을 만들겠습니다.

Command (m for help):n
Command action
   l   logical (5 or over)
   p   primary partition (1-4)
l
First cylinder (41-19870, default 41):<Press ENTER>
Using default value 41
Last cylinder or +size or +sizeM or +sizeK (41-19870, default 19870): +500M

필요한 만큼 반복하십시오.

마지막일지 모르겠지만 이걸로 끝이 아닌 스왑 영역입니다. 최소한 250MB의 스왑 공간이 필요하며 1GB 정도면 충분합니다:

Command (m for help):n
Command action
   l   logical (5 or over)
   p   primary partition (1-4)
l
First cylinder (17294-19870, default 17294): <Press ENTER>
Using default value 17294
Last cylinder or +size or +sizeM or +sizeK (1011-19870, default 19870): <Press ENTER>
Using default value 19870

이미 확인했지만서도, 분할 영역 테이블을 다시 확인하면 모든 준비가 끝난 상태입니다.

Command (m for help):p
Disk /dev/sda: 10.2 GB, 10254827520 bytes
16 heads, 63 sectors/track, 19870 cylinders
Units = cylinders of 1008 * 512 = 516096 bytes
  
Device Boot      Start         End      Blocks      ID  System
/dev/sda1               1          21       10552+  83  Linux
/dev/sda2              22       19870    10003896    5  Extended
/dev/sda5              22        1037      512032+  83  Linux
/dev/sda6            1038        5101     2048224+  83  Linux
/dev/sda7            5102        9165     2048224+  83  Linux
/dev/sda8            9166       13229     2048224+  83  Linux
/dev/sda9           13230       17293     2048224+  83  Linux
/dev/sda10          17294       19870     1298776+  83  Linux

이제 #10 스왑 분할 영역이 여전히 83번 형식으로 되어 있지요? 적당한 형식으로 바꾸겠습니다.

Command (m for help):t
Partition number (1-10): 10
Hex code (type L to list codes): 82
Changed system type of partition 10 to 82 (Linux swap)

이제 확인해보겠습니다:

Command (m for help):p
Disk /dev/sda: 10.2 GB, 10254827520 bytes
16 heads, 63 sectors/track, 19870 cylinders
Units = cylinders of 1008 * 512 = 516096 bytes
  
Device Boot      Start         End      Blocks      ID  System
/dev/sda1               1          21       10552+  83  Linux
/dev/sda2              22       19870    10003896    5  Extended
/dev/sda5              22        1037      512032+  83  Linux
/dev/sda6            1038        5101     2048224+  83  Linux
/dev/sda7            5102        9165     2048224+  83  Linux
/dev/sda8            9166       13229     2048224+  83  Linux
/dev/sda9           13230       17293     2048224+  83  Linux
/dev/sda10          17294       19870     1298776+  82  Linux Swap

새 분할 영역 테이블을 기록하겠습니다:

Command (m for help):w
The partition table has been altered!
  
Calling ioctl() to re-read partition table.
Syncing disks.