← 回目录
22 Week 05 · 磁盘与软件

加块盘:分区、格式化、挂载

这是最接近真实工作的一天。也是唯一一天,操作失误会导致系统开不了机——所以有一步绝对不能省。

先给虚拟机加块盘

在 Parallels 里操作
添加硬盘的步骤
1
先关机:在虚拟机里 sudo poweroff,或者 Parallels 菜单里关闭。
2
Parallels 菜单栏 → 操作 → 配置 → 硬件
3
左下角 「+」→ 硬盘,大小填 10 GB,格式选默认(扩展),添加。
4
开机,lsblk 应该能看到一块新的 sdb(或 sdc)。
确认新盘认到了
$ lsblk
NAME        MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
sda           8:0    0  64G  0 disk
├─sda1        8:1    0   1G  0 part /boot
└─sda2        8:2    0  63G  0 part
  └─rl-root 253:0    0  62G  0 lvm  /
sdb           8:16   0  10G  0 disk
     ↑ 新盘,还没分区、没挂载

四步走完

分区 → 格式化 → 挂载 → 持久化
① 分区
$ sudo fdisk /dev/sdb

进入交互界面后依次按:
n       # new,新建分区
回车    # 分区类型用默认(primary)
回车    # 分区号默认 1
回车    # 起始扇区默认
回车    # 结束扇区默认(用满整块盘)
w       # write,写入并退出 ← 按 w 之前都可以反悔

$ lsblk | grep sdb
sdb      8:16   0  10G  0 disk
└─sdb1   8:17   0  10G  0 part      ← 分区出来了
fdisk 里按 q 是后悔药

w 之前,所有操作都只在内存里。搞乱了直接按 q 退出,磁盘一点没动。

不确定当前状态就按 p(print)看一眼分区表。

② 格式化
$ sudo mkfs.xfs /dev/sdb1
     ↑ RHEL 系默认文件系统是 xfs

# Ubuntu 系一般用 ext4:
# sudo mkfs.ext4 /dev/sdb1
xfs 和 ext4 的一个实际差别

xfs 只能扩大,不能缩小;ext4 两个方向都行(但缩小要卸载)。

RHEL 系默认 xfs,因为大文件性能好。后天讲 LVM 扩容时,xfs 用 xfs_growfs、ext4 用 resize2fs,别记混。

③ 挂载(临时)
$ sudo mkdir /data
$ sudo mount /dev/sdb1 /data

$ df -hT | grep data
/dev/sdb1  xfs  10G  104M  9.9G  2%  /data     ← 挂上了

$ echo "test" | sudo tee /data/test.txt      # 试写一下
这一步只是临时的

mount 命令挂上的,重启就没了。要开机自动挂载,必须写进 /etc/fstab——下一步。

④ 写进 fstab(关键步骤)

今天最危险的一步
先拿到 UUID
$ sudo blkid /dev/sdb1
/dev/sdb1: UUID="a1b2c3d4-e5f6-7890-abcd-ef1234567890" TYPE="xfs"
为什么用 UUID 而不是 /dev/sdb1

设备名会变。你插拔一块盘、或者 BIOS 顺序变了,原来的 sdb 可能变成 sdc——fstab 里写死设备名,重启后就挂错盘或者挂不上,系统直接起不来。

UUID 是跟着文件系统走的,永远不会变。这是生产环境的标准做法。

编辑 fstab
$ sudo cp -a /etc/fstab /etc/fstab.bak.$(date +%F)   ← 先备份!
$ sudo vi /etc/fstab

# 在最后加一行(六个字段,空格或 Tab 分隔):
UUID=a1b2c3d4-e5f6-7890-abcd-ef1234567890  /data  xfs  defaults  0 0
六个字段各是什么
① UUID=...
要挂载的设备。也可以写 /dev/sdb1,但不推荐。
② /data
挂载点,这个目录必须已经存在
③ xfs
文件系统类型。
④ defaults
挂载选项。defaults 涵盖读写、自动挂载等常规设置。
⑤ 0
是否被 dump 备份,基本都填 0。
⑥ 0
开机时 fsck 检查顺序。根分区填 1,其他填 0 或 2。

⚠️ mount -a 绝对不能省

今天最重要的一句话
验证 fstab 有没有写错
$ sudo umount /data          # 先卸载
$ sudo mount -a              # 按 fstab 重新挂载全部
$ df -hT | grep data         # 挂上了就说明 fstab 写对了
为什么这一步是保命的

/etc/fstab 写错,系统开机时会卡在紧急模式(emergency mode),直接起不来。

这是新手最容易造成的真实事故——远程服务器一旦这样,你连 SSH 都进不去,只能去机房接显示器。

mount -a 在不重启的情况下验证配置。它不报错,就说明重启也不会出事。写完 fstab 立刻做这一步,养成条件反射。

万一真的写错了
# 开机卡在 emergency mode 时:
# 1. 输入 root 密码进入救援 shell
# 2. 重新挂载根分区为可写
mount -o remount,rw /
# 3. 改回 fstab(或用备份还原)
vi /etc/fstab
# 4. 重启
reboot

卸载与占用

umount 说 target is busy
$ sudo umount /data
umount: /data: target is busy.

# 找出是谁占着
$ sudo lsof +D /data
$ sudo fuser -vm /data

# 常见原因:你自己的终端就 cd 在那个目录里
$ cd ~ && sudo umount /data

「umount 提示 busy」十次有八次是你自己站在那个目录里。cd 出来再试。

今天的面试点

「给服务器加一块新硬盘,说一下步骤」

lsblk 确认识别到 → fdisk 分区 → mkfs.xfs 格式化 → mkdir 建挂载点 → mount 挂载 → blkid 拿 UUID 写进 /etc/fstab。」

然后一定补这句:「写完 fstab 我一定会 mount -a 验证一次,因为 fstab 写错会导致系统开不了机。

「另外fstab 里我用 UUID 不用设备名,因为设备名可能因为插拔顺序变化。」

今天的练习

动手做,约 20 分钟
  • 在 Parallels 里给虚拟机加一块 10 GB 的新硬盘,开机后 lsblk 确认
  • sudo fdisk /dev/sdb,按 n → 四次回车 → w,再 lsblksdb1
  • sudo mkfs.xfs /dev/sdb1 格式化
  • sudo mkdir /data && sudo mount /dev/sdb1 /datadf -hT 确认,往里写个文件
  • 备份 fstabblkid 拿 UUID,写进 /etc/fstab
  • 关键sudo umount /data && sudo mount -a && df -hT | grep data —— 验证 fstab 正确
  • 选做(推荐)sudo reboot,重启后确认 /data 自动挂上了
明天预告

Day 23 讲 LVM——面试高频。你装系统时选的自动分区用的就是它,明天用今天这块新盘练在线扩容

那个「扩完 LV 还要扩文件系统」的两步,是区分背题和真做过的分水岭。