通过grub-install命令把grub安装到u盘

通过grub-install命令把grub安装到u盘

①准备一个u盘,容量不限,能有1MB都足够了。 
②把u盘格式化(我把u盘格式化成FAT、fat32格式了,最后证明也是成功的)。
③开启linux系统,打开命令行终端,进入root模式,然后输入命令行:
mount   /dev/sdb3   /tmp/boot
grub-install --root-directory=/tmp/boot --no-floppy /dev/sdb

注意:上面/dev/sdb是我的u盘,在linux系统里的盘符吧,那个/dev/sdb3为什么是“3”,这个因不同的实际情况而不同吧。
总的来说,/dev/sdb就是我的u盘的名字,/dev/sdb3就是我的u盘的一个分区。

④这个时候,你会发现,你的u盘,已经多了一个boot目录,里面有一些内容,这个时候,boot目录的路径是/dev/sdb3/boot/。
⑤把“/boot/grub/grub.conf”和“/boot/grub/splash.xpm.gz”,复制到“/dev/sdb3/boot/grub/”下面(也就是“u盘/boot/grub/”)。
⑥然后把/dev/sdb3/boot/grub/grub.conf修改成以下内容:
# grub.conf generated by anaconda
#
# Note that you do not have to rerun grub after making changes to this file
# NOTICE:  You do not have a /boot partition.  This means that
#          all kernel and initrd paths are relative to /, eg.
#          root (hd0,0)
#          kernel /boot/vmlinuz-version ro root=/dev/sda1
#          initrd /boot/initrd-version.img
#boot=/dev/sda
default=0
timeout=5
splashimage=(hd0,0)/boot/grub/splash.xpm.gz

title Red Hat Enterprise Linux Server 1280*1024(3.4.0)
root (hd0,0)
kernel /boot/vmlinuz-3.4.0  root=/dev/sda1 selinux=0 init=/sbin/init vga=795 fb:on
initrd /boot/initrd.img-3.4.0

title Red Hat Enterprise Linux Server 1600*1200(3.4.0)
root (hd0,0)
kernel /boot/vmlinuz-3.4.0  root=/dev/sda1 selinux=0 init=/sbin/init vga=858 fb:on
initrd /boot/initrd.img-3.4.0

⑦重启计算机,在BIOS里,设置为从u盘启动,即可。 

说明:grub2.0以后支持的是grub.cfg

set default=0
set timeout=5
set gfxmode=1280x1024
menuentry 'Red Hat Enterprise Linux Server 1280*1024(3.4.0)' {
       set gfxpayload=1280x1024x32,1024x768x32,800x600x32,800x600x16,800x600,640x480
	linux /boot/vmlinuz-3.4.0  root=/dev/sda1 selinux=0 init=/sbin/init vga=795
	initrd /boot/initrd.img-3.4.0
}

制作步骤:

先用cfdisk 在U盘中,创建个两个分区,第二个一会儿作为boot分区。

0:mkfs.ext3 /dev/sdc5
1:mount /dev/sdc5 /tmp/boot
2:grub-install --root-directory=/tmp/boot --no-floppy  /dev/sdc(*注意*)

自己修改一下menu.lst文件吧。这个简单。

****************************************************************************
以上全部推翻重写。需要懂得理论上的知识,才能做出正确的结果。

****************************************************************************

首先理解引导中U盘引导部分的过程。
1:当BISO通电引导到磁盘时,会检查MBR区域(MBR:446+DPT:64+ENDFLAG:2=512)
MBR里面必须存在引导程序,通常会是我们熟悉grub,dos,95dos引导等。否则无法引导。
这里做个简要说明:平常我们将系统安装硬盘上,通常安装都是安装windows,再安装linux,而通常当安装linux时,会提示你是否安装到MBR里面,或者安装到你的某个磁盘分区里面,通常是你的/boot的所在分区。

安装在MBR,或者某个磁盘分区。这2者之间存在差别。
a:当安装到MBR时,会将已经存在的Win自己在MBR的引导程序替代,变成GRUB引导。
b:当安装到某个分区时,会由存在的Win的引导程序,引导到那个分区的Grub,再有Grub引导到各个操作系统。
这就是2者的差别。win没有为其他系统考虑过,到了自己的磁盘分区之后,对于引导其它系统,没有提供可以直接引导的命令,只能进入后修改它的boot.ini文件。而grub提供命令命令菜单,可以进行手工引导。

2:grub的制作
笔者发现win只能自动识别出U盘的第一个分区,而对于第二个分区无动于衷。

所以做了这样的分区方案。第一个分区用来存储数据,第二个分区用来放置引导信息,这样不至于在使用过程中,自己创建的grub的boot分区,被别人勿删除,或者格式化。

我的1G U盘分区如下:

/dev/sdc1  950M   ntfs                                                      用于平时的数据存储
/dev/sdc5  60M     ext3   (boot标识,可以引导启动,用cfdisk时,很容易修改。) 用于存储引导文件。

执行命令
mount /dev/sdc5 /tmp/boot
grub-install --root-directory=/tmp/boot --no-floppy  /dev/sdc
此处脚下留神,必须讲grub安装到/dev/sdc,否则目前对于U盘的MBR来讲,没有可以用的引导程序。
此命令执行后,会在/tmp/boot/目录,也就是/dev/sdc5,下面产生目录/boot/grub.里面有*stage*等文件。

最后在/boot/grub 目录中建立menu.lst文件。文件内容如下:

timeout         20
default         0

title windows xp
map (hd0) (hd1)
map (hd1) (hd0)
rootnoverify (hd1,0)
makeactive
chainloader +1

讲一下,如果你用U盘引导后,他会把自己标记为hd0。而已经安装在硬盘上的win操作系统认为自己的宿主硬盘是hd0,此时引导win操作系统时就会造成盘符错位。因此我们需要用map进行一下映射转换。

map 的解释及使用如下:
map TO_DRIVE   FROM_DRIVE

映射 驱动器FROM_DRIVE 到TO_DRIVE.

当你链式引导向dos一样的操作系统,并且该系统没有在第一个驱动器上时,必须进行该映射。

 

 

that's Ok!

****************************************************************************
随着我的使用的愈加频繁,menu.lst上面的内容多了起来。

****************************************************************************

下面分享一下,里面的内容。首先是目录结构。

root@kook:~# fdisk -l /dev/sdb

Disk /dev/sdb: 1010 MB, 1010826752 bytes
32 heads, 61 sectors/track, 1011 cylinders
Units = cylinders of 1952 * 512 = 999424 bytes

  Device Boot      Start         End      Blocks   Id  System
/dev/sdb1               1         951      928145+   6  FAT16
/dev/sdb2   *         952        1011       58560   83  Linux
root@kook:~# mount /dev/sdb2 /tmp/boot/
root@kook:~# tree -d /tmp/boot
/tmp/boot
|-- boot
|   `-- grub
|-- centos4.4
|-- centos4.4-64
|-- lost+found
`-- ubuntu704

6 directories

下面是menu.lst的内容。

root@kook:~# cat /tmp/boot/boot/grub/menu.lst
color light-gray/blue
timeout         20
default         0

title           Windows 95/98/NT/2000
map             (hd0) (hd1)
map             (hd1) (hd0)
rootnoverify    (hd1,0)
makeactive
chainloader     +1

title           CentOS 4.4 x86_64 Net Install
root            (hd0,1)
kernel          /centos4.4-64/vmlinuz root=/dev/hda2 ro single
initrd          /centos4.4-64/initrd.img
boot

title           CentOS 4.4 i386 Net Install
root            (hd0,1)
kernel          /centos4.4/vmlinuz root=/dev/hda2 ro single
initrd          /centos4.4/initrd.img
boot

title           Ubuntu 7.04 AMD 64 Net Install
root            (hd0,1)
kernel          /ubuntu704/linux root=/dev/hda2 ro single
initrd          /ubuntu704/initrd.gz
boot

 

 

 

注意:
1:成功的关键是MBR的内容。可以用dd if=/dev/sdc of=/tmp/mbr.bin bs=446 count=1 提取 出。hexdump -C/tmp/mbr.bin 查看
2:有时候MBR会有问题。用这个命令清零吧。

dd if=/dev/zero of=/dev/sdc bs=446 count=1 

因为一个是0.97版(grub-legacy),一个是2.02版(grub2)
grub-legacy 没有 /boot/grub/grub.cfg 这个文件,而是使用 menu.lst 文件。

root (hd0,0)
kernel /boot/vmlinuz-3.10xxx
initrd /boot/initrd-3.10xxx
boot
这个格式是grub格式,或者grub一代

root (hd0,msdos0)
linux /boot/vmlinuz-3.10xxx
initrd /boot/initrd-3.10xxx
boot
这是grub2的写法

rhel6以前都采用grub一代,到rhel7则采用grub2模块化引导管理器

grub和grub2的异同还请参考官方文档或自行百度!

时间: 2024-09-22 07:45:05

通过grub-install命令把grub安装到u盘的相关文章

命令行-使用chocolatey中的命令choco install时如何改变安装软件的路径?

问题描述 使用chocolatey中的命令choco install时如何改变安装软件的路径? 5C 在cmder中安装了chocolatey管理器,然后使用choco install命令来安装软件,我想知道安装软件时如何修改路径?我在命令行下输入choco install -?并没有找到修改路径的参数

详解Linux系统中的install命令的用法

  用法:install [选项]... [-T] 源文件 目标文件 或:install [选项]... 源文件... 目录 或:install [选项]... -t 目录 源文件... 或:install [选项]... -d 目录... 此install 将文件(通常仅是编译后的文件)复制到您所选择的目的位置. 如果您希望在GNU/Linux 操作系统上下载并安装一个即时可用的软件包, 您应当使用诸如yum(1) 和apt-get(1) 的软件包管理器. 在前三种形式中,将源文件复制到目标文

Linux 命令详解(三)./configure、make、make install 命令

这些都是典型的使用GNU的AUTOCONF和AUTOMAKE产生的程序的安装步骤 一.基本信息 1../configure 是用来检测你的安装平台的目标特征的.比如它会检测你是不是有CC或GCC,并不是需要CC或GCC,它是个shell脚本. 2.make 是用来编译的,它从Makefile中读取指令,然后编译. 3.make install是用来安装的,它也从Makefile中读取指令,安装到指定的位置. 注意:AUTOMAKE和AUTOCONF是非常有用的用来发布C程序的东西. 二.详细解释

gbk-执行 gradlew install 命令时,报 错误: 编码 GBK的不可映射字符

问题描述 执行 gradlew install 命令时,报 错误: 编码 GBK的不可映射字符 android studio2.0 在做自己的library,想上传到仓库,看的教程http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2015/0623/3097.html 前面都没问题,唯独执行gradlew install 这个命令时报错了. 1.在android studio里面看的,文件都是utf-8格式的文件. 2.查了很多类似问题,

把Arch Linux安装到U盘上的具体教程

Arch Linux简介 Arch Linux(或称Arch)是一种以轻量简洁为设计理念的Linux发行版.其开发团队秉承简洁.优雅.正确和代码最小化的设计宗旨.Arch Linux 项目受 CRUX 启发,由 Judd Vinet 于2002年启动. Arch Linux是起源于加拿大的一份致力于使用简单.系统轻量.软件更新速度快的GNU/Linux发行版.创始人Judd Vinet出于对Debian以及Red Hat的包管理器不满,以及受CRUX影响而创立.最初针对i686,但是如今对x86

win8安装到u盘图文教程

安装win8到u盘不知道大家有没有想过?试想想如果将win8安装到U盘(或者移动硬盘也可以),随身携带,走到哪插上U盘,一切搞定!移动办公,这才是王道,什么"云"都弱爆了!小编今天就带来详细的win8安装到u盘图文教程. Win8安装到u盘图文教程 捣鼓了2天,终于搞定了,不敢独享,特拿来与大家分享下!就拿微软的最新操作系统Win8来做个范例吧!网络上流传的方法很多,这里以最简单的小白看了也可以的方法来举例.(意思就是把U盘当C盘装系统了,带到任何一款机器上都可以启动直接进入Win8,

Win8安装在U盘不得不知的方案

  1.Win8 系统镜像 2.Windows To Go辅助软件 多线程优化特别版 (以上文件,篇尾会提供的) 好了,开始吧!首先我们要先提取win8镜像中sources文件夹的install.wim,大家可以用WinRAR来提取简单方便. 然后插上我们的U盘(或者移动硬盘),用系统自带的磁盘管理设置U盘为"活动区",这一步很重要,不设置的话可能导致U盘启动引导不了系统!右击移动盘符,设为"活动"即可! 打开Windows To Go辅助软件(win7用户请以&q

怎么将win8安装在U盘或者移动硬盘里

将Windows8安装在U盘或者移动硬盘里面方法:Windows8安装在U盘或者移动硬盘,当然你需要一个U盘或者移动硬盘(大于5G以 上),如果是用U盘, 下载 Windows 7 USB/DVD download tool 软件将Windows 8 DP ISO做成一个可引导启动盘.如果是移动硬盘的话,需要如下设置: 1.计算机 – 右键 – 管理 – 磁盘 ,保证硬盘里有个分区有足够大的空间,或者独立分一块5-10GB的空间出来.然后在Windows 系统管理里面,磁盘管理中将这个分区设置为

Win7系统如何把默认安装路径C盘换成D盘缓解C压力

  Win7系统如何把默认安装路径C盘换成D盘缓解C压力          1.按"Win+R"调出"运行"对话框,输入"regedit"命令后按回车,打开注册表编辑器. 2.在打开的注册表中,依次展开以下注册项HKEY_LOCAL_MACHINE SOFTWARE Microsoft Windows CurrentVersion; 3.在右侧窗格中找到ProgramFilesDir项,双击打开该值进行编辑,将默认数值修改为你要修改的路径; 4.