시스템이 부팅된 장치(파티션이 아닌 물리적 장치)를 쉘 스크립트에서 확인해야 합니다.
저는 이 스크립트를 사용하여 디스크 이미지를 생성하고 누군가 실수로 시스템의 부팅 디스크를 지우는 것을 방지하고 싶습니다.
각 물리적 디스크에는 /boot 및 /EFI 파티션이 포함될 수 있으므로 디스크에 이러한 파티션이 포함되어 있는지 확인할 수는 없습니다.
부팅 중에 실제로 어떤 디스크가 사용되는지 알아야 합니다.
답변1
방법이 없어요안정적으로확신하는시작하다디스크.
이유는 간단합니다. 커널이 이 정보를 얻을 수 없기 때문입니다.
커널은 어떤 수단(보통 익명의 부트로더)을 사용하여 커널을 RAM에 로드하는 Fire-and-forget 방식으로 RAM에서 실행을 시작합니다.
따라서 추측만 할 수 있습니다. 커널은 /가 어디에 있는지 알고 있기 때문에(참조루트 =) 부트로더 프로필의 환경 에 따라 /proc/cmdline
/가 시스템 부팅 장치에 있을 확률에 베팅할 수 있습니다.
x86 아키텍처에서는 다음 명령을 사용하여 BIOS에서 이 정보를 가져올 수 있습니다.int 13H 인터럽트 호출. 확실히 어려운(그리고 여전히 신뢰할 수 없는) 길입니다.
~처럼머피일부 의견에서 제안된 것처럼 실행 중인 시스템이 UEFI 부팅에만 의존할 수 있다고 확신하는 경우 실행 중인 이 정보를 찾을 수 있습니다.부트 매니저
여러 가지 다른 방법을 시도해 볼 수도 있습니다. MBR을 조작해 보세요. 그러나 모든 방법에는 여전히 불확실성이 발생합니다(환경에 따라 다시 줄어들 수 있음).
네트워크에서 부팅하고 커널이 kexec에 의해 부팅되고 디스크가 일부 RAID 어레이로 구성되어 있다고 상상해 보십시오. 이 정보는 무엇을 의미합니까...?
그런데, 사용자가 실수로 부팅 파티션을 삭제하는 것을 방지하는 것이 유일한 관심이라면... 그렇다면... 단순히 부팅 파티션을 모두 만드는 것은 어떨까요?읽기 전용? (새 커널을 설치할 때 쓰기 가능한 파티션만 필요하기 때문입니다)