부팅이 USB 드라이브에 있는 루프백 파일 호스팅 LVM 파티션에서 시스템을 부팅하고 싶습니다.
LVM이 아닌 설정과 ext4 루프백 파일을 사용하면 제대로 부팅되지만(온라인에 일부 가이드가 있음) 더 필요합니다... LVM이 필요합니다!
내 파티션 레이아웃은 다음과 같습니다
- USB 드라이브(MBR): Grub 2
- USB 드라이브(hd0, msdos1): ext4 512Mb /boot
- 노트북 내부 디스크: 호스트.linux-loops/system0.lvm운영 체제를 설치하고 파일에 매핑했습니다./dev/mapper/vg_system-lv_root.
내 Grub 2 메뉴 항목은 다음과 같습니다.
set BOOT_PART=(hd0,msdos1)
set HOST_PART=(hd1,gpt5)
set LOOP_FILE=.linux-loops/system0.lvm
set LOOP_DEV=loop0
set LVM_VG=vg_system
set LVM_LV=lv_root
set ROOT_DEV=/dev/mapper/${LVM_VG}-${LVM_LV}
menuentry 'Loopback / 4.10.0-38-generic' --class ubuntu --class gnu-linux --class gnu --class os {
echo "Initializing environment..."
set KERN_VER=4.10.0-38-generic
recordfail load_video gfxmode $linux_gfx_mode
echo "Loading partition drivers..."
insmod ext2
insmod gzio
insmod part_msdos
insmod part_gpt
echo Loopback(s) setup...
loopback ${LOOP_DEV} ${HOST_PART}/${LOOP_FILE}
insmod lvm
echo Debug LVM...
ls
ls (lvm/${LVM_VG}/${LVM_LV)/
echo "Loading kernel..."
set root=${BOOT_PART}
linux /vmlinuz-${KERN_VER} root=${ROOT_DEV} rw verbose nosplash debug
initrd /initrd.img-${KERN_VER}
}
그 둘은엘에스디버깅 명령은 grub이 LVM 파티션을 확인했음을 보여 주지만초기화 프로그램실행 시 시스템은 그룹을 표시합니다.볼륨 그룹 시스템발견되지 않았고LV 메타데이터아직 실행되지 않습니다.
grub 스크립트 내의 루프백 설정이 init 스크립트에 전파될 수 없어 LVM 매퍼를 다시 초기화할 수 없는 것 같습니다.
LVM이 아닌 시나리오에서(위에서 언급한 대로)vmlinuz...루프=...문제를 해결했습니다.
질문은: grub이 LVM 매퍼에 루프백 파일을 제공할 수 있도록 루프백 파일을 어떻게 설정합니까?
매우 감사합니다!
답변1
당신 말이 맞습니다. GRUB은 커널을 대신하여 설정할 수 없습니다.
GRUB는 디스크 액세스를 위해 시스템 펌웨어(BIOS 또는 UEFI)를 사용하므로 수행하는 모든 작업은 이러한 펌웨어 루틴을 기반으로 합니다. 커널이 인계되면 이러한 펌웨어 루틴은 더 이상 사용되지 않으며, OS가 동일한 작업에 대해 자체 드라이버를 제공할 때까지는 그 위에 구축된 모든 것을 사용할 수 없게 됩니다.
(BIOS에 관한 한 커널이 프로세서를 전체 32/64비트 모드로 변환하면 16비트 BIOS 디스크 액세스 루틴을 사용할 수 없게 됩니다. UEFI에 관한 한 디스크 액세스 서비스는 다음 중 하나라고 생각합니다. UEFI 기능은 표준 "부팅 서비스 종료" UEFI 호출을 실행하여 하드웨어 제어권을 UEFI 측 운영 체제로 넘기는 프로세스를 완료할 때 사용할 수 없게 됩니다.
대신 매우 초기 단계에서 initrd에서 실행될 스크립트를 설정해야 합니다. LVM이 시작되기 전이나 LVM이 시작되었거나 이미 초기화된 경우 루프백 장치를 설정한 후에 필요한 루프백 장치를 활성화해야 vgscan --mknodes
합니다 vgchange -ay <name of the VG containing the root filesystem>
.
사용 중인 Linux 배포판의 이름과 버전을 모르면 보다 구체적인 조언을 드리기 어렵습니다.
답변2
내 솔루션을 GitHub에 게시했습니다.
이 가이드에서는 PC의 내부 디스크 부팅 섹터를 변경하지 않고 LVM 루프백 디스크에 Linux를 설치하고 USB 드라이브(grub 및 부팅 파티션)에서 부팅하는 방법을 자세히 설명합니다.
관련된 부분은 이렇습니다https://github.com/antonio-petricca/buddy-linux/blob/master/assets/initramfs/lvm-loops-setup스크립트:
#!/bin/sh -e
# Antonio Petricca <[email protected]> - 17/03/2018
PREREQS=""
# Output pre-requisites
prereqs() {
echo "$PREREQ" }
case "$1" in
prereqs)
prereqs
exit 0
;; esac
. /scripts/functions
MNT=/host ROOT_MNT=${rootmnt}${MNT}
_log_msg "Moving LVM loops host device mount point from \"${MNT}\" to {ROOT_MNT}\"...\n"
mount -o remount,rw ${rootmnt} || panic "Cannot remount \"${rootmnt}\" R/W."
[ -d ${ROOT_MNT} ] || mkdir -p ${ROOT_MNT} || panic "Cannot create \"${ROOT_MNT}\" mount point."
mount -n -o move ${MNT} ${ROOT_MNT} || panic "Cannot move \"${MNT}\" to \"${ROOT_MNT}\"."
log_end_msg "Done"