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

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

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

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

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

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

답변1

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

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

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

이제 앞서 언급했듯이 커널은 실제 루트를 읽기 전용으로 마운트합니다. initramfs는 정확히 이것을 수행해야 합니다. initramfs가 완료되면 시스템은 마치 initramfs가 전혀 없는 것처럼 부팅을 진행하고 /sbin/init시작됩니다. 그런 다음 이 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에 있어야 합니까?

관련 정보