Trans:GentooAmd64Handbook2013-1-4
목차
디스크 준비하기
블록 장치 소개
블록 장치
이제 우리는 젠투 리눅스의 디스크 측면의 모습과 리눅스 파일시스템, 분할 구역, 블록 장치를 포함한 일반적인 리눅스의 모습을 살펴보겠습니다. 그 다음 디스크와 파일시스템의 이모저모에 익숙해지고 나면 젠투 리눅스 설치를 위한 분할 구역과 파일시스템의 처리과정을 안내하겠습니다.
시작에 즈음하여 블록 장치를 소개하도록 하겠습니다. 가장 잘 알려진 블록 장치는 아마도 리눅스 시스템에서 첫 번째 드라이브로 나타나는 /dev/sda가 아닌가 싶습니다. SCSI와 직렬 ATA 드라이브들 모두 /dev/sd*로 표시합니다. 게다가 커널의 새로운 libata 프레임워크에서는 IDE 드라이브 조차도 /dev/sd*로 표시합니다.만약 오래된 장치 프레임워크를 사용한다면, 첫번째 IDE 드라이브는 /dev/hda 입니다.
위에 나타난 이 블록장치는 디스크의 추상 인터페이스입니다. 사용자 프로그램은 드라이브가 IDE인지 SCSI인지 그 말고 다른 장치인지 전혀 신경쓰지 않고 디스크와 상호작용하기 위해 이 블록 장치를 사용할 수 있습니다. 프로그램은 연속된, 임의 접근가능한 512 바이트 블록의 모음으로 디스크의 저장소에 주소를 지정할 수 있습니다.
분할 구역
리눅스 시스템을 저장하려면 이론적으로 디스크의 전체 구역을 사용할 수 있지만 실제로는 거의 그렇게 하지 못합니다. 대신 전체 디스크 블록장치는 작은 부분으로 나누어 좀 더 관리하기 쉬운 블록 장치로 만듭니다. x86 시스템에서는 이를 분할 구역(파티션)이라고 부릅니다. 현재 분할 구역을 나누는데 두가지 표준 MBR과 GPT를 활용합니다.
MBR(주 시동 레코드) 설정시 섹터 시작점과 분할 구역의 길이를 구분하는데 32비트 식별자를 사용하며, 주 분할 구역, 확장 분할 구역, 논리 분할 구역 세 가지 방식을 지원합니다. 주 분할 구역은 MBR(주 시동 레코드)에 정보를 저장하는 분할 구역입니다. MBR 이 매우 작은(512 바이트) 만큼 네 개의 주 분할 구역만을 지정할 수 있습니다. (예를 들어 /dev/sda1 부터 /dev/sda4 까지 입니다).
더 많은 분할 구역을 지원하려 주 분할 구역 중 하나를 확장 분할 구역으로 표시할 수 있습니다. 이 분할 구역은 논리 분할 구역을 보유할 수 있습니다(분할 구역 안의 분할 구역).
각각의 분할 구역은 2TB 크기로 제한되어 있습니다(32비트 식별자의 한계). 또한 MBR 설정은 백업-MBR을 지원하지 않으므로 프로그램이나 사용자가 MBR을 덮어쓰기하면 모든 분할 구역 정보를 잃게 됩니다.
GPT(GUID 분할 구역 테이블) 설정은 분할 구역에 대해 64비트 식별자를 사용합니다. 분할 구역 정보를 저장하는 위치는 MBR의 512바이트 보다 크며 분할 구역의 갯수에 제한이 없습니다. 게다가 분할 구역 용량 제한 마저도 더 큽니다(거의 8ZB입니다. 네 제타바이트죠).
운영체제와 펌웨어 간의 시스템 소프트웨어 인터페이스가 UEFI(BIOS 대신)라면, MBR이 존재할때 발생하는 호환성 문제로, GPT는 가히 필수적이라고 할 수 있습니다.
GPT는 또한 디스크 마지막 부분에 GPT를 백업하는 기능적 장점이 있는데, 앞부분의 첫번째 GPT가 깨지면 복구할 때 활용할 수 있습니다. GPT는 CRC32 체크섬을 활용하여 헤더와 분할 구역 테이블의 오류를 감지합니다.
그래서 GPT를 사용할까요? MBR을 사용할까요?
위에 설명한 바대로, 언제든 GPT 활용이 권장접근 방식으로 생각될 수도 있습니다. 다만, 몇가지 주의사항이 있습니다.
BIOS 기반 컴퓨터에서 GPT를 활용하면 동작은 하겠지만, 마이크로소프트 윈도우 운영체제와는 듀얼 부팅 기능을 활용할 수 없습니다. 이유는, 마이크로소프트 윈도우에서 GPT 분할 구역 레이블을 감지하면 EFI 모드로 부팅하기 때문입니다.
몇가지 오류가 존재하는 바이오스나 BIOS/CSM/레거시 모드로 부팅하도록 설정한 EFI에서도 GPT 레이블 처리한 디스크로 부팅할때 문제가 있습니다. 이 경우 fdisk를 통해 자체적인 MBR 분할 구역에 시동/활성화 플래그를 추가하여 문제를 비껴갈 수 있습니다(parted 에서는 GPT 테이블을 인식하지만 자체적인 MBR 분할 구역은 보여주지 않을 것입니다):
코드 예제 1.1: 자체 MBR 분할 구역에 시동 플래그 활성화 |
# fdisk /dev/sda WARNING: GPT (GUID Partition Table) detected on '/dev/sda'! The util fdisk Command (m for help): w |
고급 저장장치
x86 설치 CD는 LVM2를 지원합니다. LVM2는 분할 구역 설정으로 유연성을 극대화합니다. 설치 설명 중에, 우리는 "일반" 분할 구역에 초점을 맞추겠지만, LVM2을 지원한다는 사실에 대해 알고 있는 것 또한 좋습니다.
파티션 모양새 설계
기본 파티션 모양새
여러분의 시스템에 대한 파티션 모양새를 그려보는데 관심이 없다면, 이 책을 통해 우리가 사용한 파티션 모양새를 사용해보실 수도 있습니다.
파티션 | 파일시스템 | 사이즈 | 설명 |
---|---|---|---|
/dev/sda1 | (bootloader) | 2M | BIOS 시동 파티션 |
/dev/sda2 | ext2 | 32M | 시동 파티션 |
/dev/sda3 | (swap) | 512M 이상 | 스왑 파티션 |
/dev/sda4 | ext4 | 디스크 나머지 공간 | 루트 파티션 |
파티션의 크기가 얼마나 되어야 하는지 심지어 얼마나 많은 파티션이 필요한지 알고 싶으시다면 계속 읽어내려가시기 바랍니다. 그렇지 않다면 parted를 사용하여 디스크 분할하기 (또는 fdisk를 사용하여 디스크 분할하기)를 읽어 분할을 계속 진행하십시오. 둘 다 파티션 도구인데, fdisk는 잘 알려져 있고 안정적입니다. parted는 좀 최근에 나왔는데 2TB이상의 파티션을 지원합니다.
얼마나 많이, 얼마나 크게 할까요?
수많은 분할 구역은 환경에 크게 의존합니다. 사용자가 많이 있다면 보안성을 증대하고 백업을 쉽게하기 위해 /home 을 따로 나누고 싶어할 것입니다. 젠투 시스템을 메일서버로 동작하게끔 하려면 /var에 모든 메일이 저장되므로 /var를 나눌 것입니다. 파일시스템에 대한 좋은 선택은 여러분이 가진 시스템의 성능을 극대화 할 것입니다. 게임서버라면 대부분의 게임 서버가 /opt에 설치 되므로 이것을 나눌 것입니다. 이유는 /home 과 비슷합니다. 보안과 백업이죠. /usr 는 커지는 그대로라도 유지하고 싶어할 것입니다. 주요 프로그램들이 들어가 있을 뿐만 아니라 다양한 소스코드를 제외한 500MB 가량의 포티지 트리들이 이 곳에 저장됩니다.
여러분이 아시는 바와 같이 여러분이 무엇을 저장하고 싶은지에 크게 달려있습니다. 각각의 분할 구역과 볼륨은 다음 장점이 있습니다
- 각각의 분할 구역과 볼륨에 대해 가장 잘 동작하는 파일시스템을 선택할 수 있습니다.
- 어떤 기능을 상실한 도구가 계속 파일을 기록하는 경우 빈 공간이 부족해져 전체 시스템을 동작할 수가 없습니다.
- 필요한 경우 파일시스템 점검을 동시에 여러 부분에 대한 검사를 수행하여 시간을 줄입니다 (여러 분할 구역이 있을 때보단 여러 디스크가 있을 수록 좋겠지만).
- 일부 분할 구역이나 볼륨을 읽기 전용, nosuid(setuid 비트를 무시합니다), noexec(실행 비트를 무시합니다) 등으로 마운트하여 보안성을 향상할 수 있습니다.
그러나 이 뿐만 아니라 여러 분할 구역을 나누면 단점이 있기도 합니다. 제대로 설정하지 않으면 어떤 분할 구역은 남은 공간이 많지만 어떤 분할 구역은 그렇지 않을 것입니다. 다른 귀찮은 것 하나는 나누어 놓은 분할 구역인데 특히 /usr나 /var같은 중요한 마운트 지점은 종종 관리자가 다른 시동 스크립트를 시작하기 전에 분할 구역에 마운트 하게끔 initramfs로 시동하는 것이 필요합니다. 비록 항상 일어나는 일은 아니지만요. 이렇게 다양한 이득이 있습니다.
SCSI 와 SATA에서는 GPT 레이블을 사용하지 않으면 15개의 분할구역 갯수 제한이 있습니다.
스왑 공간은 어떻게 할까요?
스왑 파티션에 완벽한 값은 없습니다. 스왑 공간 사용의 목적은 내부 메모리(RAM)가 고갈 상태일때 커널로 디스크 공간을 제공하는 것입니다. 스왑 공간은 커널에게 디스크에서 바로 접근하지 않을 메모리 페이지를 옮길 수 있게(스왑, 페이지아웃)하며, 메모리를 비우기도 합니다. 물론, 메모리가 갑자기 필요할 때 이 페이지를 메모리로 돌려놓아야 하는데(페이지 인), 시간이 좀 걸립니다(자체 메모리와 비교하면 디스크는 매우 느립니다).
메모리를 요구하는 프로그램을 실행하는게 아니거나, 상당한 용량의 메모리를 보유하고 있다면, 많은 스왑 공간이 필요한게 아닙니다. 그러나, 스왑 공간은 최대 절전모드에서 메모리 전체 내용을 저장하는데도 사용합니다. 최대 절전 공간 기능을 활용하려 한다면, 더 큰 스왑 공간이 필요합니다. 보통 최소한 시스템에 있는 메모리 용량 만큼은 필요합니다.
BIOS 시동 분할 구역은 무엇인가요?
BIOS 시동 분할 구역은 GRUB2와 같은 부트로더가 할당 저장 공간(MBR의 경우 수백 바이트)에 적절하지 않은 추가 데이터를 놓을 수 있게 하는 매우 작은(1~2MB) 분할 구역이며, 그 어디에든 위치할 수 없습니다.
각각의 분할 구역은 항상 필요한게 아니지만, 적은 공간 차지를 고려하며, 문서에 나타낸 내용보다 과다하게 다른 분할 구역 형식을 활용해야 한다면, 각각의 경우에 BIOS 시동 분할 구역을 만드는걸 추천합니다.
완벽함을 기하도록 하기 위해 GPT 파이션 배치를 GRUB2와 사용할 경우 또는 디스크에서 1MB 영역 이전에 첫번째 분할 구역을 시작할 때 GRUB2에서 MBR 분할 구역을 사용하는 경우 BIOS 시동 분할 구역이 필요하다고 말할 수 있습니다.
기본: 디스크 분할 시 parted 사용하기
이 장에서는 앞서 언급한 예제 분할 구역 배치를 만드는 철차를 안내하겠습니다만, 편의를 위해 재차 언급하도록 하겠습니다.
분할 구역 | 설명 |
---|---|
/dev/sda1 | BIOS 시동 분할 구역 |
/dev/sda2 | 시동 분할 구역 |
/dev/sda3 | 스왑 분할 구역 |
/dev/sda4 | 루트 분할 구역 |
여러분의 취향에 따라 분할 배치를 바꾸어보십시오.
현재 분할 구역 배치 보기
parted 프로그램은 디스크 공간을 나누기 위한 단순한 인터페이스를 제공하며, 매우 큰 분할 구역(2TB 이상)을 지원합니다. 디스크 상에서 parted를 실행하십시오(예제에서는 /dev/sda를 사용합니다). parted에게 최적 상태로 분할 구역을 정렬하도록 요청하겠습니다.
코드 예제 3.1: parted 시작하기 |
# parted -a optimal /dev/sda GNU Parted 2.3 |
정렬이라 함은 각각의 분할 구역이 디스크상에 알려진 위치 내에서 시작함을 의미하며, 운영체제 수준의 디스크 동작이(디스크에서 페이지 전송) 내부 디스크 동작을 최소화 함을 의미합니다. 잘못 정렬한 분할 구역은 운영체제가 단일 페이지를 요청했을 경우 조차도 디스크가 페이지 두개를 요청할지도 모릅니다.
parted 에서 지원하는 모든 옵션을 찾아보려면, help를 입력하고 리턴 키를 누르십시오.
GPT 레이블 설정
x86/amd64의 대부분의 디스크는 msdos레이블을 사용합니다. parted를 사용하면, mklabel gpt 명령으로 디스크에 GPT 레이블을 놓을 수 있습니다.
주의: 분할 형식을 바꾸면 디스크의 모든 분할 설정을 제거합니다. 디스크의 모든 데이터를 잃게 됩니다.
코드 예제 3.2: GPT 레이블 설정 |
(parted) mklabel gpt |
디스크에 MBR 배치를 사용하려면, mklabel msdos 명령을 사용하십시오.
모든 분할 구역 제거
GPT 레이블 설정이 아직 끝나지 않았다면(예를 들어, 앞서 언급한 mklabel 이나, 디스크를 새로 포맷했을 경우), 디스크의 모든 기존의 분할 구역을 먼저 제거해야 합니다. 현재 분할 구역을 보려면 print를 입력하고, 제거할 분할 구역에 대해 <번호>대신 숫자로 rm <번호>을 입력하십시오.
{{Example|코드 예제 3.3: 디스크에서 분할 구역 제거하기