web-dev-qa-ko.com

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

방금 Gentoo 기본 ​​시스템을 설정했습니다 (이는 부팅하고 로그인 할 수 있고 로그인 할 수 있고 이제 재료를 할 수 있음을 의미합니다). 내 루트 파티션은 LVM2 가상 그룹 (분리 된 /boot 파티션이있는)입니다. 부팅하려면 아래 매개 변수를 커널에 전달해야합니다.

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

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

INITRD가없는 LVM 루트에 대한 커널을 컴파일하려고 시도했고 완벽하게 작동하는 것을 추가하는 것이 유용 할 수 있습니다. 그런 다음 나는 LVM에 모든 것을 넣고 부팅 할 기계를 얻을 수 없었습니다 (나는 그것이 LVM 물건을 다룰 수 없다고 생각합니다). 그런 다음 --lvm 옵션을 사용하여 genkernel 도구를 사용했으며 현재 사용중인 작업 커널과 initrd를 만듭니다.

이제는 genkernel을 건너 뛰고, 내 자신의 모든 것을 내 자신의 모든 것을 해보고, 바람직하게는 initrd없이 기계가 다소 빨리 부팅되도록 (어쨌든 유연성이 필요하지 않습니다).

12
phunehehe

간단한 답 : 아니요. 당신이 lvm을 원한다면 initrd가 필요합니다.

그러나 다른 사람들이 전에 말했듯이 : LVMS는 시스템을 늦추거나 다른 방법으로 나쁜 일을하지 않으며 커널이로드하고 작업 할 수있는 환경을 만들 수 있습니다.

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

Initrd가 수행하는 것을 설명하는 Wikipedia 항목 (Wikipedia 항목) == 이유와 필요한 이유를 설명합니다.

또 다른 참고 사항 : 나는 당신 자신을 원하는 것을 원한다면 당신의 포인트를 봅니다. 그러나 당신은 당신의 손을 genkernel에서 더러워 질 수 있습니다. Genkernel --MenuConfig 모두 도구 지원없이 커널을 완전히 빌드하는 것처럼 모든 것을 설정할 수 있습니다. Genkernel은 Make BzImage를 추가하고 모듈을 만들고 Modules_install 라인을 만들고 그 불쾌한 initrd 물건을 만들 수 있습니다.

분명히 initrd 자신을 설명하는 것처럼 initrd를 빌드 할 수 있습니다 여기서 initramfs 또는 - 여기서 initrd .

6
tante

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

정상적인 부트 프로세스는 커널을 찾아 실행하는 시스템에 대해 충분히 알고있는 부트 로더로 시작됩니다. (GRUB2는 LVM2 또는 RAID 파티션에있는 커널을 찾을 수 있지만 GRUB1이 아니므로 똑똑하지 않으므로 일반적으로 단순화 된 레이아웃이있는 별도의 파티션으로 만들거나 부팅하는 것이 좋습니다. 루트 파일 시스템을 찾을 수 있으므로 부팅 프로세스를 시작할 수 있습니다. 그러나 LVM은 루트 파일 시스템에 존재하는 LVM 도구없이로드 할 수없는 루트 파일 시스템에 존재할 수없는 일부 UsersPace 도구에 의해 트리거되지 않고 시작할 수 없습니다.

이 사이클을 끊으려면 initrd 또는 initramfs는 LVM 또는 MD와 같은 서비스를 시작하는 Linux 시스템이 충분히 시작할 수있는 커널 (in/boot 또는 커널 자체 내부)과 함께 저장된 압축 파일 시스템입니다. 너는 원한다. 임시 파일 시스템이며 실제 루트가로드 될 수있을만큼 충분히 오래 루트 파일 시스템으로 만 작동합니다.

실제로 하나씩 만드는 한, 주제에 대한 대부분의 문서는 비틀 거리는 것입니다 - lvm2create_initrd는 더 이상 Gentoo에서도 작동하지 않습니다. (나는 몇 달 전에 똑같은 일을 설정하고, 나는 그것의 initrd를 가지고 있기 전에 스크립트를 다시 작성해야했다.) 자신의 initramfs를 만드는 것은 재미있을 수 있으며, 절대적으로 최소한의 부츠를 얻을 수있는 유일한 방법입니다 프로세스 (및 프로세스에서 리눅스가 부팅되는지)에 대해서는 INS와 아웃을 배우십시오). 그러나 그것은 많은 일입니다.

짧은 대답 : Dracut을 사용하십시오. 대부분의 자동화 된 방식으로 initramfs를 생성하기 위해 만들어지는 새로운 프레임 워크이며 Portage에 있습니다. 문서는 조금 희박하지만, 사물을 알아내는 것이 충분합니다. 그리고 단단한 initramfs와 LVM 루트를 얻는 가장 쉬운 방법입니다.

2
p-static

일종의 initrd를 사용할 수는 없지만 별도의 initrd 파일을 사용하지 않을 수 있습니다. (나는 Genkernel을 사용한 적이 없기 때문에 그것을 위해 지침을 줄 수 없었습니다).

예를 들어, 옵션을 설정했습니다.

CONFIG_INITRAMFS_SOURCE="/usr/src/initrd.contents"

내 경우에 /usr/src/initrd.contents는 (나는 LVM + tuxonice + fbsplash가 있습니다) :

dir /bin                                    0755 0 0
file    /bin/busybox                        /bin/busybox                        0755 0 0
file    /bin/lvm                        /sbin/lvm.static                    0755 0 0
dir /dev                                    0755 0 0
dir /dev/fb                                 0755 0 0
dir /dev/misc                               0755 0 0
dir /dev/vc                                 0755 0 0
nod /dev/console                                0600 0 0    c  5   1
nod /dev/null                               0600 0 0    c  1   3
nod /dev/snapshot                               0600 0 0    c 10 231
nod /dev/tty1                               0600 0 0    c  4   0
dir /etc                                    0755 0 0
dir /etc/splash                             0755 0 0
dir /etc/splash/natural_gentoo                      0755 0 0
dir /etc/splash/natural_gentoo/images                   0755 0 0
file    /etc/splash/natural_gentoo/images/silent-1680x1050.jpg  /etc/splash/natural_gentoo/images/silent-1680x1050.jpg  0644 0 0
file    /etc/splash/natural_gentoo/images/verbose-1680x1050.jpg /etc/splash/natural_gentoo/images/verbose-1680x1050.jpg 0644 0 0
file    /etc/splash/natural_gentoo/1680x1050.cfg        /etc/splash/natural_gentoo/1680x1050.cfg        0644 0 0
slink   /etc/splash/tuxonice                    /etc/splash/natural_gentoo              0755 0 0
file    /etc/splash/luxisri.ttf                 /etc/splash/luxisri.ttf                 0644 0 0
dir /lib64                                  0755 0 0
dir /lib64/splash                               0755 0 0
dir /lib64/splash/proc                          0755 0 0
dir /lib64/splash/sys                           0755 0 0
dir /proc                                   0755 0 0
dir /mnt                                    0755 0 0
dir /root                                   0770 0 0
dir /sbin                                   0755 0 0
file    /sbin/fbcondecor_helper                 /sbin/fbcondecor_helper                 0755 0 0
slink   /sbin/splash_helper                 /sbin/fbcondecor_helper                 0755 0 0
file    /sbin/tuxoniceui_fbsplash               /sbin/tuxoniceui_fbsplash               0755 0 0
file    /sbin/tuxoniceui_text                   /sbin/tuxoniceui_text                   0755 0 0
dir /sys                                    0755 0 0
file    /init                           /usr/src/init

/usr/src/init는 다음과 같습니다.

#!/bin/busybox ash
local X ROOT RUNLEVEL INIT PARAM
# Preliminary stuff
mount -t proc proc /proc
mount -t sysfs sysfs /sys
mdev -s
/bin/lvm vgchange -ay picard-main

# Try to resume. This never returns if it succeeds
test -e /sys/power/tuxonice/do_resume && echo 1 > /sys/power/tuxonice/do_resume
#/bin/resume

# Parse the command line for relevant options.
INIT=/sbin/init
RESCUE=""
PARAM=" "
for X in `cat /proc/cmdline`
do
        case "$X" in
                root=*) ROOT=${X#root=} ;;
                [0-6Ss]) RUNLEVEL=${X} ;;
                init=*) INIT=${X#init=} ;;
                rescue) RESCUE="rescue" ;;
        splash=*) PARAM="${PARAM} ${X}" ;;
        consol=*) PARAM="${PARAM} ${X}" ;;
        esac
done

if [ x${RESCUE} = xrescue ]
then
        busybox ash
fi

# Mount and switch root.
mount -o ro ${ROOT} /mnt
umount -f /sys || umount -l /sys
umount -f /proc || umount -l /proc

exec switch_root /mnt ${INIT} ${RUNLEVEL} ${PARAM}
2
Maciej Piechotka

네, 그렇습니다.

GRUB2를 설치하고 사용하는 경우 INITRD를 생성 및 처리하는 것에서 발생하는 합병증은 렌더링됩니다. grub2 wiki http://grub.enbug.org/lvmandraid 는 grub.cfg에서 insmod lvm, grub 구성 파일, 따라서 no를 사용하여 lvm에서/부팅하는 방법을 설명합니다. initrd가 필요합니다.

gRUB2는 이제 버전 1.98에서 젠투의 실험 지점에 여전히 있습니다. 그러나 다른 슬롯에 설치할 수 있으며 완벽하게 사용할 수 있습니다.

즐기다!

1
chiguire