가상 머신용 LVM LV 컨테이너에 grub을 설치하는 데 문제가 있습니다. 다음은 파티션 테이블입니다.
# parted /dev/mgtvg/linux2os print
Model: Linux device-mapper (linear) (dm)
Disk /dev/dm-7: 129GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Number Start End Size Type File system Flags
1 1049kB 6469MB 6468MB primary ext3 boot
2 6469MB 11.8GB 5369MB primary xfs
3 11.8GB 17.2GB 5369MB primary xfs
4 17.2GB 129GB 112GB extended lba
5 17.2GB 22.6GB 5369MB logical xfs
파티션 1에는 루트 파일 시스템(/boot 없음)이 포함되어 있습니다. grub을 설치해보세요:
# grub --device-map=/dev/null
GNU GRUB version 0.97 (640K lower / 3072K upper memory)
[ Minimal BASH-like line editing is supported. For the first word, TAB
lists possible command completions. Anywhere else TAB lists the possible
completions of a device/filename.]
grub> device (hd0) /dev/mgtvg/linux2os
device (hd0) /dev/mgtvg/linux2os
grub> root (hd0,0)
root (hd0,0)
Filesystem type is ext2fs, partition type 0x83
grub> setup
setup
Error 1: Unrecognized device string
grub>
grub.conf
다음은 VM이 포함된 LV의 파일 입니다 .
default=0
timeout=5
splashimage=(hd0,0)/grub/splash.xpm.gz
hiddenmenu
serial --unit=1 --speeed=19200
terminal --timeout=8 console serial
title CentOS (2.6.32-279.22.1.el6.x86_64)
root (hd0,0)
kernel /vmlinuz-2.6.32-279.22.1.el6.x86_64 ro root=/dev/sda1
initrd /initramfs-2.6.32-279.22.1.el6.x86_64.img
title CentOS (2.6.32-279.el6.x86_64)
root (hd0,0)
kernel /vmlinuz-2.6.32-279.el6.x86_64 ro root=/dev/sda1
initrd /initramfs-2.6.32-279.el6.x86_64.img
또 무엇이 필요합니까?
답변1
LV가 상주하는 물리적 파티션이 아닌 이름으로 LV를 참조하려고 합니다.
사물의 구조는 다음과 같습니다. 나는 세 가지를 가지고 있습니다 :
- 물리적 볼륨(PV)
- 볼륨 그룹(VG)
- 논리 볼륨(LV)
내 노트북에는 다음이 있습니다.
$ pvs
PV VG Fmt Attr PSize PFree
/dev/sda6 vg_grinchy lvm2 a- 304.22g 0
노트:PV=/dev/sda6,VG=vg_grinchy
$ lvs
LV VG Attr LSize Origin Snap% Move Log Copy% Convert
lv_home vg_grinchy -wi-ao 248.53g
lv_root vg_grinchy -wi-ao 50.00g
lv_swap vg_grinchy -wi-ao 5.69g
노트:따라서 내 VG(vg_grinchy)에는 3개의 LV(lv_home, lv_root 및 lv_swap)가 포함되어 있습니다.
다음 명령으로 이를 확인할 수 있습니다 vgs
.
$ vgs
VG #PV #LV #SN Attr VSize VFree
vg_grinchy 1 3 0 wz--n- 304.22g 0
노트:#LV = 3, #PV = 1이라고 나와 있습니다.
이제 다음 명령을 사용하면 LV의 전체 이름을 볼 수 있습니다 lvdisplay
.
$ lvdisplay |grep "LV Name"
LV Name /dev/vg_grinchy/lv_root
LV Name /dev/vg_grinchy/lv_home
LV Name /dev/vg_grinchy/lv_swap
파일에 설치할 LV를 지정하려면 이 이름을 사용해야 합니다 grub.cfg
.
예
아래는 내 파일의 일부입니다 grub.cfg
.
title Fedora (2.6.35.14-106.fc14.x86_64)
root (hd0,4)
kernel /vmlinuz-2.6.35.14-106.fc14.x86_64 ro root=/dev/mapper/vg_grinchy-lv_root rd_LVM_LV=vg_grinchy/lv_root rd_LVM_LV=vg_grinchy/lv_swap rd_NO_LUKS rd_NO_MD rd_NO_DM LANG=en_US.UTF-8 SYSFONT=l
atarcyrheb-sun16 KEYTABLE=us rhgb quiet
initrd /initramfs-2.6.35.14-106.fc14.x86_64.img
물론 내 커널이 다음을 전달하는 것을 볼 수 있습니다.
root=/dev/mapper/vg_grinchy-lv_root
답변2
이러한 파티션에 대한 장치 파일이 누락되었을 수 있습니다. 다시 말해서:
kpartx -a -v /dev/mgtvg/linux2os
이렇게 하면 비슷한 내용이 생성됩니다.
/dev/mapper/mgtvg-linux2os1
/dev/mapper/mgtvg-linux2os2
...
그 후에는 할 수 있을 것 같습니다.
grub-install /dev/mapper/mgtvg-linux2os
그러면 (hd0,0) 또는 (hd0,msdos1)이 /dev/mapper/mgtvg-linux2os1로 확인되고 실제로 작동할 수 있습니다.
이 모든 작업은 chroot에서도 수행됩니다. chroot /dev에는 상위 시스템과 /proc의 VM 관련 장치 노드가 있어야 합니다. 이렇게 하면 부모님의 음식을 망치지 않을 것입니다.