系统启动方式
http://itbbs.pconline.com.cn/diy/15657192.html 磁盘分区介绍的比较清楚
http://blog.sina.com.cn/s/blog_6b94d5680101pn4a.html initramfs与vmlinuz两个文件详解
这里简单介绍下什么是MBR?GPT?MBR(主引导记录)就是我们常用的分区方式,最大支持2.19TB(2的32次方*512byte),可以划分4个主分区或3个主分区+1个扩展分区。大于2.19T的硬盘就会无法识别全部容量,所以第一次使用3T硬盘的童鞋估计都遇到刚才提及的问题。
一般使用BIOS的x86架构PC,3T硬盘做系统盘(主盘)就必须使用MBR分区方式。从Vista、win7时代开始,为了解决硬盘容量限制问题,增加了GPT(GUID分区表)。GPT最大支持9.4ZB(1ZB=1024PB,1PB=1024EB,1EB=1024TB,即9.4ZEB=94亿TB)容量,支持128个主分区(window限制,有资料介绍实际无限),但使用GPT分区方式的硬盘只能作为数据盘(从盘)使用,并且注意xp 32位是无法识别GPT分区形式的数据盘的。
另外 ,使用EFI(intel推出的替代BIOS的升级方案,我们理解为一种较新的BIOS)的苹果机,或者基于Itanium的window机(一般用户不必理会是什么),则可以把系统盘使用GPT分区形式。还有一种,我们常用的x86架构的pc,由2011年出的P67、H67、890GX等使用的UEFI BIOS的主板则可支持系统盘使用GPT分区形式。(具体有哪些主板支持,这里就不讨论了)
总结,一般大家使用硬盘,是BIOS+MBR,大多数正在使用win7的童鞋可以考虑数据盘(从盘)使用GPT分区形式的3T盘。UEFI BIOS的新主板可以考虑系统盘(主盘)直接使用GPT,安装win7 x64。苹果机则是EFI+GPT。
当我把3T硬盘选择MBR分区形式后,会自动变成一个2T区域+一个746G区域。
与支持最大卷为2 TB(Terabytes)并且每个磁盘最多有4个主分区(或3个主分区,1个扩展分区和无限制的逻辑驱动器)的MBR磁盘分区的样式相比
GPT磁盘分区样式支持最大卷为18 EB(Exabytes)并且每磁盘的分区数没有上限,只受到操作系统限制(最初规划硬盘分区时,留给分区表的空间决定了最多可以有多少个分区,64版Windows限制最多有128个分区,这也是UEFI规定的分区表的最小尺寸)。
因为现在普遍的电脑都在2TB以内,但是使用的预装win8的新本子却格式为GPT,这并不方便与我们的U大师安装,因U大师安装以MBR分区legacy引导为主(大部分第三方U盘启动都未支持UEFI引导)所以预装win8的新本子要改成legacy引导,才可以设置U盘启动所以我们要在BIOS处改成“禁用UEFI,启用legacy”。
有三个标准可以选择:基础的标准分区(针对单磁盘而言),多磁盘的raid分区,多磁盘的lvm
Linux系统一般需要三个分区:Boot分区、根分区、swap分区。其中,必不可少的是根分区,boot分区和swap分区可有可无。考虑到内存可能不足,一般保留swap分区。
分区表只有64bytes,最多只能分成四个分区,其中扩展分区最多只能有一个。所以推荐的分区方法是P+P+P+E,这样系统没有用完的空间可在系统安装完成后根据需要自行分配。如果分区方式是P+P+P+P,那系统多余的空间将无法利用。
linux 是一个指令,它告诉 grub2 程序:“请使用后面给出的这个内核”,于是名为“/boot/vmlinuz-XXX”的内核将被载入内存,并读取“root=UUID=XXX”这个分区的一些必需的文件。【这里传入的内核参数root=UUID=XXX 也可以用 /dev/ram0 这种格式,这里这个路径 是从linux角度出发】
initrd /boot/initrd.img-XXX
initrd 也是一个指令,意思是:先用名称为“/boot/initrd.img-XXX”的文件,在内存中构造一个“虚拟”的根文件系统,以便于内核检测完硬件信息后载入必需的模块等等。
其实这个 initrd 也可以认为是内核的一部分,只是为了保持 vmlinuz 的简洁而分离出来的,有的内核甚至根本不需要这个东东
kernel是什么以及有哪些功能相信大家都很清楚,我就不多说了。这里主要介绍ubuntu10.04上安装的相关软件包、文件、目录以及kernel的配置方法。
至于initrd文件是干什么用的呢?
大家只要做一个简单的实验就可以明白了:在开机的GRUB命令行上去掉initrd这一行,然后按CTRL+x启动,过会你会发现屏幕出现“kernel panic”的提示。
为什么会这样呢?这是因为为了减小kernle文件(vmlinuz)的大小和增强灵活性,现在的发行版如ubuntu默认将硬盘接口卡如IDE,STAT,SCSI的驱动程序以模块(modules)的形式
放在initrd文件中,GRUB中去掉initrd这一行意味着initrd中的modules没有被加载kernel就不能识别该硬盘更别提挂载上面的根文件系统了。
initrd文件的功能主要有两个:
1、提供开机必需的但kernel文件(即vmlinuz)没有提供的驱动模块(modules)
2、负责加载硬盘上的根文件系统并执行其中的/sbin/init程序进而将开机过程持续下去【内核先以initrd /boot/initrd.img-XXX 的内存盘为根文件系统,再去加载硬盘上的根文件系统】
GRUB将kernle加载到内存并执行,kernel在运行的后期会读取并执行initrd文件中的init脚本文件并按照其中命令逐行执行,所以要掌 握initrd的作用和硬盘上的根文件系统加载过程,全面解析init文件是很重要的。在本文的第二部分,我会将/boot/initrd文件打开,逐行 解读init文件.
bios+mbr
efi+gpt
uefi+gpt
pxe启动
u盘启动
光盘启动
img文件,iso文件,gho文件
http://www.iteedu.com/os/grub/grubdiary/10.php grub相关命令详解
grub legacy相关命令
用cat (hd0,0)/tab键试分区
help cat
help root
help kernel
help initrd
help boot
help chainloader
cat指令是用来查看文件内容的,有时我们不知道Linux的/boot分区,以及/根分区所在的位置,要查看/etc/fstab的内容来得知,这时,我们就要用到cat (hd[0-n],y)/etc/fstab 来获得这些内容;注意要学会用tab键命令补齐的功能;
grub> cat ( 按tab 键会出来hd0或hd1之类的;
grub> cat (hd0, 注:输入hd0,然后再按tab键;会出来分区之类的;
grub> cat (hd0,6)
--------------------------------------------
grub leagcy
DOM kernel 2.6.2X
root (hd0,1)
kernel /boot/bzImage root=/dev/ram0 rw
initrd /boot/initrd.boot
savedefault fallback
DOM kernel 2.6.2X backup
root (hd0,2)
kernel /boot/bzImage root=/dev/ram0 rw
initrd /boot/initrd.boot
savedefault 0
--------------------------------------------
以下是grub2命令行相关命令与概念
lspci
terminal_input
terminal_output
没有参数时,列出所有设备
ls
有参数时,列出此设备下的文件
ls (hd0,msdos5)/root/
ls (hd0,msdos3)/initramfs-4.0
ls (hd0,msdos3)/vmlinuz-4.0
linux (hd0,msdos3)/vmlinuz-4.0
initrd (hd0,msdos3)/initramfs-4.0
显示正常的菜单
normal
没有参数时,列出所有环境变量
set
先安装了windows2003,用了两个主分区,hd0,0与hd0,1
再安装了fedora workstation 22 用了一个主分区是fedora的boot分区(hd0,2),第4个分区为扩展分区,5分区是fedora的根分区(hd0,4),6是fedora的swap分区(hd0,5),
并且安装了grub2 到磁盘的mbr里,即磁盘的第一个扇区,而不是启动分区的第一个扇区。
装完之后,没有win2003的启动菜单,这是用了两种方法,grub命令行与在系统里添加菜单项,如下
后来又安装了centos-6.5-x86_64-minimal用了三个分区,即(hd0,6)boot,(hd0,7)根分区,(hd0,8)swap分区。
结果将grub leagcy 安装到了mbr替换了原先的grub2,进入到grub leagcy的界面,用cat (hd0,1)/tab键逐个尝试来查看win2k3所在的分区,最后用下面的命令行可以正常启动win2003
但是好像不能启动fedora 22,因为是4.0的内核。最后终于通过uuid启动成功了。
cat (hd0,4)/etc/fstab 查看根分区的uuid号,填入下面的root=后面
kernel (hd0,2)/vmlinuz-4.0 ro root=UUID=c492851e-4b55-4966-adc3-30688c4a3a42
initrd (hd0,2)/initramfs-4.0
boot
最后结论是只要在不破坏每个系统的启动分区的情况下,磁盘的首扇区可以随意更改为想要的boot loader,
grub2时
安装双系统时
安装第二个linux时,选择空闲分区,安装完后,启动时只能看到linux的grub启动界面,不能启动windows,方法有两种
一是在grub命令行手动启动windows
二是在进入到linux里编辑文件,添加菜单项
grub>set 看到默认启动linux分区,并无windows相关选项
还需要知道windows启动分区的设备名
即通过
grub>ls
来查看具体的设备名
于是编辑vi /boot/grub2/grub.cfg
添加菜单项即可
menuentry "win2003" {
set root='hd0,msdos1'
chainloader +1
boot
}
调用另一个启动器,如
chainloader (hd0,1)+1
调用第一硬盘第一分区引导扇区内的启动器,可以是windows或linux的启动器
安装了centos-6.5-x86_64-minimal
下面的代码好像是grub leagcy的
title win2003
rootnoverify (hd0,5)
makeactive
chainloader +1
boot
相关文件与目录
/etc/grub.d/
/etc/default/grub
/boot/grub/grub.cfg
/usr/lib/grub/i386-pc/
Grub 命令行工作过程。计算机启动后,BOIS先做自检等工作,然后BOIS会加载磁盘的第一扇区(512字节)到内存某处,然后跳转到该处执行代码,这段代码就是上面所说的Grub写入MBR的部分,这段代码有Grub第二部分在磁盘上的位置信息,这段代码就是根据此信息加载第二部分,第二部分才是Grub的核心,第二部分会读取/boot/grub/grub.conf配置文件,然后根据此配置文件弹出用户界面,你看到的那些菜单选择项就是这么来的,当然,你也可以按字母键‘C’进入命令行方式。
GRUB支持直接和链式装载的引导方法。GRUB能用于几乎所有操作系统,绝大多数流行的文件系统,以及几乎所有的系统BIOS所能识别的硬盘。 GRUB的特性 注意:如果LILO已经被安装,并且是当前的系统引导装载程序,那并没有必要为了使用GRUB而删除它。
清除GRUB在MBR的残留信息- Linux系统相关- ELM’s Blog
估计大部分Linux初学者会遇到把Grub安装到MBR 上去了,现在不想用Linux,直接用分区工具把Linux分区给删除了,结果导致系统无法启动,具体恢复方法有很多,但是有的时候也很顽固: 1、如果能用光盘启动,那么使用光盘启动到dos,使用fdisk /mbr就搞定了。
是不是想让系统直接启动到Windows,不出现Linux的Grub(或LILO)引导界面(Solution 1~3),或者是在Windows中删除了Linux分区后无法正确启动Windows,而停留在“grub>”提示符处,怎么办 (Solution 4)? 请往下看,这里给你提供几种实用的方法:
Solution 1
用DOS命令fdisk恢复主引导扇区MBR(Main/Master Boot Record)
---用win98的引导盘或DOS引导盘引导系统到纯DOS提示符下,执行:”fdisk /mbr”即可。
Solution 2
在Linux系统中,恢复MBR。(如果你还能登陆到Linux系统中的话)
---在终端的命令提示符后输入: “dd if=/boot/boot.NNNN of=/dev/hda bs=446 count=1″
注意,其中bs(buffer size)是指重写的字节数。为什么不是512呢?主引导扇区是一个扇区(512字节呀),因为我们只是想通过扇面的命令修复系统MBR的引导或删除 Grub/LILO引导;而不是恢复整个主引导扇区。所以我们只把主引导扇区的备份文件boot.NNNN的前446个字节重写入主引导扇区。 boot.NNNN是我们在安装Linux之前整个主引导分区的备份。如果我们把512个字节全部写入主引导扇区就可能会把安装了Linux后改变了的硬 盘DPT表也破坏掉。那就坏事了!!! (MBR的512字节中前446字节为引导程序,紧跟着后面64字节为分区表,最后面2个字节为结束标记)
Solution 3
如果你的fdisk不好使,或者Linux已经翘翘了,不用着急,上帝关上了所有的门,但是他一定会为你留下一扇窗户,下面的工具可意帮助你:
Clear MBR 0.9:http://jelle.go.nease.net/resource/clsmbr.exe
---直接运行执行“Clear MBR”即可,本人有测试过,绝对安全,敬请放心使用。
Solution 4
Linux的分区已经被你从Windows中删除,系统启动后停在“grub>”提示符处。(方法一:按照Solution 1的方法,方法二:如下)
---在“grub>”提示符后输入:“rootnoverify (hd0,0)” 回车。 //将第一块硬盘(hd0)的第一个分区(0)设为根分区/root设备,但不加载文件系统。
---在“grub>”提示符后输入:“chainloader +1” 回车。//将启动引导权转交给当前分区的首扇区(Windows系统所在分区的首扇区)。
---在“grub>”提示符后输入:“boot” 回车。系统将启动Windows。如果不成功,则表明 (hd0,0) 不是 Windows 系统所在分区,再从第一步开始试一下“root (hd0,1)/root (hd0,2)/root (hd0,3)/…”,总之这样一定可以引导启动你的Windows系统。
---好了,进入Windows了,请采用Solution 3的方法,轻松搞定!
http://blog.csdn.net/kyokowl/article/details/7360778 bootloader相关
http://bbs.chinaunix.net/thread-2112551-2-1.html
http://www.cnblogs.com/wanyao/archive/2011/09/23/2186572.html
pxelinux.0文件详解
yum install syslinux安装这个包后才有pxelinux.0这个文件
vmlinuz文件详解
initrd.img文件详解
stage2.img文件详解
事件回放
因有一台老式笔记本想要安装系统,光驱刻盘麻烦,u盘引导不支持,看到可以pxe启动,因此去实施,也算复习一下pxe项目
piii cpu,256M内存,搞了半天硬盘坏着,怪不得一到格式化磁盘时,报错找不到驱动器。最后放弃。
两台机器
server端:cenots6.6-64-minimal tftp,dhcp,
client端:pxe
关闭iptables
chkconfig --level 2345 iptables off
关闭selinux
vi /etc/sysconfig/selinux
重启服务器
reboot
如果是http方式安装软件包,就不需要nfs了,否则需要nfs
选用http方式时,填写两个内容
1.ping mirror.symnds.com 得到ip地址63.245.196.124
2.填入这个路径 /distributions/CentOS-vault/4.5/os/i386/
yum install dhcp
yum install nfs-utils
yum install tftp-server
vi /etc/xinetd.d/tftp
service xinetd start
cp /usr/share/doc/dhcp-4.1.1/dhcpd.conf.sample /etc/dhcp/dhcpd.conf
vi /etc/dhcp/dhcpd.conf
cd /var/lib/tftpboot/
mkdir pxelinux.cfg
yum install mlocate
yum install syslinux
updatedb
locate pxelinux.0
cp /usr/share/syslinux/pxelinux.0 ./
一定要拷贝32位的源文件,一开始不知道,弄了个64,结果在boot:界面时,报错提示才知道。选用的是centos-4.5的源,新的源,有些驱动可能不支持。
http://mirror.symnds.com/distributions/CentOS-vault/4.5/os/i386/CentOS/base/
cp /mnt/isolinux/vmlinuz ./
cp /mnt/isolinux/initrd.img ./
cp /mnt/isolinux/isolinux.cfg pxelinux.cfg/default
将disable改为no
vi /etc/xinetd.d/tftp
注释掉这两行
#option domain-name "example.org";
#option domain-name-servers ns1.example.org, ns2.example.org;
修改成下面的
# A slightly different configuration for an internal subnet.
subnet 192.168.1.0 netmask 255.255.255.0 {
range 192.168.1.6 192.168.1.8;
option routers 192.168.1.3;
allow bootp;
allow booting;
next-server 192.168.1.112;
filename "/pxelinux.0";
}
filename中 一定是/pxelinux.0,不能有其它,否则可能出现下面报错
停留在这里
could not find kernel boot image
boot:
正常情况下到boot这里时,回车即可
否则即使输入vmlinuz,启动一段时间后,还是出现下面报错,最后崩溃不能启动。
VFS: Cannot open root device "null(0)" or unknown-block(253,0)
Please append a correct "root=" boot option; here are the available partitions:
Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(253,0)
镜像
http://patch.ikuai8.com/img/iKuai8_2.4.0_Build20150428-13_47.img.rar
http://m0n0.ch/wall/downloads/generic-pc-1.8.1.img
工具
Roadkils Disk Image http://www.roadkil.net/program.php?ProgramID=12
win32 disk imager http://sourceforge.net/projects/win32diskimager/ A tool for writing images to USB sticks or SD/CF cards
physdiskwrite
winimage http://www.winimage.com/download.htm