我刚刚将 12.04 从 USB 记忆棒安装到华硕上网本上。由于 sda 只有 4GB,我在 sdb 上为 /var 创建一个 1GB 的分区(以及一个用于 swap 和 /home 的分区)。我使用带有 unetbootin 的桌面 i386 iso 加载记忆棒。一切似乎都运行良好,上网本一直运行 11.10。但是,重新启动后,我在启动菜单中收到 3 个来自 grub 的“错误:没有这样的分区”错误。
我使用记忆棒重新启动机器,查看了一下。最新的 grub 安装在 上/dev/sda
。(我想也许它没有“被占用”。)grub.cfg
看起来正确,并且blkid
s 与内部驱动器匹配。(我想也许记忆棒欺骗了 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 并对其进行更新。我相信凭借您的经验,您会知道如何做到这一点。