초기 ramdisk

Initial ramdisk

Linux 시스템에서 (초기 ramdisk)는 임시 루트 파일 시스템메모리에 로드하여 Linux 시작 프로세스의 일부로 사용하는 방식이다. initrd그리고initramfs이를 달성하기 위한 두 가지 방법을 참조한다.둘 다 실제 루트 파일 시스템을 장착할 수 있기 전에 준비하는 데 일반적으로 사용된다.

이론적 근거

많은 Linux 배포판에서는 일반적인 단일 Linux 커널 이미지를 제공하는데, 이 커널 이미지는 배포판 개발자들이 다양한 하드웨어에서 부팅하기 위해 특별히 제작한 것이다.많은 드라이버를 정적으로 하나의 커널로 컴파일하면 커널 이미지가 훨씬 커지거나 메모리가 제한된 컴퓨터에서 부팅하기에 너무 크거나 경우에 따라 존재하지 않거나 교락되지 않는 검색으로 인해 부팅 시간 충돌이나 기타 문제가 발생하기 때문에 이 일반 커널 이미지로드할 수 있는 커널 모듈로 포함됨리치 하드웨어이 정적 컴파일 커널 접근법도 더 이상 사용되지 않거나 필요하지 않은 모듈을 커널 메모리에 남겨두고, 부팅 시 루트 파일 시스템을 탑재하는 데 필요한 모듈을 탐지하고 로딩하는 문제를 제기하며, 이를 위해 루트 파일 시스템이 어디에 있는지, 무엇인지를 추론한다.[1]

문제를 더욱 복잡하게 하기 위해 루트 파일 시스템은 소프트웨어 RAID 볼륨, LVM, NFS(디스크 없는 워크스테이션) 또는 암호화된 파티션에 있을 수 있다.이 모든 것들은 장착하기 위해 특별한 준비가 필요하다.[2]

또 다른 복잡한 문제는 최대 절전 모드인 커널 지원으로, 메모리 전체 내용의 이미지를 스왑 파티션이나 일반 파일에 덤핑한 다음 전원을 끄면 컴퓨터가 디스크로 일시 중단된다.다음 부팅 시 이 이미지를 다시 메모리에 로드하려면 먼저 액세스할 수 있어야 한다.

커널에 너무 많은 특수 사례에 대한 하드코드 처리를 피하기 위해, 초기 사용자 공간이라고 불리는 임시 루트 파일 시스템이 포함된 초기 부팅 단계가 사용된다.이 루트 파일 시스템은 실제 루트 파일 시스템을 탑재하는 데 필요한 하드웨어 감지, 모듈 로드 및 장치 검색을 수행하는 사용자 공간 도우미를 포함할 수 있다.[2]

실행

mkinitcpio, Arch Linux 및 관련 배포에서 initramfs를 생성하는 프로그램

이 초기 루트 파일 시스템의 이미지는 (커널 이미지와 함께) 리눅스 부트 로더 또는 시스템의 부트 펌웨어에 의해 액세스 가능한 곳에 저장되어야 한다.이는 루트 파일 시스템 자체, 광 디스크부팅 이미지, 로컬 디스크의 작은 파티션(부팅 파티션, 일반적으로 ext2 또는 FAT 파일 시스템을 사용함) 또는 TFTP 서버(Ethernet에서 부팅할 수 있는 시스템)가 될 수 있다.

부트로더는 커널과 초기 루트 파일 시스템 이미지를 메모리에 로드한 다음 이미지의 메모리 주소를 전달하면서 커널을 시작한다.부팅 순서가 끝날 때, 커널은 처음 몇 개의 데이터 블록에서 이미지의 형식을 결정하려고 시도하는데, 이는 초기화 또는 initramfs 체계로 이어질 수 있다.

초기화 방식에서 이미지는 파일 시스템 이미지(옵션으로 압축)일 수 있으며, 특수 블록 장치(Initrd scheme)에서 사용할 수 있게 된다.초기 루트 파일 시스템으로 마운트되는 /dev/ram)[3]그 파일 시스템의 드라이버는 커널에 정적으로 컴파일되어야 한다.많은 배포는 원래 압축된 ext2 파일 시스템 이미지를 사용한 반면, 다른 배포(Debian 3.1 포함)는 압축을 푸는 데 여분의 공간 없이도 내부 장착이 가능하기 때문에 메모리 제한 시스템에서 부팅하기 위해 크래프트를 사용했다.초기 루트 파일 시스템이 가동되면 커널은 첫 번째 프로세스로 /리눅스rc를 실행하며,[4] 커널이 종료되면 실제 루트 파일 시스템이 탑재되었다고 가정하고 /sbin/init를 실행하여 정상적인 사용자 공간 부팅 프로세스를 시작한다.[3]

initramfs 스키마(Linux 커널 2.6.13 이후 사용 가능)에서 이미지는 cpio 아카이브(옵션으로 압축)일 수 있다.아카이브는 커널에 의해 초기 루트 파일 시스템이 되는 tmpfs의 특별한 인스턴스로 압축이 풀린다.이 계획은 중간 파일 시스템이나 블록 드라이버를 커널에 컴파일할 필요가 없다는 장점이 있다.[5]일부 시스템은 드라큐트 패키지를 사용하여 initramfs 이미지를 생성한다.[6]initramfs 체계에서 커널은 종료될 것으로 예상되지 않는 첫 번째 프로세스로 /init를 실행한다.[5]일부 애플리케이션의 경우 initramfs는 casper 유틸리티를 사용하여 읽기 전용 루트 파일 시스템 이미지에 지속성 계층을 오버레이하기 위해 유니언fs를 사용하여 쓰기 가능한 환경을 만들 수 있다.예를 들어 오버레이 데이터는 USB 플래시 드라이브에 저장할 수 있지만 라이브 CD에 저장된 압축된 스쿼시FS 읽기 전용 이미지는 루트 파일 시스템 역할을 한다.[7][8]

어떤 알고리즘을 정적으로 컴파일했는가에 따라 커널은 gzip, bzip2, LZMA, XZ, LZO, LZ4,[9] zstd로 압축된 initrd/initramfs 영상을 풀 수 있다.

마운트 준비

데비안과 같은 일부 Linux 배포판은 ATA, SCSI 및 파일 시스템 커널 모듈과 같은 특정 컴퓨터를 부팅하는 데 필요한 모든 것을 포함하는 사용자 지정 초기화 이미지를 생성할 것이다.여기에는 일반적으로 루트 파일 시스템의 위치와 유형이 내장되어 있다.

다른 Linux 배포판(예: Fedora, Ubuntu)은 보다 일반적인 초기화 이미지를 생성한다.이는 루트 파일 시스템(또는 해당 UUID)의 디바이스 이름으로만 시작되며 부팅 시 다른 모든 항목을 검색해야 한다.이 경우 소프트웨어는 루트 파일 시스템을 마운트하기 위해 복잡한 일련의 작업을 수행해야 한다.

  • 부팅 프로세스가 의존하는 모든 하드웨어 드라이버를 로드해야 한다.공통의 배열은 공통 저장 장치의 커널 모듈을 initrd에 포장한 다음 핫플러그 에이전트를 호출하여 시스템의 탐지된 하드웨어와 일치하는 모듈을 끌어들이는 것이다.
  • 부팅 스플래시 화면을 표시하는 시스템에서는 비디오 하드웨어를 초기화해야 하며 사용자 공간 도우미가 부팅 프로세스에 따라 디스플레이에 애니메이션을 그리기 시작했다.
  • 루트 파일 시스템이 NFS에 있는 경우, 기본 네트워크 인터페이스를 가져와 DHCP 클라이언트를 호출해야 하며, 이 클라이언트를 통해 DHCP 리스를 얻을 수 있으며, NFS 공유 이름과 NFS 서버 주소를 리스에서 추출하고 NFS 공유를 마운트해야 한다.
  • 루트 파일 시스템이 소프트웨어 RAID 장치에 있는 것처럼 보이면 RAID 볼륨의 범위를 알 수 있는 방법이 없다. 사용 가능한 모든 블록 장치를 검색하고 필요한 장치를 온라인으로 가져오기 위해 표준 MD 유틸리티를 호출해야 한다.
  • 루트 파일 시스템이 논리 볼륨에 있는 것으로 나타나면 LVM 유틸리티를 호출하여 해당 파일이 포함된 볼륨 그룹을 검색하고 활성화해야 한다.
  • 루트 파일 시스템이 암호화된 블록 장치에 있는 경우 소프트웨어는 사용자에게 암호를 입력하거나 하드웨어 토큰(예: 스마트 카드 또는 USB 보안 동글)을 삽입하도록 요청하는 도우미 스크립트를 호출한 다음 장치 매퍼로 암호 해독 대상을 생성해야 한다.

일부 배포에서는 udev와 같은 이벤트 기반 핫플러그 에이전트를 사용하며, 하드웨어 장치, 디스크 파티션 및 특정 규칙과 일치하는 스토리지 볼륨이 온라인 상태가 되면서 도우미 프로그램을 호출한다.이를 통해 검색은 병렬로 실행되며, LVM, RAID 또는 암호화의 임의 중첩으로 점진적으로 캐스케이드하여 루트 파일 시스템을 파악할 수 있다.

루트 파일 시스템이 마침내 가시화되면 마운트된 루트 파일 시스템에서 실행할 수 없는 모든 유지 관리 작업이 수행되고, 루트 파일 시스템은 읽기 전용으로 마운트되며, 계속 실행해야 하는 프로세스(스플래시 화면 도우미 및 해당 명령 FIFO 등)는 새로 마운트된 루트 파일 시스템에 호스트된다.

최종 루트 파일 시스템은 단순히 / 위에 탑재할 수 없으며, 그렇게 되면 초기 루트 파일 시스템의 스크립트와 도구에 액세스할 수 없게 되어 최종 정리 작업이 수행될 수 없다.

  • initrd에서, 새로운 루트는 임시 탑재 지점에 장착되고 pivot_root(8)로 제자리에 회전한다(이것을 위해 특별히 도입되었다).이렇게 하면 초기 루트 파일 시스템이 마운트 지점(예: /initrd)에 남게 되는데, 이 지점에서는 일반 부팅 스크립트가 나중에 마운트 해제하여 initrd에 의해 저장된 메모리를 확보할 수 있다.
  • initramfs에서는 초기 루트 파일 시스템을 회전시킬 수 없다.[10]대신 간단히 비워지고 최종 루트 파일 시스템이 위에 탑재된다.

대부분의 초기 루트 파일 시스템은 셸 스크립트로 /linuxrc 또는 /init를 구현하므로 일부 필수 사용자 공간 유틸리티(일반적으로 Banin/ash)와 함께 최소 셸(일반적으로 /bin/ash)을 포함한다.공간을 더욱 절약하기 위해, 쉘, 유틸리티 및 해당 지원 라이브러리는 일반적으로 공간 최적화가 활성화된 상태로 컴파일되며(: gcc의 "-O" 플래그) 이를 위해 특별히 작성된 C 라이브러리의 최소 버전인 klibc에 대해 링크된다.[11]

기타 용도

리눅스 배포용 Installer는 영구 스토리지를 설정하기 전에 설치 프로그램 인터페이스와 지원 도구를 호스팅할 수 있어야 하므로 일반적으로 initramfs에서 완전히 실행된다.

Tiny Core Linux[12] Puppy Linux[13][failed verification] initrd부터 완전히 실행될 수 있다.

다른 운영 체제에서의 유사성

Windows Vista 이후 Windows는 파일 형식이 게시된 WIM 디스크 이미지 파일에서 부팅할 수 있으며 하드 링크를 지원하고 청크 바이 콕 압축을 사용하며 중복 제거된 청크를 지원할 수 있다는 점을 제외하면 ZIP 형식과 다소 유사하다.[14][15]이 경우 전체 WIM은 처음에 RAM에 로드되고 커널 초기화가 뒤따른다.다음으로 로드된 WIM은 드라이브 문자가 할당된 SystemRoot로 사용할 수 있다.윈도우즈 Installer는 이것을 사용하기 때문에 BOOT에서 부팅된다.WIM을 사용한 다음 Install을 사용하십시오.설치할 Windows 파일의 모음으로 WIM을 사용하십시오.

또한 Windows PE(Windows Pre Installation Environment)는 동일한 버전을 사용하며, 일부 바이러스 백신 및 백업/재해 복구 소프트웨어의 별도의 부팅 버전을 위한 기반이 된다.

또한 물리적 드라이브에 저장된 WIM 또는 VHD 파일에서 항상 부팅되도록 Windows를 설치할 수도 있다.그러나 윈도우즈 부트 로더는 리눅스 에서 initrd가 필요한 태스크인 부트 시간 커널 모듈 자체에 .sys 파일을 로드할 수 있기 때문에 거의 사용되지 않는다.

참고 항목

참조

  1. ^ Almesberger, Werner (2000), "Booting linux: the history and the future", Proceedings of the Ottawa Linux Symposium, archived from the original on 24 July 2008
  2. ^ a b Landley, Rob (15 March 2005), Introducing initramfs, a new model for initial RAM disks
  3. ^ a b Almesberger, Werner; Lermen, Hans (2000). "Using the initial RAM disk (initrd)". Archived from the original on 2 April 2015. Retrieved 14 March 2015.
  4. ^ "linux/do_mounts_initrd.c at 4f671fe2f9523a1ea206f63fe60a7c7b3a56d5c7 · torvalds/linux · GitHub". GitHub.
  5. ^ a b Landley, Rob (17 October 2005). "ramfs, rootfs, and initramfs docs, take 2". Linux kernel source tree.
  6. ^ Petersen, Richard Leland (2010). Fedora 13: Administration, Networking, Security. Alameda, California: Surfing Turtle Press. p. 76. ISBN 978-1-936280-02-5. Dracut uses kernel parameters listed on the GRUB kernel command line to configure the initramfs RAM file system on the fly, providing more flexibiltity and furthercutting down on RAM file system code.
  7. ^ "Ubuntu Manpage: casper - a hook for initramfs-tools to boot live systems". manpages.ubuntu.com.
  8. ^ 숀 파워스."캐스퍼, 친근한 (그리고 끈질긴) 유령"Linux Journal.
  9. ^ Kyungsik Lee (30 May 2013). "LZ4 Compression and Improving Boot Time" (PDF). events.linuxfoundation.org. p. 18. Retrieved 29 May 2015.
  10. ^ Fish, Richard (6 July 2005). "pivot_root from initramfs causes circular reference in mount tree". Linux Kernel Bug Tracker. Retrieved 28 February 2009.
  11. ^ Garzik, Jeff (2 November 2002). "initramfs merge, part 1 of N". Linux kernel mailing list.
  12. ^ "Tiny Core Linux - Concepts". ibiblio.org.
  13. ^ Barry Kauler. "Puppy Linux Release Announcement". ibiblio.org.
  14. ^ "Windows Imaging File Format (WIM)". microsoft.com. Microsoft.
  15. ^ "Download Windows Imaging File Format (WIM) from Official Microsoft Download Center". Microsoft.com. Microsoft.

외부 링크