여기서는 그것에 대해 이야기하지 않겠습니다 rootfs
. Linux에서 실행 중인 프로세스가 하나만 있고 해당 작업 디렉터리가 이면 /
제거할 수 있나요? 무엇이 남을 까요 rootfs
? 마운트 해제할 수 없는 경우 rootfs
해당 유형의 파일 시스템을 마운트 할 수 있습니까 ?
답변1
rootfs
먼저, 그것이 실제로 무엇인지 알아야 합니다 .
rootfs란 무엇입니까?
Rootfs는 2.6 시스템에 항상 존재했던 ramfs(또는 활성화된 경우 tmpfs)의 특수 인스턴스입니다. rootfs를 마운트 해제할 수 없는 이유는 init 프로세스를 종료할 수 없는 것과 거의 같습니다. 빈 목록을 확인하고 처리하기 위해 특수 코드를 사용하는 대신 커널은 특정 목록이 종료되지 않도록 더 작고 간단하게 보장할 수 있습니다. 텅 비게 된다.
대부분의 시스템은 rootfs에 다른 파일 시스템을 마운트하고 이를 무시합니다. ramfs의 빈 인스턴스는 매우 적은 양의 공간을 차지합니다.
CONFIG_TMPFS가 활성화되면 rootfs는 기본적으로 ramfs 대신 tmpfs로 설정됩니다. ramfs를 강제로 사용하려면 커널 명령줄에 "rootfstype=ramfs"를 추가하세요.
따라서 실제 파일 시스템 유형은 아닙니다. 커널 구성에 따라 rootfs
처음에는 또는 의 인스턴스일 수 있습니다 ramfs
. tmpfs
그러나 initramfs가 작업을 완료하면 rootfs
본질적으로 가상 자리 표시자가 되어 커널의 마운트된 파일 시스템 목록이 완전히 비어 있지 않도록 하여 이 상황을 처리하기 위한 특수 사례 코드가 필요하지 않도록 합니다.
일반적으로 실제 루트 파일 시스템을 직접 마운트 해제할 수는 없습니다. 이전 루트 파일 시스템에서 파일을 열 수 없기 때문에 파일을 열 수 없는 상황이 발생하게 됩니다. 마운트 해제가 방지됩니다). 이 시점에서는 새로운 실행 파일을 로드할 수 없습니다. 또한 장치를 /dev
장착 /proc
하거나 설치할 장소가 없기 때문에 대부분의 장치에 액세스할 수 없습니다 /sys
. 따라서 루트 파일 시스템을 사용하여 시스템을 마운트 해제하는 것은 재부팅하거나 종료하기 전 마지막 단계를 제외하고는 별로 유용하지 않습니다.
한 루트 파일 시스템에서 다른 루트 파일 시스템으로 전환하는 실제 방법(예: initramfs
부팅 시 실제 루트 파일 시스템으로 전환)은 다음을 사용하는 것입니다.pivot_root(2)
시스템 호출.
명령줄 도구도 있습니다switch_root(8)
그러나 이는 initramfs에서 실제 루트 파일 시스템으로의 전환을 위해 특별히 설계되었습니다.
경고: switch_root는 현재 루트 파일 시스템의 모든 파일과 디렉터리를 반복적으로 삭제합니다.
이것이 바로 시스템이 부팅 시 initramfs에서 실제 루트 파일 시스템으로 전환될 때 initramfs가 비어 있고 중요하지 않게 축소되는 이유입니다. 그러나 switch_root
실제 루트 파일 시스템에서 다른 루트 파일 시스템으로 변환을 시도하면 이전 루트 파일 시스템의 내용이 삭제되므로 한 디스크 기반 루트 파일 시스템에서 다른 루트 파일 시스템으로의 비파괴 변환에는 유용하지 않습니다.
2.6.xx 커널 이전에는 누군가 네트워크 인터페이스, 라우팅, ipchains/iptables 방화벽만 설정하는 개념 증명 Linux 방화벽을 만든 다음 커널을 중지한 것 같습니다. 당시 중지는 단순히 커널이 계속 실행되는 동안 사용자 공간 프로세스를 중지하는 것을 의미했습니다. 나는 이것이 어떤 진지한 디자인보다 재미있는 스턴트/대화에 가깝다고 생각합니다. 그러나 마운트 해제된 루트 파일 시스템으로 수행할 수 있는 유일한 작업은 아마도 다음과 같습니다.