news 2026/2/4 2:07:28

Ubuntu入门学习教程,从入门到精通, Ubuntu 22.04 的磁盘存储管理(10)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Ubuntu入门学习教程,从入门到精通, Ubuntu 22.04 的磁盘存储管理(10)

Ubuntu 22.04 的磁盘存储管理


一、磁盘存储管理概述

Linux 磁盘管理采用“一切皆文件”的哲学,存储设备被视为特殊文件。本章将详细介绍从物理磁盘识别到文件系统使用的完整流程。

1.1 存储设备类型

类型设备文件前缀说明
SATA/IDE 硬盘/dev/sd*最常见类型,如/dev/sda
NVMe SSD/dev/nvme*高性能固态硬盘,如/dev/nvme0n1
虚拟磁盘/dev/vd*虚拟机环境,如/dev/vda
软件 RAID/dev/md*/dev/md0
LVM 逻辑卷/dev/mapper/*/dev/mapper/ubuntu--vg-root

1.2 管理流程

物理磁盘 → 分区/不分区 → 创建文件系统 → 挂载 → 使用

⚠️警告:磁盘操作可能导致数据丢失!生产环境操作前务必:

  1. 备份重要数据
  2. 在测试环境验证命令
  3. 确认目标设备名称

二、磁盘分区简介

2.1 两种分区表类型

类型最大分区数最大磁盘支持兼容性Ubuntu 22.04 默认
MBR (DOS)4 主分区(或 3主+1扩展)2TB旧系统兼容好仅用于 BIOS 系统
GPT128 个(理论无限制)8ZB (80亿TB)需 UEFIUEFI 系统默认

2.2 分区类型

  • 主分区:直接用于安装系统或存储数据
  • 扩展分区:MBR 下的容器,可包含多个逻辑分区
  • 逻辑分区:位于扩展分区内,突破 MBR 4 分区限制

💡 Ubuntu 22.04 在 UEFI 模式安装时默认使用 GPT 分区表。


三、Linux 磁盘及分区命名规则

3.1 命名规则详解

(1)传统硬盘 (SATA/SCSI)
/dev/sda - 第一块硬盘 /dev/sda1 - 第一块硬盘的第一个分区 /dev/sdb3 - 第二块硬盘的第三个分区
(2)NVMe SSD
/dev/nvme0n1 - 第一个 NVMe 控制器上的第一个命名空间 /dev/nvme0n1p1 - 该命名空间上的第一个分区 /dev/nvme1n2p3 - 第二个控制器、第二个命名空间、第三个分区
(3)虚拟磁盘
/dev/vda - 虚拟机第一个虚拟磁盘 /dev/vdb1 - 虚拟机第二个虚拟磁盘的第一个分区

3.2 查看磁盘设备

# 列出所有块设备lsblk -f# -f: 显示文件系统类型、UUID、标签等# 详细设备信息sudofdisk-l# 或sudoparted-l# 查看 NVMe 设备sudonvme list

输出示例 (lsblk -f):

NAME FSTYPE LABEL UUID MOUNTPOINT sda ├─sda1 vfat EFI 6E5B-4D6A /boot/efi ├─sda2 ext4 boot b8e3f0a2-7e1f-4c02-bb69-58a63b8c20a2 /boot └─sda3 LVM2_mem p7qB0i-GYxZ-6BwV-1hGj-fY8T-6XeZ-0KqR0D ├─ubuntu--vg-root ext4 a1b2c3d4-e5f6-7890-abcd-ef1234567890 / └─ubuntu--vg-swap swap 98765432-10fe-dcba-9876-543210fedcba [SWAP] nvme0n1 └─nvme0n1p1 ext4 data 123e4567-e89b-12d3-a456-426614174000 /data

✅ 解析:该系统使用 LVM 管理主硬盘 (sda),额外挂载 NVMe 磁盘用于数据存储。


四、磁盘分区管理命令:fdisk/gdisk/parted

4.1 fdisk 命令(MBR/GPT 兼容)

(1)基础交互模式
sudofdisk/dev/sdb# 操作第二块硬盘

交互命令

m - 帮助菜单 p - 打印分区表 n - 新建分区 d - 删除分区 t - 更改分区类型 w - 写入更改并退出 (危险!) q - 不保存退出
(2)非交互式分区(脚本化)
# 创建单个主分区(使用全部空间)echo-e"n\np\n\n\n\nw"|sudofdisk/dev/sdb# 详细解析:# n = new partition# p = primary partition# [enter] = 默认分区号 (1)# [enter] = 默认起始扇区# [enter] = 默认结束扇区 (全部空间)# w = write changes

4.2 gdisk 命令(仅 GPT)

# 创建 GPT 分区表并添加分区sudogdisk /dev/sdc<<EOF o # 创建新空GPT表 y # 确认 n # 新建分区 # 分区号 (默认1) # 起始扇区 (默认2048) # 结束扇区 (默认最大,或指定 +500G) 8300 # Linux文件系统类型代码 w # 写入 y # 确认 EOF

4.3 parted 命令(支持大磁盘)

# 创建 GPT 分区表sudoparted/dev/sdd mklabel gpt# 创建单个分区(100% 空间)sudoparted/dev/sdd mkpart primary ext40%100%# 设置启动标志(UEFI 系统需要)sudoparted/dev/sdaset1esp on

💡最佳实践

  • 新服务器/大容量磁盘 (>2TB) 使用gdiskparted(GPT)
  • 虚拟机/小容量磁盘可使用fdisk(兼容 MBR)
  • UEFI 系统必须使用 GPT + ESP (EFI 系统分区)

五、Linux 文件系统管理

5.1 Linux 支持的文件系统格式

文件系统特点适用场景
ext4日志型,稳定可靠,最大 1EB通用系统盘、数据盘
XFS高性能,适合大文件,最大 8EB大型数据库、视频存储
Btrfs高级特性(快照、压缩、RAID)需要数据保护的场景
ZFS企业级(数据完整性校验)关键业务、NAS
FAT32兼容性好,无权限管理U 盘、跨平台共享
NTFSWindows 兼容,支持大文件双系统共享分区
exFAT闪存优化,无日志SD 卡、SSD 移动盘

✅ Ubuntu 22.04 默认使用 ext4 作为系统文件系统。

5.2 创建文件系统命令:mkfs

(1)基础语法
sudomkfs.[文件系统类型][选项]设备
(2)常用文件系统创建
ext4 (推荐通用)
# 基础创建sudomkfs.ext4 /dev/sdb1# 高级选项sudomkfs.ext4 -L"data"-m1-b4096-Elazy_journal_init=1/dev/sdb1# -L: 卷标 (便于识别)# -m: 保留块百分比 (1% 给root,避免磁盘满时系统崩溃)# -b: 块大小 (4096=4K,适合大多数场景)# -E: 扩展选项 (lazy_journal_init 加速大磁盘格式化)
XFS (高性能)
sudomkfs.xfs -L"video_storage"-dsu=256k,sw=4/dev/sdc1# -d su/sw: 优化 RAID 阵列性能 (stripe unit/width)
Btrfs (高级特性)
# 创建并启用透明压缩sudomkfs.btrfs -L"backup"-O ^extref /dev/sdd1sudomount-ocompress=zstd /dev/sdd1 /mnt/backup
(3)非交互式确认
# 强制格式化(无确认提示)echoy|sudomkfs.ext4 /dev/sdb1

5.3 创建文件系统的其他工具

(1)mkfs (通用前端)
# 自动选择文件系统类型sudomkfs-t ext4 /dev/sdb1
(2)专门工具
# FAT32 (适用于 U 盘)sudomkfs.vfat -F32-n"USB_DRIVE"/dev/sde1# NTFS (Windows 兼容)sudoaptinstallntfs-3g -ysudomkfs.ntfs -f -L"WIN_SHARE"/dev/sdf1# -f: 快速格式化
(3)GUI 工具 (Ubuntu Desktop)
# 安装磁盘工具sudoaptinstallgnome-disks -y gnome-disks# 图形界面管理

六、文件系统的挂载和卸载

6.1 挂载磁盘分区:mount

(1)临时挂载(重启失效)
# 创建挂载点sudomkdir-p /mnt/data# 挂载分区sudomount/dev/sdb1 /mnt/data# 指定文件系统类型sudomount-t ext4 /dev/sdb1 /mnt/data# 挂载选项示例sudomount-o noatime,nodiratime,defaults /dev/sdb1 /mnt/data# noatime/nodiratime: 提升性能(不更新访问时间)
(2)特殊设备挂载
# 挂载 ISO 镜像sudomkdir/mnt/isosudomount-o loop ubuntu-22.04.iso /mnt/iso# 挂载 NFS 共享sudoaptinstallnfs-common -ysudomount-t nfs192.168.1.100:/share /mnt/nfs# 挂载 CIFS/SMB (Windows 共享)sudoaptinstallcifs-utils -ysudomount-t cifs //server/share /mnt/smb -ouser=alice,password=pass123,uid=1000,gid=1000

6.2 永久挂载:/etc/fstab

(1)配置文件格式
<设备标识> <挂载点> <文件系统> <选项> <dump> <pass>
(2)安全标识方式(避免设备名变更)
方式命令示例优点
UUIDUUID=a1b2c3d4...唯一且稳定
LABELLABEL=data人类可读
/dev/disk/by-id/dev/disk/by-id/ata-WDC...基于硬件ID
# 查看设备标识sudoblkid /dev/sdb1# 输出: /dev/sdb1: UUID="a1b2c3d4-e5f6-7890-abcd-ef1234567890" TYPE="ext4" PARTUUID="12345678-01"# 编辑 fstabsudonano/etc/fstab
(3)/etc/fstab 配置示例
# 使用 UUID (推荐) UUID=a1b2c3d4-e5f6-7890-abcd-ef1234567890 /mnt/data ext4 defaults,noatime,nodiratime 0 2 # 使用 LABEL LABEL=backup /backup xfs defaults 0 2 # 交换分区 UUID=98765432-10fe-dcba-9876-543210fedcba none swap sw 0 0 # 临时文件系统 (内存) tmpfs /tmp tmpfs defaults,noatime,nosuid,size=2G 0 0

🔑重要参数

  • defaults:rw, suid, dev, exec, auto, nouser, async
  • noatime,nodiratime:提升性能(不记录访问时间)
  • nofail:设备不存在时启动不失败(适用于可移动设备)
  • 0(dump):0=不备份,1=每天备份(通常为0)
  • pass:0=不检查,1=根分区,2=其他分区(fsck 顺序)
(4)验证 fstab
# 模拟挂载所有条目(不实际挂载)sudomount-a# 检查错误sudofindmnt --verify# 重启后自动挂载sudosystemctl daemon-reload

6.3 卸载磁盘分区:umount

(1)基础卸载
# 正常卸载sudoumount/mnt/data# 通过设备卸载sudoumount/dev/sdb1
(2)强制卸载
# 当设备忙时(有进程使用)sudoumount-l /mnt/data# lazy 卸载:当不再使用时立即卸载sudoumount-f /mnt/data# 强制卸载(NFS 专用,慎用)
(3)卸载前检查
# 查看谁在使用挂载点sudolsof+D /mnt/data# 或sudofuser-vm /mnt/data# 终止使用进程(谨慎!)sudofuser-km /mnt/data# kill all processes

⚠️警告:强制卸载可能导致数据损坏!确保没有进程正在写入。


七、文件系统检查与维护

7.1 文件系统检查和修复:fsck

(1)何时需要 fsck
  • 系统异常关机
  • 文件系统报告错误
  • 定期维护(每30次挂载或180天)
(2)安全执行步骤
# 步骤1:卸载分区sudoumount/dev/sdb1# 步骤2:检查(不修复)sudofsck-N /dev/sdb1# 仅显示将执行的操作sudofsck-n /dev/sdb1# 只读模式检查# 步骤3:修复(交互式)sudofsck-y /dev/sdb1# -y: 自动确认所有修复# 或sudofsck-p /dev/sdb1# -p: 自动修复安全问题# 步骤4:验证sudofsck-v /dev/sdb1# -v: 详细输出
(3)ext4 特定选项
# 检查 inode 表sudofsck.ext4 -f -c /dev/sdb1# -f: 强制检查(即使标记为clean)# -c: 检查坏块并添加到坏块列表
(4)XFS 特定工具
# XFS 不能卸载时检查sudoxfs_check /dev/sdc1# 修复(必须卸载)sudoumount/dev/sdc1sudoxfs_repair /dev/sdc1# 严重损坏时sudoxfs_repair -L /dev/sdc1# -L: 清除日志(最后手段)

⚠️警告:在已挂载的文件系统上运行 fsck 会导致灾难性数据损坏!

7.2 查看磁盘使用情况:df

(1)基础用法
# 人类可读格式df-h# -h: human-readable (GB/MB)# 指定文件系统类型df-h -t ext4# 查看 inode 使用df-i
(2)高级选项
# 仅显示特定挂载点df-h /home /mnt/data# 显示所有文件系统(包括虚拟)df-aTh# -T: 显示文件系统类型# -a: 包括虚拟文件系统

输出示例:

Filesystem Type Size Used Avail Use% Mounted on /dev/sda3 ext4 50G 20G 28G 42% / /dev/sdb1 ext4 1.8T 450G 1.3T 26% /mnt/data tmpfs tmpfs 3.9G 0 3.9G 0% /run/user/1000

7.3 查看文件/目录磁盘使用:du

(1)基础用法
# 当前目录总大小du-sh.# -s: summary (总和)# -h: human-readable# 列出子目录大小du-h --max-depth=1/var
(2)高级技巧
# 按大小排序(找出大目录)du-h /home|sort-h# 仅显示大于 1GB 的目录du-h /var|awk'$1 ~ /G$/ && $1+0 > 1'# 排除特定类型du-h --exclude="*.log"/var/log# 按修改时间筛选find/var -type f -mtime -7 -execdu-ch{}+|greptotal$

💡实用组合:快速定位大文件

sudofind/ -xdev -type f -size +100M -execls-lh{}\;|awk'{ print $9 ": " $5 }'

八、综合实战案例:添加新硬盘并配置自动挂载

目标:为 Ubuntu 22.04 服务器添加一块 2TB 新硬盘,格式化为 ext4,挂载到/data,并配置开机自动挂载。

#!/bin/bash# add_new_disk.shecho"=== 1. 识别新磁盘 ==="# 列出所有磁盘(添加前记录,添加后对比)echo"添加前磁盘列表:"lsblk -d -o NAME,SIZE,MODEL,SERIALecho"请按 Enter 确认已插入新磁盘..."readecho"添加后磁盘列表:"NEW_DISK=$(lsblk -dno NAME,SIZE|grep"1.8T\|2T"|head-1|awk'{print $1}')echo"检测到新磁盘: /dev/$NEW_DISK"if[-z"$NEW_DISK"];thenecho"错误:未检测到 2TB 左右的新磁盘!"exit1fiecho"=== 2. 创建 GPT 分区表和单个分区 ==="sudoparted/dev/$NEW_DISKmklabel gptsudoparted/dev/$NEW_DISKmkpart primary ext40%100%sudoparted/dev/$NEW_DISKprintecho"=== 3. 创建文件系统 (ext4) ==="PARTITION="/dev/${NEW_DISK}1"echo"正在格式化$PARTITION为 ext4 (可能需要几分钟)..."sudomkfs.ext4 -L"data"-m1-b4096-Elazy_journal_init=1$PARTITIONecho"=== 4. 创建挂载点并临时挂载 ==="sudomkdir-p /datasudomount$PARTITION/data# 验证挂载if!mountpoint -q /data;thenecho"错误:挂载失败!"exit1fiecho"=== 5. 配置永久挂载 (/etc/fstab) ==="# 获取 UUIDUUID=$(sudoblkid -s UUID -o value $PARTITION)echo"分区 UUID:$UUID"# 备份 fstabsudocp/etc/fstab /etc/fstab.bak_$(date+%Y%m%d)# 添加 fstab 条目echo"UUID=$UUID/data ext4 defaults,noatime,nodiratime,errors=remount-ro 0 2"|sudotee-a /etc/fstab# 验证 fstabif!sudomount-a;thenecho"错误:fstab 配置有误!恢复备份..."sudocp/etc/fstab.bak_$(date+%Y%m%d)/etc/fstabexit1fiecho"=== 6. 设置权限 ==="sudochown-R$(whoami):$(whoami)/datasudochmod-R755/dataecho"=== 7. 验证最终状态 ==="df-h /data lsblk -f|grep-A3"$NEW_DISK"echo-e"\n✅ 新硬盘部署完成!"echo" - 挂载点: /data"echo" - 文件系统: ext4"echo" - 容量:$(df-h /data|awk'NR==2 {print $2}')"echo" - 建议:将重要数据移至此分区"

🔒安全增强

  1. 关键操作前备份配置文件
  2. 验证每一步操作结果
  3. 使用 UUID 而非设备名(避免设备名变更)
  4. 设置合理的挂载选项(noatime 提升性能,errors=remount-ro 防止损坏)

九、本章小结

功能类别核心命令/文件关键要点
磁盘识别lsblk,fdisk -l理解设备命名规则
分区管理fdisk,gdisk,partedGPT 适用于大磁盘/UEFI
文件系统创建mkfs.ext4,mkfs.xfs根据场景选择合适文件系统
临时挂载mount理解挂载选项对性能的影响
永久挂载/etc/fstab必须使用 UUID/LABEL
文件系统检查fsck,xfs_repair只能在卸载状态下运行
空间监控df,du定期检查避免 100% 使用率

最佳实践总结

  1. 分区策略
    • 系统盘:分/,/boot,/home,/var(避免单点故障)
    • 数据盘:单一分区(除非有特殊需求)
  2. 文件系统选择
    • 通用:ext4
    • 大文件/高性能:XFS
    • 需要快照/压缩:Btrfs
  3. fstab 安全
    • 总是备份/etc/fstab前再修改
    • 使用mount -a验证配置
    • 添加nofail选项用于可移动设备
  4. 维护计划
    • 定期运行df -h监控空间
    • 文件系统满 85% 时告警
    • 每季度检查一次文件系统健康

十、习题与实践

  1. 为什么在已挂载的文件系统上运行fsck是危险的?
    → 可能导致元数据不一致,造成数据损坏或丢失。

  2. /etc/fstab中的pass字段值 0、1、2 分别表示什么?
    → 0:不检查;1:根文件系统(首先检查);2:其他文件系统(按顺序检查)。

  3. 如何查找/home目录下大于 500MB 的文件?

    find/home -type f -size +500M -execls-lh{}\;
  4. 使用parted为 10TB 磁盘创建单一分区的命令是什么?

    sudoparted/dev/sdX mklabel gptsudoparted/dev/sdX mkpart primary ext40%100%
  5. 简述 GPT 相比 MBR 的优势。
    → 支持 >2TB 磁盘、最多 128 个主分区、分区表备份(防损坏)、唯一分区 GUID。

📌重要提醒
本章所有操作均在Ubuntu 22.04 LTS验证。
磁盘操作风险极高

  • 操作前使用lsblksudo fdisk -l确认目标设备
  • 关键数据务必提前备份
  • 生产环境使用带测试的自动化脚本(如 Ansible)

谨记:“rm -rf /” 和错误的磁盘操作是运维两大噩梦!

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/2/3 13:41:02

如何在AWS Amplify应用中构建完整的分布式追踪系统

如何在AWS Amplify应用中构建完整的分布式追踪系统 【免费下载链接】amplify-js A declarative JavaScript library for application development using cloud services. 项目地址: https://gitcode.com/gh_mirrors/am/amplify-js 当你的云应用从单体架构演进到微服务时…

作者头像 李华
网站建设 2026/2/3 12:53:34

ESP32 IDF中I2C设备驱动的完整指南

深入浅出 ESP32 IDF 中的 I2C 驱动开发&#xff1a;从零到实战在嵌入式系统的世界里&#xff0c;当你需要连接多个传感器、显示屏或存储芯片时&#xff0c;总免不了和I2C&#xff08;Inter-Integrated Circuit&#xff09;打交道。它只需要两根线——SDA 和 SCL&#xff0c;就能…

作者头像 李华
网站建设 2026/1/29 22:51:42

IPv6 hosts管理工具:自动化本地DNS映射配置指南

想要轻松管理IPv6地址解析&#xff0c;提升网络访问效率吗&#xff1f;ipv6-hosts项目为您提供了一站式的解决方案。这个专注于自动化IPv6 hosts管理的工具能够帮助您快速配置本地DNS映射&#xff0c;让IPv6地址解析变得简单高效。 【免费下载链接】ipv6-hosts Fork of https:/…

作者头像 李华
网站建设 2026/1/31 13:53:50

宝塔面板v7.7.0完整安装教程:从零开始搭建服务器管理平台

宝塔面板v7.7.0完整安装教程&#xff1a;从零开始搭建服务器管理平台 【免费下载链接】btpanel-v7.7.0 宝塔v7.7.0官方原版备份 项目地址: https://gitcode.com/GitHub_Trending/btp/btpanel-v7.7.0 你是否正在寻找一款强大易用的服务器管理面板&#xff1f;宝塔面板v7.…

作者头像 李华
网站建设 2026/2/3 19:23:09

使用TensorFlow构建多任务学习模型实战

使用TensorFlow构建多任务学习模型实战 在现代AI系统中&#xff0c;单一任务模型的局限性日益凸显。以一个智能客服机器人为例&#xff1a;当用户提问“我想取消昨天下的订单”时&#xff0c;系统不仅需要判断这是“订单取消”意图&#xff08;分类任务&#xff09;&#xff0c…

作者头像 李华
网站建设 2026/1/19 14:56:30

Compose Multiplatform桌面导航测试:从依赖冲突到优雅解决

在跨平台开发的世界里&#xff0c;Compose Multiplatform如同一把多功能工具&#xff0c;让开发者能够用同一套代码构建Android、iOS和桌面应用。然而&#xff0c;当优雅的UI设计遇上复杂的导航测试时&#xff0c;桌面平台的依赖冲突往往成为开发者最头疼的问题。&#x1f6a8;…

作者头像 李华