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


12

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

예를 들어 Gentoo initramfs 안내서 는 다음과 같이 루트 파일 시스템을 마운트합니다 :

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

다음은 왜 안됩니까?

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

나는 아마도 좋은 이유가 있고 (그리고 아마도 관련이 있음 switchroot) 알 수 있지만 어디에도 문서화되어 있지 않은 것 같습니다.

답변:


19

초기 램 디스크 (initrd에) 전형적으로 부팅 오프 실제 루트 파일 시스템 및 손을 탑재 할 필요되는 것만 함유 루트 파일 시스템의 스트립 다운 버전.

initrd는 현대 시스템에서 부트 로더가 루트 파일 시스템을 안정적으로 찾을만큼 똑똑하게 만들 수 없기 때문에 존재합니다. 부트 로더와 같은 작은 프로그램이 다루기에는 너무 많은 가능성이 있습니다. NFS 루트, 비표준 RAID 카드 등을 고려하십시오. 부트 로더는 BIOS와 부트 섹터에 넣을 수있는 모든 코드 만 사용하여 작업을 수행해야합니다.

initrd는 부트 로더 찾을 있는 곳에 저장되며 , 여분의 공간이 보통 누구를 방해하지 않을 정도로 작습니다. (소형 임베디드 시스템에서는 일반적으로 "실제"루트가없고 initrd 만 있습니다.)

initrd는 소중합니다. initrd가 깨지면 시스템을 부팅 할 수 없기 때문에 모든 조건에서 내용을 보존해야합니다. 이를 보장하기 위해 설계자가 선택한 설계 중 하나는 부트 로더가 initrd를 읽기 전용으로로드하도록하는 것입니다. 이 방향으로 일이, 너무, 같은 더 "진짜"루트가없는 소규모 시스템의 경우와, 당신은 여전히 별도의 마운트 것을 다른 원칙이있다 /tmp, /var/cache물건을 저장하는 등가. initrd 변경은 거의 수행되지 않으며 매우 신중하게 수행해야합니다.

실제 루트 파일 시스템 있는 일반적인 경우로 돌아 가면 initrd가 있기 때문에 처음에는 읽기 전용으로 마운트됩니다. 그런 다음 거의 같은 이유로 가능한 한 읽기 전용으로 유지됩니다. 수행해야하는 실제 루트에 대한 모든 쓰기는 시스템이 부팅 될 때까지, 기본 설정에 따라 또는 해당 기본 설정을 충족 할 수없는 경우 부팅 프로세스의 늦게까지 연기됩니다.

이 읽기 전용 단계에서 발생하는 가장 중요한 것은 루트 파일 시스템이 마운트가 해제되었는지 확인하는 것입니다. 그것은 부트 로더가 initrd에 남겨 두는 대신 확실히 할 수있는 일이지만, 루트 파일 시스템 깨끗하게 마운트 해제 되지 않으면 어떻게 될까요? 그런 다음 fsck확인하고 가능하면 수정해야합니다. "실제"루트로 핸드 오프 할 때까지 기다리지 않고이 단계를 담당했다면 어디서 initrd얻을 수 fsck있을까요? 당신은 당신이 복사 할 필요가 있다고 말할 수 fsckinitrd를 구축 할 때,하지만 지금은 더 큰. 그리고 그 위에 어떤 fsck 것을 복사 하시겠습니까? 리눅스 시스템은 정기적으로 십여 개의 다른 파일 시스템을 사용합니다. 당시 실제 루트에 필요한 것만 복사합니까?initrd만들어 지나요? 루트 파일 시스템이 나중에 다른 파일 시스템 유형으로 마이그레이션되고 누군가 initrd를 다시 작성하는 것을 잊어 버린 경우에 initrd사용 가능한 모든 fsck.foo프로그램을 복사 하여 크기를 조정 합니까?

리눅스 부트 시스템 아키텍트는 현명하게도 이러한 문제에 대한 초기 부담을주지 않기로 결정했다. 그들은 실제 루트 파일 시스템 검사를 실제 루트 파일 시스템에 위임했다. 왜냐하면 initrd보다 더 나은 위치에 있기 때문이다.

부팅 프로세스가 안전 할 정도로 충분히 진행되면 initrd는로 실제 루트 아래에서 스왑 아웃되고 pivot_root(8)파일 시스템은 읽기 / 쓰기 모드로 다시 마운트됩니다.


4
initramfs는 읽기 전용으로 마운트되지 않습니다. 커널은 /로 마운트 된 읽기 / 쓰기 tmpfs로 압축을 풉니 다. 또한 pivot_root ()는 현재 감가 상각 된 initrd에서 사용되지만 대부분의 시스템에서 요즘 사용하는 initramfs에서는 사용되지 않습니다 (파일의 이름은 여전히 ​​initrd입니다). initrd를 사용하면 / sbin / init를 실행하기 전에 pivot_root가 발생하여 fsck로 이동하여 r / w를 다시 마운트합니다. initramfs를 사용하면 initramfs의 모든 파일을 삭제 한 다음 chroot를 실제 루트와 execs / sbin / init로 옮깁니다.
psusi

0

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


0

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

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

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.