web-dev-qa-db-ja.com

VM)のLVコンテナにgrubをインストールします

VMのLVMLVコンテナに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

他に何が必要ですか?

4
vamfoom

これらのパーティションのデバイスファイルが欠落している可能性があります。言い換えると:

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には、親マシンのVM関連デバイスノードと/ procが必要です。そうすれば、親のグラブを台無しにしないようにすることができます。

1
Josip Rodin

LVは、それが存在する物理パーティションではなく、その名前で参照する必要があります。

物事は次のように構成されています。私には3つのことがあります:

  • 物理ボリューム(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であることがわかります。

コマンドlvdisplayを使用すると、LVのフルネームを確認できます。

$ 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

これらは、grub.cfgファイルにマウントするLVを指定するために使用する必要がある名前です。

以下は、私のgrub.cfgファイルからの私のスタンザの1つです。

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
1
slm