我在半嵌入式环境中的单板机器上安装了 Ubuntu 10.10 Server;没有键盘或屏幕,只需通过 SSH 访问即可。
所以当它偶尔启动并卡在 GRUB 菜单上,等待按键选择第一个选项时,真的很令人沮丧。
如何将 GRUB 配置为在任何情况下都不等待击键?
更新 #1:没有 menu.lst,因为这是 GRUB 2。但我确实有一个 /etc/default/grub,如下所示:
GRUB_DEFAULT=0
#GRUB_HIDDEN_TIMEOUT=0
GRUB_HIDDEN_TIMEOUT_QUIET=true
GRUB_TIMEOUT=2
GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian`
GRUB_CMDLINE_LINUX_DEFAULT="quiet"
GRUB_CMDLINE_LINUX=""
Run Code Online (Sandbox Code Playgroud)
更新#2:我想通了。在引导失败后的引导上,GRUB 禁用自己的超时。由于显示菜单会使启动失败,因此这是一个不可避免的循环。可以通过编辑 /etc/grub.d/00_header 文件并更改 make_timeout 函数来禁用此行为:
make_timeout ()
{
echo "set timeout=0"
}
Run Code Online (Sandbox Code Playgroud)
现在退出并重新运行 grub 配置更新程序脚本:
sudo update-grub2
Run Code Online (Sandbox Code Playgroud)
对我来说,这种行为将成为 Ubuntu Server 的默认行为是没有意义的,Ubuntu Server 是一种用于通过控制台访问的机器的产品。
一个硬盘从我的 RAID 中崩溃,我添加了一个新硬盘。
现在我想将 GRUB 安装到新硬盘上:使用grub-install /dev/sdb. 我收到这些警告:
Installing for i386-pc platform.
grub-install: warning: Couldn't find physical volume `(null)'. Some modules may be missing from core image..
grub-install: warning: Couldn't find physical volume `(null)'. Some modules may be missing from core image..
Installation finished. No error reported.
Run Code Online (Sandbox Code Playgroud)
在update-grub2我得到:
Generating grub configuration file ...
/usr/sbin/grub-probe: warning: Couldn't find physical volume `(null)'. Some modules may be missing from core image..
/usr/sbin/grub-probe: warning: Couldn't find physical volume `(null)'. Some …Run Code Online (Sandbox Code Playgroud) 我有奇怪的情况 - BIOS 报告的磁盘顺序与 Linux 看到的磁盘顺序不同。
这导致运行有问题 - grub 安装到 sda,但 bios 从 sdd 或类似的东西启动(这台机器有 7 个磁盘,4 个在内部控制器上,3 个在外部控制器上。
是否可以将 grub 安装(以及稍后更新)到所有磁盘,而不仅仅是 /dev/sda?我不知道 bios 想要启动哪个磁盘(所有磁盘都是一样的,而且由于我对它进行了突袭,我无法随意删除它们),所以我看到的唯一解决方案是进行 grub install在所有 sda-sdg 上。
这是 Debian 稳定版,带有 Grub2。
基本工作系统详细信息:
我使用 Ubuntu 12.04 服务器 CD 安装服务器。
我有 4 个磁盘。在所有磁盘上,我执行了以下操作,类似于此操作方法:
我将引导格式化为 ext3。我在根分区和大分区上设置了 RAID10。我将根目录格式化为 ext4。我在大卷上创建了一个逻辑卷,并将其格式化为 ext4。
生成的系统运行良好,启动正常。
问题详情:
然后我决定记录一个失败的过程。作为第一步,我决定重新安装 grub。
# grub-install /dev/sda
warn: This GPT partition label has no BIOS Boot Partition; embedding won't be possible!.
error: Embedding is not possible. GRUB can only be installed in this setup by using blocklists. However, blocklists are UNRELIABLE and their use …Run Code Online (Sandbox Code Playgroud) 我在远程系统上的 Grub2 ( 1.98+20100804-14+squeeze1 ) 下运行 Debian 6、Debian GNU/Linux 和 Linux 2.6.32-5-amd64(无法查看预启动消息)。我编译并安装了一个新内核,但无法启动。
我做了什么:
通过以下方式安装软件包:
dpkg -i linux-headers-3.5.3.20120914-amd64_3.5.3.20120914-amd64-10.00.Custom_amd64.deb linux-image-3.5.3.20120914-amd64_3.5.3.20120914-amd64-10.00.Custom_amd64.deb
Run Code Online (Sandbox Code Playgroud)
这更新了 Grub 配置。我的 /boot/grub/grub.cfg 现在包含:
menuentry 'Debian GNU/Linux, with Linux 3.5.3.20120914-amd64' --class debian --class gnu-linux --class gnu --class os {
insmod raid
insmod mdraid
insmod part_msdos
insmod part_msdos
insmod ext2
set root='(md0)'
search --no-floppy --fs-uuid --set 5a3882a9-c7df-4f6a-9feb-f03e3e37be01
echo 'Loading Linux 3.5.3.20120914-amd64 ...'
linux /vmlinuz-3.5.3.20120914-amd64 root=UUID=003242b5-121b-49f3-b32f-1b40aea56eed ro acpi=ht quiet panic=10
echo 'Loading initial ramdisk ...'
initrd /initrd.img-3.5.3.20120914-amd64
}
menuentry 'Debian GNU/Linux, with Linux …Run Code Online (Sandbox Code Playgroud) 我首先使用 lvm安装了我的 ubuntu 服务器(11.10 amd64),但没有完全掌握它的概念。我认为这部分是导致我的两个磁盘上的分区混乱的原因(在我看来)。我从一开始就使用 grub2 安装了所有东西以启动我的 Ubuntu,后来我将其更新到 Ubuntu Server 12.04,没问题。
这是情况:
截至今天,我根本无法启动,在 grub 选项之前似乎没有任何进化(编辑:Pavel A. 的精度);
我可以使用带有选项Rescue a crashed system的服务器安装 liveCD 启动;
我设置了网络访问,但似乎没有/run文件夹(不知道是否相关,但在某些论坛中似乎不正常);
我构建的设备图如下:
sda1[Linux 分区]、sda2、sda3[ /] 和sda5(后者似乎与 相同sda3,描述符相同)sdc1, sdc2[ /boot] 和sdc3[ /home] (两者没有相同的 PE 或 LE,但我希望最终将所有内容都放在同一个 VG 中)
我对引导环境做的最后一件事是(干净地)从引导分区中删除旧内核(236MB 大,99% 已满);
我跑了grub-install(安装启动后)但遇到了各种错误:
/dev/sda因为core.img不适合(第一部分从 32 …使用 Debian 6.0/squeeze 设置的服务器。在squeeze安装期间,我将两个500GB SATA磁盘(/dev/sda和/dev/sdb)配置为RAID1(使用mdadm管理)。RAID 保留一个 500 GB LVM 卷组 (vg0)。在卷组中,有一个逻辑卷 (lv0)。vg0-lv0 用 extfs3 格式化并挂载为 root 分区(没有专用的 /boot 分区)。系统使用 GRUB2 引导。
在正常使用中,系统启动正常。
此外,当我在关机后尝试移除第二个 SATA 驱动器 (/dev/sdb) 时,系统没有问题,重新连接驱动器后,我能够 --re-add /dev/sdb1 到 RAID大批。
但是:移除第一个 SATA 驱动器 (/dev/sda) 后,系统将无法再启动!GRUB 欢迎消息显示一秒钟,然后系统重新启动。
我尝试在 /dev/sdb(“grub-install /dev/sdb”)上手动安装 GRUB2,但这没有帮助。
当第一块磁盘被移除时,显然squeeze无法设置GRUB2从第二个磁盘启动,这似乎是运行这种Software RAID1时非常重要的功能,不是吗?
目前,我不知道这是 GRUB2、LVM 还是 RAID 设置的问题。任何提示?
我需要找到安装 GRUB 的位置,例如,哪个驱动器/分区。是否有可能弄清楚它安装在哪里?
我有一台带有软件 RAID1 (2x3TB) 的 CentOS 6 服务器:
- sda
# parted /dev/sda unit s print
Model: ATA TOSHIBA DT01ACA3 (scsi)
Disk /dev/sda: 5860533168s
Sector size (logical/physical): 512B/4096B
Partition Table: gpt
Number Start End Size File system Name Flags
1 2048s 1026047s 1024000s ext4 boot
2 1026048s 5860532223s 5859506176s raid
Run Code Online (Sandbox Code Playgroud)
- sdb
# parted /dev/sdb unit s print
Model: ATA TOSHIBA DT01ACA3 (scsi)
Disk /dev/sdb: 5860533168s
Sector size (logical/physical): 512B/4096B
Partition Table: gpt
Number Start End Size File system Name Flags …Run Code Online (Sandbox Code Playgroud) 我在运行 Debian wheezy 和 GRUB 1.99-27+deb7u3 的 4 x 1 TB 驱动器的服务器上遇到问题。
sda 和 sdb 具有使用(Linux 软件)RAID1 镜像的分区,包括/boot. sdc 和 sdd 各有一个分区,为数据镜像一个 LVM 物理卷。GRUB 安装到 sda 和 sdb。我用mdadm于--fail和--remove1个TB SDC,并取代了旧的驱动器(一个ST91000640NS)用新的2 TB ST2000NX0243。
安装新驱动器后,GRUB 可以达到
GRUB loading.
Welcome to GRUB!
Run Code Online (Sandbox Code Playgroud)
但无法显示菜单。sdc 上的驱动器指示灯持续亮起,因此推测 GRUB 核心正在尝试读取该驱动器,即使它不需要访问 /boot/grub。我试过两个相同型号的驱动器,都用 测试得很好smartctl,结果相同。在 sdc 驱动器托架为空的情况下,一切正常启动。系统从实时 USB 启动并且可以访问新驱动器,因此这不是硬件不兼容 (*)。我确定是 sdc 被删除了,并且没有迹象表明 BIOS 对驱动器进行了重新排序。
(*)这可能不是一个安全的假设。见答案。
所以我有以下相关问题:
grub rescue>提示?4K 问题是否也会阻止将驱动器用于 Linux RAID? …grub2 ×10
grub ×4
mdadm ×3
raid ×3
ubuntu ×3
boot ×2
gpt ×2
kernel ×2
lvm ×2
bios ×1
boot-loader ×1
debian ×1
hard-drive ×1
headless ×1
linux ×1
partition ×1
raid1 ×1
ubuntu-10.10 ×1
ubuntu-12.04 ×1