나는 최근에 활성 Linux 커널을 제거하고 마치 아무 일도 일어나지 않은 것처럼 시스템을 계속 사용하고 있습니다. 현재 사용 중인 Linux 커널을 제거하면 부작용이 있습니까? Windows가 아닌 다른 커널은 어떻습니까?
답변1
Linux 커널은 부팅 시 RAM에 완전히 로드됩니다. 시스템이 부팅된 후에는 결코 반환되지 않으며 해당 파일에서 어떤 것도 읽으려고 시도하지 않습니다. 커널에 로드되면 드라이버도 로드됩니다.
디스크에서 유일한 커널 이미지를 삭제하는 경우 유일한 결과는 재부팅하기 전에 대체 커널 이미지를 설치하지 않으면 시스템을 성공적으로 재부팅할 수 없다는 것입니다.
다른 운영 체제도 마찬가지일 것 같은데, 단지 운영 체제 커널의 특성 때문일 뿐입니다. 이는 의도적으로 항상 실행되는 작은 코드 조각이므로 코드를 다시 "보기" 위해 디스크로 계속 돌아갈 이유가 없습니다. 그것은 기억 속에 계속 살아 있습니다. (RAM 또는 가상 머신.)
답변2
글쎄요, 적절한 액세스 권한이 있다면 아이러니하게도 커널은 /dev/kmem
RAM에서 실행 중인 커널을 덮어쓸 수 있도록 지원합니다. dd
또는 을 사용하여 완전히 수행할 수 있습니다 cat
. 커널 패닉이나 시스템 잠금이 발생할 수 있습니다.
특정 주소 범위(PCI 주소 공간 등)에만 액세스를 허용하는 커널 옵션 "netuers"가 있습니다 /dev/kmem
. 이는 대부분의 배포판 기본 커널에서 활성화되어 있으므로 실제 시스템에서는 이 작업을 수행하지 못할 수도 있습니다. 커널을 직접 컴파일하지 않는 한. 하지만... 이것을 시도해 보세요브라우저에서 완전히 Javascript로 실행되는 Linux 인스턴스: cat /dev/zero > /dev/ram
- 실제 시스템에서도 비슷한 일이 발생합니다.
kexec
그러나 Linux에서는 다른 커널에 로드한 다음 실행하여 현재 실행 중인 커널을 덮어쓰는 (선택 사항)이라는 기능을 제공합니다 . 이 작업을 안전하게 수행하려면 드라이버/장치/파일이 활성화되지 않은 동안 수행해야 합니다. 즉, 시스템은 마치 "스위치" 전에 종료된 것처럼 종료 절차를 수행하고 모든 디스크를 마운트 해제해야 합니다. BIOS를 거치지 않고 시스템을 재부팅하는 데 사용할 수 있습니다. 실행 중인 시스템을 선호하는 경우 이러한 모든 예방 조치는 물론 kexec
커널이나 코드를 완전히 무시할 수도 있습니다. 제대로 종료하지 않고 전원을 끄는 것과 유사한 손상 위험이 있습니다.