2.1 Linux与硬件的搭配
Linux 安装前要了解两件事:① 硬件怎么配 Linux;② 各硬件在 Linux 里叫啥。
2.1.1 认识计算机的硬件配备
计算机的用途决定硬件配置:
- 游戏机:3D 运算吃显卡+CPU,需要高配。
- 工作机:办公软件+浏览器,入门级就够了,整合型芯片便宜好用。
选硬件的两个性价比维度:
- 性能/价格比:主流级产品往往比旗舰级划算得多。多花一倍钱只提升 10% 性能就不值。
- 性能/功耗比:服务器 365 天开机,多 50W 功耗一年就多 438 度电。以企业百台规模算,电费差距可观。
支持度最关键——硬件厂商不给 Linux 写驱动,就白买。鸟哥吃过亏:新主板内置网卡官网只提供 Windows 驱动,最后只好另插 PCI-e 网卡。买硬件前先查 Linux 支持度。
2.1.2 选择与Linux搭配的主机配备
Linux 硬件门槛很低,五年内淘汰的 i3 机器完全够做练习机。不同用途的配置建议:
| 用途 | CPU | 内存 | 硬盘 | 网卡 | 显卡 |
|---|---|---|---|---|---|
| 小型服务器(无图形) | 五年内即可 | ≥512MB,建议>1GB | ≥20GB | 普通 | 能亮就行 |
| 桌面/练习机(有图形) | i5/i7 | >1GB | ≥60GB | 普通 | 256MB 以上显存 |
| 中型服务器 | i5/i7 多核 | >4GB | 越大越好+RAID | Intel/Broadcom 企业级 | 64MB(如需图形) |
核心原则:
- 服务器中内存比 CPU 更重要——内存不够就 swap 到硬盘,性能陡降
- 企业用服务器不要自己组装,买品牌商用机——散热、稳定性已通过测试
- 新买机器前先到各 distribution 官网查硬件兼容性列表(HCL)
2.1.3 各硬件设备在Linux中的文件名
Linux 中所有设备都是文件,放在 /dev/ 下:
| 设备 | 文件名 |
|---|---|
| SATA/SAS/USB 硬盘 | /dev/sd[a-p] |
| USB 闪存 | /dev/sd[a-p](和硬盘一样) |
| 虚拟机 VirtIO 磁盘 | /dev/vd[a-p] |
| 光盘(CD/DVD) | /dev/sr[0-1] 或 /dev/cdrom(软链接) |
| IDE 硬盘(旧式) | /dev/hd[a-d](现在也被仿真为 sd*) |
| 软盘 | /dev/fd[0-7] |
| 打印机 | /dev/lp[0-2] 或 /dev/usb/lp[0-15] |
| 鼠标 | /dev/input/mouse[0-15] |
设备文件名由核心侦测顺序决定,跟物理插槽无关——这是和 Windows(C/D/E 盘固定对应分区)最大的思维差异。
2.1.4 使用虚拟机学习
现代 CPU 都内置硬件虚拟化指令集,普通 PC 就能跑多台虚拟机。本书全部使用虚拟机(KVM)做演示——好处是环境统一、快照方便、不怕搞坏。Windows 用户推荐 VirtualBox,Linux 用户推荐系统自带的 KVM。
2.2 磁盘分区
2.2.1 磁盘连接的方式与设备文件名的关系
- 实体机:SATA/SAS/USB 磁盘 →
/dev/sd[a-p] - 虚拟机:VirtIO 磁盘 →
/dev/vd[a-p] - 设备文件名由核心侦测到的顺序决定,不是物理插槽(接在 SATA1 口不一定是
/dev/sda) - 分区的设备文件名 = 磁盘名 + 数字,如
/dev/sda1、/dev/sda2
2.2.2 MSDOS(MBR)与 GPT 磁盘分区表
在讲分区表格式之前,必须先理解磁盘的物理结构——因为分区就是在这个物理结构上”画线”。
磁盘的物理组成:扇区、磁道、柱面
以传统的 HDD 机械硬盘为例,磁盘内部由以下部件组成:
- 盘片(Platter):圆形的磁性材料碟片,数据就记录在上面。一块硬盘可能有多个盘片叠在一起。
- 主轴马达(Spindle Motor):带动盘片高速旋转。
- 机械手臂 + 磁头(Head):在盘片上读写数据。每个盘面都有一个磁头。
盘片表面又以如下的方式划分为单位:
扇区(Sector)— 最小物理储存单位
盘片上每一个同心圆环被切成一段一段的小区块,这就是扇区——磁盘读写数据的最小单位。扇区有两种规格:
- 传统:512 Bytes
- 新式大容量磁盘:4K Bytes(4096 Bytes)
磁道(Track)— 同一圈所有扇区
同一个同心圆上的所有扇区组合在一起,就是一条磁道。你可以把它想象成田径跑道的每条跑道——每一圈就是一条磁道。
柱面(Cylinder)— 多盘片上同一位置的磁道
一块硬盘通常不止一个盘片,可能有 2 个、4 个甚至更多。所有盘片上同一编号的磁道叠在一起看,就像是一个圆柱体,这就是柱面。
打个比方:盘片是好几张 CD 碟叠在一起。每张 CD 上半径相同的那一圈就是磁道;把这几张 CD 上同一圈磁道垂直看过去,就是一个柱面。数据按柱面编号(0, 1, 2…)来定位,柱面 0 是最外圈,柱面 N 是最内圈。
为什么柱面很重要? 因为分区的最小单位早期就是柱面。一个分区 = 从第几号柱面到第几号柱面,是一段连续的柱面范围。数据读写时,磁头只需要在指定柱面范围内移动,不用满盘跑——这就是分区的本质:把磁盘切成几块连续的柱面区域。
磁盘第一个扇区的重要性
无论哪种分区格式,整颗磁盘的第一个扇区都极其特殊。它存放了关于整颗磁盘的关键信息。第一个扇区如果物理损坏,磁盘基本就废了——因为系统再也无法知道分区是怎么划的。
下面分别讲两种分区表格式。
MBR 分区表格式
MBR(Master Boot Record)是最早的磁盘分区格式,也叫 MSDOS 分区表。它工作在**第一个扇区(512 Bytes)**内,结构如下:
| 区域 | 大小 | 内容 |
|---|---|---|
| MBR(主要开机记录区) | 446 Bytes | 开机管理程序(boot loader) |
| 分区表(Partition Table) | 64 Bytes | 4 条分区记录,每条 16 Bytes |
| 魔数(Magic Number) | 2 Bytes | 固定值 0x55AA,校验此扇区是否合法 |
分区表就是 64 Bytes,最多塞 4 条记录——这就是”一块磁盘最多 4 个主分区”这个著名限制的由来。每条 16 Bytes 的记录里记录了该分区的起始柱面号和结束柱面号(所以分区是一段连续的柱面范围)。每条记录内部结构如下:
| 字段 | 大小 | 内容 |
|---|---|---|
| 可引导标志 | 1B | 0x80 = 可启动,0x00 = 不可 |
| 起始 CHS 地址 | 3B | 柱面 + 磁头 + 扇区(老式寻址方式) |
| 分区类型码 | 1B | 0x83 = Linux,0x82 = swap,0x07 = NTFS |
| 结束 CHS 地址 | 3B | 同上 |
| 起始 LBA 扇区号 | 4B | 分区从第几个扇区开始 |
| 分区扇区总数 | 4B | 分区有多大 |
1983 年设计 MBR 时硬盘才几 MB,4 Bytes 记扇区号感觉能用一辈子——典型的”暂时够用”变成”永久限制”:2³² × 512B = 2TB。
Primary、Extended、Logical 的区别
那 4 条记录槽位可以放两种东西:
- Primary(主要分区):一条正常的、可格式化的分区记录。最多 4 个。
- Extended(延伸分区):特殊记录——它本身不可格式化,而是指向硬盘上另一块区域,在那里可以继续开出更多的分区。
这就好比一张 A4 纸只能写 4 行,但其中一行可以写”详见附录 A”,附录 A 里再列更多行。
从 Extended 指向的区域再切出来的分区叫 Logical(逻辑分区)。逻辑分区本质上就是一段连续的柱面空间被进一步细分。
分区编号规则:
- 前 4 个编号(
/dev/sda1~/dev/sda4)永远保留给 Primary 或 Extended - 逻辑分区从第 5 号开始(
/dev/sda5,/dev/sda6…) - 这就是为什么 Linux 的磁盘分区编号有时候会跳号——1/2/3 是 Primary,4 是 Extended,然后直接跳到 5/6/7/8/9 作为 Logical
总结 MBR 的几条限制:
- Primary + Extended 总共最多 4 个
- Extended 最多只能有 1 个
- 可格式化的:Primary 和 Logical。Extended 本身不行(它只是个”目录”)
- 每个分区记录只用了 4 Bytes 记录扇区数 → 最大 2²² × 512B ≈ 2TB
- 整个分区表只有一块(第一个扇区),坏了就没法恢复
为什么分区有利于性能? 因为分了区之后,每个分区的数据集中在指定的柱面范围内。读取某个分区的数据时,磁头只需要在那段柱面间来回移动即可,不需要跨越整颗磁盘去搜寻——寻道范围缩小,速度自然提升。
GPT 分区表格式
随着硬盘容量突破 2TB,MBR 的 32 位寻址能力已经不够用了。于是有了 GPT(GUID Partition Table)。
GPT 不再只靠第一个扇区,而是使用 LBA(Logical Block Address,逻辑区块位址) 来定位。LBA 是给每个扇区一个顺序编号(从 0 开始),每个 LBA 默认对应一个 512 Bytes 的扇区。GPT 的分区信息分布如下:
| LBA 编号 | 内容 |
|---|---|
| LBA 0 | MBR 相容区块(保护性 MBR) |
| LBA 1 | GPT 表头(记录分区表位置 + 大小 + CRC32 校验码) |
| LBA 2 ~ 33 | 实际分区记录(共 32 个 LBA,可存 128 条记录) |
| 磁盘末尾 33 个 LBA | GPT 备份(头 + 记录,完整照抄一份) |
LBA 0(保护性 MBR):放一条特殊的标记,告诉不懂 GPT 的老工具”这块盘整颗已被占用,不要乱动”。这样老工具不会误伤 GPT 分区表。
LBA 2~33 分区记录:每个 LBA 放 4 条记录,每条 128 Bytes(对比 MBR 的 16 Bytes 翻了 8 倍)。每条记录内部结构如下:
| 字段 | 大小 | 内容 |
|---|---|---|
| 分区类型 GUID | 16B | 标识这是什么分区(不再是 1B 类型码) |
| 分区唯一 GUID | 16B | 这个分区自己的唯一 ID |
| 起始 LBA | 8B | 64 位,分区从哪开始 |
| 结束 LBA | 8B | 64 位,分区到哪结束 |
| 属性标志 | 8B | 各种属性位 |
| 分区名称 | 72B | UTF-16 编码,最多 36 个字符,人类可读 |
64 位寻址 → 2⁶⁴ × 512B ≈ 8 ZB,128 条记录用不完——从 16B 扩到 128B、32 位扩到 64 位,MBR 的所有天花板就此消失。
GPT vs MBR 对比:
| MBR | GPT | |
|---|---|---|
| 每条记录大小 | 16 Bytes | 128 Bytes |
| 寻址位数 | 32 位 | 64 位 |
| 单分区上限 | 2TB | 8ZB |
| 最大分区数 | 4 主分区(靠 Extended 扩充) | 128(默认)/ 可更多 |
| 备份 | 无 | 磁盘末尾完整备份 |
| 校验 | 无 | CRC32 |
| 分区命名 | 不支持 | 支持(36 个 UTF-16 字符) |
| 概念 | Primary / Extended / Logical | 无区别,每个都能用 |
| 固件搭配 | 传统 BIOS | UEFI(或 BIOS + 相容模式) |
GPT 没有 Primary/Extended/Logical 的概念——128 条记录地位平等,每条都可以直接格式化使用。但要注意:fdisk 这个老牌分区工具不认识 GPT,碰到 GPT 磁盘要用 gdisk 或 parted;开机管理程序 grub1 也不认识 GPT,需要用 grub2。
2.2.3 开机流程中的 BIOS 与 UEFI 开机检测程序
操作系统本身也是软件,那电脑怎么”找到”它的?靠开机流程。
BIOS + MBR/GPT 流程
BIOS(固件,开机第一个执行的程序)
→ 识别第一个可开机磁盘
→ 读取该磁盘第一个扇区的 MBR(446B 开机管理程序)
→ boot loader 载入操作系统核心
→ 核心接手,BIOS 和 boot loader 功成身退
Boot Loader 的三大任务:
- 提供菜单:用户选要开哪个系统(多重开机的关键)
- 载入核心:指向开机程序段,启动 OS
- 转交其他 loader:把控制权交给另一个分区的 boot sector 里的 loader
多系统开机的原理:每个分区都有自己的 boot sector,MBR 的 loader 除了能直接载入核心,还能把控制权”转交”给其他分区的 loader。Windows 的 loader 不能链式转交(它会直接覆盖 MBR),所以先装 Windows 再装 Linux——Linux 的 grub 能识别 Windows 并加进菜单;反过来 Windows 会覆盖掉 MBR 里的 grub,然后就不认识 Linux 了。
UEFI + GPT 流程
BIOS 的局限(16 位组合语言、不支持 2TB+、不懂 GPT),催生了 UEFI(Unified Extensible Firmware Interface):
| BIOS | UEFI | |
|---|---|---|
| 程序语言 | 16 位组合语言 | C 语言 |
| 资源管理 | IRQ 中断 | 驱动+协议 |
| 磁盘寻址 | 通过 MBR 间接读 GPT | 直接读 GPT |
| 图形界面 | 很差 | 好 |
| 安全性 | 无 | Secure Boot(但也可能阻止 Linux 启动) |
UEFI 需要额外一个 vfat 格式分区(512MB~1GB)放 UEFI 应用程序。此外,如果使用 GPT + BIOS 组合,需要额外一个 2MB 的 “BIOS boot” 分区来放 grub 的阶段码。
2.2.4 Linux安装模式下,磁盘分区的选择(极重要)
目录树(Directory Tree):Linux 一切从根目录 / 开始往下分支,所有文件都在目录树上。
挂载(Mount):把磁盘分区的数据”绑”到目录树上的某个目录(挂载点),进入该目录就是进入该分区。Windows 其实也有挂载——USB 插上显示 D 盘或 E 盘,只是换了个叫法。
安装时的分区建议:
- 新手:
/+swap两个分区即可,不折腾 - 进阶:预留一块不分区空间,将来练习分区和备份用
/boot在 UEFI + GPT 下已经不是/dev/sda1了(前面有 BIOS boot 和 UEFI 分区)
2.3 安装Linux前的规划
2.3.1 选择适当的distribution
每个发行版的 Linux 核心都来自 kernel.org,软件大同小异,最大差别在软件安装方式。选一套深入学透即可。
- 服务器:RHEL / SuSE Enterprise,更新幅度小、支持周期长,适合稳定生产环境
- 练习/桌面:CentOS(RHEL 免费兼容版),本书用 CentOS 7.x
- 下载选 Everything 或 DVD 版,
.iso镜像文件不能用”数据格式”烧录,要用镜像格式 - 版本号解读:
CentOS-7-x86_64-Everything-1503-01.iso= 7.1 版,2015 年 3 月发布,64 位
2.3.2 主机的服务规划与硬件的关系
根据服务类型搭硬件:
| 服务 | 关键硬件 | 说明 |
|---|---|---|
| NAT(IP 分享器) | 网卡 ×2 | 内外网隔离,可加流量分析/带宽控制 |
| SAMBA(网芳文件服务器) | 网卡 + 大硬盘 | 不限同时连接数,建议 /home 独立分区 |
| Mail(邮件服务器) | 硬盘容量 | 邮件积少成多 |
| Web(网页服务器) | 内存 | 高并发时吃内存 |
| DHCP/DNS | 要求不高 | 几乎什么配置都能跑 |
多系统共存:一部机器装 Windows + Linux,靠 boot loader 菜单选择。如果机器要 365 天开机,还得考虑摆放位置(散热、灰尘)。
2.3.3 主机硬盘的主要规划
实际上 Linux 安装时已经提供了多种默认分区方案,但强烈建议选自定义(Custom / Expert)模式——只有自己规划才能真正理解磁盘布局。概括来说就是:遵循 FHS 标准把不同目录分到不同分区(或 LVM),在安装画面上手动配置挂载点和文件系统类型。
2.3.4 鸟哥的两个实际案例
鸟哥在书上给了两个实战范例:一个是用自己组装机来搭建的个人服务器方案;另一个是用品牌服务器做企业部署的方案。二者对比说明了规划主机时不但要考虑硬件本身,还要结合场地、网络环境、业务需求等实际情况来做判断。
关键命令
(本章偏理论规划,实操命令较少)
| 命令/概念 | 用途 |
|---|---|
ls /dev/sd* | 查看系统中的 SATA 磁盘设备文件 |
ls /dev/vd* | 查看虚拟机中的 VirtIO 磁盘 |
parted /dev/xxx print | 查看磁盘分区表类型(MBR/GPT) |
gdisk /dev/xxx | GPT 分区工具(? 查帮助) |
fdisk /dev/xxx | MBR 分区工具(m 查帮助) |