initrd를 사용하지 않고 LVM에 루트를 넣을 수 있습니까?

initrd를 사용하지 않고 LVM에 루트를 넣을 수 있습니까?

방금 젠투 기본 시스템을 설정했습니다(즉, 이제 부팅하고 로그인하여 몇 가지 작업을 수행할 수 있습니다). 내 루트 파티션은 LVM2 가상 그룹(별도의 /boot파티션 포함)에 있습니다. 부팅하려면 다음 매개변수를 커널에 전달해야 합니다.

root=/dev/ram0 real_root=/dev/vg/rootlv init=/linuxrc dolvm

분명히 초기 램디스크를 사용하여 루트를 마운트하기 전에 작업을 수행합니다(내 추측으로는 LVM 항목 로드). initrd가 필요하지 않도록 이 코드를 커널 자체에 넣는 방법이 있습니까? 그렇지 않다면 어떻게 직접 initrd를 만들 수 있습니까?

유용할 수 있는 추가 참고 사항: initrd 없이 LVM이 아닌 루트에 대한 커널 컴파일을 시도했는데 제대로 작동했습니다. 그런 다음 모든 것을 LVM 아래에 넣으려고 했지만 컴퓨터를 부팅할 수 없었습니다(LVM 작업을 처리할 수 없었던 것 같습니다). 그런 다음 genkernel해당 옵션과 함께 도구를 사용하여 --lvm현재 사용 중인 작동 커널과 initrd를 만들었습니다.

genkernel이제 나는 기계가 더 빨리 부팅되도록 initrd 없이 모든 것을 직접 건너뛰고 싶습니다 (어쨌든 유연성은 필요하지 않습니다).

답변1

간단한 대답: 아니요. LVM을 원하면 initrd가 필요합니다.

그러나 이전에 다른 사람들이 말했듯이 LVM은 시스템 속도를 늦추거나 나쁜 일을 하지 않으며 단지 커널이 로드되고 해당 작업을 수행할 수 있는 환경을 만들 수 있도록 해줄 뿐입니다.

initrd를 사용하면 커널을 로드할 수 있습니다. 커널이 LVM 드라이브에 있는 경우 커널이 포함된 바이너리를 로드하기 전에 전체 LVM 환경을 설정해야 합니다.

확인하다initrd에 대한 Wikipedia 항목initrd가 수행하는 작업과 이것이 필요한 이유를 설명합니다.

또 다른 참고 사항: 스스로 일을 하려는 당신의 의도를 이해합니다. 하지만 genkernel을 사용하더라도 손이 더러워질 수 있습니다. genkernel --menuconfig all을 사용하면 기본적으로 도구 지원 없이 커널을 빌드하는 것처럼 모든 것을 설정할 수 있습니다. genkernel은 make bzImage, makemodules 및 makemodules_install 행을 추가하고 불쾌한 initrd 작업을 수행합니다.

분명히 설명된 대로 initrd를 직접 만들 수 있습니다.여기 initramfs가 있습니다또는여기 initrd가 있습니다.

답변2

편집: 방금 LVM에서 부팅하려고 한다는 것을 깨달았습니다. 저는 LVM을 설정한 적도 없고 필요하지도 않았으므로 여기에서의 접근 방식이 작동하지 않을 수 있습니다.

initrd가 없는 커널을 생성하기 위해 수행해야 할 기본 규칙은 다음과 같습니다(메모리에서 명확하게 기억할 수는 없습니다).

  1. 커널을 다시 컴파일하고 커널에 내장되었는지 확인하세요(중요: 모듈이 아님!):

    1. 마더보드 드라이버 및 하드 디스크 드라이버(아래 둘 다 Device Drivers)
    2. /, /etc/*및용 파일 시스템 드라이버 /lib/modules/*(아래File systems

    기본적으로 커널은 루트 파일 시스템을 마운트하고, /etc/fstab을 읽고, 추가 드라이버 모듈(필요한 경우)을 로드하고, 루트가 아닌 다른 파일 시스템을 마운트하여 나머지 부팅 프로세스를 완료할 수 있어야 합니다. 네트워크 부팅과 같이 보다 복잡한 부팅 프로세스가 있는 경우 이러한 드라이버가 내장되어 있어야 합니다.

  2. 커널 "일반 설정 > 초기 RAM 파일 시스템 및 RAM 디스크(initramfs/initrd) 지원"(CONFIG_BLK_DEV_INITRD=n이라고도 함)에서 initrd를 비활성화합니다.

  3. init= 및 realroot=가 더 이상 필요하지 않도록 GRUB 구성을 수정하고 루트 파일 시스템 장치를 가리키도록 root=를 설정합니다.

내 생각엔 그게 다인 것 같아. 문제가 발생할 경우를 대비해 백업 커널과 부팅 가능한 Live CD의 전체 복사본을 보관하는 것을 잊지 마십시오.

잘못될 수 있는 사항: 잘못된 드라이버를 컴파일하거나 기본 드라이버를 모듈로 컴파일하면 커널이 파일 시스템을 읽을 수 없습니다. 새 커널을 사용하거나 Live CD를 사용하여 재부팅하고 올바른 드라이버로 커널을 다시 컴파일하십시오.

유일하게 어려운 부분은 어떤 드라이버가 귀하의 하드웨어와 관련이 있는지 결정하는 것입니다. lspci및를 사용하면 lshw하드웨어를 식별하는 데 도움이 됩니다. 아직 이러한 도구가 없다면 emerge lshw pciutils.

답변3

예, initrd가 필요합니다. 이유는 다음과 같습니다.

일반적인 부팅 프로세스는 커널을 찾아 실행할 만큼 시스템에 대해 충분히 알고 있는 부트로더로 시작됩니다. (GRUB2는 LVM2 또는 RAID 파티션에 있는 커널을 찾을 만큼 똑똑하지만 GRUB1은 그렇지 않기 때문에 일반적으로 단순화된 레이아웃을 사용하여 /boot를 별도의 파티션으로 생성하는 것이 좋습니다.) 로드 후 커널을 부팅 프로세스를 시작할 수 있도록 루트 파일 시스템을 찾을 수 있습니다. 그러나 루트 파일 시스템에 존재하고 루트 파일 시스템에 존재하는 LVM 도구 없이 로드할 수 없는 특정 사용자 공간 도구에 의해 트리거되지 않으면 LVM을 시작할 수 없습니다... ;)

이 주기를 깨기 위해 initrd 또는 initramfs는 원하는 LVM 또는 MD와 같은 서비스를 시작하기에 충분한 Linux 시스템을 포함하는 커널(/boot 또는 커널 자체 내부)에 저장된 압축 파일 시스템입니다. 이는 임시 파일 시스템이며 실제 루트가 로드될 수 있을 만큼만 루트 파일 시스템 역할을 합니다.

실제 생산에 관한 한, 해당 주제에 대한 대부분의 문서는 놀랍게도 오래되었습니다. 예를 들어, lvm2create_initrd는 더 이상 Gentoo에서도 작동하지 않습니다. (나는 몇 달 전에 같은 것을 설정했고 작동하는 initrd를 얻기 전에 해당 스크립트를 다시 작성해야 했습니다.) 자신만의 initramfs를 만드는 것이 재미있을 수 있으며 이는 절대적으로 최소한의 부팅 프로세스를 얻는 유일한 방법입니다. (그리고 그 과정에서 Linux가 어떻게 부팅되는지 자세히 알아보세요.) 하지만 작업량이 많습니다.

짧은 대답: Dracut을 사용하세요. 이는 대부분 자동화된 방식으로 initramfs를 생성하기 위해 생성된 새로운 프레임워크이며 포티지에 있습니다. 문서는 약간 부족하지만 이해하기에 충분하며 신뢰할 수 있는 initramfs 및 LVM 루트를 얻는 가장 쉬운 방법입니다.

답변4

예.

grub2를 설치하고 사용하면 initrd를 생성하고 처리하는 복잡성이 의미가 없게 됩니다. grub2 위키피디아http://grub.enbug.org/LVMandRAID/boot를 lvm에 두는 방법을 설명합니다. grub.cfg(grub 구성 파일)에 insmod lvm만 필요하므로 initrd가 필요하지 않습니다.

grub2는 현재 버전 1.98이지만 여전히 젠투의 실험적 브랜치에 있습니다. 그러나 다른 슬롯에 설치하여 완전히 사용할 수 있습니다.

즐기다!

관련 정보