ARTICLE DETAIL

资讯详情

深耕编程入门与网站建设的一线实战洞察。

Linux 磁盘与文件系统管理

Linux 磁盘与文件系统管理 文章目录1. 核心概念从物理磁盘到文件系统2. 磁盘使用率与健康度查看2.1 查看磁盘空间占用df (Disk Free)2.2 统计目录/文件大小du (Disk Usage)2.3 查看磁盘块设备与分区列表lsblk fdisk3. 实战给服务器添加新硬盘分区、格式化、挂载3.1 步骤 1对磁盘进行分区3.2 步骤 2格式化文件系统3.3 步骤 3挂载文件系统 (Mount)3.4 步骤 4配置开机自动挂载修改 /etc/fstab4. 生产环境高频问题排查场景文件删除了但 df -h 空间没有释放5. 总结在 Linux 系统中“一切皆文件”对存储设备硬盘、SSD、U 盘的管理本质上就是对分区、文件系统挂载与使用率监控的管理。无论是扩展服务器存储、挂载新硬盘还是排查磁盘空间爆满问题掌握磁盘与文件系统管理都是 Linux 运维与开发的基本功。1. 核心概念从物理磁盘到文件系统硬盘接入服务器后不能直接写入数据需要经过以下三个步骤┌─────────────────┐ 分区 (Partition) ┌─────────────────┐ │ 物理磁盘 (Block)│ ────────────────────── │ 磁盘分区 /dev/sdb1 │ └─────────────────┘ └────────┬────────┘ │ │ 格式化 (Format) ▼ ┌─────────────────┐ 挂载 (Mount) ┌─────────────────┐ │ 目录节点 /data │ ────────────────────── │ 文件系统 (ext4/xfs)│ └─────────────────┘ └─────────────────┘磁盘设备命名Linux 中所有设备都在/dev/目录下。SATA / SAS / SCSI 硬盘命名为/dev/sda、/dev/sdb等字母代表第几块盘数字代表第几个分区如/dev/sda1。NVMe M.2 固态硬盘命名为/dev/nvme0n1、/dev/nvme0n1p1。分区表格式MBR较老最大支持 2TB 磁盘最多 4 个主分区。GPT现代标准支持 2TB 大盘几乎无分区数量限制。文件系统 (File System)定义数据在磁盘上的组织方式。常用文件系统ext4Linux 传统通用文件系统兼容性好。xfsCentOS/RHEL 默认文件系统在大文件与高性能 I/O 表现上更优秀。2. 磁盘使用率与健康度查看2.1 查看磁盘空间占用df(Disk Free)df用于查看文件系统级别的整体容量与使用率。# -h: 人性化显示 (Human-readable, MB/GB)# -T: 显示文件系统类型 (ext4/xfs 等)df-hT常见坑点df -h没满但写不进文件输入df -i查看Inode 使用率。如果系统中产生了数百万个小文件如小日志、缓存可能会出现“磁盘空间还很多但 Inode 已 100% 耗尽”的情况。2.2 统计目录/文件大小du(Disk Usage)du用于深入具体目录查找“到底是谁占用了大空间”。# 查看当前目录下各个文件夹的大小深度为 1du-h--max-depth1/var/log# 快速找出当前目录下最大的前 10 个文件/目录du-ah.|sort-rh|head-n102.3 查看磁盘块设备与分区列表lsblkfdisk# 查看系统所有磁盘及分区的树状结构非常直观lsblk# 查看磁盘分区的具体细节需 root 权限sudofdisk-l3. 实战给服务器添加新硬盘分区、格式化、挂载假设你为服务器新增了一块 100GB 的磁盘/dev/sdb需要将其挂载到/data目录供业务使用。3.1 步骤 1对磁盘进行分区使用fdisk对磁盘进行交互式分区sudofdisk/dev/sdb输入n新建分区。依次按回车选择默认的主分区和范围。输入w保存分区表并退出。此时通过lsblk可以看到生成了新分区/dev/sdb1。3.2 步骤 2格式化文件系统创建完分区后需要将其写入指定的格式如ext4或xfs# 格式化为 ext4 文件系统sudomkfs.ext4 /dev/sdb1# 或者格式化为 xfs 文件系统sudomkfs.xfs /dev/sdb13.3 步骤 3挂载文件系统 (Mount)将格式化好的分区连接到系统中的空目录# 1. 创建挂载点目录sudomkdir-p/data# 2. 临时挂载重启后失效sudomount/dev/sdb1 /data# 3. 验证挂载结果df-h|grep/data3.4 步骤 4配置开机自动挂载修改/etc/fstab如果只做了mount服务器重启后挂载就会丢失。必须将挂载信息写入/etc/fstab。为了防止磁盘设备名如/dev/sdb1在重启后漂移强烈推荐使用 UUID# 1. 查询 /dev/sdb1 的 UUIDsudoblkid /dev/sdb1# 输出示例: /dev/sdb1: UUIDa1b2c3d4-e5f6-7890-abcd-1234567890ab TYPEext4# 2. 编辑 /etc/fstab 文件sudonano/etc/fstab# 3. 在文件末尾添加一行格式UUID 挂载点 文件系统类型 挂载参数 备份 检查UUIDa1b2c3d4-e5f6-7890-abcd-1234567890ab /data ext4 defaults02# 4. ⚠️ 极其关键的一步测试 fstab 配置是否正确sudomount-a⚠️高危提醒如果/etc/fstab语法写错服务器下次重启时会无法开机并直接进入紧急恢复模式Emergency Mode修改后必须运行sudo mount -a如果没有报错才说明配置正确。4. 生产环境高频问题排查场景文件删除了但df -h空间没有释放原因当某个日志文件正在被某个运行中的进程如 Nginx、Java持续写入时你直接使用rm app.log删除了文件名但进程依然持有该文件的文件句柄导致磁盘空间并未真正释放。排查方法# 查找已经被删除但依然被进程占用的文件 (deleted)sudolsof|grepdeleted解决办法重启占用该句柄的服务如sudo systemctl restart nginx。针对日后清空日志**不要直接rm**使用清空文件内容的方式 app.log或cat /dev/null app.log。5. 总结监控三板斧用df -h看整体空间用df -i看 Inode 消耗用du -sh *定位大文件。挂载标准流程分区 (fdisk) ➔ 格式化 (mkfs) ➔ 临时挂载 (mount) ➔ 写入/etc/fstab➔ 校验 (mount -a)。安全规范写入/etc/fstab时优先采用UUID方式修改完毕务必执行mount -a确认无误。 感谢阅读想了解更多 我的博客网站 | 记录思考分享干货 我的个人主页 | 关于我、开源项目
返回列表