[分享]Linux与Windows双系统下的Grub引导管理器安装——boot.ini与menu.lst的例解

启动讨论 grub/grub2/syslinux/grub4dos/Lilo
mrfox
帖子: 207
注册时间: 2006-06-29 23:47

转贴   Linux/UNIX命令dd简介

#16

帖子 mrfox » 2006-07-01 16:27

Linux/UNIX命令dd简介

--------------------------------------------------------------------------------


dd 是 Linux/UNIX 下的一个非常有用的命令,作用是用指定大小的块拷贝一个文件,并在拷贝的同时进行指定的转换。

dd 的主要选项:
指定数字的地方若以下列字符结尾乘以相应的数字:
b=512, c=1, k=1024, w=2, xm=number m

if=file
输入文件名,缺省为标准输入。

of=file
输出文件名,缺省为标准输出。

ibs=bytes
一次读入 bytes 个字节(即一个块大小为 bytes 个字节)。

obs=bytes
一次写 bytes 个字节(即一个块大小为 bytes 个字节)。

bs=bytes
同时设置读写块的大小为 bytes ,可代替 ibs 和 obs 。

cbs=bytes
一次转换 bytes 个字节,即转换缓冲区大小。

skip=blocks
从输入文件开头跳过 blocks 个块后再开始复制。

seek=blocks
从输出文件开头跳过 blocks 个块后再开始复制。(通常只有当输出文件是磁盘或磁带时才有效)

count=blocks
仅拷贝 blocks 个块,块大小等于 ibs 指定的字节数。

conv=conversion[,conversion...]
用指定的参数转换文件。

转换参数:

ascii 转换 EBCDIC 为 ASCII。

ebcdic 转换 ASCII 为 EBCDIC。

ibm 转换 ASCII 为 alternate EBCDIC.

block 把每一行转换为长度为 cbs 的记录,不足部分用空格填充。

unblock
使每一行的长度都为 cbs ,不足部分用空格填充。

lcase 把大写字符转换为小写字符。

ucase 把小写字符转换为大写字符。

swab 交换输入的每对字节。 Unlike the
Unix dd, this works when an odd number of
bytes are read. If the input file contains
an odd number of bytes, the last byte is
simply copied (since there is nothing to
swap it with).

noerror
出错时不停止。

notrunc
不截短输出文件。

sync 把每个输入块填充到ibs个字节,不足部分用空(NUL)字符补齐。

由于 dd 命令允许二进制方式读写,所以特别适合在原始物理设备上进行输入/输出。例如可以用下面的命令为软盘建立镜像文件:
dd if=/dev/fd0 of=disk.img bs=1440k
有趣的是,这个镜像文件能被 HD-Copy ,Winimage 等工具软件读出。再如把第一个硬盘的前 512 个字节存为一个文件:
dd if=/dev/hda of=disk.mbr bs=512 count=1
xiaoyong
帖子: 515
注册时间: 2006-05-20 10:38

#17

帖子 xiaoyong » 2006-07-02 3:00

mrfox 写了:--root-directory


文章中漏掉了一个“-”

楼主的文真是好,只可惜跟着做到要拷贝时我是NTFS且没软驱
# mount -t msdos /dev/fd0 /mnt 是不能用的,而我自己MOUNT上U盘又提示说
/dev/sda1/不是目录,楼主再指教下?
U盘的文件系统通常是fat16或fat32,所以挂载时要指定vfat,即
# mount -t vfat /dev/sda1 /mnt
这样就把U盘挂到了 /mnt目录下,然后执行
# dd if=/dev/hdaX of=/mnt/linux.lnx bs=512 count=1
此处/dev/hdaX 为Linux的根分区(已在该分区上安装了Grub),这样就把Linux根分区上的Grub引导扇区转换成了U盘上的文件linux.lnx

你只要正确挂载了U 盘,后续的安装应该是没有问题的。

谢谢楼上的提示,不过除了—root-directory的笔误(应为--root-directory),我的错误似乎还在 --root-directory后的参数上,按照#grub-install --help的说明,
--root-directory=DIR install GRUB images under the directory DIR instead of the root directory
即,“--root-directory=DIR 以指定的目录 DIR 下的Grub引导镜像代替根目录(指正在运行的Linux系统——如LiveCD——的根目录)来安装Grub”,GRUB images就是 /boot/grub 目录下的 stage1、stage2 等文件
命令似乎应该写成
# mount /dev/hdaX /mnt
# grub-install --root-directory=/mnt/boot/grub /dev/hdaX

--root-directory后的参数究竟应该是/mnt,还是/mnt/boot/grub? 即所指定的目录是指 /boot/grub 所在分区的根目录,还是/boot/grub目录本身?

请你测试一下,并将结果告诉大家。印象中我过去就是用的/mnt,但再看grub-install的帮助提示,反而怀疑自己弄错了,但我这几天没有时间去测试了,抱歉!
xiaoyong
帖子: 515
注册时间: 2006-05-20 10:38

#18

帖子 xiaoyong » 2006-07-02 3:36

呵呵,google 了一下 grub-install,在http://www.gnu.org/software/grub/manual ... stall.html看到
Invoking grub-install

The program grub-install installs GRUB on your drive using the grub shell (see Invoking the grub shell). You must specify the device name on which you want to install GRUB, like this:

grub-install install_device


The device name install_device is an OS device name or a GRUB device name.

grub-install accepts the following options:

--help
Print a summary of the command-line options and exit.
--version
Print the version number of GRUB and exit.
--force-lba
Force GRUB to use LBA mode even for a buggy BIOS. Use this option only if your BIOS doesn't work properly in LBA mode even though it supports LBA mode.
--root-directory=dir
Install GRUB images under the directory dir instead of the root directory. This option is useful when you want to install GRUB into a separate partition or a removable disk. Here is an example in which you have a separate boot partition which is mounted on /boot:

grub-install --root-directory=/boot hd0

--grub-shell=file
Use file as the grub shell. You can append arbitrary options to file after the file name, like this:

grub-install --grub-shell="grub --read-only" /dev/fd0

--recheck
Recheck the device map, even if /boot/grub/device.map already exists. You should use this option whenever you add/remove a disk into/from your computer.
其中
--root-directory=dir
Install GRUB images under the directory dir instead of the root directory. This option is useful when you want to install GRUB into a separate partition or a removable disk. Here is an example in which you have a separate boot partition which is mounted on /boot:

grub-install --root-directory=/boot hd0
说得很明白了,--root-directory后一定是Grub所在分区的根目录,我没有记错,正确的命令的确是
# grub-install --root-directory=/mnt /dev/hdaX
ui
帖子: 2
注册时间: 2006-05-26 9:05

#19

帖子 ui » 2006-07-13 16:55

赞一把,刚刚正在处理这个问题
xautofzx
帖子: 315
注册时间: 2005-05-11 20:14
来自: 西安理工大学

#20

帖子 xautofzx » 2006-07-15 0:31

非常好的文章。
bigbighill
帖子: 69
注册时间: 2006-07-12 16:02

#21

帖子 bigbighill » 2006-07-17 8:24

第6种最方便简单
头像
xuanshuihe
帖子: 11
注册时间: 2006-09-08 19:41
来自: Qingdao,China

#22

帖子 xuanshuihe » 2006-09-14 0:33

不错的文章,很详细
flickxie
帖子: 42
注册时间: 2006-04-04 3:11

#23

帖子 flickxie » 2006-09-14 22:25

好文。。。谢谢。。。
airix
帖子: 9
注册时间: 2006-10-17 14:46

#24

帖子 airix » 2006-10-19 12:24

请教几个问题:
1.如何察看当前的系统中,Grub是安装在MBR中还是安装在linux分区中?
2.如果原来的Grub安装在MBR中,把它按照文中所说的重新安装Grub到linux分区,
然后改成由NTLDR引导Grub,那么最后如何将修改过的NTLDR写道MBR中,
让系统首先引导NTLDR?

另外问一个不太相关的内容,硬盘分区的时候,一般网上都建议分成一个(两个,三个也行)主分区+一个扩展分区
然后再扩展分区里面划分逻辑分区,请教可不可以分出来两个主分区+两个扩展分区,
然后再在每个扩展分区里面划分逻辑分区?linux安装在主分区和扩展分区各有什么利弊么?
谢谢!
头像
vAdonai
帖子: 79
注册时间: 2006-09-12 14:04
来自: 广州
联系:

#25

帖子 vAdonai » 2006-10-19 14:10

好东西~~收藏了~~
头像
vAdonai
帖子: 79
注册时间: 2006-09-12 14:04
来自: 广州
联系:

#26

帖子 vAdonai » 2006-10-19 14:10

好东西~~收藏了~~
xiaoyong
帖子: 515
注册时间: 2006-05-20 10:38

回复24楼

#27

帖子 xiaoyong » 2006-11-10 14:11

按由易到难的顺序回答你的问题,未必准确,仅供参考:

1、关于硬盘分区,对 linux 来说,主分区和逻辑分区都是无所谓的,通过 Grub 都是可以启动的。只有很多年前的非常老的机子,硬盘的数据结构和 bios 的限制使得硬盘 1024 柱面以后的分区的启动会有问题,但对于现在的新机子已经不存在这个限制了。但很多系统,如 windows, dos, minix, BeOS 只能安装在主分区,逻辑分区是不能启动的。我的经验是:启动分区尽量放在主分区,数据放在逻辑分区,同时虽然说扩展分区里理论上可以分任意多的逻辑分区,但太多的逻辑分区往往会造成复杂性——也就是脆弱性,而分区上的问题如果出来了,就会有大麻烦,除非你不在意硬盘上的数据。

具体分区,我是划分3个主分区,1个扩展分区,扩展分区内再根据需要划分3到4个逻辑分区,——我的做法是因为对多系统安装有偏好,所以预留了用于安装其他系统的主分区,当然主分区用于存储数据也是没有问题的。

扩展分区似乎只能有一个,你可以试试两个扩展分区能否建起来,但似无必要。

启动分区放在主分区,只要该分区是被激活的(active), 就可以通过原始的 MBR 直接引导该分区,不须借助引导管理器,可以简化启动的过程,而放在逻辑分区,则需要借助 Grub 或 lilo 等程序来完成启动。

2、“将修改过的NTLDR写道MBR中”,实际是在 MBR 中恢复ntloader, 或者说安装NTloader: 只要用 win2k/xp安装光盘引导机器启动,选择修复系统,用其中的手动修复,只须恢复启动环境就可以了,——Ntloader是windows 2000 和 XP 的引导管理器,不是单独的程序,所以只能用安装光盘,但我们又不需要重装系统,所以这样操作。

补充:
win2k/XP下最简单的恢复MBR的方法,用安装光盘启动选择进入系统控制台手动修复,在dos命令行模式下键入 fixmbr,就可以恢复MBR的原初设置,去除 Grub。

3、“如何察看当前的系统中,Grub是安装在MBR中还是安装在linux分区中?”:Grub 如果装到了MBR,机器启动就会首先引导Grub,就会先出现 Grub 的引导菜单;Grub 如果装到了逻辑分区或未被激活的主分区中,会在别的引导管理器引导之后加栽Grub,比如说先出现 win2k/xp的操作系统选择界面,然后进入Grub 菜单,那就是在用 Ntloader 加载 Grub;对于 Grub 装到了被激活的主分区的情况,和第一种情况的表现类似,从屏幕显示上区分不出来,但自己装的机子自己最清楚啊。
上次由 xiaoyong 在 2007-07-19 12:36,总共编辑 1 次。
xcity
帖子: 135
注册时间: 2006-09-20 17:11

#28

帖子 xcity » 2006-11-10 16:28

其实我不同意楼主的观点。微软的ntloader虽然可以引导linux,但是ntloader从来就没有为linux考虑过。相反,grub为了兼容微软的系统,为微软系统考虑了很多。我用grub来引导windows从来就没有遇到问题。而且grub可以在启动的时候,进行简单的编辑,你可以手动修改menu.lst里面的所有内容,有了问他很容易搞定!

最为简单的道理,linux的光盘和windows的光盘都提供了修许mbr的功能,你不会告诉我说你不知道windows光盘里面出了安装,你不知道怎么修复使用那个光盘来修复mbr。但是,windows的光盘修复mbr只会启动windows,但是linux的安装光盘,修复之后,不仅仅修复linux,也会修复windows

如果你用ntloader来启动linux,每次重新编译linux 内核都需要重新把首扇区的512byte写道ntloader的引导文件里面去,很麻烦的。
xiaoyong
帖子: 515
注册时间: 2006-05-20 10:38

[讨论] 关于Grub 和 Ntloader 的一些说明

#29

帖子 xiaoyong » 2006-11-10 21:38

楼上关于 Grub 和 Ntloader 的优劣比较我是同意的,Grub 的确是一个功能强大而使用简单的引导管理器,似乎还没有它不能引导的系统,而且 Ntloader 的确很烂,本来它就是为了引导 win2k/XP 的。但本文讨论的是一种特定情形—— Windows 与 Linux 的双系统安装,我并不推荐使用 Ntloader 作为惯常引导 Linux 的手段,如果是 Linux 的单系统安装的话。

一句话,在双系统安装中为了迁就兼容性(指引导管理器方面)较差的 windows 系统,退而求其次,以 Windows 的稳定引导为优先考虑,故而让 Grub 俯身于 Ntloader ,对于 Grub 这样一个优秀的引导管理器,的确有些委屈它了。但从使用角度考虑,只要稳定而实用就可以了。我所推荐的方法,在重装 Windows 的情况下是非常简单的,只要把保存的 Linux 分区引导文件和 boot.ini 恢复到 C: 盘根分区下就可以了。

补正:“如果你用ntloader来启动linux,每次重新编译linux 内核都需要重新把首扇区的512byte写道ntloader的引导文件里面去”, 事实是,Linux 内核的重新编译与 Linux 分区首扇区的 512 字节无关,也就是说编译前的扇区引导文件是可以正常引导编译后的内核的,——这正是 Grub 的强大之处,而 lilo 是不行的,编译内核后必须对 lilo 重新安装;其实,即使用 lilo 引导 Linux 系统,除了编译内核后必须重新安装 lilo,Ntloader 所要加载的 Linux 扇区引导文件也是不需要修改的。
xcity
帖子: 135
注册时间: 2006-09-20 17:11

#30

帖子 xcity » 2006-11-11 22:38

呵呵,其实都可以啊!ntloader需要手动配置,我用grub似乎就没有配置过。在我把windows做为主用系统的时候,我就是使用ntloader来引导的,因为windows有个大家都知道的毛病,就是过个半年,你基本上就需要重新安装一下,否则慢的厉害!现在我公司和家里的电脑,主力系统都是linux,只是在家里的笔记本上还有个双起,windows的唯一用处就是来打打游戏!已经2年都没有重新安装过了!

工作中,也不是所有问题都可以用linux解决,netmeeting就是一个。公司的美国人特别喜欢在开会的时候用netmeeting来共享屏幕,我用vmware来起一个windows来解决。嘿嘿!

关于首扇区的512个字节是我搞错了,我曾经使用过ntloader来引导linux,那个时候确实用的是lilo,lilo把所有的信息都加载到首扇区里面去,所以每次换内核都需要重新dd那512个字节,grub确实不需要!
回复