리눅스를 쓰면서 제일 먼저 난관이었던 것은 ide 설치하는 과정이었다
게다가 레드햇 계열의 rocky linux를 쓰다보니 .deb가
호환되지 않는 경우가 발생하였고 눈물을 머금으며 tar.gz 파일들을 설치하고 데크스톱 엔트리 설정하는 과정을 거쳤어야 했다(퀀 네버 크라이)
어쨋든 그렇게 설치하다 보니까 문득 그런 의문이 생겼다 이런 디렉토리들은 어떤 의미가 있을까 궁금도 하기도 했고 설치 시에 기본적으로 나누는 home, swap, root는 어떤 의미가 있을까..거기에서부터 뭔가뭔가 시작했는데 음..뭔가 길어졌다.
질문을 꼬리물어 정리하다보니 좀 길어졌다.
1. 컴퓨터가 부팅될 때 우리가 아는 디렉토리로 오기까지 어떤 과정을 거치게 될까?
부팅 시에 사실 종종 마음을 어렵게 하는 무언가가 가끔 있다.

이런 화면을 본적도 있을 수도 있고

이런 화면을 본적도 있을 것이다
종종 이런 화면을 볼때마다 아..컴퓨터가 뭔가 오류가 있구나 ! 라고 어려워 할 수 있지만 이 화면에서 넘어가는 방법은 단순하다
boot 쪽으로 가서 window boot manager를 가장 먼저 두거나 자신이 사용하고 있는 운영체제를 선택해서 저장하고 부트하면 우리가 아는 운영체제가 실행되게 된다.
그럼 이쯤 되면 컴퓨터를 키면 어떤 동작을 하는지를 알게 된다.
운영체제를 찾아 실행하는 과정을 거치게 된다는 것이다.
2. 그럼 운영체제는 어떻게 실행될까?
바로 위에 보았던 화면들이 그거다. 처음 나온 거를 BIOS(Basic Input/Output System), .두번째에 있는 걸 UEFI(Unified Extensible Firmware Interface)라고 한다.
간략히 설명하자면
| BIOS | UEFI | |
| 출시 연도 | 1980년대 | 2000년대 이후 |
| 디스크 지원 | MBR | GPT |
| 부팅 속도 | 느림 | 빠름 |
| 보안 기능 | 없음 | Secure Boot 지원 |
이렇다...
디스크 지원을 보면 뭔가 차이가 있다.
3. UEFI와 BIOS는 운영체제를 어떻게 실행할까
파티션 어디서 많이 들어본 용어일 것이다. 주로 이제 어...듀얼 부팅에 관심이 있다면 한번 쯤은

이런 거를 해본 적이 있을 것이다.
디스크는 저장 공간이다, 사용하려면 이러이러하게 사용하겠다~ 이런 규칙들이 있어야 가능하다.
그렇다면 이런 규칙의 역할을 할 수 있게 하는게 파티션 테이블이다(Partirtion Table)
즉 운영체제를 사용하려면 이런 파티션을 나눠져야 하는 것이다.
이 방식은 크게 2가지로 나눈다.
MBR(Master Boot Record)와 GPT(GUID partion Table)
간략히 정리하면
| MBR | GPT | |
| 최대 디스크 크기 | 2TB | 제한 없음 |
| 최대 파티션 개수 | 4 | 128개 이상 |
| 백업 기능 | X | O |
| 부팅 지원 | BIOS 전용 | UEFI 전용 |
딱 봐도 MBR이 좀 제한이 많아 보이기는 한다
그래서 어쨋든 BIOS와 UEFI는
MBR, 또는 GPT로 나누어진
파티션을 살피면서 운영체제의 부트로더를 실행한다.
부트로더는 운영체제의 커널(운영체제의 그 자체..?라고 보면된다)를 실행하도록 한다.
4. 파일 디렉토리까지
MBR, GPT로 나누어진 파티션. 그리고 운영체제의 실행.
그러면 이제 우리가 아는 파일 디렉토리까지는 어떤 과정이 있을까?
파티션의 한계가 있다. 크기 변경이 까다롭다
크기 변경을 하려면 기존 파티션을 삭제하고 다시 설정해야 하는데 그 과정에서 그러면 데이터도 백업해야 하고 운영하던 시스템도 정지해야 하고...여간 작업이 까다롭다.(물론 이제 좀 들어가면 RAID 기능같은 것이 있긴 한데 이건 나중에 설명하겠다)
그리고 디스크가 여러 개인 경우에
그 디스크들을 다 활용하고 싶은데 그런 경우에는
한 파티션에 여러 개의 디스크들을 사용하고 싶겠지만, 그럴 수 없다.
그래서 나오는 것이 논리적 볼륨 기술이다
유연한 저장 공간 조정, 백업과 복구 기술의 유용함, 운영체제와 독립적인 저장공간 사용 가능 등등이다.
논리적 볼륨 기술은 다음과 같은 과정을 공통적으로 거친다.
1) 물리 디스크 준비 및 초기화
2) 볼륨 그룹(VG) 또는 스토리지 풀(Strorage Pool) 생성
3) 논리 볼륨(LV) 또는 가상 디스크(Virtual Disk) 생성
4) 파일 시스템 생성 및 마운트
여기에서 물리 디스크라 함은 파티션이 아닌 진짜 물리 디스크(하드 스스디 같은 거)다.
왜 파티션이 아니라 물리 디스크냐.
아까 언급한 파티션의 한계 중에 한 파티션은 여러 디스크를 소유할 수 없는 점도 있고
논리적 볼륨 기술 자체가 디스크 관리에 중점이 되어 있는 거도 있다.
어쨋든 이런 과정들을 거치면
리눅스에서는
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
nvme0n1 259:0 0 476.9G 0 disk
├─nvme0n1p1 259:1 0 600M 0 part /boot/efi
├─nvme0n1p2 259:2 0 1G 0 part /boot
└─nvme0n1p3 259:3 0 475.4G 0 part
├─rl-root 253:0 0 70G 0 lvm /
├─rl-swap 253:1 0 15.6G 0 lvm [SWAP]
└─rl-home 253:2 0 389.8G 0 lvm /home
이런 형식이 되고
윈도우 같은 경우는

이런 구성이 된다.
이후에는 뭐 리눅스는 표준 루투 디렉토리 구조를 따라서
[minus@localhost /]$ ls -a
. afs boot etc lib media opt root sbin sys usr
.. bin dev home lib64 mnt proc run srv tmp var
이런 식으로 배치가 되고
윈도우는

이런 식으로 된다.
이거는 간략히 살펴보면
| / | 루트 디렉토리 (최상위 경로) | C:\ |
| /bin | 일반 사용자용 필수 명령어 (ls, cp, mv 등) | C:\Windows\System32\ |
| /sbin | 시스템 관리 명령어 (fdisk, reboot 등) | C:\Windows\System32\ |
| /boot | 부팅 관련 파일 (커널, GRUB 등) | C:\Windows\Boot\ |
| /dev | 장치 파일 (하드디스크, USB 등) | 장치 관리자 (Device Manager) |
| /etc | 시스템 설정 파일 (passwd, fstab 등) | C:\Windows\System32\Config\ |
| /home | 사용자 홈 디렉토리 (/home/사용자) | C:\Users\사용자 |
| /lib | 라이브러리 파일 (.so 파일) | C:\Windows\System32\ |
| /mnt | 외부 디스크 마운트 지점 | D:\, E:\ (추가 드라이브) |
| /opt | 선택적 소프트웨어 설치 경로 | C:\Program Files |
| /proc | 커널 및 프로세스 정보 | 작업 관리자(Task Manager) |
| /root | 루트 사용자 홈 디렉토리 (/home/root 아님) | C:\Users\Administrator |
| /run | 시스템 정보 및 프로세스 관리 | C:\Windows\Temp\ |
| /srv | 서버 애플리케이션 데이터 저장소 | IIS, Apache 서버 폴더 |
| /tmp | 임시 파일 저장소 | C:\Temp |
| /usr | 시스템 유틸리티, 애플리케이션 저장 | C:\Program Files |
| /var | 로그, 캐시, 데이터베이스 저장소 | C:\ProgramData |
사실 음...시작은 opt에서부터 뭔가 의문을 시작했는데 굉장히 뭔가 많이 설명이 되었다.
그리고 사실 예전에 쿠버네티스 하면서 PVC가
뭘까...하던 적도 있기도 하고 음...그랬었다.