initramfs는 /etc/fstab을 사용합니까?

initramfs는 /etc/fstab을 사용합니까?

내가 이해하는 바에 따르면 initramfs는 "실제" 루트 파일 시스템을 로드하는 역할을 담당합니다.

이제 이 루트를 두 곳에서 정의합니다. 먼저 항목을 에 넣습니다 /etc/fstab. 둘째, 커널 부팅 명령(예: )에 장치를 넣습니다 root=/dev/sda1.

initramfs는 루트 파일 시스템의 위치를 ​​결정하기 위해 어느 것을 사용합니까? 루트 커널 매개변수를 사용하는 경우 항목이 있는 이유는 무엇입니까 /etc/fstab? 두 번째 옵션(read )은 파일이 initramfs가 먼저 마운트하려고 시도하는 루트 장치에 있기 /etc/fstab때문에 매우 비논리적입니다 ./etc/fstab

매우 혼란스러운 내용입니다.

답변1

당신이 말했듯이 initramfs의 목적은 "실제" 루트 파일 시스템을 마운트하는 것입니다(다른 작업도 수행할 수 있지만 이는 일반적인 작업입니다).

initramfs가 없으면 커널은 일반적으로 파티션을 읽기 전용으로 마운트한 다음 .initramfs에 제어권을 전달합니다 /sbin/init. 일반적으로 루트 파일 시스템이 일반 파티션(mdraid, lvm, 암호화 등)이 아닌 경우 커널에서 이 작업을 대신합니다. .

이제 initramfs의 배경 외에도 /etc/fstab루트 파일 시스템에도 상주합니다. 따라서 initramfs가 시작되면 루트 파일 시스템이 존재하지 않으므로 fstab에 액세스할 수 없습니다(닭과 달걀 문제).
대신 initramfs가 사용할 커널 부팅 매개변수에 매개변수를 전달해야 합니다. 일반적으로 이는 root=/dev/sdX루트 장치의 위치를 ​​자동으로 파악하므로 매개변수가 전혀 없습니다. 이는 단지 소프트웨어(보통 스크립트)이기 때문에 실제로 장치를 루팅하기 위해 원하는 모든 작업을 수행할 수 있습니다.

이제 앞서 언급했듯이 커널은 실제 루트를 읽기 전용으로 마운트합니다. initramfs가 이 작업을 수행해야 합니다. initramfs가 완료되면 시스템은 마치 initramfs가 전혀 없는 것처럼 계속 부팅 및 /sbin/init시작됩니다 . 그런 다음 이 초기화는 모든 일반 부팅 스크립트를 시작합니다. 그 중 하나는 읽기 /etc/fstab, 루트를 읽기-쓰기로 전환하고 다른 모든 파일 시스템을 마운트합니다.

답변2

그럴 수도 있고 아닐 수도 있고. Initramfs는 다양한 방법으로 구축될 수 있기 때문에(커널은 이를 로드하고 실행하여 /init원하는 작업을 수행합니다). 그러나 매개변수를 사용하면 더 많은 유연성이 제공되므로 더 일반적입니다. 즉, 변경사항이 있는 경우 시작 항목을 편집하고 작업을 계속할 수 있습니다. 내장된 하드코딩된 루트를 사용하면 이것이 반드시 가능한 것은 아닙니다.

그럼에도 불구하고 fstab 항목은 마운트 옵션(일부는 언제든지 변경될 수 있음) 및 fsck순서와 같은 다른 사항도 결정하므로 여전히 필요할 수 있습니다. 또한 완전히 중복되더라도(Initramfs가 처리한다면 그렇지 않을 수도 있음) 완전성을 위해 해당 항목을 그대로 두겠습니다.

답변3

/etc/fstab을 정적 마운트로 생각할 수 있습니다. 이는 이러한 작업을 수행하는 한 가지 방법일 뿐이지만 실제로 mount 명령을 실행하는 유일한 방법은 아니며 fstab에서 많은 파일 시스템이 누락된 것을 볼 수 있습니다. udev 및 udisk와 같은 서비스는 /etc/fstab 파일을 무시하고 대부분의 "자동 마운트"를 관리합니다.

따라서 무언가가 설치되거나 자주 설치되지 않는다면 이는 /etc/fstab과 아무 관련이 없습니다.

initramfs는 "실제" rootfs가 마운트될 때까지 부팅 중에 사용되는 임시 rootfs입니다. 그런데 왜 initramfs가 /etc/fstab에 있어야 합니까?

관련 정보