修改grub.cfg,让ubuntu10.04屏幕打印开机信息。

本文详细介绍了GRUB启动配置文件的结构与关键设置方法,包括如何通过调整GRUB配置实现不同分辨率的显示效果,适用于希望深入理解GRUB配置机制的读者。

 

#

# DO NOT EDIT THIS FILE

#

# It is automatically generated by /usr/sbin/grub-mkconfig using templates

# from /etc/grub.d and settings from /etc/default/grub

#由 /usr/sbin/grub-mkconfig读取 /etc/default/grub中的配置信息,并采用/etc/grub.d 作为模板,自动生成。

 

### BEGIN /etc/grub.d/00_header ###

if [ -s $prefix/grubenv ]; then

  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

}

insmod ext2

set root='(hd0,1)'

search --no-floppy --fs-uuid --set d98561c1-62af-4753-b6f0-fbcfcb6a7541

if loadfont /usr/share/grub/unicode.pf2 ; then   加载的字体文件。

  set gfxmode=640x480                                        gfx模式是640*480

  insmod gfxterm

  insmod vbe

  if terminal_output gfxterm ; then true ; else

    # For backward compatibility with versions of terminal.mod that don't

    # understand terminal_output

    terminal gfxterm

  fi

fi

insmod ext2

set root='(hd0,1)'

search --no-floppy --fs-uuid --set d98561c1-62af-4753-b6f0-fbcfcb6a7541

set locale_dir=($root)/boot/grub/locale   本地化文件目录

set lang=en    语言是english

insmod gettext

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

### END /etc/grub.d/05_debian_theme ###

 

### BEGIN /etc/grub.d/10_linux ###

菜单项

menuentry 'Ubuntu, with Linux 2.6.32-21-generic' --class ubuntu --class gnu-linux --class gnu --class os {

recordfail

insmod ext2

set root='(hd0,1)'

search --no-floppy --fs-uuid --set d98561c1-62af-4753-b6f0-fbcfcb6a7541

linux /boot/vmlinuz-2.6.32-21-generic root=UUID=d98561c1-62af-4753-b6f0-fbcfcb6a7541 ro   quiet 

我把这里的splash去除了。这样开机就能看到那些开始信息了。

initrd /boot/initrd.img-2.6.32-21-generic

}

menuentry 'Ubuntu, with Linux 2.6.32-21-generic (recovery mode)' --class ubuntu --class gnu-linux --class gnu --class os {

recordfail

insmod ext2

set root='(hd0,1)'

search --no-floppy --fs-uuid --set d98561c1-62af-4753-b6f0-fbcfcb6a7541

echo 'Loading Linux 2.6.32-21-generic ...'

linux /boot/vmlinuz-2.6.32-21-generic root=UUID=d98561c1-62af-4753-b6f0-fbcfcb6a7541 ro single 

恢复模式,是单用户模式。

echo 'Loading initial ramdisk ...'   ramdisk?输出这个信息做什么呢?

initrd /boot/initrd.img-2.6.32-21-generic  跟正常启动时的,是同一个文件。

}

### END /etc/grub.d/10_linux ###

 

结束etc/grub.d/10_linux 

开启/etc/grub.d/20_memtest86+


### BEGIN /etc/grub.d/20_memtest86+ ###

menuentry "Memory test (memtest86+)" {

insmod ext2

set root='(hd0,1)'

search --no-floppy --fs-uuid --set d98561c1-62af-4753-b6f0-fbcfcb6a7541

linux16 /boot/memtest86+.bin

}

menuentry "Memory test (memtest86+, serial console 115200)" {

insmod ext2

set root='(hd0,1)'

search --no-floppy --fs-uuid --set d98561c1-62af-4753-b6f0-fbcfcb6a7541

linux16 /boot/memtest86+.bin console=ttyS0,115200n8

}

### END /etc/grub.d/20_memtest86+ ###

 

### BEGIN /etc/grub.d/30_os-prober ###

if [ ${timeout} != -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 ###

 

 

 

==========================================================

今天,4月22日,发现一篇文章。

http://soft.zdnet.com.cn/software_zone/2007/1011/545493.shtml

高手进阶 GRUB中VGA的设置方法详细介绍

ZDNet软件频道 时间:2007-10-11 作者:赛迪网技术社区 | 赛迪网技术社区  我要评论()
本文关键词:设置 Vga GRUB Linux Linux
 就是在grub.conf启动列表的kernel最后添加vga参数,例如将tty分辨率设置为(800x600x65536)
 默认kernel给的tty分辨率是非常有限的,解决的方法就是给kernel传递 Vga参数。
 
  1、lilo下设置方法
 
  lilo:Linux Vga=318
 
  将会启动1024x768x24bpp模式。下面是常用分辨率+色彩所对应的编码

 

色彩
640x400
640x480
800x600
1024x768
1280x1024
1600x1200
4bits
?
?
0x302
?
?
?
8bits
0x300
0x301
0x303
0x305
0x307
0x31C
15bits
?
0x310
0x313
0x316
0x319
0x31D
16bits
?
0x311
0x314
0x317
0x31A
0x31E
24bits
?
0x312
0x315
0x318
0x31B
0x31F
32bits
?
?
?
?
?
?

 

  如果要默认就 设置为1024x768x24bpp模式,可以修改/etc/lilo.conf,加入一下语句:
 
   Vga=0x318
 
  然后保存退出,重启即可。
 
   2、GRUB设置方法
 
  就是在 GRUB.conf启动列表的kernel最后添加 Vga参数,例如将tty分辨率 设置为(800x600x65536)

cat /etc/GRUB.conf
# GRUB.conf generated by anaconda
#
# Note that you do not have to rerun GRUB after making changes to this file
# NOTICE:  You have a /boot partition.  This means that
#          all kernel and initrd paths are relative to /boot/, eg.
#          root (hd0,0)
#          kernel /vmlinuz-version ro root=/dev/sda3
#          initrd /initrd-version.img
#boot=/dev/sda
default=0
timeout=5
splashimage=(hd0,0)/GRUB/splash.xpm.gz
hiddenmenu
title Red Hat Enterprise Linux AS (2.6.9-22.EL)
        root (hd0,0)
        kernel /vmlinuz-2.6.9-22.EL ro root=LABEL=/ Vga=788
        initrd /initrd-2.6.9-22.EL.img
 
  以下是常用参数列表
 
Linux video=Vga16 (640x480x16) <---默认参数,支持最普通的硬件:)
Vga=769 (640x480x256)
Vga=771 (800x600x256)
Vga=788 (800x600x645536)
Vga=773 (1024x768x256)
Vga=791 (1024x768x65536)

 

修改后配和zhcon(http://sourceforge.net/projects/zhcon)或者cce(http://sourceforge.net/projects/cce2k/)更加完美。

(大分辨率+中文显示+中文输入)

  下面是所有分辨率的列表:

 

# VESA framebuffer console @ 1024x768x64k Vga = 791 
# Normal Vga console # Vga = normal 
# VESA framebuffer console @ 1024x768x64k 
# Vga=791 # VESA framebuffer console @ 1024x768x32k 
# Vga=790 # VESA framebuffer console @ 1024x768x256 
# Vga=773 # VESA framebuffer console @ 800x600x64k 
# Vga=788 # VESA framebuffer console @ 800x600x32k 
# Vga=787 # VESA framebuffer console @ 800x600x256 
# Vga=771 # VESA framebuffer console @ 640x480x64k 
# Vga=785 # VESA framebuffer console @ 640x480x32k 
# Vga=784 # VESA framebuffer console @ 640x480x256 
# Vga=769

 

<think>我们之前已经讨论过,直接修改`grub.cfg`文件是无效的,因为它在系统更新或执行`update-grub`时会被覆盖。用户的问题正是修改后重启发现文件恢复,说明用户可能直接修改了`grub.cfg`。因此,我们需要引导用户使用正确的方法修改GRUB配置,并确保修改持久化。 ### 解决方案: 1. **修改正确的配置文件**:用户应该修改`/etc/default/grub`文件,而不是`grub.cfg`。 2. **更新配置**:修改后运行`sudo update-grub`命令,使更改写入`grub.cfg`。 3. **处理可能的覆盖问题**:如果用户修改了`/etc/default/grub`后仍然被覆盖,则需要检查是否有其他进程(如cloud-init)在重置配置,或者考虑锁定文件。 ### 详细步骤: #### 步骤1:修改GRUB的默认配置文件 打开`/etc/default/grub`文件进行编辑: ```bash sudo nano /etc/default/grub ``` 在此文件中,你可以修改GRUB的配置参数。例如: - `GRUB_TIMEOUT`:设置菜单等待时间(秒) - `GRUB_CMDLINE_LINUX_DEFAULT`:设置内核启动参数(例如添加`quiet splash`等) #### 步骤2:更新GRUB配置 修改保存后,运行以下命令来更新`/boot/grub/grub.cfg`: ```bash sudo update-grub ``` 此命令会根据`/etc/default/grub`和`/etc/grub.d/`中的脚本重新生成`grub.cfg`。 #### 步骤3:验证更改 重启系统前,可以检查`grub.cfg`文件是否已更新: ```bash grep "GRUB_TIMEOUT" /boot/grub/grub.cfg ``` 如果显示的时间与你设置的相同,则说明更新成功。 #### 特殊情况:修改后仍然被覆盖 如果按照上述步骤操作后,重启系统仍然发现配置被恢复,则可能是以下原因: ##### 原因1:cloud-init重置配置(常见于云服务器) cloud-init在每次启动时可能会重置网络和GRUB配置。解决方法:禁用cloud-init对GRUB配置的修改。 ```bash # 创建配置文件禁用cloud-init的network配置(这也会影响GRUB配置的生成) echo 'network: {config: disabled}' | sudo tee /etc/cloud/cloud.cfg.d/99-disable-network-config.cfg # 清理cloud-init缓存并重启 sudo cloud-init clean -r ``` ##### 原因2:系统更新或自动脚本覆盖 某些系统更新(尤其是内核更新)会自动运行`update-grub`。如果你修改了`/etc/default/grub`,那么更新后生成的`grub.cfg`会包含你的修改。但如果你发现`/etc/default/grub`本身被重置,则可能是其他脚本所为。检查是否有自动化任务修改该文件。 ##### 原因3:文件权限问题 确保`/etc/default/grub`文件的所有者和权限正确: ```bash sudo chown root:root /etc/default/grub sudo chmod 644 /etc/default/grub ``` ##### 原因4:需要锁定配置文件(极端情况) 如果以上方法无效,可以设置文件为不可变(谨慎使用): ```bash sudo chattr +i /etc/default/grub ``` 注意:这会使该文件无法被修改,包括系统更新。在需要更新GRUB配置时,先取消不可变属性: ```bash sudo chattr -i /etc/default/grub ``` #### 步骤4:重启系统 完成配置后,重启系统使更改生效: ```bash sudo reboot ``` ### 错误修改后的恢复方法 如果因为修改`grub.cfg`导致系统无法启动,可以按照以下步骤恢复: 1.GRUB启动菜单出现时,按`e`键进入编辑模式。 2. 找到以`linux`开头的行,在行尾添加`init=/bin/bash`(临时指定启动后的shell)。 3. 按`Ctrl+X`启动,系统会进入bash。 4. 重新挂载根文件系统为可读写: ```bash mount -o remount,rw / ``` 5. 运行`update-grub`重新生成正确的`grub.cfg`: ```bash update-grub ``` 6. 如果之前修改了`/etc/default/grub`,请用文本编辑器修正错误。 7. 重启系统: ```bash exec /sbin/init ``` ### 总结 - **永远不要直接修改`grub.cfg`**,而应修改`/etc/default/grub`并运行`update-grub`。 - 如果修改后重启仍被覆盖,检查是否有其他进程(如cloud-init)干扰,并考虑锁定文件。 - 修改错误导致无法启动时,可以通过GRUB编辑模式进入临时shell修复。 ### 相关问题 1. 如何自定义GRUB启动菜单的背景和主题? 2. 如何在GRUB中添加自定义启动项(如启动另一个操作系统)? 3. 如何修复因GRUB配置错误导致的系统无法启动? 4. Ubuntu系统启动过程中GRUB的作用是什么?</think>### Ubuntu 修改 GRUB 配置后恢复原状的解决方案 #### 核心问题分析 当您直接修改 `/boot/grub/grub.cfg` 后重启系统时文件自动恢复,这是**正常且预期的行为**。根本原因在于: 1. `grub.cfg` 是自动生成的引导配置文件[^1] 2. 系统在以下情况会自动重建该文件: - 内核更新时 - 执行 `update-grub` 命令时 - 系统检测到硬件变化时 3. 直接修改 `grub.cfg` 会被系统更新覆盖[^1] #### 正确修改方法(永久生效) ```mermaid graph LR A[修改配置源文件] --> B[更新GRUB配置] B --> C[重启系统] C --> D[配置永久生效] ``` ##### 具体步骤: 1. **修改配置源文件**(非 `grub.cfg`) ```bash sudo nano /etc/default/grub # 编辑核心配置文件 ``` 修改关键参数: ```ini GRUB_TIMEOUT=10 # 启动菜单等待时间 GRUB_CMDLINE_LINUX_DEFAULT="quiet splash" # 内核参数 GRUB_GFXMODE=1920x1080 # 分辨率设置 ``` 2. **更新 GRUB 配置** ```bash sudo update-grub # 生成新的grub.cfg[^1] ``` 3. **验证修改** ```bash # 检查超时设置 grep 'set timeout=' /boot/grub/grub.cfg # 检查内核参数 grep 'linux.*root' /boot/grub/grub.cfg ``` #### 特殊场景处理 若修改后配置仍被重置,需处理深层原因: 1. **禁用 cloud-init 覆盖**(云服务器常见问题) ```bash echo 'network: {config: disabled}' | sudo tee /etc/cloud/cloud.cfg.d/99-disable.cfg sudo cloud-init clean && sudo reboot ``` 2. **锁定配置文件**(防止意外修改) ```bash sudo chattr +i /etc/default/grub # 设置不可变标志 ``` > 解锁命令:`sudo chattr -i /etc/default/grub` 3. **检查自动更新服务** ```bash # 查看可能触发grub更新的服务 systemctl list-unit-files | grep -E 'grub|kernel' ``` #### 配置错误导致无法启动的修复方法[^2] 1.GRUB 救援界面: ```grub ls # 查看磁盘分区 set root=(hd1,gpt4) # 设置根目录(根据实际分区调整) linux /boot/vmlinuz-5.15.0-generic root=/dev/sdb4 # 指定内核和根分区 initrd /initrd.img # 加载初始化内存盘 boot # 启动系统 ``` 2. 进入系统后修复: ```bash sudo nano /etc/default/grub # 修正错误配置 sudo update-grub sudo reboot ``` #### 高级定制方法 如需深度定制菜单: 1. 创建自定义脚本: ```bash sudo nano /etc/grub.d/40_custom ``` 添加自定义菜单项: ```grub menuentry "My Custom Boot" { set root=(hd0,1) linux /vmlinuz-custom root=/dev/sda1 } ``` 2. 更新配置: ```bash sudo chmod +x /etc/grub.d/40_custom sudo update-grub ``` #### 验证流程 ```bash # 检查修改持久性 md5sum /boot/grub/grub.cfg # 重启前后对比校验值 # 监控文件变化 sudo apt install inotify-tools sudo inotifywait -m /etc/default/grub # 监控文件修改事件 ``` > **关键提示**:永远通过 `/etc/default/grub` 修改配置,执行 `sudo update-grub` 使更改永久生效[^1]。直接编辑 `grub.cfg` 的修改会在系统更新时丢失。 --- ### 相关问题 1. 如何为 GRUB 菜单添加自定义背景图片? 2. Ubuntu 系统启动过程中各阶段的配置文件是什么? 3. 如何修复因 GRUB 配置错误导致的系统无法启动? 4. 哪些系统服务会影响 Linux 的引导配置持久化? 5. 如何在多系统环境中配置 GRUB 启动顺序?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

等风来不如迎风去

你的鼓励是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值