我们正在将几个系统从 Debian Lenny 升级到 Squeeze,我想确保我没有错过任何 grub2 安装。默认情况下,从 grub1 中挤压链引导加载,您必须运行upgrade-from-grub-legacy才能升级。所以我希望能够在不重新启动和不覆盖引导扇区的情况下远程检查 grub2 是否已安装在磁盘引导扇区中。
有什么比对硬盘驱动器的早期块进行十六进制转储并尝试识别特定于 grub2 的字节更容易的吗?
我希望我的 RAID10 能够在引导盘失败的情况下幸存下来。我想将 grub 写入阵列中每个磁盘的 MBR,以便在出现故障的情况下,阵列仍将在其余成员上启动。
我有一个 4 个磁盘阵列,所以理论上我只需要 2 个 grub MBR,但我没有看到将引导加载程序放在所有 4 个磁盘阵列上的危害。
Grub 文件夹是:/boot/grub 根是:(md0)/
一步一步,如何在每个驱动器上安装 grub?
我在 BIOS 传统模式下的 Debian 7 上以 JBOD 模式(无硬件突袭)在 2 个 LSI SAS2008 后面的 mdadm 上运行 14 个磁盘 RAID 6。
Grub2 正在使用救援外壳,抱怨“mduuid/b1c40379914e5d18dddb893b4dc5a28f”“不存在这样的设备”。
mdadm 的输出:
# mdadm -D /dev/md0
/dev/md0:
Version : 1.2
Creation Time : Wed Nov 7 17:06:02 2012
Raid Level : raid6
Array Size : 35160446976 (33531.62 GiB 36004.30 GB)
Used Dev Size : 2930037248 (2794.30 GiB 3000.36 GB)
Raid Devices : 14
Total Devices : 14
Persistence : Superblock is persistent
Update Time : Thu Sep 18 19:44:56 …Run Code Online (Sandbox Code Playgroud) 我知道我可以根据这个答案通过编辑 /etc/default/grub 将命令行参数添加到 grub2 命令行
如何在 Ubuntu 10.10 中向 grub2 添加引导参数?
但是,这将适用于所有内核,不是吗?
如何将命令行参数应用于特定内核?即只有xen。
我想附加如下内容:
xen-pciback.hide=(06:00.0)
我猜我需要将它添加到文件中的某个位置:
/etc/grub.d/20_linux_xen
其中包含:
#! /bin/sh
set -e
# grub-mkconfig helper script.
# Copyright (C) 2006,2007,2008,2009,2010 Free Software Foundation, Inc.
#
# GRUB is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
# …Run Code Online (Sandbox Code Playgroud) 一段时间以来,我一直在尝试设置一个以 RAID 1 作为启动源的新服务器系统。该 RAID 由两个 4TB 硬盘组成。因此,我从使用 Debian 12 安装映像准备的 USB 记忆棒启动。一开始一切运行正常。我配置网络并创建前两个用户。 分区部分我选择手动方式
在接下来的表格中,我看到我的两个 4TB 驱动器和 USB 启动设备,硬盘 SCSI9 是紧急备用,我在这里不会使用它。 我选择配置软件RAID
我选择创建MD设备
我选择RAID 1
2 个 RAID 设备
0 备用设备
再次回到分区。 这次我选择引导模式
所有文件都在一个分区中
一两分钟后,新的分区 RAID 就会出现。 看起来很有希望...
我确认更改后,系统开始获取并安装操作系统的其余部分和所有实用程序。这个过程设计得很好并且到目前为止非常简单。唯一的问题是:它没有完成。:-( 当安装 GRUB 时(2 小时后),它死了...... 我找不到超越这一点的方法。我的错误是什么?我该如何解决?
我根据广泛的互联网搜索结果尝试了很多变体,但结果都相同。这是最有希望的一个:跳过部分安装过程并使用 mdadm 手动生成阵列: https://www.server-world.info/en/note ?os=Debian_12&p=raid1
添加
我有一个嵌入式linux系统。我使用 grub2 作为引导加载程序。我想在每次启动时在 /dev/sda 上运行 fsck -y /dev/sda - 即使系统断电并且未使用重新启动命令。我怎样才能做到这一点?
刚刚注意到,尽管内核定期更新,但使用的版本已经过时了:
$ uname -a
Linux test 2.6.31-302-rs #7 SMP Thu Oct 29 22:57:03 UTC 2009 x86_64 x86_64 x86_64 GNU/Linux
Run Code Online (Sandbox Code Playgroud)
奇怪的是,这个版本的内核甚至似乎都没有安装:
$ dpkg --list | grep linux-image
rc linux-image-2.6.32-41-generic 2.6.32-41.90 amd64 Linux kernel image for version 2.6.32 on x86/x86_64
ii linux-image-3.13.0-54-generic 3.13.0-54.91 amd64 Linux kernel image for version 3.13.0 on 64 bit x86 SMP
ii linux-image-extra-3.13.0-54-generic 3.13.0-54.91 amd64 Linux kernel extra modules for version 3.13.0 on 64 bit x86 SMP
ii linux-image-generic 3.13.0.54.61 amd64 Generic Linux kernel image
Run Code Online (Sandbox Code Playgroud)
另外,中没有提到2.6 /boot/grub/grub.cfg,那么它来自哪里,如何让系统使用3.13内核?
我做了一件蠢事。我的想法是 /boot 目录是空的,每次计算机启动时内容都会进入 /boot。我的 /boot 驱动器给我错误消息,没有剩余空间,所以我认为可能有垃圾文件。我删除了 /boot by 的所有内容rm -rf *并通过reboot命令重新启动了计算机。现在系统没有启动。我在启动时出错,即
error file /grub2/i386-pc/normal.mod not found
Entering rescue mode ...
grub rescue>
大多数搜索显示通过修复 grub 来解决问题。就我而言,我知道我已经删除了内容,所以我该如何恢复系统。我正在使用 Centos 7。
在 CentOS 6 中,有/etc/tune-profiles/my-server/ktune.sysconfig这样的文字(我指的是解释代码正在做什么的注释):
# This is the I/O scheduler ktune will use. This will *not* override anything
# explicitly set on the kernel command line, nor will it change the scheduler
# for any block device that is using a non-default scheduler when ktune starts.
# You should probably leave this on "deadline", but "as", "cfq", and "noop" are
# also legal values. Comment this out to prevent ktune from changing I/O
# scheduler settings.
ELEVATOR="deadline"
# …Run Code Online (Sandbox Code Playgroud) 我有 50 多台机器运行 CentOS 6.4 或 6.8。我希望使用配置脚本(例如,使用“基本服务器”模板并根据硬件 ID 设置主机名/静态 IP),使用位于公共 NFS 和/或 CIFS 共享上的安装介质,使用 CentOS 7 重新安装这些机器在我的本地网络上。后来,我打算用 Ansible 远程控制这些机器,所以我也想运行一个安装后脚本。
我如何远程(通过 SSH)触发此重新安装?
基于 Iain 的回答并进行了一些谷歌搜索,以下是从 CentOS 7 执行此类安装的方法:
将 vmlinuz 和 initrd.img 下载到引导中:
sudo curl -o /boot/vmlinuz http://mirror.zetup.net/CentOS/7/os/x86_64/isolinux/vmlinuz
sudo curl -o /boot/initrd.img http://mirror.zetup.net/CentOS/7/os/x86_64/isolinux/initrd.img
Run Code Online (Sandbox Code Playgroud)
将自定义菜单条目添加到/etc/grub.d/40_custom:
menuentry "My custom boot entry" {
set root=(hd0,1)
linux /vmlinuz ks=http://my-server/ks.cfg
initrd /initrd.img
}
Run Code Online (Sandbox Code Playgroud)
在linux上面的行中添加任何其他选项。
将自定义条目设为 中的默认选择/etc/default/grub:
GRUB_DEFAULT="My custom boot entry"
Run Code Online (Sandbox Code Playgroud)
然后运行:
grub2-mkconfig --output=/boot/grub2/grub.cfg
Run Code Online (Sandbox Code Playgroud)
喝杯咖啡并重新启动:
reboot
Run Code Online (Sandbox Code Playgroud) CentOS/RHEL 7 有一些变化(与 CO/RHEL 6 相比)。其中之一是使用grub2而不是grub。
默认情况下,操作系统似乎使用 UUID 来“查找”引导设备。
是否有一个易于使用的 receipe 来返回设备名称(如 /dev/sda1)?
问题背景:我打算从模板中克隆其他虚拟机。Base 是具有不同 UUID 的新(虚拟)磁盘设备。
如果我无法恢复到sda1,我将需要将grub.cfg 中克隆的 UUID 更改为新的 UUID - 这是计划“B”。
更新2017-10-26
root=的内核参数将更改为磁盘 - 请参阅下面Thomas的回答。
这部分仍然存在一个问题,由grub2-mkconfig生成:
Run Code Online (Sandbox Code Playgroud)if [ x$feature_platform_search_hint = xy ]; then search --no-floppy --fs-uuid --set=root --hint-bios=hd0,msdos1 --hint-efi=hd0,msdos1 --hint-baremetal=ahci0,msdos1 --hint='hd0,msdos1' 716433ab-9e30-42a7-a272-6c66243499d2 else search --no-floppy --fs-uuid --set=root 716433ab-9e30-42a7-a272-6c66243499d2 fi
这仍然包含对 UUID 的搜索。如果找不到,引导过程将进入错误“未找到”或类似错误。按 ENTER 后,系统将正常启动。
剩下的问题是如何停用该部分(我没有找到禁用feature_platform_search_hint的地方)?
grub2 ×11
grub ×4
linux ×4
boot-loader ×2
centos7 ×2
debian ×2
ubuntu ×2
block ×1
block-device ×1
boot ×1
centos ×1
filesystems ×1
fsck ×1
installation ×1
linux-kernel ×1
mdadm ×1
rhel7 ×1
scheduler ×1
ubuntu-14.04 ×1
uuid ×1