임베디드 리눅스 공부를 하면서, 계속해서 '이미지'라는 말이 나오는데 한번도 이미지가 무엇인지 명료하게 정리한 적이 없는 것 같아 이해에 어려움이 있었다. 디스크, 커널 의 맥락에서 '이미지'란 무엇인지 정리하여 향후 개념을 이해하는데에 어려움이 없도록 대비하고자 정리하여 글을 쓴다. 글쓰기의 용이함에 맞추어 개념을 넓혀가며 이해하는 방식으로 글을 써봤다.
우선 결론은,
disk image는 원본 소스와 데이터 구조까지 100% 동일한 드라이브의 압축본 이고
kernel image는 부팅 시 kernel을 메모리에 올리기 위해 필요한 "리눅스 커널을 컴파일한 실행파일"을 의미하는 것이다.
디스크 이미지, 커널 이미지?
사진이 아닌 '이미지'를 생각했을 때 가장 먼저 떠오르는 단어는 '디스크 이미지'와 '커널 이미지'이다.
이 둘은 무엇일까? 둘의 '이미지'가 같은 의미일까?
What is Disk Image?
https://www.techtarget.com/whatis/definition/disk-image
위 TechTarget 에서 정의한 disk image를 살펴보면, 'disk image'란 HHD나 SSD와 같은 저장장치의 모든 콘텐츠의 복사본을 가지고있는 압축된 파일이라고 한다. 그리고 이 disk image는 단순히 어떤 저장장치와 데이터만 100% 동일한 것을 넘어 데이터의 구조 정보까지 100% 동일한 복사본을 말한다고 한다. 다시말해, byte 단위로, 그리고 sector 까지 원본 소스 드라이브와 100% 같은 복사본인 것이다.
정리하면, 마치 저장장치의 내용물을 사진으로 찍은 것 처럼 완벽하게 같은 파일을 압축한 것을 disk image라고 한다.
Then, What about Kernel Image?
그렇다면, '커널 이미지'란 무엇일까? 정보를 찾아보기에 앞서 우선 짐작해보았다.
이전에 비글본 블랙에 맞게 u-boot를 빌드해 그 이미지 파일을 MicroSD 카드에 저장해 부트로더를 만들었던 기억이 있다. u-boot의 빌드 결과가 MLO와 u-boot 이미지였고, 이 u-boot 이미지를 메모리에 적재하는게 MLO의 역할이었기에, 아마 u-boot를 메모리에 실행할 수 있는 형태로 바로 올릴 수 있도록 관련 데이터를 바이너리로 저장해둔 것이 이 u-boot 이미지였지 않을까 짐작이 간다. 따라서, uboot 이미지는 메모리에 프로세스 형태로 바로 올려 실행할 수 있는 binary file이었을 것 이고, 메모리에 올라가는 kernel image또한 uboot 이미지처럼 시작 상태의 커널 위 메모리를 사진 찍듯 복사한 파일일 것 같다. 마치 앞의 disk image와 disk content의 관계처럼 말이다.
stackoverflow 질문 "What is kernel image? Why is it mandatory in Embedded?"에서 8 upvotes 를 받은 답변을 참고해보자.
https://stackoverflow.com/questions/55898349/what-is-a-kernel-image-why-is-it-mandatory-in-embedded
"There are kernel images, as you named in the post title. This is a binary form of the operating system core, nicknamed the kernel, that a bootloader can use to start the OS. In a Yocto Project context, this will almost always be a Linux kernel. The expression image there literally means one file that is the executable form of the linux kernel. the same wording is used by the Linux Kernel devs too, by the way."
위 답변의 볼드체한 부분을 보면, kernel image는 부트로더가 OS를 시작하기 위해 사용할 수 있는 binary form의 OS core라고 한다. 이 설명만으론 모호함이 조금 남는다. 조금 더 살펴보자.
이번에는 medium에서 21upvotes를 받은 "The Linux kernel image explained" 아티클을 살펴보자.
# The content of the Linux kernel image file #
"As is the case with many files containing non-trivial data, there is some kind of a header at the start of the file, with some kind of fields/attributes giving us some basic information about the data located after the header. In this case, the data described is the actual machine code of the compiler Linux kernel code."
위 답변의 볼드체 부분을 살펴보면, kernel image는 리눅스 커널 코드를 컴파일한 실제 기계어를 의미한다고 한다.
이번에는 https://eehoeskrap.tistory.com/255 를 참고해 보았다.
"커널 이미지란, 커널이 하나의 파일로 디스크에 저장되어 있는 것이다. 디스크에 저장된 파일은 커널 그 자체는 아니고 커널의 내용을 담고 있는 것이다."
"대부분의 리눅스 시스템에서는 이러한 커널 이미지는 압축된 형태로 사용된다. 첫번째 이유는 디스크 공간을 낭비하지 않기 위함이고, 두번째 이유는 로딩 시간을 줄이기 위함이다."
위 세가지를 종합해보면, 커널 이미지는 부트로더가 OS kernel을 메모리에 로드할 수 있도록, 리눅스 커널 코드를 컴파일한 binary form의 커널의 내용이 담긴 압축된 데이터이다.
정리
정리해보면,
disk image는 원본 소스 드라이브와 데이터 구조까지 100% 동일한 드라이브의 압축본 이고,
kernel image는 부팅 시, kernel을 메모리에 올리기 위해 필요한 "리눅스 커널을 컴파일한 실행파일"을 의미하는 것이었다.
참고:
https://www.techtarget.com/whatis/definition/disk-image
https://www.quora.com/What-is-the-difference-between-kernel-image-and-disk-image
https://stackoverflow.com/questions/55898349/what-is-a-kernel-image-why-is-it-mandatory-in-embedded
https://askubuntu.com/questions/517500/what-does-it-mean-to-load-a-kernal-image
'소프트웨어 > 운영체제' 카테고리의 다른 글
| [운영체제] '파일 시스템'이란 무엇인가? (파일 시스템, 파일 관리자, 파일 테이블, 파일 디스크립터, 파일 헤더) (0) | 2025.10.23 |
|---|---|
| 운영체제 기술면접 질문 모음 (0) | 2025.09.17 |
