Parted

깊이있는 삽질 Ubuntu Korea Community Wiki
이동: 둘러보기, 검색
GeekInside.jpg
  변태주의!

  지나치게 비정상적(?)인 사용법 등을 나타내는 문서입니다. 기본적인 지식이 없을 경우 알아듣지 못할 가능성이 있습니다!!!

서문[편집]

우분투 기본 설치 과정에서 분할한 파티션이 너무 맘에 안들어서 난도질을 하고픈 용자에게 바친다.

참고[편집]

이 문서는 한국어 젠투 위키의 AMD64 버전 젠투 핸드북 "제 1부 설치"의 "4장 디스크 준비" 내용을 전반적으로 "무단 전제"하였다. 물논. 젠투 리눅스 설치와 관련된 부분은 빠졌으니, 중간에 문장이 이상하거나 말이 안되거나 할 수도 있다. 번역자 본인이 갖다 붙였으니까 저작권은 상관 없겠지 (...)

이론[편집]

블록 장치 소개[편집]

블록 장치[편집]

시작에 앞서 블록 장치를 살펴보도록 하죠. 아마~도 리눅스 시스템에서 첫번째 드라이브로 표시하는 대부분 잘 알려진 블록 장치는 /dev/sda겠죠. SCSI와 직렬 ATA 드라이브 둘 다 /dev/sd* 와 같은 식으로 표시합니다. 게다가 커널의 최신 libata 프레임워크에서는 IDE 드라이브도 마찬가지로 /dev/sd*로 표시합니다. 이전 장치 프레임워크에서 첫번째 IDE 드라이브는/dev/hda입니다.

위에 나타낸 블록 장치는 디스크의 추상 인터페이스를 표현합니다. 사용자 프로그램은 블록 장치가 IDE가 됐든 SCSI가 됐든 뭐가 됐든지간에 신경쓰지 않고 디스크와 소통을 수행할 때 이 블록 장치를 사용할 수 있습니다. 프로그램에서는 디스크의 저장 공간에 대해, 연속적이며, 임의로 접근하는 512 바이트 블록의 모음으로 다룰 수 있습니다.

공간 분할[편집]

비록 이론적으로 리눅스 시스템을 저장할 디스크 전체를 사용할 수 있다고는 하지만, 실제로는 거의 불가능합니다. 대신, 전체 디스크 블록 장치를 더 작게 나누고, 더 관리하기 쉬운 블록 장치로 만들 수 있습니다. AMD64 시스템에서는, 파티션이라고 합니다. 현재 MBR과 GPT 두가지 분할 표준 기술이 있습니다.

MBR

MBR(주 부트 레코드) 설정은 시작 섹터 및 파티션의 길이, 그리고 다음의 파티션 형식을 지원하는 32비트 식별자를 사용합니다: 주, 확장, 논리. 주 파티션은 마스터 부트 레코드 자체에 저장한 정보를 지니고 있습니다. 마스터 부트 레코드는 매우 작으며(보통 512 바이트) 디스크의 맨 처음에 위치합니다. 공간이 작기 때문에 오직 네 개의 주 파티션만을 지원합니다(예를 들자면, /dev/sda1부터 /dev/sda4까지).

더 많은 파티션을 지원하려면 주 파티션 중 하나를 확장 파티션으로 표시할 수 있습니다. 이 파티션은 논리 파티션(파티션 안의 파티션)을 보유할 수 있습니다.

각각의 파티션은 2 TB 크기로 제한됩니다(32 비트 식별자이기 때문에). 또한 MBR 설정에서는 백업 MBR을 제공하지 않기 때문에 프로그램이나 사용자가 MBR을 덮어쓰면, 모든 파티션 정보를 잃습니다.


GPT

GPT (GUID 파티션 테이블) 설정에선 파티션에 64비트 식별자를 사용합니다. 파티션 정보를 저장하는 위치는 512 바이트의 MBR보다 훨씬 크며, 파티션의 수량에 제한이 없습니다. 또한 파티션 사이즈도 훨씬 큰 제한 공간에 둘러쌓여있습니다(거의 8 ZB - 예, 제타바이트입니다).

운영 체제와 펌웨어의 시스템 프로그램 인터페이스가 (BIOS 대신) UEFI일 때, GPT는 MBR로 인한 호환성 문제가 일어나는 현 상황에서 단연 필수라 할 수 있습니다.

GPT는 또한 디스트의 마지막 부분에 백업 GPT를 보유하여 디스크 시작 부분의 주 GPT 손상을 복구할 수 있는 장점이 있습니다. GPT는 또한 CRC32 체크섬을 활용하여 헤더와 파티션 테이블의 오류를 감지합니다.

GPT냐 MBR이냐[편집]

위 설명을 바탕으로 생각해볼 점은 GPT 방식이 언제든 추천 방식이어야 한다는 점입니다. 그런데 몇가지 함정이 숨어있습니다.

BIOS 기반 컴퓨터에서 GPT를 다룬다면, 마이크로소프트 윈도우 운영체제와 듀얼 부팅을 할 수 없습니다. 마이크로소프트 윈도우는 GPT 파티션 레이블을 감지하면 EFI 모드로 부팅합니다.

몇가지 버그가 달려있는 BIOS 또는 BIOS/CSM/레거시 모드에서 부팅하도록 설정한 EFI에서도 GPT 레이블을 붙인 디스크에서 부팅할 때 문제가 있습니다. 이런 경우, fdisk에서 -t dos 옵션을 추가하여 MBR 형식으로 파티션 테이블을 강제로 읽게합니다.

이 경우, fdisk를 실행하고 a 키로 첫번째 파티션(1)의 플래그 상태를 바꾸십시오. 그 다음 디스크의 바뀐 상태를 기록(w)하고 fdisk 프로그램을 빠져나오십시오:

user$ fdisk -t dos /dev/sda

Welcome to fdisk (util-linux 2.24.1).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.
  
Command (m for help): a
Partition number (1-4): 1
  
Command (m for help): w

분할 배치 설계[편집]

얼마나 크게 얼마나 많이 배치할까?[편집]

파티션의 수는 환경에 따라 다릅니다. 예를 들어, 사용자가 많을 경우 보안성을 개선하고 백업을 쉽게 하기 위해 /home/을 나누는 것이 좋습니다. 젠투를 메일 서버로 설치한다면, /var/에 모든 메일을 저장하므로 /var/를 나누어야 합니다. 파일 시스템의 탁월한 선택은 성능을 극대화합니다. 게임 서버는 게임 서버를 설치할 /opt/를 따로 나눕니다. 이유는 /home/과 비슷합니다: 보안과 백업이죠. 대부분의 상황에서 /usr/는 거대한 상태고 남아있습니다. 주요 프로그램을 저장할 뿐만 아니라, 이 안에 저장하는 다양한 소스코드를 제외하더라도 포티지 트리가 대략 500MB 정도 차지합니다.

보신바와 같이, 관리자가 원하고자 하는 바에 달려있습니다. 파티션 또는 볼륨을 나누면 다음과 같은 장점이 있습니다:

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

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

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

스왑 공간[편집]

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

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

BIOS 부트 파티션[편집]

BIOS 부트 파티션은 매우 작(1~2MB)으며 GRUB2와 같은 부트로더가 할당 저장공간(MBR의 경우 몇 백 메가바이트정도 저장함)에 맞지 않는 추가 데이터를 저장할 수 있으며, 어떤 위치에든 둘 수 있는건 아닙니다.

일부 파티션은 항상 필요하지 않지만 적은 공간을 차지함을 고려해야 하며 과다한 공간 분할의 차이를 문서화하는데 어렵기때문에, 문서화 한 경우에 대해 파티션을 만드는 방법만 추천합니다.

완벽을 기하기 위해, GPT 파티션 배치를 GRUB2에서 활용할 때 또는 GRUB2에서 디스크 처음 부분 1MB 영역 앞 부분에 첫 분할 영역을 시작하는 MBR 파티션 배치를 활용할 때 BIOS 부트 파티션이 필요합니다.

Parted 활용 절차[편집]

Parted에서 현재 파티션 배치 보기[편집]

parted 프로그램에는 디스크 공간 분할에 활용할 간단한 인터페이스를 공하며 (2TB 이상) 매우 큰 파티션 크기를 지원합니다. parted 다시 실행하십시오(여기서는 /dev/sda를 활용). parted에게 최적의 파티션 정렬을 요청하는 것이 좋습니다.

root # parted -a optimal /dev/sda

GNU Parted 2.3
Using /dev/sda
Welcome to GNU Parted! Type 'help' to view a list of commands.

정렬이란 내부 디스크 동작을 최소화하는 운영체제 수준(디스크에서 페이지 전달)에서 디스크의 동작을 확인하며, 디스크의 알려진 범위내에서 파티션을 시작함을 의미합니다. 파티션 정렬이 잘못되면 운영체제에서 단일 페이지를 요청했을 경우에도 디스크에서 페이지를 따로 가져와야 할 수도 있습니다.

parted에서 지원하는 옵션을 찾아보려면 help를 입력하고 Enter를 누르십시오.

GPT 레이블 설정[편집]

parted에서 디스크에 GPT 레이블을 쓰게 하는 명령은 mklabel gpt 입니다.

(parted) mklabel gpt
  경고
  파티션 형식을 바꾸면 디스크의 모든 파티션이 날아갑니다. 디스크의 모든 데이터를 잃습니다.

MBR 배치 방식의 디스크를 만들려면, mklabel msdos 명령을 사용하십시오.

모든 파티션 제거[편집]

아직 끝난 과정이 아니라면(mklabel 동작을 미리 처리했거나, 디스크를 새로 포맷했을 경우), 먼저 모든 파티션을 디스크에서 제거하십시오. print를 입력하여 현재 파티션 상태를 보고, rm NUMBER를 입력하되, NUMBER 자리에는 제거할 파티션 번호를 넣으십시오.

(parted) rm 2

필요없는 다른 모든 파티션에도 똑같은 동작을 진행하십시오.

  중요
  parted에서는 상태 바꾸기를 즉시 처리합니다. 작업을 스테이지에 올려놓아 디스크의 상태를 저장하고 나가기 전에 실행 취소가능한 fdisk와는 다릅니다. 따라서, 실수하지 마십시오.

파티션 만들기[편집]

이제 파티션을 만들겠습니다. parted로 파티션을 만드는 과정은 어렵지 않습니다. 다음 설정에 대해 parted에게 알려주는 절차만 필요합니다:

  • 사용할 파티션 형식. 주 파티션이 보통입니다. msdos 파티션 레이블을 사용한다면, 주 파티션을 네개 이상은 만들 수 없다는 점을 기억하십시오. 네개 이상의 파티션이 필요하다면, 네 파티션 중 하나는 확장 파티션이어야 하고 논리 파티션을 확장 파티션에 넣어야합니다.
  • 파티션의 시작 지점(MB, GB 등으로 표현할 수 있음)
  • 파티션의 끝 지점(MB, GB 등으로 표현할 수 있음)

우선 parted에 우리가 다룰 크기를 메가바이트 단위로 알려주십시오(실제로는 표준 표기법인 MiB로 줄여 쓰는 메비바이트지만, 보다 일반적으로 쓰는 MB로 적겠습니다):

(parted) unit mib

이제 GRUB2 부트 로더에서 나중에 사용할 2MB 파티션을 만드십시오. mkpart 명령을 사용하시고 parted에 1MB 위치에서 3MB 위치까지 사용(2MB 크기의 파티션을 만듬)한다고 알려주십시오.

(parted) mkpart primary 1 3
(parted) name 1 grub
(parted) set 1 bios_grub on
(parted) print

Model: Virtio Block Device (virtblk)
Disk /dev/sda: 20480MiB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
  
Number   Start      End      Size     File system  Name   Flags
 1       1.00MiB    3.00MiB  2.00MiB               grub   bios_grub

부트 파티션(128MB), 스왑 파티션(예제에서는 512MB), 나머지 디스크 공간을 모두 차지하는 루트 파티션(디스크의 끝 부분은 파티션이 최대한 다다를 수 있는 -1MB이며 이런 의미에서 마지막 위치를 -1로 적음)에 같은 동작을 진행하십시오.

(parted) mkpart primary 3 131
(parted) name 2 boot
(parted) mkpart primary 131 643
(parted) name 3 swap
(parted) mkpart primary 643 -1
(parted) name 4 rootfs

시스템을 부팅할 때 (BIOS 대신) UEFI 인더페이스를 사용한다면, 부트 파이션을 EFI 시스템 파티션으로 표시하십시오. parted에서는 파티션에 boot 옵션을 설정할 때 EFI 시스템 파티션으로 자동으로 표시해줍니다:

(parted) set 2 boot on

최종 결과는 다음과 같습니다:

(parted)print

Model: Virtio Block Device (virtblk)
Disk /dev/sda: 20480MiB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
  
Number   Start      End      Size     File system  Name   Flags
 1       1.00MiB    3.00MiB  2.00MiB               grub   bios_grub
 2       3.00MiB    131MiB   128MiB                boot
 3       131MiB     643MiB   512MiB                swap
 4       643MiB     20479MiB 19836MiB              rootfs