
作为 Linux 运维和开发工程师日常处理最多的硬件资源之一就是磁盘。无论是新服务器上线时的数据盘初始化还是排查系统磁盘空间不足、文件系统类型不匹配都需要先搞清楚这台机器上到底有哪些磁盘、它们如何被内核识别、每个分区格式化成什么文件系统。很多新手在这个阶段容易混乱df只能看到已经挂载的文件系统lsblk能看块设备但看不到文件系统内容fdisk既能看分区也能改分区mkfs系列工具则负责真正写入文件系统。这一整套逻辑如果不先理清实际操作时就容易在“分区表损坏”或“格式化错磁盘”这类问题上翻车。这篇文章围绕最常见的 Linux 磁盘管理操作链路展开先用lsblk查看磁盘和分区拓扑再用fdisk创建或调整分区最后用mkfs.xfs写入 XFS 文件系统。全文会以 CentOS/Rocky Linux 等发行版为例同时说明 Ubuntu/Debian 下的差异。每一步会解释命令参数的来源、执行后应该看到什么输出、以及哪些操作不可逆。读完你可以独立完成一块新磁盘从“裸盘”到“可挂载文件系统”的完整初始化流程也能在误操作后快速判断问题出在哪个环节。1. 先理解 Linux 磁盘管理的完整链路1.1 磁盘在 Linux 中是如何被表示的Linux 遵循“一切皆文件”的设计理念磁盘设备最终也会以设备文件的形式出现在/dev目录下。以最常见的虚拟机环境为例/dev/sda表示第一块 SCSI/SATA 接口磁盘。/dev/sdb表示第二块磁盘字母a、b、c按识别顺序递增。/dev/nvme0n1表示第一块 NVMe 固态盘nvme0n1p1表示它的第一个分区。设备文件名由内核在启动或热插拔时生成并不是手动创建的。名字只能帮助我们定位设备至于这块盘有多大、有没有分区、分区格式化成什么文件系统则需要通过块设备管理工具查看。1.2 从裸盘到可用目录需要几步一块全新的磁盘从插入服务器到能写入数据中间至少要经过几个环节内核识别并分配设备名。使用fdisk、gdisk或parted创建分区表并划分分区。内核重新读取分区表生成/dev/sdb1这样的分区设备文件。使用mkfs.xfs、mkfs.ext4等工具在分区上写入文件系统。使用mount命令挂载到某个目录并写入/etc/fstab实现开机自动挂载。这一整条链路上lsblk负责检查前两步的结果fdisk负责完成分区操作mkfs.xfs负责写入文件系统。理解这个顺序非常重要因为很多排查场景都是“某个环节已经执行但用户还在用上一个环节的命令确认状态”自然看不到预期结果。1.3 什么时候该用 lsblk、fdisk、mkfs.xfs三种工具的分工差异显著不适合混用工具定位是否能修改数据典型使用场景lsblk查看块设备树形结构否确认磁盘大小、分区结构、挂载点、文件系统类型fdisk基于 MBR 分区表的分区管理工具是但只改分区表新建分区、删除分区、查看分区表mkfs.xfs在指定分区上创建 XFS 文件系统是会覆盖数据新分区首次格式化、重建文件系统注意不要把fdisk当成“格式化工具”它只负责划分分区不负责写文件系统。同样mkfs.xfs也不能创建分区它只处理已经存在的分区设备。2. lsblk用一条命令看清所有块设备2.1 lsblk 的基本输出要怎么看lsblk的全称是 list block devices默认会以树状结构展示系统识别到的所有块设备。执行lsblk输出示例NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 40G 0 disk ├─sda1 8:1 0 1G 0 part /boot └─sda2 8:2 0 39G 0 part ├─centos-root 253:0 0 37G 0 lvm / └─centos-swap 253:1 0 2G 0 lvm [SWAP] sdb 8:16 0 100G 0 disk └─sdb1 8:17 0 100G 0 part /data第一列NAME是设备名树状缩进体现了主设备和从属设备的关系。sda下面缩进出sda1、sda2说明 sda 已经做了分区sda2下面又缩进出 LVM 逻辑卷说明这块分区被纳入了 LVM 管理。MAJ:MIN内核设备号出现异常时可以结合dmesg判断设备识别问题。RM是否为可移动设备1表示可移动0表示不可移动。SIZE设备或分区容量。RO是否为只读设备。TYPEdisk表示整块磁盘part表示分区lvm表示 LVM 逻辑卷。MOUNTPOINT挂载点为空说明没有挂载。新数据盘如果没有被分区输出中只会有一行TYPE为disk的记录下面没有任何子项。这是判断“新盘是否已经分区”的最直观方式。2.2 常用参数f、d、p、t 分别解决什么问题lsblk默认输出已经能覆盖大多数场景但结合参数可以拿到更关键的信息lsblk -f-f参数会额外显示文件系统类型、文件系统 UUID 和挂载点这对判断分区是否已经格式化非常有用。输出中文件系统为空的说明还没有格式化NAME FSTYPE LABEL UUID MOUNTPOINT sdb └─sdb1 xfs c57d1d22-7f12-4a21-9a78-3f21a /data-d参数只显示磁盘本身不显示分区细节-p参数输出完整设备路径适合在脚本中循环处理-t参数会打印文件系统类型详细信息通常与-f配合使用。建议在脚本和日常操作中优先使用lsblk -pf这样输出的是完整的/dev/sdb1路径避免在脚本里拼接设备名时出错。2.3 通过 isblk 确认新磁盘是否已被内核识别新添加的云盘或物理磁盘插入后如果lsblk里看不到设备名首先要怀疑是内核没有识别而不是磁盘本身损坏。虚拟机场景下可以扫描 SCSI 总线echo - - - /sys/class/scsi_host/host0/scan这条命令让 SCSI 子系统重新扫描主机总线- - -表示扫描所有通道、目标设备和 LUN。执行后再执行一次lsblk查看设备是否出现。这一步在 VMware 虚拟机热添加磁盘时非常常用比直接重启服务器要稳妥得多。3. fdisk熟练操作 MBR 分区表3.1 为什么新磁盘初始化经常选择 fdiskfdisk是最经典的分区工具全称是 fixed disk。它默认操作 MBR 分区表格式。MBR 主引导记录位于磁盘第一个扇区其中包含分区表和引导代码。MBR 分区表最多支持 4 个主分区每个分区最大约 2TB因此 fdisk 更适合容量不超过 2TB 的单块数据盘。如果要给超过 2TB 的磁盘做分区应该使用 GPT 分区表工具改为gdisk或parted。这是使用fdisk前必须先做的判断否则分区创建时会报错或者只能用到部分容量。3.2 交互式命令逐个说明执行fdisk /dev/sdb如果/dev/sdb是全新的裸盘系统会提示磁盘没有分区表。进入交互界面后输入m可以查看帮助。新手最常用的几个交互命令是命令作用p打印当前分区表n新建分区d删除分区t修改分区类型w保存并退出q不保存退出新建分区的流程Command (m for help): n Partition number (1-4, default 1): 1 First sector (2048-209715199, default 2048): 回车 Last sector, sectors or size{K,M,G} (2048-209715199, default 209715199): 50G输入50G表示给这个分区分配 50GB。如果不输入大小直接回车会占用剩余全部空间。生产环境中如果一块 2TB 数据盘只计划放业务数据直接回车使用全部空间是最常见的做法后续不做多个分区管理和扩容都更方便。分区创建完成后输入p确认分区表Device Boot Start End Sectors Size Id Type /dev/sdb1 2048 104857599 104855552 50G 83 Linux最后输入w保存退出。这里要特别强调只有在输入w后分区表才会真正写入磁盘。之前所有操作都可以通过q放弃。3.3 fdisk 修改后分区表不生效怎么办fdisk保存退出后内核的分区表可能还是旧状态。此时lsblk可能看不到新分区/dev/sdb1或者看到的容量还是旧值。解决办法是让内核重新读取分区表partprobe /dev/sdbpartprobe命令会通知内核重新读取指定磁盘的分区表。如果执行后依然看不到分区可能是该磁盘正在被占用例如某个挂载点正在使用这个磁盘上的分区。此时多数的安全做法是确认磁盘未被挂载后重新加载或者重启服务器。3.4 删除分区时的风险控制删除分区使用d命令Command (m for help): d Partition number (1-4): 1fdisk删除分区只删除分区表中的记录不会主动清除分区内的数据。但问题是删除分区后这块区域的文件系统入口也一并丢失数据虽然可能还在物理扇区里但已经很难通过常规方式找到。因此删除分区的操作不可逆事先必须备份数据。重要提示任何对分区表的w操作都会覆盖原分区表。如果只是想查看分区信息应该直接使用fdisk -l /dev/sdb不要进入交互界面更不能按下w。4. mkfs.xfs写入并理解 XFS 文件系统4.1 为什么 Linux 数据盘普遍选择 XFSXFS 是 SGI 公司设计的高性能 64 位日志文件系统在 RHEL 7、CentOS 7 及之后的版本中成为默认文件系统。它特别适合大容量磁盘和大量大文件并发的场景单个文件系统最大支持到 8EiB远超过 MBR 分区表的 2TB 限制。和 ext4 相比XFS 的优势集中在大规模文件读写性能尤其是大文件顺序读写。在线扩容能力xfs_growfs 支持在文件系统挂载状态下扩展。元数据操作采用 B 树结构目录文件很多时查询性能更稳定。需要注意的是XFS 不支持在线缩容挂载后不能直接减小文件系统大小。如果业务有动态缩容需求需要提前评估 ext4 或缩小 LVM 逻辑卷的方案。4.2 mkfs.xfs 最小格式化命令在分区创建完成、确认/dev/sdb1存在后执行mkfs.xfs /dev/sdb1执行过程会输出类似内容meta-data/dev/sdb1 isize512 agcount4, agsize3276800 blks sectsz512 attr2, projid32bit1 crc1 finobt1, sparse1, rmapbt0 reflink1 data bsize4096 blocks13107200, imaxpct25 sunit0 swidth0 blks naming version 2 bsize4096 ascii-ci0, ftype1 log internal log bsize4096 blocks6400, version2 sectsz512 sunit0 blks, lazy-count1 realtime none extsz4096 blocks0, rtextents0这段输出不需要逐行背下来但要有能力从中读出几个关键配置isize512inode 大小。bsize4096数据块大小默认 4KB。crc1启用元数据校验和这是 RHEL 7 之后默认开启的特性。reflink1支持文件共享数据块这是制作精简备份和快照的基础。格式化完成后可以用blkid /dev/sdb1查看文件系统类型和 UUIDblkid /dev/sdb1输出示例/dev/sdb1: UUIDc57d1d22-7f12-4a21-9a78-3f21a TYPExfs4.3 常用参数-f、-L、-b size 的含义与代价实际业务中mkfs.xfs不会始终使用默认参数。最常见的参数如下参数含义使用建议-f强制格式化破坏已有文件系统只在新盘或明确要重置的分区上使用-L label设置文件系统卷标给数据盘设置业务标签便于管理多个磁盘-b size4096设置数据块大小一般保持默认 4096不需要手工调整-m crc0关闭元数据 CRC 校验仅在需要兼容旧内核时使用不建议关闭-n ftype1开启目录类型字段默认已开启影响目录项结构带卷标格式化的示例mkfs.xfs -L data_disk /dev/sdb1格式化后通过lsblk -f或blkid都能看到LABELdata_disk。4.4 格式化前必须确认的三件事mkfs.xfs一旦执行目标设备上的数据会被破坏。执行之前强烈建议按清单逐项确认设备路径是否正确。执行lsblk或fdisk -l确认要格式化的设备确实是目标盘。目标设备是否已经挂载。执行df -h和findmnt /dev/sdb1如果有挂载输出则不能直接格式化。是否已有重要数据。执行blkid可以快速判断设备上是否存在文件系统如果有 UUID 则说明之前格式化过确认是否要覆盖。5. 完整实操一块新数据盘从裸盘到挂载5.1 场景和前置环境假设有一台 CentOS Stream 9 虚拟机系统盘是/dev/sda新增一块 100GB 数据盘/dev/sdb。最终目标是把这块盘格式化为 XFS 文件系统并挂载到/data目录。所有操作都以 root 用户执行非 root 用户需要在命令前加sudo。5.2 第一步确认内核已识别新磁盘lsblk预期输出中会出现sdb 8:16 0 100G 0 disk如果看不到sdb先执行 SCSI 总线扫描再重新执行lsblk。5.3 第二步使用 fdisk 创建分区fdisk /dev/sdb交互操作Command (m for help): n Partition number (1-4, default 1): 1 First sector (2048-209715199, default 2048): 回车 Last sector, sectors or size{K,M,G} (2048-209715199, default 209715199): 回车 Command (m for help): p Command (m for help): w这里选择把整块 100GB 空间划分为一个分区。输入w后输出The partition table has been altered. Calling ioctl() to re-read partition table. Syncing disks.随后让内核分区表刷新partprobe /dev/sdb执行lsblk确认/dev/sdb1出现。5.4 第三步格式化 XFS 并设置卷标mkfs.xfs -L data_disk /dev/sdb1格式化完成后执行lsblk -f /dev/sdb预期输出中sdb1一行的FSTYPE为xfsLABEL为data_diskUUID 已生成。5.5 第四步挂载并配置开机自动挂载创建挂载点并临时挂载mkdir -p /data mount /dev/sdb1 /data挂载完成后用df -h /data验证Filesystem Size Used Avail Use% Mounted on /dev/sdb1 100G 33M 100G 1% /data临时挂载重启后会失效需要写入/etc/fstab。推荐使用 UUID 而不是设备名因为设备名在系统重启后可能变化blkid /dev/sdb1拿到 UUID 后追加到/etc/fstabUUIDc57d1d22-7f12-4a21-9a78-3f21a /data xfs defaults 0 0写入后验证配置文件没有语法错误mount -a如果执行mount -a后没有报错说明/etc/fstab配置正确。不要跳过这一步fstab 写错会导致服务器重启后卡在紧急模式这是新手最容易踩的坑。5.6 第五步验证读写和开机流程在/data下创建一个测试文件确认写入正常echo disk test /data/test.txt cat /data/test.txt确认输出后删除测试文件rm -f /data/test.txt生产环境到这里还不算结束应当进一步验证重启后自动挂载是否生效。可以执行reboot重启服务器重启后再执行df -h /data和cat /proc/mounts | grep data确认/data已经自动挂载且类型为xfs。6. 常见问题与完整排查路径6.1 执行 fdisk 时提示设备忙现象Device /dev/sdb is in use.可能原因设备已经被挂载。设备被某个进程占用可能是 LVM、swap 或对应分区正在使用。检查方式findmnt /dev/sdb lsof /dev/sdb处理方式解除挂载确认占用进程后释放再重新执行fdisk。6.2 分区保存后 lsblk 看不到新分区现象fdisk中可以看到/dev/sdb1但lsblk中/dev/sdb下没有分区子项。可能原因内核没有重新读取分区表。检查方式cat /proc/partitions处理方式partprobe /dev/sdb如果仍然无效确认磁盘没有挂载后可以重启服务器让内核重新识别。6.3 mkfs.xfs 提示设备已存在文件系统现象mkfs.xfs: /dev/sdc1 appears to contain an existing filesystem (xfs). mkfs.xfs: Use the -f option to force overwrite.原因mkfs家族工具出于安全考虑检测到设备上已有文件系统时默认拒绝执行。处理方式确认目标设备无误后mkfs.xfs -f /dev/sdc16.4 挂载时报错 unknown filesystem type xfs现象mount: /data: unknown filesystem type xfs.原因系统没有安装 XFS 内核模块或用户态工具。在 Ubuntu/Debian 上常见XFS 不是这些发行版的默认文件系统。检查方式ls /lib/modules/$(uname -r)/kernel/fs/xfs处理方式apt install xfsprogsRHEL 系如果遇到这个问题检查是否安装xfsprogsyum install xfsprogs6.5 fstab 写错导致开机进紧急模式现象重启后系统停留在 emergency 模式提示找不到挂载设备。原因/etc/fstab中的 UUID 或挂载路径写错。处理方式在 emergency 模式中执行mount -o remount,rw /然后编辑/etc/fstab修正配置再执行mount -a验证。预防方式每次修改/etc/fstab后都执行mount -a确认没有报错再重启。6.6 排查问题时的顺序建议遇到磁盘相关故障建议按以下顺序排查先看硬件层是否识别lspci | grep -i raid、dmesg | grep sd。再看内核块设备层lsblk、cat /proc/partitions。再看分区表fdisk -l /dev/sdb。再看文件系统blkid、lsblk -f。再看挂载情况df -h、findmnt、cat /proc/mounts。最后看日志dmesg -T | grep -i error、journalctl -f。7. 生产环境最佳实践与操作清单7.1 区分学习环境与生产环境学习环境可以直接在一台虚拟机里反复练习新建分区、格式化、重来因为系统盘和数据盘都只是模拟磁盘风险可控。生产环境则完全不同必须区分测试盘和业务数据盘所有破坏性命令只能在明确标识的测试设备上执行。生产环境额外要考虑的点配置外置化挂载点和文件系统类型不要写死在业务代码里减少磁盘路径变化影响。日志与监控对磁盘空间、inode 使用率、挂载状态配置监控告警。权限与安全性数据盘挂载目录的属主和权限要与业务账户匹配。异常处理格式化脚本必须有二次确认并记录操作日志。回滚方案格式化前要有数据备份或镜像不能依赖“误操作后恢复”。7.2 每个关键操作前先执行安全确认以格式化为例执行前建议使用这个检查序列lsblk /dev/sdb df -h /dev/sdb blkid /dev/sdb mount | grep sdb只有当lsblk显示设备存在、df和mount都没有输出、blkid确认设备上没有需要保留的文件系统时才允许执行格式化命令。7.3 常用参数决策速查表操作场景推荐命令说明查看所有磁盘和分区lsblk最直观的树状输出查看文件系统类型和 UUIDlsblk -f挂载前必查查看完整设备路径lsblk -pf脚本处理时使用新 MBR 磁盘分区fdisk /dev/sdb适合 2TB 以下单盘新 GPT 磁盘分区parted /dev/sdb或gdisk容量大于 2TB 时使用写入 XFS 文件系统mkfs.xfs /dev/sdb1首次格式化强制重建 XFSmkfs.xfs -f /dev/sdb1明确确认后使用查看文件系统 UUIDblkid /dev/sdb1写 fstab 前使用重新读取分区表partprobe /dev/sdb分区后验证7.4 学习路径建议如果把今天的内容继续延伸下一步可以按顺序掌握gdisk和 GPT 分区表的操作理解 MBR 与 GPT 的差异。parted的非交互式分区命令用于脚本化初始化新盘。LVM 逻辑卷管理学会用卷组和逻辑卷解决分区容量不足的问题。xfs_growfs在线扩容流程了解文件系统在 LVM 扩容后的处理步骤。ext4、btrfs等文件系统的选型对比理解不同业务场景对文件系统特性的要求。建议在一台虚拟机里反复练习“格式化 - 挂载 - 写入数据 - 卸载 - 重新分区”的循环直到不需要看命令帮助也能完成整个链路。磁盘管理出错代价很高但也是运维基础中最值得花时间熟悉的部分。