全新安装 12.04 后 GRUB 无法识别我的磁盘

全新安装 12.04 后 GRUB 无法识别我的磁盘

我刚刚将 12.04 从 USB 记忆棒安装到华硕上网本上。由于 sda 只有 4GB,我在 sdb 上为 /var 创建一个 1GB 的分区(以及一个用于 swap 和 /home 的分区)。我使用带有 unetbootin 的桌面 i386 iso 加载记忆棒。一切似乎都运行良好,上网本一直运行 11.10。但是,重新启动后,我在启动菜单中收到 3 个来自 grub 的“错误:没有这样的分区”错误。

我使用记忆棒重新启动机器,查看了一下。最新的 grub 安装在 上/dev/sda。(我想也许它没有“被占用”。)grub.cfg看起来正确,并且blkids 与内部驱动器匹配。(我想也许记忆棒欺骗了 grub 安装程序,但一切看起来都很好。)如果我在启动菜单中打开 grub 命令提示符,并尝试执行“ls”,我会收到更多“错误:没有这样的分区”错误。当我尝试“帮助”时我甚至会收到消息。

我迷路了。我 15 年的 Linux 经验告诉我,这个东西应该可以启动。我以前从未见过这种错误。

                  Boot Info Script 0.61      [1 April 2012]


============================= Boot Info Summary: ===============================

 => Grub2 (v1.99) is installed in the MBR of /dev/sda and looks at sector 1 of 
    the same hard drive for core.img. core.img is at this location and looks 
    for (,msdos1)/boot/grub on this drive.
 => Grub2 (v1.99) is installed in the MBR of /dev/sdb and looks at sector 1 of 
    the same hard drive for core.img. core.img is at this location and uses an 
    embedded config file:

    ---------------------------------------------------------------------------
    search.fs_uuid 11adf701-62df-45bd-949b-493582d3e6e4 root 
    set prefix=($root)/boot/grub
    ---------------------------------------------------------------------------
    -----.
 => Syslinux MBR (4.04 and higher) is installed in the MBR of /dev/sdc.

sda1: __________________________________________________________________________

    File system:       ext4
    Boot sector type:  -
    Boot sector info: 
    Operating System:  Ubuntu 12.04 LTS
    Boot files:        /boot/grub/grub.cfg /etc/fstab /boot/grub/core.img

sdb1: __________________________________________________________________________

    File system:       
    Boot sector type:  -
    Boot sector info: 
    Mounting failed:   mount: unknown filesystem type ''

sdb2: __________________________________________________________________________

    File system:       ext4
    Boot sector type:  -
    Boot sector info: 
    Operating System:  
    Boot files:        

sdb3: __________________________________________________________________________

    File system:       ext4
    Boot sector type:  -
    Boot sector info: 
    Operating System:  
    Boot files:        

sdc1: __________________________________________________________________________

    File system:       vfat
    Boot sector type:  SYSLINUX 4.05 20120131
    Boot sector info:  Syslinux looks at sector 535 of /dev/sdc1 for its 
                       second stage. The integrity of Syslinux couldn't be 
                       verified (install gawk). SYSLINUX is installed in the  
                       directory. The 2 ADV sectors are not the same 
                       (corrupt). No errors found in the Boot Parameter Block.
    Operating System:  
    Boot files:        /syslinux.cfg /ldlinux.sys

============================ Drive/Partition Info: =============================

Drive: sda _____________________________________________________________________

Disk /dev/sda: 4034 MB, 4034838528 bytes
109 heads, 2 sectors/track, 36149 cylinders, total 7880544 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes

Partition  Boot  Start Sector    End Sector  # of Sectors  Id System

/dev/sda1    *          2,048     7,878,655     7,876,608  83 Linux


Drive: sdb _____________________________________________________________________

Disk /dev/sdb: 16.1 GB, 16139354112 bytes
255 heads, 63 sectors/track, 1962 cylinders, total 31522176 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes

Partition  Boot  Start Sector    End Sector  # of Sectors  Id System

/dev/sdb1    *          2,048     3,999,743     3,997,696  82 Linux swap / Solaris
/dev/sdb2           3,999,744     5,953,535     1,953,792  83 Linux
/dev/sdb3           5,953,536    31,520,767    25,567,232  83 Linux


Drive: sdc _____________________________________________________________________

Disk /dev/sdc: 1059 MB, 1059323904 bytes
255 heads, 63 sectors/track, 128 cylinders, total 2068992 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes

Partition  Boot  Start Sector    End Sector  # of Sectors  Id System

/dev/sdc1    *             63     2,056,319     2,056,257   e W95 FAT16 (LBA)


"blkid" output: ________________________________________________________________

Device           UUID                                   TYPE       LABEL

/dev/loop0                                              squashfs   
/dev/sda1        11adf701-62df-45bd-949b-493582d3e6e4   ext4       
/dev/sdb2        13102a87-bd10-48a1-9762-d52a025a7e87   ext4       
/dev/sdb3        58611555-14fd-4f09-b397-667760592be6   ext4       
/dev/sdc1        4EEA-35AF                              vfat       SAS_SATA

================================ Mount points: =================================

Device           Mount_Point              Type       Options

/dev/loop0       /rofs                    squashfs   (ro,noatime)
/dev/sdc1        /cdrom                   vfat       (ro,noatime,fmask=0022,dmask=0022,codepage=cp437,iocharset=iso8859-1,shortname=mixed,errors=remount-ro)


=========================== sda1/boot/grub/grub.cfg: ===========================

--------------------------------------------------------------------------------
#
# DO NOT EDIT THIS FILE
#
# It is automatically generated by grub-mkconfig using templates
# from /etc/grub.d and settings from /etc/default/grub
#

### BEGIN /etc/grub.d/00_header ###
if [ -s $prefix/grubenv ]; then
  set have_grubenv=true
  load_env
fi
set default="0"
if [ "${prev_saved_entry}" ]; then
  set saved_entry="${prev_saved_entry}"
  save_env saved_entry
  set prev_saved_entry=
  save_env prev_saved_entry
  set boot_once=true
fi

function savedefault {
  if [ -z "${boot_once}" ]; then
    saved_entry="${chosen}"
    save_env saved_entry
  fi
}

function recordfail {
  set recordfail=1
  if [ -n "${have_grubenv}" ]; then if [ -z "${boot_once}" ]; then save_env recordfail; fi; fi
}

function load_video {
  insmod vbe
  insmod vga
  insmod video_bochs
  insmod video_cirrus
}

insmod part_msdos
insmod ext2
set root='(hd0,msdos1)'
search --no-floppy --fs-uuid --set=root 11adf701-62df-45bd-949b-493582d3e6e4
if loadfont /usr/share/grub/unicode.pf2 ; then
  set gfxmode=auto
  load_video
  insmod gfxterm
  insmod part_msdos
  insmod ext2
  set root='(hd0,msdos1)'
  search --no-floppy --fs-uuid --set=root 11adf701-62df-45bd-949b-493582d3e6e4
  set locale_dir=($root)/boot/grub/locale
  set lang=en_US
  insmod gettext
fi
terminal_output gfxterm
if [ "${recordfail}" = 1 ]; then
  set timeout=-1
else
  set timeout=10
fi
### END /etc/grub.d/00_header ###

### BEGIN /etc/grub.d/05_debian_theme ###
set menu_color_normal=white/black
set menu_color_highlight=black/light-gray
if background_color 44,0,30; then
  clear
fi
### END /etc/grub.d/05_debian_theme ###

### BEGIN /etc/grub.d/10_linux ###
function gfxmode {
    set gfxpayload="$1"
    if [ "$1" = "keep" ]; then
        set vt_handoff=vt.handoff=7
    else
        set vt_handoff=
    fi
}
if [ ${recordfail} != 1 ]; then
  if [ -e ${prefix}/gfxblacklist.txt ]; then
    if hwmatch ${prefix}/gfxblacklist.txt 3; then
      if [ ${match} = 0 ]; then
        set linux_gfx_mode=keep
      else
        set linux_gfx_mode=text
      fi
    else
      set linux_gfx_mode=text
    fi
  else
    set linux_gfx_mode=keep
  fi
else
  set linux_gfx_mode=text
fi
export linux_gfx_mode
if [ "$linux_gfx_mode" != "text" ]; then load_video; fi
menuentry 'Ubuntu, with Linux 3.2.0-23-generic-pae' --class ubuntu --class gnu-linux --class gnu --class os {
    recordfail
    gfxmode $linux_gfx_mode
    insmod gzio
    insmod part_msdos
    insmod ext2
    set root='(hd0,msdos1)'
    search --no-floppy --fs-uuid --set=root 11adf701-62df-45bd-949b-493582d3e6e4
    linux   /boot/vmlinuz-3.2.0-23-generic-pae root=UUID=11adf701-62df-45bd-949b-493582d3e6e4 ro   quiet splash $vt_handoff
    initrd  /boot/initrd.img-3.2.0-23-generic-pae
}
menuentry 'Ubuntu, with Linux 3.2.0-23-generic-pae (recovery mode)' --class ubuntu --class gnu-linux --class gnu --class os {
    recordfail
    insmod gzio
    insmod part_msdos
    insmod ext2
    set root='(hd0,msdos1)'
    search --no-floppy --fs-uuid --set=root 11adf701-62df-45bd-949b-493582d3e6e4
    echo    'Loading Linux 3.2.0-23-generic-pae ...'
    linux   /boot/vmlinuz-3.2.0-23-generic-pae root=UUID=11adf701-62df-45bd-949b-493582d3e6e4 ro recovery nomodeset 
    echo    'Loading initial ramdisk ...'
    initrd  /boot/initrd.img-3.2.0-23-generic-pae
}
### END /etc/grub.d/10_linux ###

### BEGIN /etc/grub.d/20_linux_xen ###
### END /etc/grub.d/20_linux_xen ###

### BEGIN /etc/grub.d/20_memtest86+ ###
menuentry "Memory test (memtest86+)" {
    insmod part_msdos
    insmod ext2
    set root='(hd0,msdos1)'
    search --no-floppy --fs-uuid --set=root 11adf701-62df-45bd-949b-493582d3e6e4
    linux16 /boot/memtest86+.bin
}
menuentry "Memory test (memtest86+, serial console 115200)" {
    insmod part_msdos
    insmod ext2
    set root='(hd0,msdos1)'
    search --no-floppy --fs-uuid --set=root 11adf701-62df-45bd-949b-493582d3e6e4
    linux16 /boot/memtest86+.bin console=ttyS0,115200n8
}
### END /etc/grub.d/20_memtest86+ ###

### BEGIN /etc/grub.d/30_os-prober ###
if [ "x${timeout}" != "x-1" ]; then
  if keystatus; then
    if keystatus --shift; then
      set timeout=-1
    else
      set timeout=0
    fi
  else
    if sleep --interruptible 3 ; then
      set timeout=0
    fi
  fi
fi
### END /etc/grub.d/30_os-prober ###

### BEGIN /etc/grub.d/40_custom ###
# This file provides an easy way to add custom menu entries.  Simply type the
# menu entries you want to add after this comment.  Be careful not to change
# the 'exec tail' line above.
### END /etc/grub.d/40_custom ###

### BEGIN /etc/grub.d/41_custom ###
if [ -f  $prefix/custom.cfg ]; then
  source $prefix/custom.cfg;
fi
### END /etc/grub.d/41_custom ###
--------------------------------------------------------------------------------

=============================== sda1/etc/fstab: ================================

--------------------------------------------------------------------------------
# /etc/fstab: static file system information.
#
# Use 'blkid' to print the universally unique identifier for a
# device; this may be used with UUID= as a more robust way to name devices
# that works even if disks are added and removed. See fstab(5).
#
#                
proc            /proc           proc    nodev,noexec,nosuid 0       0
# / was on /dev/sda1 during installation
UUID=11adf701-62df-45bd-949b-493582d3e6e4 /               ext4    errors=remount-ro 0       1
# /home was on /dev/sdb3 during installation
UUID=58611555-14fd-4f09-b397-667760592be6 /home           ext4    defaults        0       2
# /var was on /dev/sdb2 during installation
UUID=13102a87-bd10-48a1-9762-d52a025a7e87 /var            ext4    defaults        0       2
# swap was on /dev/sdb1 during installation
#UUID=75c2cadb-a0b9-4888-a034-c1379420f015 none            swap    sw              0       0
/dev/mapper/cryptswap1 none swap sw 0 0
--------------------------------------------------------------------------------

=================== sda1: Location of files loaded by Grub: ====================

           GiB - GB             File                                 Fragment(s)

               =                boot/grub/core.img                             1
               =                boot/grub/grub.cfg                             1
               =                boot/initrd.img-3.2.0-23-generic-pae           1
               =                boot/vmlinuz-3.2.0-23-generic-pae              1
               =                initrd.img                                     1
               =                vmlinuz                                        1

============================== sdc1/syslinux.cfg: ==============================

--------------------------------------------------------------------------------
default menu.c32
prompt 0
menu title UNetbootin
timeout 100

label unetbootindefault
menu label Default
kernel /ubnkern
append initrd=/ubninit file=/cdrom/preseed/ubuntu.seed boot=casper quiet splash --

label ubnentry0
menu label ^Help
kernel /ubnkern
append initrd=/ubninit 

label ubnentry1
menu label ^Try Ubuntu without installing
kernel /casper/vmlinuz
append initrd=/casper/initrd.lz file=/cdrom/preseed/ubuntu.seed boot=casper  quiet splash --

label ubnentry2
menu label ^Install Ubuntu
kernel /casper/vmlinuz
append initrd=/casper/initrd.lz file=/cdrom/preseed/ubuntu.seed boot=casper only-ubiquity  quiet splash --

label ubnentry3
menu label ^Check disc for defects
kernel /casper/vmlinuz
append initrd=/casper/initrd.lz boot=casper integrity-check  quiet splash --

label ubnentry4
menu label Test ^memory
kernel /install/mt86plus
append initrd=/ubninit 

label ubnentry5
menu label ^Boot from first hard disk
kernel /ubnkern
append initrd=/ubninit 

--------------------------------------------------------------------------------

================= sdc1: Location of files loaded by Syslinux: ==================

           GiB - GB             File                                 Fragment(s)

            ?? = ??             ldlinux.sys                                    2
            ?? = ??             menu.c32                                       1
            ?? = ??             syslinux.cfg                                   1

============== sdc1: Version of COM32(R) files used by Syslinux: ===============

 menu.c32                           :  COM32R module (v4.xx)

========= Devices which don't seem to have a corresponding hard drive: =========

sdd 

=============================== StdErr Messages: ===============================

xz: (stdin): Compressed data is corrupt
xz: (stdin): Compressed data is corrupt
awk: cmd. line:36: Math support is not compiled in
awk: cmd. line:36: Math support is not compiled in
awk: cmd. line:36: Math support is not compiled in
awk: cmd. line:36: Math support is not compiled in
awk: cmd. line:36: Math support is not compiled in
awk: cmd. line:36: Math support is not compiled in

答案1

我猜想您的固件(无论出于什么原因)只向引导加载程序提供了一个驱动器,即它从中“启动”(读取并执行 MBR 中的代码)的驱动器。这解释了为什么当 sda 首次启动时您能够启动,因为只涉及一个驱动器。您应该能够通过从 sda 上的工作 grub 运行“ls”来确认这一点,并看到只列出了一个驱动器。

您收到“无此分区”错误的原因是 grub 中的所有命令都存储在模块中,如果在尝试运行命令(如“help”)时尚未加载给定命令的模块,grub 会尝试读取 $prefix/help.mod。当发现 $prefix 中的分区不存在时,您会收到此错误消息。Grub 的 core.img 有时必须放在非常小的区域中,因此默认情况下其中包含的模块非常少,这意味着如果无法读取 /boot/grub/,则可用的命令非常少。这些命令中最有用的列在此处:http://www.gnu.org/software/grub/manual/grub.html#GRUB-only-offers-a-rescue-shell(请注意,虽然简单的“ls”可以运行,但“ls -l”和其他 ls 选项需要更多模块)。

答案2

我有点怀疑你的交换分区在 sdb1 上...我可能是错的,但是...我实际上没有做过像你的系统一样操作系统分布在两个硬盘上的系统。主分区在不同的驱动器上,是的,但交换分区在不同的驱动器上,我不确定。尤其是作为第一个分区。

您可以尝试启动 USB 上的“尝试 Ubuntu”选项并在那里进行侦查。您还可以尝试从那里重新安装 grub 并对其进行更新。我相信凭借您的经验,您会知道如何做到这一点。

相关内容