Linux磁盘管理实战:lsblk、fdisk、mkfs.xfs命令详解

📅 发布时间:2026/9/8 9:17:11
Linux磁盘管理实战:lsblk、fdisk、mkfs.xfs命令详解 之前在做服务器初始化时经常要处理“新加一块数据盘”这种需求。流程倒是不复杂无非是查看磁盘、划分分区、格式化、挂载使用但网上资料大多只贴命令不讲原理新手照着敲完遇到磁盘名对不上、分区表不刷新、格式化报错这种问题就容易卡住。这篇文章以 Linux 磁盘管理为主线完整拆解 lsblk、fdisk、mkfs.xfs 三个核心命令的使用方法从查看磁盘信息到格式化文件系统一次讲清楚。文章包含大量可复制的命令和输出示例Linux 运维新手可以把这篇当作磁盘操作的入门手册有一定经验的开发者也可以直接跳到第 4 章的完整实战案例和常见问题排查表。1. 背景与核心概念1.1 Linux 磁盘管理到底在管理什么Linux 磁盘管理的本质是帮助操作系统识别硬件磁盘、规划磁盘上的存储空间并建立可供文件系统使用的存储结构。整个过程可以拆成三个环节第一识别磁盘。系统通过驱动加载磁盘设备后会在/dev目录下生成对应的设备文件例如/dev/sda、/dev/sdb、/dev/nvme0n1等。这一步通常由内核自动完成但运维人员需要知道系统识别到了哪些磁盘容量是多少哪些已经被使用哪些是空闲的。第二划分分区。一块物理磁盘可以整块直接使用也可以划分成多个分区。分区的意义在于不同分区可以安装不同文件系统、用于不同业务目录也能在一定程度上隔离故障和限制容量。MBR 和 GPT 是两种常见分区表格式fdisk 擅长处理 MBR 格式的分区也支持 GPT但超过 2TB 的磁盘更推荐使用 parted 或 gdisk。第三格式化文件系统。分区只是把磁盘划分成了一个个“容器”容器里要存储文件必须写入文件系统元数据。mkfs.xfs 就是专门用于创建 XFS 文件系统的工具格式化完成后分区才能挂载使用。这三个环节对应关系如下环节常用命令作用查看磁盘lsblk查看磁盘与分区树状结构、容量、挂载点磁盘分区fdisk创建、删除、查看分区格式化mkfs.xfs在指定分区上创建 XFS 文件系统1.2 磁盘、分区、文件系统的关系很多新手会混淆磁盘、分区、文件系统这三个概念这里用一个比较直观的类比解释。磁盘相当于一套新房分区相当于把房子划分成卧室、客厅、厨房文件系统则相当于在每个房间里安装的收纳系统用于决定物品文件怎么摆放、怎么查找。举一个实际的设备名例子/dev/sda # 第一块 SCSI/SATA 磁盘也就是整块磁盘 /dev/sda1 # sda 上的第一个分区 /dev/sda2 # sda 上的第二个分区设备名中的数字代表分区号。/dev/sda1并不是一块新磁盘而是sda这块磁盘上编号为 1 的分区。理解这一点对后面使用 fdisk 和 mkfs.xfs 至关重要因为格式化时要操作的是“分区设备”而不是“整块磁盘设备”。1.3 为什么需要掌握这几个命令Linux 服务器上新增数据盘、虚拟机扩容磁盘、排查挂载异常几乎都要用到 lsblk、fdisk、mkfs.xfs。llblk 用于快速确认磁盘设备树和挂载关系是排查“找不到磁盘”“挂载点不对”等问题的第一排查命令。fdisk 用于规划分区虽然日常操作不频繁但一旦要新增磁盘就必须掌握它的交互式操作。mkfs.xfs 用于创建文件系统是磁盘投入使用前的最后一步。它们共同构成了 Linux 磁盘管理的操作闭环也是运维面试题中非常高频的三个命令。2. 环境准备与版本说明2.1 操作系统与权限本文示例以 CentOS 7.9 / Rocky Linux 9 环境为例。lsblk 来自util-linux软件包fdisk 来自util-linuxmkfs.xfs 来自xfsprogs这三者在绝大多数 Linux 发行版中都已默认安装。官方文档和主流发行版说明如下RHEL / CentOS / Rocky Linux / AlmaLinux默认自带 xfsprogs系统盘默认使用 XFS 文件系统。Ubuntu / Debian默认可能没有安装 xfsprogs需要先执行安装命令。其他发行版一般可以通过系统软件包管理器安装xfsprogs。如果你的环境是 Ubuntu/Debian可以先执行sudo apt update sudo apt install xfsprogs本文涉及的三个命令在 CentOS 和 Ubuntu 上语法完全一致只有安装方式不同。2.2 实验环境说明为了避免误操作生产服务器强烈建议先在虚拟机中搭建实验环境。本文以下面的环境为演示基础项目说明操作系统CentOS 7.9 / Rocky Linux 9内核版本按镜像默认虚拟机软件VMware Workstation / VirtualBox磁盘系统盘/dev/sda新增数据盘/dev/sdb操作系统盘文件系统XFS操作权限root 用户或具有 sudo 权限的普通用户下面的实验操作都围绕“新增一块数据盘/dev/sdb把它分成一个分区并格式化为 XFS 文件系统”这个需求展开。整个过程只涉及数据盘不触碰系统盘风险可控。需要注意实际操作中磁盘设备名可能因为硬件识别顺序不同而发生变化例如/dev/sdb在另一台机器上可能显示为/dev/sdc。因此所有操作前都应该先用 lsblk 确认设备名。3. 使用 lsblk 查看磁盘信息3.1 lsblk 命令语法lsblklist block devices用于列出所有可用的块设备信息输出结果以树状结构展示磁盘和分区之间的依赖关系。lsblk [选项] [设备名]不加任何参数时直接查看系统所有块设备[rootlocalhost ~]# lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 50G 0 disk ├─sda1 8:1 0 1G 0 part /boot └─sda2 8:2 0 49G 0 part / sdb 8:16 0 20G 0 disk命令输出中每一列含义如下列名含义NAME设备名称MAJ:MIN主设备号与次设备号内核用它们来标识设备RM是否为可移动设备1 表示可移动SIZE设备容量RO是否为只读设备TYPE设备类型disk 表示磁盘part 表示分区MOUNTPOINT挂载点为空表示未挂载在上面的输出中sda是一块 50G 的磁盘下面有sda1和sda2两个分区分别挂载在/boot和/sdb是一块 20G 的新磁盘尚未分区和挂载。3.2 lsblk 常用选项详解3.2.1 查看文件系统信息使用-f参数可以额外显示文件系统类型、UUID 和挂载点[rootlocalhost ~]# lsblk -f NAME FSTYPE LABEL UUID MOUNTPOINT sda ├─sda1 xfs a1b2c3d4-... /boot └─sda2 xfs e5f6a7b8-... / sdbFSTYPE 列显示了分区上已创建的文件系统类型。sdb这一行 FSTYPE 为空说明该磁盘还没有格式化。3.2.2 查看完整路径默认不显示/dev/前缀使用-p参数可以显示完整设备路径方便与其它命令的输出对齐[rootlocalhost ~]# lsblk -p NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT /dev/sda 8:0 0 50G 0 disk ├─/dev/sda1 8:1 0 1G 0 part /boot └─/dev/sda2 8:2 0 49G 0 part / /dev/sdb 8:16 0 20G 0 disk3.2.3 只显示磁盘设备使用-d参数可以只显示磁盘本身不显示下面的分区适合用来快速查看当前系统有哪些磁盘[rootlocalhost ~]# lsblk -d NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 50G 0 disk sdb 8:16 0 20G 0 disk3.3 如何确认新磁盘是否被识别当虚拟机或物理机新添加了一块磁盘后如果系统没有自动识别可以先执行 lsblk 确认。建议养成“操作前先 lsblk”的习惯lsblk如果新磁盘可以被识别输出中会多出一个 TYPE 为 disk 的设备节点。如果看不到新磁盘可能的原因有虚拟机未正确挂载磁盘需要在虚拟机设置中添加。物理服务器新插入的磁盘需要重新扫描总线。热插拔场景下需要触发内核重新扫描可执行echo - - - /sys/class/scsi_host/host0/scan需根据实际使用场景谨慎操作。3.4 lsblk 与 df 的区别在很多文章里会看到用 df 查看磁盘的命令但 df 和 lsblk 关注的重点不同命令作用df -hT查看已挂载文件系统的使用率、挂载点和文件系统类型lsblk查看块设备、分区结构、挂载点不管是否已挂载df 只能看到已经挂载的文件系统新磁盘如果没有格式化、没有挂载用 df 是看不到的。lsblk 则可以完整展示所有磁盘设备包括未分区、未挂载的磁盘。用 df 查看当前主机文件系统使用情况[rootlocalhost ~]# df -hT Filesystem Type Size Used Avail Use% Mounted on /dev/sda2 xfs 49G 3.5G 46G 8% / /dev/sda1 xfs 1014M 173M 842M 18% /boot排查磁盘问题时建议先 lsblk 查设备结构再用 df 查已挂载文件系统的空间使用情况两者配合使用。4. 使用 fdisk 进行磁盘分区4.1 fdisk 的工作原理fdisk 是一个传统的分区工具提供交互式命令行界面使用户可以逐条执行分区命令。它支持创建 MBR 和 GPT 分区表但更常见的用途是管理 MBR 分区表。以下情况优先考虑使用 fdisk磁盘容量小于 2TB。需要创建传统 MBR 分区表。快速创建一两个分区。如果磁盘容量大于 2TBfdisk 虽然也支持 GPT但推荐使用parted或gdisk处理逻辑更清晰。4.2 fdisk 交互命令说明使用 fdisk 对/dev/sdb进行操作[rootlocalhost ~]# fdisk /dev/sdb进入交互模式后输入m可以查看帮助Command (m for help): m常用交互命令如下命令作用m显示帮助菜单p打印当前分区表n新建分区d删除分区t修改分区类型w保存并退出q不保存退出对新手来说最容易犯的错误是忘记输入w保存。fdisk 的所有操作在退出前并不会真正写入磁盘只有输入w才会写入分区表。如果操作错误可以使用q直接不保存退出这一点非常实用。4.3 使用 fdisk 创建分区的完整过程下面演示如何把/dev/sdb划分为一个分区。第一步进入 fdisk 交互模式[rootlocalhost ~]# fdisk /dev/sdb第二步输入p查看当前分区表Command (m for help): p Disk /dev/sdb: 20 GiB, 21474836480 bytes, 41943040 sectors Disk model: VMware Virtual S Units: sectors of 1 * 512 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disklabel type: dos Disk identifier: 0x1a2b3c4d Device Boot Start End Sectors Size Id Type输出中显示磁盘没有分区表或者分区表为空。第三步输入n新建分区Command (m for help): n Partition type p primary (0 primary, 0 extended, 4 free) e extended (container for logical partitions) Select (default p):直接回车默认选择主分区。接下来会要求输入分区号Partition number (1-4, default 1):直接回车默认选择 1。然后是起始扇区First sector (2048-41943039, default 2048):直接回车使用默认值。最后是结束扇区如果要把整个磁盘都作为一个分区直接回车Last sector, sectors or size{K,M,G,T,P} (2048-41943039, default 41943039): Created a new partition 1 of type Linux and of size 20 GiB.如果只想创建 10G 的分区可以在这一步输入10G。第四步输入p查看分区是否创建成功Command (m for help): p Device Boot Start End Sectors Size Id Type /dev/sdb1 2048 41943039 41940992 20G 83 Linux第五步输入w保存并退出Command (m for help): w The partition table has been altered. Syncing disks.到这里/dev/sdb1分区创建完成。4.4 分区后刷新分区表分区创建后操作系统可能还在使用旧的分区表。此时执行 partprobe 让内核重新读取分区表partprobe /dev/sdb然后再次执行 lsblk 确认[rootlocalhost ~]# lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 50G 0 disk ├─sda1 8:1 0 1G 0 part /boot └─sda2 8:2 0 49G 0 part / sdb 8:16 0 20G 0 disk └─sdb1 8:17 0 20G 0 partsdb1已经出现说明分区表刷新成功。4.5 fdisk 删除分区的风险提示fdisk 也支持删除分区。交互模式下输入d再输入分区号最后输入w保存分区就会被删除。这里必须强调删除分区会丢失该分区上的所有数据。实际操作中删除分区前一定要先确认分区上的数据已经备份。生产环境中建议由有经验的运维人员操作并且提前在测试环境演练。5. 使用 mkfs.xfs 格式化分区5.1 XFS 文件系统简介XFS 是一款高性能的 64 位日志文件系统由 SGI 开发设计目标是支持大文件和大容量存储是 RHEL/CentOS 7 及之后版本的默认文件系统。XFS 的主要特点包括支持超大文件系统最大文件系统大小受限于操作系统和块设备。支持在线扩容无需卸载分区就可以扩展文件系统。采用延迟分配机制写入性能优异适合大文件和大容量存储场景。崩溃恢复能力较强日志机制保证文件系统一致性。如果业务场景是普通 Web 应用、数据库日志、大量小文件XFS 和 ext4 都是可靠的选择如果是大规模存储、虚拟化平台等场景XFS 优势更明显。5.2 mkfs.xfs 命令语法mkfs.xfs 的完整语法如下mkfs.xfs [选项] 设备名常用选项说明选项作用-f强制格式化如果设备上已有文件系统必须加这个参数-L label设置文件系统卷标-b size指定块大小单位是字节默认通常为 4096-d指定数据区域相关参数一般默认即可-n指定日志区域相关参数一般默认即可具体使用方式可以查看帮助mkfs.xfs --help5.3 格式化sdb1为 XFS 文件系统在/dev/sdb1分区上创建 XFS 文件系统[rootlocalhost ~]# mkfs.xfs /dev/sdb1 meta-data/dev/sdb1 isize512 agcount4, agsize1310720 blks sectsz512 attr2, projid32bit1 crc1 finobt1, sparse1, rmapbt0 reflink1 data bsize4096 blocks5242880, imaxpct25 sunit0 swidth0 blks naming version 2 bsize4096 ascii-ci0, ftype1 log internal log bsize4096 blocks2560, version2 sectsz512 sunit0 blks, lazy-count1 realtime none extsz4096 blocks0, rtextents0执行完成后分区就有了 XFS 文件系统。此时用 lsblk -f 验证[rootlocalhost ~]# lsblk -f NAME FSTYPE LABEL UUID MOUNTPOINT sda ├─sda1 xfs a1b2c3d4-... /boot └─sda2 xfs e5f6a7b8-... / sdb └─sdb1 xfs c9d0e1f2-...FSTYPE 已经变成了 xfs说明格式化成功。5.4 配合 blkid 查看分区 UUIDUUIDUniversally Unique Identifier是文件系统的唯一标识。挂载分区时推荐使用 UUID 而不是设备名因为设备名可能在系统重启后发生变化而 UUID 相对稳定。查看 UUID[rootlocalhost ~]# blkid /dev/sdb1 /dev/sdb1: UUIDc9d0e1f2-... TYPExfs5.5 mkfs.xfs 格式化后的挂载与开机自动挂载格式化只是创建了文件系统要让分区可用还需要挂载到某个目录。创建一个挂载目录并手动挂载mkdir -p /data mount /dev/sdb1 /data查看挂载结果[rootlocalhost ~]# df -hT /data Filesystem Type Size Used Avail Use% Mounted on /dev/sdb1 xfs 20G 174M 20G 1% /data手动挂载会在系统重启后失效。如果要开机自动挂载需要把挂载信息写入/etc/fstab。5.6 写入 /etc/fstab 实现开机自动挂载编辑/etc/fstab添加以下行# 设备UUID 挂载点 文件系统类型 挂载选项 是否备份 是否自检 UUIDc9d0e1f2-... /data xfs defaults 0 0编辑完成后可以用下面的命令验证 fstab 配置是否正确mount -a如果输出为空说明配置正确。如果报错需要立即检查配置否则重启后可能进入紧急模式。这里使用 UUID 而不是/dev/sdb1的好处是如果系统重启后磁盘顺序发生变化例如/dev/sdb变成了/dev/sdc使用设备名挂载会导致失败而使用 UUID 则不会。6. 完整实战案例从查看磁盘到格式化挂载本章把上面的知识点串起来模拟一个最常见的场景服务器新增加了一块 20G 数据盘需要把它划分为一个分区、格式化为 XFS 文件系统并挂载到/data目录。6.1 第一步查看磁盘信息lsblk确认新磁盘设备名。如下就是本文的目标磁盘/dev/sdb容量 20G尚未分区挂载sdb 8:16 0 20G 0 disk6.2 第二步使用 fdisk 分区fdisk /dev/sdb交互操作完整流程Command (m for help): n Select (default p): Partition number (1-4, default 1): First sector (2048-41943039, default 2048): Last sector, sectors or size{K,M,G,T,P} (2048-41943039, default 41943039): Command (m for help): w退出后用 partprobe 刷新分区表partprobe /dev/sdb6.3 第三步格式化分区mkfs.xfs /dev/sdb1格式化结束后可以用 lsblk -f 验证文件系统类型。6.4 第四步挂载并验证mkdir -p /data mount /dev/sdb1 /data df -hT /data输出中能看到/dev/sdb1已挂载到/data文件系统类型为 xfs。6.5 第五步写入 /etc/fstab 实现开机自动挂载blkid /dev/sdb1把得到的 UUID 写入/etc/fstabUUIDc9d0e1f2-... /data xfs defaults 0 0执行mount -a如果没有报错说明配置正确。完整命令序列如下方便直接复制使用# 1. 查看磁盘 lsblk # 2. 分区进入 fdisk 交互界面后依次输入 n、回车、回车、回车、w fdisk /dev/sdb # 3. 刷新分区表 partprobe /dev/sdb # 4. 格式化 mkfs.xfs /dev/sdb1 # 5. 查看 UUID blkid /dev/sdb1 # 6. 创建挂载目录并临时挂载 mkdir -p /data mount /dev/sdb1 /data # 7. 验证挂载 df -hT /data # 8. 编辑 /etc/fstab加入 UUID 挂载配置 vim /etc/fstab # 9. 验证 fstab 配置 mount -a7. 常见问题与排查思路7.1 常见问题速查表问题现象常见原因解决思路lsblk 看不到新磁盘虚拟机未添加磁盘、物理机未识别检查虚拟机磁盘配置必要时重启或重新扫描总线fdisk 提示找不到设备设备名输入错误用 lsblk 确认准确设备名使用/dev/sdX作为参数分区创建后 lsblk 不显示新分区分区表未刷新执行partprobe /dev/sdb重新扫描mkfs.xfs 提示设备忙分区已挂载先 unmount 卸载再格式化确认没有进程占用格式化时提示已有文件系统该分区之前格式过确认数据已备份后使用mkfs.xfs -f强制格式化重启后挂载目录为空未写入 /etc/fstab或配置错误检查 fstab使用 mount -a 验证fdisk 无法处理 2TB 以上磁盘MBR 分区表限制使用 parted 或 gdisk 创建 GPT 分区表7.2 重点问题排查详解7.2.1 分区已经创建但系统无法识别现象是 fdisk 中能看到/dev/sdb1lsblk 中却不存在。解决办法是执行 partprobe让内核重新读取分区表partprobe /dev/sdb如果 partprobe 无效可以尝试udevadm settle或者重启操作系统。生产环境中建议在维护窗口执行。7.2.2 格式化时提示“设备忙”出现这种提示通常是因为分区已经被挂载或者有进程正在使用该分区。可以先卸载再格式化umount /data mkfs.xfs /dev/sdb1如果卸载时提示“target is busy”说明有进程占用该挂载点可以用 lsof 或 fuser 排查lsof /data fuser -vm /data确认占用进程后再决定是否终止进程切忌盲目强制卸载。7.2.3 误格式化系统盘这是磁盘操作中最严重的事故。必须提前预防操作前用 lsblk 反复确认磁盘设备名。格式化前执行blkid查看文件系统类型系统盘通常已有文件系统。生产中禁止直接对/dev/sda整盘执行 mkfs.xfs。对不熟悉的环境先截图或记录原始分区状态便于回滚确认。如果不幸误格式化了系统盘情况会非常复杂建议联系专业运维团队从备份中恢复数据。所以平时一定要做好数据备份和操作记录。8. 最佳实践与工程建议8.1 操作前先备份数据磁盘分区和格式化是不可逆操作。任何涉及生产环境的磁盘变更都必须遵循以下安全底线提前确认数据已经备份到独立存储。分区表操作前记录当前分区状态。在测试环境完整演练一遍。选择业务低峰期操作。操作过程需要留存日志和变更记录。8.2 优先使用 UUID 进行挂载上一章已经提到设备名可能会因为系统启动顺序变化而变化。工程实践中强烈推荐在/etc/fstab中使用 UUID而不是/dev/sdb1这种设备路径。查看分区 UUIDblkid /dev/sdb18.3 根据磁盘大小选择分区工具磁盘大小推荐分区表推荐工具小于 2TBMBRfdisk大于 2TBGPTparted / gdiskMBR 分区表最大只能支持 2TB 磁盘超过 2TB 时必须使用 GPT。fdisk 虽然也支持 GPT但使用 parted 处理大容量磁盘更加直观。8.4 文件系统的选择要有依据CentOS/RHEL 系列默认文件系统是 XFS对于大多数业务来说已经足够。选择文件系统时可以按场景判断大文件、大容量存储、虚拟化平台XFS。通用服务器、大量小文件ext4 也是可靠选择。需要在线扩容文件系统XFS 的在线扩容能力更强。需要注意的是XFS 文件系统不支持缩小容量这一点在规划分区大小时要提前考虑清楚。8.5 定期查看磁盘使用情况磁盘管理不只是“操作一次”的任务日常运维可以定期执行lsblk -f df -hTlsblk -f 用于查看设备结构、文件系统类型df -hT 用于查看容量使用率。建议结合监控工具设置磁盘空间阈值告警避免磁盘写满影响业务。8.6 使用 fdisk 时的注意事项fdisk 交互式的操作给运维带来便利也带来了误操作风险。以下几个习惯可以有效降低出错概率输入p查看当前分区表确认操作对象。删除分区时先记录分区编号和容量。只输入w才真正写入分区表不确定时用q退出。对一块新磁盘操作时使用 fdisk 的整盘模式要格外小心避免把设备名写错。9. 总结与下一步学习建议这篇文章从 Linux 磁盘管理的概念出发详细讲解了 lsblk、fdisk、mkfs.xfs 三个命令的用法。lsblk 用于查看磁盘设备、分区结构、文件系统类型和挂载点。fdisk 用于管理分区包括创建分区、删除分区和查看分区表。mkfs.xfs 用于在分区上创建 XFS 文件系统配合 mount 和 /etc/fstab 实现持久化挂载。掌握了这些命令已经可以完成 Linux 磁盘管理中最核心的日常操作。实际项目中建议先在虚拟机里把整个流程完整走一遍再处理生产环境并且时刻记住“操作前备份”这条铁律。如果你现在正准备给服务器添加数据盘建议按下面的顺序练习先用 lsblk 查看当前磁盘结构。在虚拟机中添加一块新磁盘。用 fdisk 创建分区。用 mkfs.xfs 格式化分区。尝试挂载并写入 /etc/fstab。重启虚拟机验证开机自动挂载是否生效。磁盘管理是 Linux 运维的基本功多练习几次就能形成肌肉记忆。如果这篇文章对你有帮助可以收藏备用。后续也可以继续了解 parted 和 gdisk 处理大容量磁盘的方法以及 XFS 文件系统在线扩容的技巧。