initramfs를 업데이트하기 전에 이러한 설치가 필요한 이유는 무엇입니까?

initramfs를 업데이트하기 전에 이러한 설치가 필요한 이유는 무엇입니까?

이 글을 읽고 나면답변바인드 마운트와 관련하여 내 생각은 바인드가 디렉토리 트리의 다른 지점 아래에 있는 Linux 복사본 부분 또는 전체 파일 시스템에 마운트된다는 것입니다.

그래서 우리가 다음 명령을 작성할 때

mount --rbind /dev dev
mount --rbind /run run

이는 /dev시스템의 및를 /run로컬 개발 및 실행 아래의 지점에 바인딩하는 것을 의미합니다. 이는 시스템의 /dev 및 /run 내용이 dev 디렉토리에 복사되어 로컬로 실행된다는 의미입니다.또한 dev 및 run을 변경하면 시스템의 /dev 및 /run에 반영되지 않습니다. 옳은? 하지만 그 반대의 경우는 어떻게 되나요?

그래서 내 질문은 왜 우리가 실행하기 전에 아래와 같은 설치가 필요한지입니다.

update-initramfs -u

/run 및 /dev 디렉토리에서 어떤 정보가 필요합니까? 바인드 마운트가 정보를 변경할 수 없는 경우 기본적으로 읽기 전용 액세스만 가능합니까?

답변1

이는 다른 시스템으로 chroot하여 initramfs 이미지를 빌드하거나 업데이트하려는 경우와 같은 일부 특수한 경우에만 필요합니다.

initramfs이러한 경로를 바인딩해야 하는 이유를 이해하려면 그것이 무엇인지, 실제로 필요한 이유를 알아야 합니다 .

많은 Linux 배포판에는 배포판 개발자가 다양한 하드웨어에서 부팅하기 위해 특별히 만든 공통 Linux 커널 이미지가 함께 제공됩니다. 이 범용 커널 이미지용 장치 드라이버는 로드 가능한 커널 모듈로 포함됩니다. 왜냐하면 많은 드라이버를 단일 커널로 정적 컴파일하면 커널 이미지가 더 커지고 메모리가 제한된 시스템에서 부팅하기에는 너무 클 수 있기 때문입니다. 이로 인해 부팅 시 루트 파일 시스템을 설치하는 데 필요한 모듈을 감지하고 로드하거나 루트 파일 시스템이 어디에 있는지 또는 무엇인지 추론하는 문제가 발생합니다.[1]

결론: 내 환경에서 initramfs를 생성하거나 업데이트할 때 내 장치가 무엇인지 알아야 합니다. 예: 내가 가지고 있는 디스크의 종류와 이를 처리하기 위해 "initramfs"에 어떤 도구/모듈을 넣어야 할까요? 시스템 시작? 이 데이터는 어디에서 오는가?

이와 같은 경로에는 /dev이러한 종류의 항목에 대한 유용한 정보가 많이 포함되어 있으므로 우리는 이와 같은 경로를 복사합니다 /dev.

에서 man hier:

/dev 물리적 장치를 참조하는 특수 또는 장치 파일입니다.


다른 질문과 관련하여 마운트 위치에서 무엇이든 변경하면 실제 파일 시스템이 반영되는 것으로 아는 한 직접 쉽게 테스트할 수 있습니다.

$ sudo mount --rbind ~/Documents /mnt
$ touch ~/mnt/foo
$ ls ~/Documents/foo
/home/ravexina/Documents/foo

답변2

또한 dev 및 run을 변경하면 시스템의 /dev 및 /run에 반영되지 않습니다. 옳은?

적어도 전체적으로는 틀렸습니다.

바인드 마운트에 대해 네 가지 유형의 동작을 구성할 수 있으며 "동일 복사본"이 기본값입니다. 바라보다 man 8 mount:

--make-shared
--make-slave
--make-private
--make-unbindable

관련 정보