如何让 grub Ubuntu 12.04 从辅助启动分区启动并使用新的单独根目录

如何让 grub Ubuntu 12.04 从辅助启动分区启动并使用新的单独根目录

在远程 Ubuntu 服务器上,我执行了一系列升级/更改以从桌面安装Ubuntu 10.10 特立独行到服务器安装12.04 LTS 精确

一切都很顺利,除了我遇到的一些问题之外,到目前为止,一直没有物理访问。下一个目标是创建一个使用 LVM 作为后端存储的 XEN 服务器。系统上没有 LVM,我在达到 12.04 LTS 后添加了 LVM。我知道如何远程创建它的 XEN 机器,以前做过。但我在尝试启动新配置时遇到问题。

原来安装这个盒子的人没有注意分区;该机器被用作服务器,但安装为桌面(我修复了这个),但给我留下了这种分区方案:

Disk /dev/sda: 500.0 GB, 499999834112 bytes
... 
Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *           1       58558   470361088   83  Linux
/dev/sda2           58558       60789    17916929    5  Extended
/dev/sda5           58558       60789    17916928   82  Linux swap / Solaris

所以我把巨大的 17G 交换分区重新组织成一个新的启动分区(现在是 /dev/sda2)、一个小的交换分区(/dev/sda3)和一个新的根分区(lvs)。我将磁盘使用量降低到大约 3GB,这已经足够小了,我将其复制到我在 LVM 下创建的新根目录。

目前我们有

Device Boot      Start         End      Blocks   Id  System
/dev/sda1            2048   940724223   470361088   83  Linux
/dev/sda2   *   940724224   941748223      512000   83  Linux
/dev/sda3       941748224   943845375     1048576   82  Linux swap / Solaris
/dev/sda4       943845376   976562175    16358400   8e  Linux LVM

/dev/sda1 是旧引导分区我希望机器从 /dev/sda2 启动。现在的区别是我现在想要一个单独的 /boot 和 / 分区。根分区在 LVM 下称为:

# lvscan
ACTIVE            '/dev/server20/root' [10.00 GiB] inherit

最终目标是我想将 /dev/sda1 置于 LVM 控制之下,但我必须以不使用它的方式引导系统。从那时起,LVM 就可以工作了。

除了上面的整个文件系统更改之外,我还做了:

创建的逻辑卷:

pvcreate /dev/sda4 
vgcreate server20 /dev/sda4
lvcreate -L 10G -n root server20
mkfs.ext4 /dev/server20/root

安装它:

mount /dev/server20/root /mnt/root/
mount /dev/sda2 /mnt/root/boot/
(cd / ; find . -xdev -print0 | rsync -xavz . /mnt/root/)
for i in /dev /run /dev/pts /proc /sys; do sudo mount -B $i /mnt/root$i; done

更新 grub:

chroot /mnt/root
echo "dm-mod" >> /etc/initramfs-tools/modules
echo "dm-mod" >> /etc/modules
grub-mkconfig (verified config file visually)
update-grub (no errors/warnings)

检查了创建的 /boot/grub/grub.cfg 我发现大多数看起来都是正确的,特别是像这样的东西:

insmod lvm
...
set root='(server20-root)'
search --no-floppy --fs-uuid --set=root 0bb92c24-8c02-4fa3-8f75-970076261b2f
...

menuentry 'Ubuntu, with Linux 3.2.0-38-generic' --class ubuntu --class gnu-linux --class gnu --class os {
    recordfail
    gfxmode $linux_gfx_mode
    insmod gzio
    insmod part_msdos
    insmod ext2
    set root='(hd0,msdos2)'
    search --no-floppy --fs-uuid --set=root 891b3eaa-fb43-4a42-9789-a91c2a5ffb13
    linux   /vmlinuz-3.2.0-38-generic root=/dev/mapper/server20-root ro quiet
    initrd  /initrd.img-3.2.0-38-generic
}
...

然后,检查 blkid 的:

/dev/sda2: UUID="891b3eaa-fb43-4a42-9789-a91c2a5ffb13" SEC_TYPE="ext2" TYPE="ext3"
/dev/sda4: UUID="IyDrfU-TOYT-rFXO-JknG-rwEK-Sm2A-mfKcIe" TYPE="LVM2_member"
/dev/mapper/server20-root: UUID="0bb92c24-8c02-4fa3-8f75-970076261b2f" TYPE="ext4"
/dev/sda1: UUID="888c061a-1d51-4516-aced-4bb21042d2f4" TYPE="ext4"
/dev/sda3: UUID="19efc041-eccd-42c9-94aa-5b6c88ffd5bb" TYPE="swap"

所以,我从中了解到:我的启动分区将是 msdos2 ,即 /dev/sda2 。在搜索行中也引用了 uuid,即使它说的是 root,我将它与其他安装进行了比较,这意味着在 root/boot 分离的情况下作为启动 uuid(正确的假设?)。

我确实认为这可以使用附加磁盘布局重新启动,但事实并非如此。我使用 fdisk 将 /dev/sda1 和 /dev/sda2 可启动标志设置为活动状态。它以与以前相同的方式启动,幸运的是没有出现任何问题。

我更深层次的问题可能是由于对 chroot + update-grub 的误解而引发的。我实际上不确定我需要在 root/boot /dev/sda1 上做什么。我是否必须将 grub.cfg 从 chroot 版本复制到 /boot 子目录?

重新启动后我采取的步骤

switched off bootable flag on /dev/sda1
remounted everything again and performed all steps again plus an additional
grub-install /dev/sda  (from the chroot)

这足以忽略 /dev/sda1 吗?我阅读了有关 grub 的所有内容,但我无法获得有关在同一磁盘上有 2 个引导分区的情况下引导过程如何进行的答案。 (还有很多其他情况)。有人可以想象一下使用 chroot 与使用类似东西的 grub 流程吗grub-install --boot-directory=/mnt/boot。这内部是怎么处理的?

请随意为这个问题建议更好的标题,我在这方面很糟糕。

另外,这是 MBR

dd if=/dev/sda of=mbr.bin bs=512 count=1
root@server20:/# file mbr.bin 
mbr.bin: x86 boot sector; 
partition 1: ID=0x83, starthead 32, startsector 2048, 940722176 sectors; 
partition 2: ID=0x83, active, starthead 95, startsector 940724224, 1024000 sectors; 
partition 3: ID=0x82, starthead 29, startsector 941748224, 2097152 sectors; 
partition 4: ID=0x8e, starthead 167, startsector 943845376, 32716800 sectors, code offset 0x63

答案1

我又尝试了一次重新启动,看来我所做的最后 3 个步骤解决了问题:

using fdisk to switch off bootable flag for /dev/sda1
partprobe so the kernel knows about changes
remounted everything again on top of root at /mnt/root and performed:
grub-install /dev/sda  (from the chroot)
update-grub

MBR 转储让我相信这次它起作用了。我已经使用 lvm root 启动了。看来引导分区挂载失败,但系统确实通过了。我必须使用较小的 /dev/sda1 再次更改它并执行相同的过程。

相关内容