내가 이해하는 방식으로, initramfs는 “실제”루트 파일 시스템을로드합니다.
이제 우리는 그 루트를 정의하는 두 곳이 있습니다. 먼저에 항목을 넣습니다 /etc/fstab
. 둘째, 커널 부팅 명령에 장치를 넣습니다 (예 🙂 root=/dev/sda1
.
루트 파일 시스템이 어디에 있는지를 결정하기 위해 initramfs는 어느 것을 사용합니까? 루트 커널 매개 변수를 사용하는 경우 왜 /etc/fstab
?에 항목이 있습니까? 두 번째 옵션 (읽기 /etc/fstab
)은 /etc/fstab
파일이 initramfs가 처음에 마운트하려고하는 루트 장치에 있기 때문에 매우 비논리적 입니다.
매우 혼란스러운 것들.
답변
언급 한 바와 같이, initramfs의 목적은 “실제”루트 파일 시스템을 마운트하는 것입니다 (다른 작업도 수행 할 수 있지만 이것은 일반적인 작업입니다).
initramfs가 없으면 커널은 일반적으로 파티션을 읽기 전용으로 마운트 한 다음에 제어권을 넘깁니다 /sbin/init
. initramfs는 일반적으로 루트 파일 시스템이 일반 파티션이 아닌 경우 (mdraid, lvm, 암호화 등) 커널에서이 작업을 수행합니다.
이제 initramfs의 배경과는 별도로 /etc/fstab
루트 파일 시스템에 있습니다. 따라서 initramfs가 시작될 때 해당 루트 파일 시스템이 없으므로 fstab (치킨 및 계란 문제)에 도달 할 수 없습니다.
대신 initramfs에서 사용할 수 있도록 매개 변수를 커널 부팅 인수로 전달해야합니다. 일반적으로 이것은 다음과 같습니다 root=/dev/sdX
. 그러나 루트 장치의 위치를 자동으로 파악하는 매개 변수가 없으므로 매개 변수가 없습니다. 소프트웨어 (일반적으로 스크립트) 일 뿐이므로 루트 장치를 마운트하기 위해 원하는 모든 작업을 수행 할 수 있습니다.
이제 앞에서 언급했듯이 커널은 실제 루트를 읽기 전용으로 마운트합니다. initramfs는이 작업을 정확히 수행해야합니다. initramfs가 완료되면 시스템은 initramfs가 전혀없는 것처럼 정확하게 부팅을 /sbin/init
시작 하고 시작합니다. 이 init은 모든 일반 부팅 스크립트를 시작하며,이 스크립트 중 하나의 역할은 읽기 /etc/fstab
, 루트를 읽기 / 쓰기로 전환하고 다른 모든 파일 시스템을 마운트하는 것입니다.
답변
그럴 수도 있고 아닐 수도 있습니다. Initramfs는 다양한 방법으로 구성 될 수 있기 때문에 (커널은로드하고 실행 /init
합니다.) 그러나 매개 변수를 사용하는 것이 더 유연합니다. 즉, 변경 사항이있는 경우 부팅 항목을 편집하면 작업이 계속 진행됩니다. 내장 된 하드 코딩 된 루트를 사용하면 반드시 가능하지는 않습니다.
fstab 항목은 마운트 옵션 (일부 변경 가능) 및 fsck
순서 와 같은 다른 사항도 결정하므로 어떤 방식 으로든 필요할 수 있습니다 . 또한 그것이 완전히 불필요한 경우에도 (그리고 Initramfs가 그것을 처리하면 작동하지 않을 수 있습니다), 나는 여전히 완전성을 위해 엔트리를 유지합니다.
답변
/ etc / fstab을 정적 마운트로 간주 할 수 있습니다. 이러한 작업을 수행하는 방법 일 뿐이지 만 실제로 mount 명령을 실행하는 것은 아니며 fstab에없는 많은 파일 시스템을 볼 수 있습니다. 이러한 udev 및 udisk 서비스는 / etc / fstab 파일을 무시하고 많은 “자동 마운트”를 관리합니다.
따라서 무언가가 마운트되거나 자주 마운트되지 않으면 / etc / fstab과 관련이 없습니다.
initramfs “true”rootfs가 마운트 될 때까지 부팅 과정에서 사용되는 임시 rootfs 일뿐입니다. 왜 initramfs가 / etc / fstab에 있어야합니까?