一、磁盘分区与Linux的安装(以CentOS为例)
0、说在安装之前
- 在Linux中,“一切设备皆文件”,设备在/dev这个目录下
- /dev/sd[a-p] 表示SCSI/SATA/USB存储设备(硬盘、U盘等),IDE接口的存储设备有时候也会被仿真为该类型设备
- /dev/hd[a-d] 表示IDE存储设备
- /dev/vd[a-p] 表示虚拟机中的VirtI/O存储设备
- /dev/md[0-127] 表示软件RAID阵列
- /dev/fd[0-7] 表示软盘驱动器
- /dev/lp[0-2] 表示LPT并口的打印机,/dev/usb/lp[0-15] 表示USB接口的打印机
- /dev/input/mouse[0-15] 表示通用鼠标, /dev/psaux 表示PS/2接口的鼠标,/dev/mouse 表示当前正在使用的鼠标
- /dev/scd[0-1]或/dev/sr[0-1] 表示CD-ROM或DVD-ROM光驱,/dev/cdrom 表示当前CD-ROM
- /dev/ht0 表示IDE接口的磁带机,/dev/st0 表示SATA/SCSI串口磁带机,/dev/tape 表示当前磁带机
- 用字母来区分不同的物理存储设备
- 外部存储设备的文件名[a-?]是由Linux核心侦测到磁盘的顺序有关,和物理连接情况关系不大;如连接到主板上的启动硬盘比连接到主板上的非启动硬盘先侦测到,而外接的USB磁盘最后被侦测到,先被侦测到的设备占据字母表较前的字母
- 用字母后面的数字来区分同一物理存储设备上的不同分区
- MBR分区表允许有最多四个主分区(Primary Partition)或扩展分区(受OS制约,扩展分区往往最多只能有一个),扩展分区(Extended Partition)又可以被分为若干个逻辑分区(Logical Partition);扩展分区不能被格式化,扩展分区只是逻辑分区的“容器”,只有主分区和逻辑分区可以被格式化
- 1-4标记四个主分区或扩展分区,被用作主分区则会被有效占用,没被使用或被用作扩展分区则会被保留
- 逻辑分区从5开始标记
- GPT(GUID)分区方案统一采用LBA为存储区编址,预设一个LBA块为512Bytes,可调节为4KBytes大小;GPT分区表占用34+33个LBA块;LBA0位MBR兼容区块,防止MBR模式下破坏GPT分区,LBA1位GPT表头,记录GPT分区表位置和校验信息,LBA2-33位实际分区表,之后还有33个LBA块作为分区表备份
- 所有的GPT分区都是平等的
- GPT分区最多128个
- fdisk工具不能识别GPT分区表,而gdisk和parted可以
- 由于存放Bootloader的/boot启动分区的存在,系统所在的/分区基本上在/dev/sda2以后
- MBR分区表允许有最多四个主分区(Primary Partition)或扩展分区(受OS制约,扩展分区往往最多只能有一个),扩展分区(Extended Partition)又可以被分为若干个逻辑分区(Logical Partition);扩展分区不能被格式化,扩展分区只是逻辑分区的“容器”,只有主分区和逻辑分区可以被格式化
- 初期启动的流程:
- MBR方案:Legacy BIOS->MBR(MBR区域中)->Bootloader(主分区中)->Kernel(操作系统所在分区的Boot Sector中)
- GPT+UEFI BIOS方案:UEFI BIOS->Bootloader(启动分区中的*.efi文件,启动分区可以是单独的,也可以和操作系统共用一个分区)->Kernel(操作系统所在分区中)
- Bootloader(也称PBR)的作用:提供菜单,载入操作系统核心文件,把控制权交给别的分区的Bootloader实现多系统启动
- Linux的Bootloader对多系统的支持比Windows的Bootloader要友好得多,且安装LInux的启动程序时能侦测到Windows的启动程序,因此建议先安装Windows,后安装Linux
- 如果使用的是UEFI BIOS,可能需要关闭Secure Boot功能,即关闭对操作系统的验证,才能启动Linux
- Linux中,通过目录树查找设备和文件,通过“挂载”来结合目录树的架构和磁盘内的数据
- “挂载点”是一个目录
- 可以将磁盘的某个分区(表现为一个文件)“挂载”到“挂载点”上
- 通过进入“挂载点”这个目录,就可以实现访问挂载好的分区里的数据了
- 根目录/是最重要的目录,必须作为挂载点为其挂载某个磁盘分区A,对根目录下数据的读写就是对磁盘分区A的读写
- 其他目录则可以根据需求挂载或不挂载其他的磁盘分区B,C,D……
- 当为根目录(一层或多层)下的某个目录挂载上其他磁盘分区B时,这个目录就会从磁盘分区A上分离出来,而受到磁盘分区B的控制,对这个目录的读写就是对磁盘分区B的读写
- 同样,一个磁盘分区可以被挂载到任何的挂载点上,也可以不被挂载
- 镜像站是主站的完全克隆,并随时与主站保持同步,下载Linux安装镜像和配套程序时,应该使用可靠的当地镜像站,保证下载速度
- CentOS是商业RHEL发行版的社区版本,与RHEL保持最大的兼容,其安装镜像的命名:CentOS-7-x86_64-Everything-1503-01.iso
- 7和01说明发行版的版本号为7.1
- x86_64说明该版本镜像是为64位的x86架构编译的,即x86兼容机上运行的64位操作系统
- Everything是指该镜像是完整版的(包含所有安装软件),此外还有包含大部分安装软件的DVD1版,可以直接从安装介质启动Linux系统的LiveCD版以及仅含系统内核和少数重要工具软件的Minimal版
1、硬盘分区方案
- 新手建议分两个区,一个挂载/,一个用作swap分区,但不保险,一旦分区损坏,整个/下的数据都可能会丢失
- 更复杂的分区方案需要考虑主机的用途,多分几个区,把需要较大容量的目录和读写较为频繁的目录挂载到与/不同的其他分区上,常见的需要单独分区的目录有:/boot,/home(多用户的Samba文件共享),/var(Mail Server),/usr(安装大量应用程序)
2、CentOS 7.x的安装
-
Step0:制作启动介质(刻录光盘或向U盘写入启动镜像)
Linux下:
dd if=<path_of_iso_file> of=/dev/<name_of_storage_device>
,写入时间可能比较长,机器没有反应,耐心等待 Step1:调整BIOS以优先使用光驱或U盘启动机器或开机时直接进入启动顺序菜单选择从你的启动介质启动
-
Step2:磁盘没有超过2TB,安装程序默认使用MBR分区表
Note:强制使用GPT分区的办法:安装介质的引导界面按Tab,输入
vmlinuz initrd=initrd.img inst.stage2=hd:LABEL=CentOS\x207\x20x86_64 rd.live.check quiet inst.gpt
后回车即可注意:\x20表示下划线,CentOS_7_x86_64就是安装介质的卷标(Label),这里一定要注意卷标要和你自己制作的启动盘卷标一致(鸟哥没说清楚,新手容易进坑);stage2是安装环境(本质也是Linux系统)启动的第二阶段,由Bootloader负责,如果卷标指定不正确,就找不到Bootloader,Linux也不会载入,安装环境也就无法进入了
inst.gpt是强制使用GPT分区表的关键所在
Step3:根据图形安装向导设定时区、语言与键盘布局,选择需要安装的软件(比如是否需要X Window支持,如果需要,那么安装Gnome桌面环境还是KDE桌面环境等)
-
Step4:在选择安装位置的页面选择手动分区,关于分区和文件系统的说明如下(本人自己查阅资料并做实验总结的,这里对新人是巨坑,不要照着教程做,要明白原理,根据自己的系统合理设计),分区的同时为这些分区选好挂载点(如/boot,/home,/,swap):
- 根分区/是必须要分的区,系统大部分没有另外挂载的目录结构都保存在根分区内
- swap分区是交换分区,起到“虚拟内存”的作用,不被挂载,可以适当大一点(数GB,物理内存较少是经验值为物理内存的2倍),当然也可以不要
- 先区分两组概念:MBR与GPT,Legacy BIOS和UEFI BIOS;前者是两种磁盘分区表,后者是两种不同的BIOS(采用两种不同的启动机制);两组概念彼此独立,可以互相搭配产生4种方案,但常用的是MBR分区表+Legacy BIOS启动方案和GPT分区表+UEFI BIOS启动方案
- /boot里面有两个比较重要的东西,一个是系统内核vmlinuz,另一个是Bootloader(grub)的相关配置文件;在UEFI BIOS启动的计算机中,还有第三个重要的东西——*.efi启动文件;/boot分区大小不需要太大(1G以内即可)
- 如果你的计算机用的是老旧的Legacy BIOS,为/boot单独分区是可选项
- Legacy BIOS启动方式通过MBR中的启动代码调取活动分区的PBR,PBR也就是Bootloader负责启动内核
- 如果不为/boot单独分区,根分区就是活动分区,/boot只是根分区下的一个普通目录,内核和Bootloader也就装在根分区下的/boot目录里了
- 如果为/boot单独分区,这个单独的启动分区就是活动分区,内核和Bootloader装在这个单独的分区里,根分区下仍然有/boot这个普通目录,只不过里面是空的,起到挂载点的作用,用来挂载那个单独的启动分区
- 这两种方案都能够正常启动,只不过单独制作启动分区并以只读方式挂载到/boot下要更加安全,根分区损坏了,Linux仍然能够启动
- Legacy BIOS启动方式通过MBR中的启动代码调取活动分区的PBR,PBR也就是Bootloader负责启动内核
- 如果你的计算机用的是较新的UEFI BIOS,建议为/boot单独分区
- UEFI BIOS启动方式下,UEFI BIOS能够直接搜素任何FAT32分区,找到其中的*.efi启动文件来直接加载Bootloader
- 大部分UEFI BIOS对于Linux的ext4文件系统支持不佳,不能正常搜索ext4分区里的*.efi启动文件,如果根分区采用非FAT32格式(通常做法)而不为/boot设置单独分区,结果往往是无法启动
- 如果将分出单独的FAT32格式的启动分区,放入系统内核vmlinuz,*.efi启动文件和Bootloader(grub)的相关配置文件,就能被UEFI BIOS识别并正常启动Linux了,这时根分区下有空的/boot目录,作为启动分区的挂载点
- UEFI BIOS启动方式下,UEFI BIOS能够直接搜素任何FAT32分区,找到其中的*.efi启动文件来直接加载Bootloader
- 如果你的计算机用的是老旧的Legacy BIOS,为/boot单独分区是可选项
- BIOS Boot分区不被挂载,当且仅当使用GPT分区表和Legacy BIOS启动的非常规方案的时候需要该分区,这个分区是个GPT分区,采用特殊文件系统;BIOS Boot分区大小不需要太大,2MB以内即可
- 采用GPT分区表+Legacy BIOS启动方案一般是因为MBR分区表难以寻址2TB大硬盘,需要支持大硬盘而主板比较老,只能使用Legacy BIOS启动时使用该方案
- 能否识别GPT分区表和操作系统密切相关,而和使用什么BIOS无关
- 使用Lagacy BIOS方式启动时,会先执行MBR中的引导程序,也就是GPT分区方案下LBA0处的MBR兼容区块中的引导代码(硬盘最前部446KB的代码),这段代码会查询MBR分区表(DPT),找到四个分区里第一个活动主分区,并转到这个分区,将控制权交给该分区的PBR(也就是Bootloader);在GPT分区方案下,分区结构和MBR分区方案下是不一样的,因此需要采用MBR分区方案的一个特殊的非GPT分区,这就是BIOS Boot分区,充当“第一个活动主分区”,存放PBR和Bootloader相关文件,这个Bootloader会加载GPT分区中的系统内核
- 三种常见分区类型(分区管理方式)的解释:
- 标准分区:普通分区,一旦确定难以调整大小
- LVM:一种可以弹性增减容量的分区
- LVM紧张供应:“更高级”的LVM,容量取决于实际使用量,即“要多少给多少,不要不多给”
- 常见的文件系统:
- ext2/ext3/ext4:Linux原生文件系统,ext3/4具有日志功能
- xfs:RHEL默认文件系统,对大型服务器的大容量存储非常友好
- vfat:就是Windows里的FAT32文件系统,可以同时被WIndows和Linux识别,但注意不支持4GB以上的大文件
- 以下不算是严格意义上的文件系统,但被列在“文件系统”里,选择格式化为这些“文件系统”是为了让系统分辨特殊用途的分区:
- swap:不需要被挂载到目录树,充当虚拟内存,是Linux特殊的文件系统
- BIOS Boot:GPT分区表下为了兼容Legacy BIOS启动而设置的特殊分区
-
Step5:根据图形向导设置核心管理及网络设定
- Kdump是当宕机是转储内存数据的功能,多用于核心除错
- 网卡名应为eth0,plp1,em1等类似的名称
- 最好选择“网络可用时自动连接”,这样开机后默认会连接网络
- 网络上的主机名应该一并设好,各字段习惯上用.分隔
Step6:开始安装,同时设定root用户的密码和其他一般用户或管理员的用户名及密码
Step7:安装完成!
Note:安装光盘的其他常用功能:
启动时Troubleshooting-Run a memory test,使用Memtest86+进行内存测试,检查稳定性
笔记本电脑的电源管理比较特殊,可能装不上->启动时按Tab-输入
nofb apm=off acpi=off pci=noacpi
核心参数-回车;nofb是取消对显卡缓存的侦测,apm是早期电源管理机制,acpi是比较新的电源管理机制在图形化安装界面,通过Ctrl+Alt+Fn切换到ttyn终端上,其中tty1-5位字符终端,tty6为图形终端
-
字符终端下使用parted命令手动分区:
-
parted /dev/<name_of_device> mklabel msdos
建立MBR分区表 -
parted /dev/<name_of_device> mkpart [primary/extended/logical] <location_of_start> <location_of_end>
建立分区,<location_of_start>
和<location_of_end>
都使用距离磁盘起始的容量表示,分区容量=<location_of_end>
-<location_of_start>
-
parted /dev/<name_of_device> print
显示分区情况
Note:挂载点设定和文件系统选择+分区格式化建议切回图形终端进行
-
-
修复Linux的grub引导或建立多系统grub引导:
Step1:启动时Troubleshooting-Rescue a CentOS System-Continue-OK进入安装镜像提供的救援Linux环境
Step2:
chroot /mnt/sysimage
将根目录切换到/mnt/sysimage下,也就是硬盘上Linux的根目录下(救援环境会自动将硬盘上Linux的根目录挂载到/mnt/sysimage处)Step3:
grub2-install /dev/<name_of_hd_device>
重新为硬盘安装grub引导,exit
-reboot
,即可从硬盘正常启动到Linux-
Step4:如果需要多系统引导,Linux下
vim /etc/grub.d/40_custom
编辑grub2的自定义配置文件,加入:menuentry "<name_of_Windows_OS>"{
set boot='(hd<number_of_hd_device>,<number_of_windows_partition>)'
chainloader +1
}其中,<number_of_hd_device>和<number_of_windows_partition>都是从0开始编号的,例如/dev/sda3下对应的<number_of_hd_device>是0,<number_of_windows_partition>是2;chainloader +1表示读入指定分区第一个扇区里的PBR以加载Windows的Bootloader(ntldr或bootmgr)
如果需要,
vim /etc/default/grub
更改启动菜单等待时间最后,
grub2-mkconfig -o /boot/grub2/grub.cfg
利用/etc中的配置文件更新/boot/grub2/grub.cfg这个有效启动配置文件即可修改启动菜单实现Windows的引导Note:Windows下最好将无法识别文件系统的Linux分区隐藏掉(不分配卷标),否则容易误格式化