먼저 이 파트를 읽어보고 파티셔닝을 진행하는 것이 현명하다.
파티셔닝은 운영체제 설치에 있어 가장 어렵고 난이도가 높은 파트라고 할 수 있다.
하드디스크와 연결규격
먼저, 하드디스크/SSD가 어떻게 컴퓨터와 연결되는지를 이해할 필요가 있다.
이를 연결규격이라고 하며, 자주 쓰이는 5가지 방식이 존재한다.
연결방식 1 : 가정용
- ATA 또는 IDE 또는 PATA
보통 이 세 명칭을 혼용해서 사용한다.
- ATA : Advanced Technology Attachment(고급 기술 결합)
- IDE : Integrated Drive Electronics
- PATA : Parallel Advanced Technology Attachment
가장 오래된 규격으로, 40개의 핀으로 구성된 포트가 있다.
데이터를 병렬(parallel)로 전송하기에 PATA라고도 한다.
- SATA : 가정용
데이터를 직렬(serial)로 전송한다. PATA보다 고장이 덜하다.
- NVME : 차세대
가장 최근에 나온 규격. 보통 SSD에서 자주 이용하는 규격이다.
제일 속도가 빠르나, 가격이 비싼 편이다.
연결방식 2 : 서버용
- SCSI : 서버용
Small Computer System Interface 의 약자.
서버나 워크스테이션 등에서 쓰이는 고속 인터페이스. 별도의 확장카드가 필요하다.
virtualbox는 이 방식으로 가상 하드디스크를 만든다.
- SAS : 서버용
Serial Attached SCSI의 약자. 기존 SCSI보다 향상된 성능을 보여준다.
역시 서버나 워크스테이션 등에서 쓰이는 고속 인터페이스.
리눅스: 장치 인식
그럼, 리눅스에서는 어떻게 이러한 저장장치를 인식할까?
dev 디렉토리
리눅스 운영체제에서는 저장장치의 정보만 담아놓은 디렉토리인 /dev가 있다.
이 디렉토리는 노드(node)라고 불리는 요소를 포함하며, 각 노드는 시스템의 한 장치를 나타낸다.
장치 파일
만약 컴퓨터에 하드디스크가 한 개가 아닌 두 개라면 어떻게 해야할까?
이를 구분해주기 위해 만든 것을 장치 파일이라고 한다.
장치 타입에 따라 장치 파일을 이름 지어주는 법이 다른다.
sd + a = sda
(접두사) (번째)
접두사의 종류
- cdrom : CD, DVD-ROM 드라이브
- fd : 플로피 디스크 드라이브
- hd : IDE로 연결된 하드디스크
- md : 메타디스크와 RAID 장치
- ram : RAM 디스크
- sd : SCSI로 연결된 대용량 저장 장치
- usb : USB로 연결된 장치
- sr : ODD로 연결된 장치
따라서 SCSI 방식의 하드디스크라면 sda, sdb, sdc와 같은 순으로 명명된다.
그래서 우리가 가상머신에서 파티셔닝을 할 대상은 /dev/sda 이다.
즉, 전체 디스크를 /dev/sda 로 생각해도 된다.
파티셔닝 : 개념
드라이브를 논리적으로 나누는 것을 파티셔닝이라고 한다.
파티셔닝 = 디스크 공간 나누기 + 파일 시스템 지정하기 + 마운트
파티션과 볼륨
결론부터 말하자면, 파티션을 포맷팅한 것을 볼륨이라고 한다.
- 파티션 = 구역 나누기.
- 포멧 = 자료를 저장할 수 있도록 형식을 잡아주는 것.
윈도우 vs 리눅스
- 윈도우는 파티션 1개(c드라이브)만 있어도 작동된다.
- 그러나 리눅스는 최소 2개 이상의 파티션을 사용한다.
- OS 운영용 파티션
- 스왑 파티션 : 물리적 메모리 부족 상황을 대비한 가상 메모리
파티셔닝 : 파티션
집을 쪼개서 방을 나눌 때도 방의 종류를 구분하는 것과 같이, 각 파티션 역시 역할을 정해줄 수 있다.
주 파티션 (primary partition)
- 디스크를 직접 쪼개서 만드는 파티션
- 디스크의 MBR(master boot record) = 디스크의 첫 번째 섹터에 저장됨. 그런데 MBR을 처음 만들 때 주 파티션을 4개만 만들도록 약속했다. 물론 지금은 GPT라는 새로운 기술이 나와 이러한 제한이 없지만, 여전히 사용하고 있다.
- 이곳에는 주로 운영체제를 저장한다.
하나의 장치 파일을 쪼개면 이름 뒤에 숫자가 붙게 된다.
즉, 만약 scsi 계열 1개의 저장장치를 1번 쪼개면 다음과 같이 변한다.
/dev/sda ⇒ /dev/sda1 , /dev/sda2
확장 파티션 (extended partition)
-
파티션 안에 또 파티션을 만들 수 있지 않을까?
-
그래서 추가적인 쪼개기를 위한 파티션이 필요하다.
이것을 확장 파티션이라고 한다.
확장 파티션 번호는 5번부터 지정된다.
즉, 위의 상태에서 확장 파티션을 만들면 다음과 같이 변하게 된다.
/dev/sda1 , /dev/sda2, /dev/sda5
논리 파티션 (logical partition)
확장 파티션을 쪼갠 하나하나의 파티션을 논리 파티션이라고 한다.
부트 섹터가 없으므로 운영체제를 설치할 수 없다.
파티셔닝 : 볼륨
파티션을 포멧한 것을 볼륨이라고 했다.
인제 다시 생각을 해보자.
볼륨과 그 구성
- 물리 볼륨 : 파티션을 이야기한다.
- 볼륨 그룹 : 물리 볼륨 1개 이상을 의미한다.
- 논리 볼륨 : 볼륨 그룹을 쪼갠 것.
이러한 볼륨 체계를 잘 관리해주는 기술을 LVM이라고 한다.
파티셔닝 : 마운트
파일 시스템
나눠진 각 방을 어떻게 세팅할지 생각해볼 수 있듯이, 각 파티션을 세팅하는 방식도 다를 수 있다.
이를 정해주는 것을 파일 시스템이라고 한다.
대표적인 파일 시스템
| 윈도우 | FAT, NTFS |
| 맥 | APFS |
| 리눅스 | EXT 시리즈 (ext3, ext4 등등) |
- ext4 : 대형 파일 시스템을 지향. 최대 1 엑사바이트 볼륨과 16 테라바이트 파일 지원.
마운트란?
하드디스크의 각 부분을 나눴으니, 이를 운영체제의 각 부분과 연결시켜줘야 한다. 컴퓨터는 디스크에 기록된 특정한 파일 형식 구조로 데이터를 저장하기 때문에, 디스크의 형식을 이해할 수 있어야 한다. 마운트를 통해 컴퓨터가 데이터의 형식(파일 시스템)을 이해한다.
이 작업을 우리는 마운트라고 한다. mount는 배를 항구에 정박시키다라는 뜻이 있으며, 여기서 본딴 것이다.
부트로더
운영 체제가 시동되기 이전에 미리 실행되면서 커널이 올바르게 시동되기 위해 필요한 모든 관련 작업을 마무리하고 최종적으로 운영 체제를 시동시키기 위한 목적을 가진 프로그램을 말한다.
컴퓨터 부팅 순서
제일 먼저 PC의 전원이 켜지면 ROM에 들어있는 BIOS가 로드 된다.
BIOS는 컴퓨터에 연결된 저장 매체에서 설정된 부팅 순서대로 부트로더들을 불러 온다.
이 때, 하드 디스크가 첫 번째 부팅 장치로 설정되어 있으면, BIOS는 하드 디스크의 부트로더를 로드한다.
부트로더는 커널을 메모리에 로드하고 최종적으로 OS를 읽어내는 역할을 한다.
1차 부트로더
부트로더는 플로피 디스크나 하드 디스크 등 저장 매체의 가장 앞 부분에 존재한다.
하드 디스크를 예로 설명하자면 하드 디스크의 파티션 정보는 MBR(Master Boot Record)라는 하드 디스크의 첫 섹터 속에 존재한다.
여기서 BIOS는 파티션 테이블을 읽은 후 활성화 되어 있는 파티션(부팅 가능한 파티션; 각 파티션의 첫 번째 바이트로 알 수 있다 0x80: 부팅가능 / 0x00: 부팅 불가)의 VBR(Volume Boot Record)를 읽어 그 데이터로 부팅하게 된다.
여기서 이 MBR과 VBR이 1차 부트로더이다.
2차 부트로더
MBR/VBR의 최대 용량은 512바이트 뿐이므로 도스 같은 운영체제 정도에는 적합했지만 윈도우 같은 복잡한 운영체제의 커널을 로드 할 준비를 하기에는 턱없이 모자라다.
그래서 아래 그림과 같이 2차 부트로더를 1차 부트로더를 통해 커널을 로드하듯이 로드한 뒤, 2차 부트로더를 통해 커널을 로드하는 방식을 택하게 되었다.
GRUB
리눅스의 대표적인 2차 부트로더이다.