GRUB는 파일 시스템을 이해하고 /boot를 보고 커널에 액세스할 수 있으므로 커널을 로드하고 이어서 initrd의 도움으로 파일 시스템을 마운트하기 위해 일부 드라이버를 로드한다는 내용을 읽었습니다.
그래서 내 질문은: 커널이 파일 시스템을 마운트해야 하는 이유는 무엇이며 GRUB은 이에 대해 알고 있는데 왜 GRUB 등에서 상속받지 않는 걸까요? 아마도 질문은 실제로 마운트 개념에 관한 것입니다. 실제로는 무엇을 의미합니까? 파일 계층 구조와 디스크 주소 간의 일종의 매핑입니까?
답변1
GRUB의 임무는 커널(및 initrd)을 로드하고, 일부 매개변수를 커널에 전달하고 시작하는 것입니다. 이를 수행하려면 디스크 파티션에 대해 알고 파일 시스템을 읽을 수 있어야 합니다. 파일 시스템을 마운트하려면 커널에 데이터 구조를 채워 커널이 파일 계층 구조를 추적할 수 있도록 해야 합니다. GRUB은 커널의 일부가 아니며 이 계층 구조에 대해 아무것도 모릅니다. 지정된 파티션의 파일 시스템에서 무언가를 찾으라는 지시를 받지만 /boot
커널이 이를 호출하거나 마운트할 위치는 알 수 없습니다. (음, 커널에 인수를 전달할 수도 있지만 실제로는 "알지" 못합니다.)
GRUB의 사명은 "한 가지 일을 잘 수행하는 것"입니다. GRUB는 또한 Linux 커널을 부팅할 수 있는 유일한 부트 로더가 아니며 대부분의 아키텍처에서도 사용할 수 없으므로 커널이 이에 의존할 수 없습니다.
답변2
부트로더(Grub)와 운영 체제(Linux) 모두운전사파일 시스템의 경우 이는 "파일에서 데이터 읽기"와 같은 명령을 이해하는 코드 조각입니다. 부트 로더가 운영 체제를 메모리에 로드하면 부트 로더가 메모리에서 제거되기 때문에 운영 체제는 부트 로더의 드라이버를 사용할 수 없습니다. (또한 부트로더 드라이버는 운영 체제보다 성능이 떨어지는 경우가 많기 때문에 예를 들어 Grub의 파일 시스템 드라이버는 읽기만 할 수 있고 쓸 수는 없습니다.)
경로에 파일 시스템을 마운트한다는 것은 /some/where
경로 아래의 파일에 대한 액세스가 /some/where
해당 파일 시스템으로 라우팅된다는 의미입니다. 커널이 파일 이름에 대한 명령(열기, 삭제, 이름 바꾸기 등)을 실행하면 파일 경로를 분석하고 현재 마운트된 파일 시스템 목록을 기반으로 파일이 어떤 파일 시스템에 있는지 확인하고 요청을 전달합니다. 적절한 드라이버에. 설치는 운영 체제 내부에서 이루어지며 어떤 식으로든 하드웨어에 영향을 주지 않으므로 설치 상태를 부트로더에서 운영 체제로 전송할 수 없습니다.