initramfs가 루트 파일 시스템을 읽기 전용으로 마운트하는 이유

initramfs가 루트 파일 시스템을 읽기 전용으로 마운트하는 이유

ro루트 파일 시스템이 initramfs(및 initrd)에 마운트되는 이유는 무엇입니까?

예를 들어젠투 initramfs 가이드루트 파일 시스템을 마운트하려면 다음 명령을 사용하십시오.

mount -o ro /dev/sda1 /mnt/root

아래는 왜 안되나요?

mount -o rw /dev/sda1 /mnt/root

이에 대한 타당한 이유가 있을 수 있지만(관련될 수도 있음 switchroot) 어디에도 문서화되어 있지 않은 것 같습니다.

답변1

이것초기 가상 디스크(initrd)는 일반적으로 실제 루트 파일 시스템을 마운트하고 직접 부팅하는 데 필요한 것만 포함하는 루트 파일 시스템의 간단한 버전입니다.

initrd가 존재하는 이유는 최신 시스템에서 부트로더가 루트 파일 시스템을 안정적으로 찾을 만큼 똑똑하지 않기 때문입니다. 부트로더와 같은 작은 프로그램의 경우 다루기에는 너무 많은 가능성이 있습니다. NFS 루트, 비표준 RAID 카드 등을 고려하십시오. 부트 로더는 BIOS만 사용해야 하며 해당 작업을 수행하기 위해 부트 섹터에 들어갈 수 있는 모든 코드를 사용해야 합니다.

initrd는 부트로더 어딘가에 저장되어 있습니다.할 수 있는그것을 찾으면 일반적으로 차지하는 추가 공간이 누구에게도 방해가 되지 않을 만큼 작습니다. (소형 임베디드 시스템에는 일반적으로 "실제" 루트가 없고 initrd만 있습니다.)

initrd는 가치가 있습니다. initrd가 손상되면 시스템이 부팅되지 않으므로 모든 상황에서 해당 내용을 보존해야 합니다. 이를 보장하기 위해 디자이너가 선택한 설계 중 하나는 부트로더가 initrd를 읽기 전용으로 로드하도록 하는 것이었습니다. 이를 달성하기 위한 다른 원칙도 있습니다. 예를 들어 "실제" 루트가 없는 작은 시스템의 경우에는 항목을 저장하기 위해 /tmp별도로 마운트할 수 있습니다. /var/cacheinitrd 변경은 거의 발생하지 않으므로 매우 주의해서 수행해야 합니다.

정상으로 돌아가다initrd가 읽기 전용이므로 처음에는 읽기 전용으로 마운트되는 실제 루트 파일 시스템입니다. 그런 다음 동일한 이유로 가능한 한 오랫동안 읽기 전용 상태로 유지됩니다. 기본 설정에 따라 실제로 완료해야 하는 실제 루트에 대한 모든 쓰기는 시스템 시작까지 또는 적어도 기본 설정을 충족할 수 없는 시작 프로세스의 후반부까지 연기됩니다.

이 읽기 전용 단계에서 발생하는 가장 중요한 일은 루트 파일 시스템이 완전히 마운트 해제되었는지 확인하는 것입니다. 이는 initrd에 맡기지 않고 부트로더가 확실히 수행할 수 있는 작업입니다. 그러나 루트 파일 시스템이아니요제거가 깨끗합니까? 그런 다음 이를 fsck확인하고 수정하기 위해 호출해야 합니다 . 따라서 "실제" 루트로 전환되기를 기다리는 대신 이 단계를 처리한다면 initrd얻을 수 있는 위치는 어디일까요? fsck빌드할 때 fsck복사 해야 한다고 말할 수도 있지만 initrd지금은 더 커졌습니다. 가장 중요한 것은,어느 fsck복사해 주실 수 있나요? Linux 시스템은 종종 12개 이상의 서로 다른 파일 시스템을 사용합니다. initrd실제 뿌리를 만드는데 필요한 뿌리 만 복사하셨나요 ? 루트 파일 시스템이 나중에 다른 파일 시스템 유형으로 마이그레이션되고 누군가 initrd를 다시 작성하는 것을 잊어버린 경우에 대비하여 initrd사용 가능한 모든 프로그램을 여기에 복사하여 크기를 늘렸 습니까 ?fsck.foo

Linux 부팅 시스템 설계자는 이러한 문제로 initrd에 부담을 주지 않기로 현명하게 선택했습니다. 실제 루트 파일 시스템 검사는 initrd보다 수행에 더 적합하기 때문에 실제 루트 파일 시스템에 위임합니다.

부팅 프로세스가 충분히 진행되어 안전하게 수행되면 initrd가 실제 루트 디렉터리에서 교체됩니다.pivot_root(8), 파일 시스템은 읽기-쓰기 모드로 다시 마운트됩니다.

답변2

부팅하는 동안 루트 파일 시스템은 처음에는 항상 읽기 전용으로 마운트되기 때문입니다. 다양한 자체 테스트가 완료되면 루트 파일 시스템을 읽기/쓰기로 다시 마운트하고 다른 파일 시스템 마운트를 시작합니다.

답변3

제가 생각할 수 있는 한 가지 이유는 일종의 부패를 방지하는 것입니다. 예를 들어, ext4 파일 시스템을 ext2로 마운트할 수 있습니다(또는 그 반대). 이는 ro 모드에서는 안전하지만 initram에서 rw를 마운트하면 호환되지 않는 형식 변경이 발생할 수 있습니다.

아, 또 다른 이유가 있습니다. initramfs에 fsck가 없을 수도 있지만 rw에 마운트하기 전에 파일 시스템을 확인하고 싶을 수도 있습니다.

관련 정보