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越大越好+RAIDIntel/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 Bytes4 条分区记录,每条 16 Bytes
魔数(Magic Number)2 Bytes固定值 0x55AA,校验此扇区是否合法

分区表就是 64 Bytes,最多塞 4 条记录——这就是”一块磁盘最多 4 个主分区”这个著名限制的由来。每条 16 Bytes 的记录里记录了该分区的起始柱面号结束柱面号(所以分区是一段连续的柱面范围)。每条记录内部结构如下:

字段大小内容
可引导标志1B0x80 = 可启动,0x00 = 不可
起始 CHS 地址3B柱面 + 磁头 + 扇区(老式寻址方式)
分区类型码1B0x83 = Linux,0x82 = swap,0x07 = NTFS
结束 CHS 地址3B同上
起始 LBA 扇区号4B分区从第几个扇区开始
分区扇区总数4B分区有多大

1983 年设计 MBR 时硬盘才几 MB,4 Bytes 记扇区号感觉能用一辈子——典型的”暂时够用”变成”永久限制”:2³² × 512B = 2TB。

Primary、Extended、Logical 的区别

那 4 条记录槽位可以放两种东西:

  1. Primary(主要分区):一条正常的、可格式化的分区记录。最多 4 个。
  2. 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 0MBR 相容区块(保护性 MBR)
LBA 1GPT 表头(记录分区表位置 + 大小 + CRC32 校验码)
LBA 2 ~ 33实际分区记录(共 32 个 LBA,可存 128 条记录)
磁盘末尾 33 个 LBAGPT 备份(头 + 记录,完整照抄一份)

LBA 0(保护性 MBR):放一条特殊的标记,告诉不懂 GPT 的老工具”这块盘整颗已被占用,不要乱动”。这样老工具不会误伤 GPT 分区表。

LBA 2~33 分区记录:每个 LBA 放 4 条记录,每条 128 Bytes(对比 MBR 的 16 Bytes 翻了 8 倍)。每条记录内部结构如下:

字段大小内容
分区类型 GUID16B标识这是什么分区(不再是 1B 类型码)
分区唯一 GUID16B这个分区自己的唯一 ID
起始 LBA8B64 位,分区从哪开始
结束 LBA8B64 位,分区到哪结束
属性标志8B各种属性位
分区名称72BUTF-16 编码,最多 36 个字符,人类可读

64 位寻址 → 2⁶⁴ × 512B ≈ 8 ZB,128 条记录用不完——从 16B 扩到 128B、32 位扩到 64 位,MBR 的所有天花板就此消失。

GPT vs MBR 对比

MBRGPT
每条记录大小16 Bytes128 Bytes
寻址位数32 位64 位
单分区上限2TB8ZB
最大分区数4 主分区(靠 Extended 扩充)128(默认)/ 可更多
备份磁盘末尾完整备份
校验CRC32
分区命名不支持支持(36 个 UTF-16 字符)
概念Primary / Extended / Logical无区别,每个都能用
固件搭配传统 BIOSUEFI(或 BIOS + 相容模式)

GPT 没有 Primary/Extended/Logical 的概念——128 条记录地位平等,每条都可以直接格式化使用。但要注意:fdisk 这个老牌分区工具不认识 GPT,碰到 GPT 磁盘要用 gdiskparted;开机管理程序 grub1 也不认识 GPT,需要用 grub2

2.2.3 开机流程中的 BIOS 与 UEFI 开机检测程序

操作系统本身也是软件,那电脑怎么”找到”它的?靠开机流程。

BIOS + MBR/GPT 流程

BIOS(固件,开机第一个执行的程序)
  → 识别第一个可开机磁盘
  → 读取该磁盘第一个扇区的 MBR(446B 开机管理程序)
  → boot loader 载入操作系统核心
  → 核心接手,BIOS 和 boot loader 功成身退

Boot Loader 的三大任务

  1. 提供菜单:用户选要开哪个系统(多重开机的关键)
  2. 载入核心:指向开机程序段,启动 OS
  3. 转交其他 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)

BIOSUEFI
程序语言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/xxxGPT 分区工具(? 查帮助)
fdisk /dev/xxxMBR 分区工具(m 查帮助)