Ubuntu 系统系列 | 第 9 天:磁盘与文件系统管理——lsblk、fdisk、mkfs、mount、LVM 实战

第 9/30 天

引言

磁盘管理是 Linux 系统管理员的核心技能之一。无论你是为 Ubuntu 服务器添加新硬盘、扩展现有分区,还是配置复杂的存储架构,掌握磁盘与文件系统管理都是必不可少的。今天,我们将从最基础的磁盘查看命令开始,逐步深入到分区创建、格式化、挂载,最后探索 LVM(逻辑卷管理)这一强大的存储虚拟化技术。

核心概念

磁盘与分区

在 Linux 中,一切皆文件——磁盘设备也不例外。SATA 硬盘通常表示为 /dev/sda/dev/sdb,NVMe 固态硬盘表示为 /dev/nvme0n1/dev/nvme1n1。分区则在设备名后追加数字,如 /dev/sda1/dev/sda2

文件系统类型

Linux 支持多种文件系统,各有适用场景:

文件系统 适用场景 最大文件大小 最大分区大小
ext4 Linux 通用 16TB 1EB
XFS 大文件、高性能 8EB 8EB
Btrfs 快照、压缩、RAID 16EB 16EB
ZFS 企业级存储 16EB 256ZB
NTFS 与 Windows 兼容 16EB 256TB

MBR 与 GPT

MBR(传统主引导记录)和 GPT(GUID 分区表)是两种分区表格式:

  • MBR:支持最多 4 个主分区,最大磁盘 2TB,兼容性最好
  • GPT:支持最多 128 个分区,磁盘可达 9.4ZB,支持 UEFI 启动,是现代系统的首选

实战步骤

步骤 1:查看磁盘信息

首先,使用 lsblk 查看系统磁盘布局:

# 树形结构显示所有块设备
lsblk

# 输出示例
NAME   MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
sda      8:0    0    40G  0 disk
├─sda1   8:1    0     1M  0 part
├─sda2   8:2    0   1.5G  0 part /boot
└─sda3   8:3    0  38.5G  0 part
  └─sda3_crypt
         253:0    0  38.4G  0 crypt
            ├─ubuntu--vg-root
            │  253:1    0  35.4G  0 lvm   /
            └─ubuntu--vg-swap
               253:2    0     2G  0 lvm   [SWAP]
sdb      8:16   0    20G  0 disk
└─sdb1   8:17   0    20G  0 part

lsblk 输出一目了然:sda 是系统盘,包含了加密 LVM 结构;sdb 是一块空的数据盘,有一个分区但未挂载。

更详细的磁盘信息可以用 fdisk -l 查看:

sudo fdisk -l /dev/sdb

# 输出示例
Disk /dev/sdb: 20 GiB, 21474836480 bytes, 41943040 sectors
Disk model: Virtual Disk
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disklabel type: gpt
Disk identifier: 12345678-1234-1234-1234-123456789ABC

Device     Start      End  Sectors  Size Type
/dev/sdb1   2048 41943006 41940959   20G Linux filesystem

步骤 2:创建新分区

使用 fdiskgdisk(GPT 专用)来创建分区。假设我们有一块新硬盘 /dev/sdc

# 交互式分区工具
sudo fdisk /dev/sdc

# 在 fdisk 交互界面中依次输入:
# n  → 新建分区
# p  → 主分区
# 1  → 分区号 1
# 回车 → 默认起始扇区
# +10G → 分区大小 10GB
# w  → 写入并退出

# 验证分区结果
sudo fdisk -l /dev/sdc

# 输出示例
Device     Boot Start      End  Sectors  Size Id Type
/dev/sdc1        2048 20973567 20971520   10G 83 Linux

提示fdisk 是交互式工具,对新手不太友好。如果需要非交互式操作,可以使用 parted
bash
sudo parted /dev/sdc mklabel gpt
sudo parted /dev/sdc mkpart primary ext4 0% 100%

步骤 3:格式化文件系统

分区创建完成后,需要用 mkfs 创建文件系统:

# 格式化为 ext4
sudo mkfs.ext4 /dev/sdc1

# 输出示例
mke2fs 1.47.0 (5-Feb-2023)
Creating filesystem with 2621440 4k blocks and 655360 inodes
Filesystem UUID: a1b2c3d4-e5f6-7890-abcd-ef1234567890
Superblock backups stored on blocks:
    32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632

Allocating group tables: done
Writing inode tables: done
Creating journal (16384 blocks): done
Writing superblocks and filesystem accounting information: done

# 格式化为 XFS(需要先安装 xfsprogs)
sudo apt install xfsprogs -y
sudo mkfs.xfs /dev/sdc2

# 格式化为 Btrfs
sudo apt install btrfs-progs -y
sudo mkfs.btrfs /dev/sdc3

步骤 4:挂载与卸载文件系统

创建好文件系统后,需要挂载到某个目录才能使用:

# 创建挂载点
sudo mkdir -p /mnt/data

# 手动挂载
sudo mount /dev/sdc1 /mnt/data

# 查看挂载信息
df -h /mnt/data

# 输出示例
Filesystem      Size  Used Avail Use% Mounted on
/dev/sdc1        9.8G   24K  9.3G   1% /mnt/data

# 查看详细挂载参数
mount | grep /mnt/data

# 卸载
sudo umount /mnt/data

自动挂载:编辑 /etc/fstab

要让系统启动时自动挂载,需要编辑 /etc/fstab 文件。建议使用 UUID 而非设备名,因为设备名可能变化:

# 查看 UUID
sudo blkid /dev/sdc1

# 输出示例
/dev/sdc1: UUID="a1b2c3d4-e5f6-7890-abcd-ef1234567890" BLOCK_SIZE="4096" TYPE="ext4" PARTUUID="abcdef01-02"

# 在 /etc/fstab 中添加一行
echo 'UUID=a1b2c3d4-e5f6-7890-abcd-ef1234567890 /mnt/data ext4 defaults 0 2' | sudo tee -a /etc/fstab

# 验证 fstab 配置(不会报错就是成功)
sudo mount -a

/etc/fstab 字段说明

字段 含义 示例值
设备 UUID 或设备路径 UUID=.../dev/sdc1
挂载点 目录路径 /mnt/data
文件系统 fs 类型 ext4, xfs, btrfs
挂载选项 逗号分隔 defaults, noatime
转储 是否备份 0(不备份), 1(备份)
检查顺序 fsck 顺序 0(不检查), 1(根分区), 2(其他)

步骤 5:LVM——逻辑卷管理实战

LVM(Logical Volume Manager)是 Linux 下强大的存储管理方案,它允许你在不中断服务的情况下动态调整分区大小。LVM 的架构分为三层:

物理卷 (PV) → 卷组 (VG) → 逻辑卷 (LV)

安装 LVM

sudo apt update
sudo apt install lvm2 -y

创建 LVM

# 1. 准备物理卷(假设有 /dev/sdd 和 /dev/sde 两块硬盘)
sudo pvcreate /dev/sdd /dev/sde

# 查看物理卷
sudo pvs

# 输出示例
  PV         VG Fmt  Attr PSize  PFree
  /dev/sdd      lvm2 ---  20.00g 20.00g
  /dev/sde      lvm2 ---  30.00g 30.00g

# 2. 创建卷组
sudo vgcreate data_vg /dev/sdd /dev/sde

# 查看卷组
sudo vgs

# 输出示例
  VG      #PV #LV #SN Attr   VSize  VFree
  data_vg   2   0   0 wz--n- 49.99g 49.99g

# 3. 创建逻辑卷(分配 50GB 中的 30GB)
sudo lvcreate -L 30G -n data_lv data_vg

# 查看逻辑卷
sudo lvs

# 输出示例
  LV      VG      Attr       LSize  Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  data_lv data_vg -wi-a----- 30.00g

# 4. 格式化并挂载逻辑卷
sudo mkfs.ext4 /dev/data_vg/data_lv
sudo mkdir -p /mnt/lvm_data
sudo mount /dev/data_vg/data_lv /mnt/lvm_data
df -h /mnt/lvm_data

在线扩展逻辑卷

LVM 的最大优势是可以在线扩容而不卸载文件系统:

# 假设数据增长,需要从 30GB 扩展到 45GB
# 卷组中还有 20GB 可用空间

# 扩展逻辑卷(增加 15GB)
sudo lvextend -L +15G /dev/data_vg/data_lv

# 或者直接扩展到指定大小
sudo lvextend -L 45G /dev/data_vg/data_lv

# 调整文件系统大小(ext4 用 resize2fs,XFS 用 xfs_growfs)
sudo resize2fs /dev/data_vg/data_lv

# 验证
df -h /mnt/lvm_data

# 输出示例
Filesystem                       Size  Used Avail Use% Mounted on
/dev/mapper/data_vg-data_lv       44G   24K   42G   1% /mnt/lvm_data

添加新硬盘到卷组

# 新硬盘 /dev/sdf 加入卷组
sudo pvcreate /dev/sdf
sudo vgextend data_vg /dev/sdf

# 现在卷组空间增加了,可以继续扩展逻辑卷
sudo vgs
# 输出示例
  VG      #PV #LV #SN Attr   VSize  VFree
  data_vg   3   1   0 wz--n- 69.99g 24.99g

常见问题

Q1:挂载时提示 “mount: unknown filesystem type”

# 确认文件系统类型
sudo blkid /dev/sdc1

# 安装对应的文件系统工具
sudo apt install xfsprogs btrfs-progs exfatprogs ntfs-3g -y

Q2:分区表损坏,数据丢失

# 使用 testdisk 恢复分区表
sudo apt install testdisk -y
sudo testdisk /dev/sdb

Q3:磁盘空间不足,但卷组中还有空间

这是 LVM 的典型优势——直接在线扩展即可,无需卸载服务:

sudo lvextend -r -L +10G /dev/data_vg/data_lv
# -r 参数会自动调整文件系统大小,一步到位

Q4:/etc/fstab 写错导致无法启动

在 GRUB 启动菜单按 e 编辑内核参数,在 linux 行末尾添加 singleemergency 进入单用户模式,修复 fstab

或者用 Live USB 启动,挂载根分区后修复:

sudo mount /dev/sda3 /mnt
sudo nano /mnt/etc/fstab   # 修复错误行
sudo umount /mnt
reboot

总结

今天我们学习了 Ubuntu 磁盘与文件系统管理的核心技能:

工具 用途 关键命令
lsblk 查看磁盘布局 lsblk / lsblk -f
fdisk / gdisk 分区管理 fdisk /dev/sdX / gdisk /dev/sdX
mkfs 创建文件系统 mkfs.ext4 / mkfs.xfs / mkfs.btrfs
mount / umount 挂载/卸载 mount / umount / mount -a
blkid 查看 UUID blkid /dev/sdX1
pvcreate / vgcreate / lvcreate LVM 管理 三层架构:PV → VG → LV
lvextend / resize2fs 在线扩容 lvextend -L +10G + resize2fs

核心要点:优先使用 GPT 分区表(而非 MBR),通过 UUID 在 /etc/fstab 中配置自动挂载,对生产环境强烈推荐使用 LVM 以便灵活扩容。下一期我们将深入 Ubuntu 的网络配置,从基本的 IP 设置到防火墙规则,让你的机器安全接入互联网。

系列目录

天数 标题 链接
第 1 天 Ubuntu 简介与版本选择 阅读
第 2 天 手把手安装 Ubuntu 阅读
第 3 天 Ubuntu 桌面环境初探 阅读
第 4 天 Ubuntu 终端基础 阅读
第 5 天 用户与权限管理 阅读
第 6 天 软件包管理 阅读
第 7 天 文件与文本操作 阅读
第 8 天 系统服务管理 阅读
第 9 天 磁盘与文件系统管理 ← 今日发布
© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片快捷回复

    暂无评论内容