XenServer 6.0升级pygrub错误

XenServer 6.0升级pygrub错误

刚刚将我们的 XenServer 测试机从 5.6 升级到 6.0,其中一个虚拟机(ubuntu-server 10.04 LTS)将无法启动。XenCenter 中的错误;

9/11/2011 3:48:23 PM Error: Starting VM 'TestDom-Ubuntu' - Traceback (most recent call last):

File "/usr/bin/pygrub", line 873, in ? - data = fs.open_file(chosencfg["kernel"]).read() - IOError: [Errno 2] No such file or directory

有人遇到过这个问题吗?

编辑;我已经更新了 xen 中的启动相关参数,但问题仍然存在;

[root@xenserver02 ~]# xe-edit-bootloader -u e38aac4e-4117-b3cc-9f8b-c9d45074cd02 -p 3
[root@xenserver02 ~]# xe vm-param-set uuid=e38aac4e-4117-b3cc-9f8b-c9d45074cd02 PV-bootloader-args="--kernel=/vmlinuz-2.6.32-28-server --ramdisk=/initrd.img-2.6.32-28-server"
[root@xenserver02 ~]# xe vm-param-set uuid=e38aac4e-4117-b3cc-9f8b-c9d45074cd02 PV-args="root=UUID=86eeeb35-6678-4228-a7bc-aae8f27a6baf ro quiet"
[root@xenserver02 ~]# xe vm-param-set uuid=e38aac4e-4117-b3cc-9f8b-c9d45074cd02 HVM-boot-policy=
[root@xenserver02 ~]# xe vm-param-set uuid=e38aac4e-4117-b3cc-9f8b-c9d45074cd02 PV-bootloader=pygrub

如果相关;

tail -n 120 /usr/bin/pygrub

# We always boot the "default" kernel if it exists, rather than 
# parsing the grub menu
initrd_path = None
if fs.file_exists("/xenkernel"):
    incfg["kernel"] = "/xenkernel"
    incfg["args"] = default_args
    if fs.file_exists("/xeninitrd"):
        incfg["ramdisk"] = "/xeninitrd"
elif fs.file_exists("/boot/xenkernel"):
    incfg["kernel"] = "/boot/xenkernel"
    incfg["args"] = default_args
    if fs.file_exists("/boot/xeninitrd"):
        incfg["ramdisk"] = "/boot/xeninitrd"

for offset in part_offs:
    try:
        fs = fsimage.open(file, offset, bootfsoptions)

        chosencfg = sniff_solaris(fs, incfg)

        if not chosencfg["kernel"]:
            chosencfg = sniff_netware(fs, incfg)

        if not chosencfg["kernel"]:
            chosencfg = run_grub(file, entry, fs, incfg["args"])

        # Break as soon as we've found the kernel so that we continue
        # to use this fsimage object
        if chosencfg["kernel"]:
            break
        fs = None

    except:
        # IOErrors raised by fsimage.open
        # RuntimeErrors raised by run_grub if no menu.lst present
        fs = None
        continue

# Did looping through partitions find us a kernel?
if not fs:
    raise RuntimeError, "Unable to find partition containing kernel"

if not_really:
    bootcfg["kernel"] = "<kernel:%s>" % chosencfg["kernel"]
    try:
        data = fs.open_file(chosencfg["kernel"]).read()
    except:
        raise RuntimeError, "The chosen kernel does not exist"
else:
        # Append any extra arguments we were given
        if extra_args:
            if chosencfg["args"] == None:
                chosencfg["args"] = extra_args
            else:
                chosencfg["args"] += " " + extra_args

        if not_really:
            bootcfg["kernel"] = "<kernel:%s>" % chosencfg["kernel"]
            try:
                data = fs.open_file(chosencfg["kernel"]).read()
            except:
                raise RuntimeError, "The chosen kernel does not exist"
        else:
            data = fs.open_file(chosencfg["kernel"]).read()
            (tfd, bootcfg["kernel"]) = tempfile.mkstemp(prefix="boot_kernel.",
                                                        dir="/var/run/xend/boot")
            os.write(tfd, data)
            os.close(tfd)

if chosencfg["ramdisk"]:
    if not_really:
        bootcfg["ramdisk"] = "<ramdisk:%s>" % chosencfg["ramdisk"]
    else:
        data = fs.open_file(chosencfg["ramdisk"],).read()
        (tfd, bootcfg["ramdisk"]) = tempfile.mkstemp(
            prefix="boot_ramdisk.", dir="/var/run/xend/boot")
        os.write(tfd, data)
        os.close(tfd)
else:
    initrd = None

args = None
if chosencfg["args"]:
    zfsinfo = fsimage.getbootstring(fs)
    if zfsinfo is not None:
        e = re.compile("zfs-bootfs=[\w\-\.\:@/]+" )
        (chosencfg["args"],count) = e.subn(zfsinfo, chosencfg["args"])
        if count == 0:
           chosencfg["args"] += " -B %s" % zfsinfo
    args = chosencfg["args"]

if output_format == "sxp":
    ostring = format_sxp(bootcfg["kernel"], bootcfg["ramdisk"], args)
elif output_format == "simple":
    ostring = format_simple(bootcfg["kernel"], bootcfg["ramdisk"], args, "\n")
elif output_format == "simple0":
    ostring = format_simple(bootcfg["kernel"], bootcfg["ramdisk"], args, "\0")

sys.stdout.flush()
os.write(fd, ostring)

相关内容