Linux是一个很大的东西,而且稍微按照鸟哥的书做点网络上的扩展就会有很多很多的东西,常常会使得自己迷失,所以我认为在学习的时候,还是应该有自己的目标,写出关于目标的博客,不要什么都讲,却什么都不精确。
背景:家里电脑坏了,就重装系统,既然重装系统,就顺便装了win7+ubuntu双系统,既然重装系统就离不开:
MBR、grub2、硬盘分区、磁盘连接方式与装置文件名之类的东西。
关于装双系统的电脑首先,也是最重要的是:先装windows系统,再装linux系统。
Linux下硬件与系统文件的映射关系:
在Linux系统中,每个硬件都被当做了一个文件来对待。IDE接口(Integrated Drive Electronics)的硬件都被命名为/dev/sd[a-p]:
root@ssozh-Inspiron-530:/dev# ls sd* -al
brw-rw---- 1 root disk 8, 0 6月 12 07:34 sda
brw-rw---- 1 root disk 8, 1 6月 12 07:34 sda1
brw-rw---- 1 root disk 8, 2 6月 12 07:34 sda2
brw-rw---- 1 root disk 8, 5 6月 12 07:34 sda5
brw-rw---- 1 root disk 8, 6 6月 12 07:34 sda6
注:IDE接口是把“硬盘控制器”与“盘体”集成在一起的硬盘驱动器。模式包括PIO、DMA。
注:由于SATA/USB/SAS等磁盘接口都是使用SCSI模块来驱动的,因此这些接口的磁盘装置文件名都是/dev/sd[a-p]格式。
注:sd*都是块设备,文件属性是“b”开头,在Ubuntu中字体颜色是黄色。黄色字体的还有字符设备。
当我把自己的U盘插入:
root@ssozh-Inspiron-530:/dev# ls sd* -al
brw-rw---- 1 root disk 8, 0 6月 12 07:34 sda
brw-rw---- 1 root disk 8, 1 6月 12 07:34 sda1
brw-rw---- 1 root disk 8, 2 6月 12 07:34 sda2
brw-rw---- 1 root disk 8, 5 6月 12 07:34 sda5
brw-rw---- 1 root disk 8, 6 6月 12 07:34 sda6
brw-rw---- 1 root disk 8, 16 6月 12 13:30 sdb
brw-rw---- 1 root disk 8, 17 6月 12 13:30 sdb1
很明显,我的U盘是sdb 和sdb1。
另外,其他硬件在Linux下的文件名:
/dev/vd[a-p] 用于虚拟机内
/dev/fd[0-7] fd:file description文件描述符,在/dev中描述软盘驱动器
/dev/lp[0-2] 25针打印机(我的电脑上没有打印机,无法证实)
/dev/input/mice 和/dev/psaux 鼠标(鸟哥书上是/dev/input/mouse[0-15])
root@ssozh-Inspiron-530:/dev# ll /dev/input/mice
crw-rw---- 1 root input 13, 63 6月 12 07:34 /dev/input/mice
双系统与磁盘分区:
MSDOS(MBR)与GPT磁盘分区表(partition table)
Windows的MBR(master boot record主引导记录)放在第一个扇区。
这个扇区通常大小为512Bytes,包括两个数据:
MBR:可以安装开机管理程序的地方,有446bytes.
分区表(partition table):记录整个硬盘分区的状态,有64bytes。
由于分区表所在的区块只有64bytes容量,因此最多仅能有四组记录区(每个16bytes),每组记录区记录了该区段的起始和结束的磁柱号码。而所谓的分区只是对分区表进行了分区,分区槽的最小单位是磁柱。由于第一个扇区所在的分区表只能记录四个数据,所以如果想多分区,我们可以利用额外的扇区来记录更多的分区信息。
具体而言,sda1 sda2 sda3 sda4这前四个号码都是保留给Primary或extended用的。(这个也叫主分区,放在MBR)
而延伸分区持续切割出来的分区槽叫做逻辑分区,用sda5 sda6....表示。
说这么多有什么用呢?
1、放置问题:假设你已经安装了win7的CDEF盘,作为四个主分区,然后企图把Linux放在F盘中,这个时候Linux系统是win7系统中主分区的一部分(即Linux是win7的一个硬盘了),这样是没有办法使用双系统的,因为MBR中只有一个win7和4个主分区。正确的做法是,留出至少一个主分区给Linux(就是删除一个添加卷)把空闲的磁盘装入Linux系统,并把MBR写入。
2、顺序问题:对于第一磁盘来说,先安装win7系统,然后给他分主分区(C,D,E盘)。那么Linux就只有一个分区了,这个时候这个分区应该是extended。从而构成P+P+P+E的形式,E=Linux的全部分区。但是如果你把“/”这个更目录填入了主分区则直接变成了p+p+p+p的形式,那么即使剩下了磁盘容量,也无法再分区,这些剩余容量会被浪费。所以正确的分发,是先给/home /boot进行逻辑分区,把剩下的这个分区变成extended,最后再进行“/”更目录分区。
MBR的局限性:
1、操作系统无法抓取到2.2T以上的磁盘容量;2、MBR仅有一个区块,若被破坏后,经常无法或难以恢复;3、MBR内只能存放446bytes,无法容纳较多程序代码。
因此引入了GPT(GUID partition table)
过去一个扇区大小是512bytes,现在已经有4K,为了兼容以前的磁盘,因此在扇区的定义上面,大多会使用逻辑区块地址(logical block address,LBA)来处理。GPT将所有区块以此LBA(512bytes)来规划,从第一个LBA0到LBA33,来记录分区信息。整个磁盘的后33个LBA也拿来做备份!详细结构如下:
LBA0(MBR相容块),LBA1(GPT表头记录,记录分区表本身大小和位置,且放置CRC32验证码)LBA2-33(实际记录分区信息处)
具体开机情况:开机-->BIOS(找到可以开机的硬盘)-->MBR(内含开机管理程序,load核心文件)
【-->开机管理程序(boot loader)-->核心文件】
注:如果是GPT格式的话,BIOS是可以从LBA0读取开机管理程序,但是如果开机管理程序不懂GPT的话,就无法开机(如XP系统)
boot loader:1、提供选单,用户可以选择不同的开机项目,这也是多重引导的重要功能;
2、载入核心文件,直接指向可开机的程序区段来开始操作系统;
3、转交其他loader,将开机管理功能转交给其他Loader负责(重要)。
每个分区槽都有自己的启动扇区(boot sector);图中的系统槽为第一及第二分区槽,实际可开机的核心文件是放置到各分区槽内的;loader只会认识自己的系统槽内的可开机核心文件以及其他loader;Loader可直接指向或者是间接将管理权转给另外一个管理程序。
之所以先安装Windows再安装Linux是因为Linux可以将开机管理程序安装在MBR或者其他分区槽的启动扇区(boot sector)且Linux可以手动选单,即 你可以在Linux的boot Loader里面加入Windows开机选项。但是Windows会在安装的时候直接覆盖掉MBR以及自己所在分区槽的启动扇区,你没有选择的机会。
即后装的系统覆盖前面的MBR,而后装的linux在MBR中提供了Windows开机选项,但是Windows则不会提供,所以要先装Windows。
而Linux在MBR中的boot Loader是需要回到/boot目录下的grub读取配置文件来找到Windows。
所以对双系统来讲,如果删除了(格式化了)Linux从而导致无法直接进入Windows(其实你可以从BIOS进入或者大白菜PE进入),你需要再次进入Windows系统病使用MBRfix重建mbr。
2018.10.24更新:
现在的windows系统可以安装Ubuntu了,大概有时候不需要在安装双系统了,至少是不需要安装虚拟机了,具体的请自行百度bash ubuntu for windows。
我们想说的是,这个Ubuntu系统下,很容易找到你的Windows下的硬盘,更目录还是更目录,电脑的c d e等等盘,显然在/mnt/下面
最后,在安装软件的时候,一定要换个好源。至少得是你对应的Ubuntu版本,不要随便找,不然依赖关系常常出现问题,如:
ssozh@DESKTOP-6JARN2S:/etc/apt$ sudo apt-get install g++
>>Reading package lists... Done
>>Building dependency tree
>>Reading state information... Done
>>Some packages could not be installed. This may mean that you have
requested an impossible situation or if you are using the unstable
distribution that some required packages have not yet been created
or been moved out of Incoming.
>>The following information may help to resolve the situation:
The following packages have unmet dependencies:
>>g++ : Depends: g++-5 (>= 5.3.1-3~) but it is not going to be installed
>>E: Unable to correct problems, you have held broken packages.
这里我推荐的源是:
deb https://mirrors.ustc.edu.cn/ubuntu/ bionic main restricted universe multiverse
deb-src https://mirrors.ustc.edu.cn/ubuntu/ bionic main restricted universe multiverse
deb https://mirrors.ustc.edu.cn/ubuntu/ bionic-updates main restricted universe multiverse
deb-src https://mirrors.ustc.edu.cn/ubuntu/ bionic-updates main restricted universe multiverse
deb https://mirrors.ustc.edu.cn/ubuntu/ bionic-backports main restricted universe multiverse deb-src https://mirrors.ustc.edu.cn/ubuntu/ bionic-backports main restricted universe multiverse deb https://mirrors.ustc.edu.cn/ubuntu/ bionic-security main restricted universe multiverse deb-src https://mirrors.ustc.edu.cn/ubuntu/ bionic-security main restricted universe multiverse deb https://mirrors.ustc.edu.cn/ubuntu/ bionic-proposed main restricted universe multiverse deb-src https://mirrors.ustc.edu.cn/ubuntu/ bionic-proposed main restricted universe multiverse