Linux磁盘管理必备:blkid命令详解与UUID查询实战 这次我们来看 Linux 磁盘管理里一个非常高频但是容易被忽略的命令blkid。做运维、装系统、配挂载、调 GRUB都会跟磁盘的 UID 打交道而blkid就是查看磁盘 UID 号最直接的工具。先给结论blkid不是用来格式化磁盘的也不是用来分区扩容的。它的核心职责是探测块设备的属性把磁盘的 UUID、文件系统类型、卷标 LABEL、PARTUUID 这些关键元数据一次性列出来。尤其是 UUID在/etc/fstab开机自动挂载、GRUB 引导配置、LVM/RAID 场景里几乎所有需要稳定识别磁盘的地方都要用到它。下面我会按“先看能干什么 - 再讲怎么装怎么用 - 然后测试验证 - 最后排查问题”的顺序把blkid的实用用法完整过一遍。内容偏工程实操适合 Linux 运维、系统集成、嵌入式开发和刚转 Linux 的开发者收藏。1. blkid 核心能力速览能力项说明工具类型Linux 块设备属性探测命令主要功能查看磁盘/分区的 UUID、TYPE、LABEL、PARTUUID、PTTYPE所属软件包util-linux绝大多数发行版预装如 CentOS/RHEL/Ubuntu/Debian权限要求普通用户可查看部分信息完整信息建议 root 或 sudo支持设备/dev/sda、/dev/nvme0n1、/dev/vdb 等块设备及分区是否支持批量支持一次扫描全部设备也支持指定设备逐个查看是否支持脚本调用支持配合 grep/awk/命令替换可以写自动化脚本典型场景fstab 挂载、grub 配置、磁盘故障排查、系统克隆后 UUID 修正有无图形界面无纯命令行工具这里需要强调一下blkid输出的 UUID 是文件系统创建时生成的标识符不是磁盘的物理序列号。你要查硬盘本身的 SN 序列号应该用smartctl或者lsblk -S别把两个概念混了。网上很多“查看磁盘 uid 号”的搜索实际要查的就是分区的 UUID所以blkid是对的答案。2. 适用场景与使用边界blkid适合以下场景第一配置/etc/fstab自动挂载。这是最核心的用途。服务器重启后/dev/sdb1这种设备名可能因为内核识别顺序变化而改变但是 UUID 不会变。所以在fstab里用 UUID 写挂载项比写设备名更稳定。命令一般是UUIDxxxx /data ext4 defaults 0 2第二排查磁盘不识别或挂载报错。比如系统重启后某个分区没挂上你首先要确认的往往不是文件系统坏了而是系统有没有正确识别到这个磁盘的 UUID。blkid能快速告诉你这个分区现在是什么状态。第三克隆系统后修正 UUID 冲突。用 dd 或整盘克隆工具复制过系统盘后原盘和克隆盘的 UUID 会一样导致挂载混乱。这时候用blkid查出所有 UUID再用tune2fs或xfs_admin重新生成 UUID属于比较典型的运维操作。第四写脚本批量检查多个磁盘。比如批量检查新到货的机器上每个数据盘的文件系统类型和挂载状态用blkid的连续输出格式很方便。不要用blkid做这些事不要用它来分区分区用fdisk或parted。不要用它来格式化格式化用mkfs.ext4、mkfs.xfs等。不要直接修改 UUIDblkid只读不写。还有一点需要提醒如果磁盘是 LVM 逻辑卷blkid也能看到它的 UUID 和类型但卷组的信息需要用pvs、lvs、vgs来查blkid只负责看块设备层。3. 环境准备与前置条件blkid属于util-linux软件包不是独立的工具包。绝大多数 Linux 发行版默认自带不需要额外安装。如果你在一台精简系统上发现命令不存在可以按操作系统类型补装。CentOS / RHEL / Rocky Linux 系列sudo yum install -y util-linux如果是 CentOS 8 或 Rocky Linux 9也可以用 dnfsudo dnf install -y util-linuxUbuntu / Debian 系列sudo apt update sudo apt install -y util-linux检查是否已经安装which blkid blkid -V正常会输出版本信息例如blkid from util-linux 2.37.4 (libblkid 2.37.0, 07-Feb-2023)需要说明的是不同发行版的 util-linux 版本可能不同输出格式基本一致细节差异下面会提。磁盘环境方面物理机、虚拟机、云主机都可以用。只要系统能看到/dev下面的块设备blkid就能探测。常见设备名对应如下SATA/SCSI 磁盘/dev/sda、/dev/sdbNVMe 磁盘/dev/nvme0n1、/dev/nvme0n1p1云主机数据盘/dev/vda、/dev/vdb实际操作时先看lsblk或fdisk -l确认设备存在再执行blkid就不会一脸懵。4. blkid 安装部署与基础使用方式4.1 直接运行看全部设备不带任何参数执行sudo blkid输出结果类似/dev/sda1: UUIDA1B2-C3D4 TYPEvfat PARTUUIDabcd1234-01 /dev/sda2: UUID5f8d1e2a-3b4c-4d5e-8f6a-1b2c3d4e5f6a TYPExfs PARTUUIDabcd1234-02 /dev/sdb1: LABELdata UUID7c1a9e83-9b6d-4f2e-8b7a-5d6c4f3e2a1b TYPEext4 PARTUUID98765432-01每一行包含的信息字段含义/dev/sda1块设备节点路径LABEL文件系统卷标可自定义可能为空UUID文件系统 UUID也是我们最关注的“磁盘 uid 号”TYPE文件系统类型如 ext4、xfs、vfat、swapPARTUUIDGPT/MBR 分区表给分区生成的 UUIDPTTYPE分区表类型如 dosMBR或 gpt4.2 查看指定磁盘或分区如果只需要看某个磁盘把设备路径加在后面sudo blkid /dev/sda1也可以同时指定多个设备sudo blkid /dev/sda1 /dev/sdb1 /dev/nvme0n1p14.3 按 UUID 反查设备知道 UUID想知道它对应哪个设备。可以用-U参数sudo blkid -U 5f8d1e2a-3b4c-4d5e-8f6a-1b2c3d4e5f6a执行后会直接输出对应的设备路径比如/dev/sda2这个操作在修复/etc/fstab时特别有用。挂载失败时拿着 fstab 里的 UUID反查它到底对应哪个设备。4.4 只查看某个字段blkid支持按字段过滤。比如只查看 UUID 和文件系统类型sudo blkid -s UUID -s TYPE /dev/sdb1输出示例/dev/sdb1: UUID7c1a9e83-9b6d-4f2e-8b7a-5d6c4f3e2a1b TYPEext4常见的可用字段包括UUID、LABEL、TYPE、PARTUUID、PTTYPE。这个过滤能力在脚本里很常用避免输出冗余内容。4.5 以 udev 风格输出用-o udev可以把结果转成KEYvalue格式适合脚本遍历sudo blkid -o udev /dev/sdb1输出示例ID_FS_UUID7c1a9e83-9b6d-4f2e-8b7a-5d6c4f3e2a1b ID_FS_UUID_ENC7c1a9e83-9b6d-4f2e-8b7a-5d6c4f3e2a1b ID_FS_LABELdata ID_FS_LABEL_ENCdata ID_FS_TYPEext4 ID_FS_PARTUUID98765432-01这种格式最大的好处是方便用source或grep直接提取变量比解析一行里的UUID...简单很多。4.6 仅查看某个分区的 UUID 值如果只想要 UUID 字符串本身不想看到UUID前缀可以结合awksudo blkid -s UUID -o value /dev/sdb1输出就是纯 UUID比如7c1a9e83-9b6d-4f2e-8b7a-5d6c4f3e2a1b这招在脚本里写变量非常方便。5. blkid 功能测试与效果验证下面用一套通用验证流程确认blkid在你机器上能正常工作。5.1 验证命令是否安装which blkid blkid -V能看到命令路径和版本号说明环境没问题。5.2 查看当前系统的所有块设备sudo blkid输出不为空能列出至少一个分区说明探测正常。如果执行blkid完全没输出有几个常见可能磁盘未分区或未被文件系统格式化。磁盘是 RAID 卡直通但没有正确配置。使用普通用户执行权限不足看不到部分设备信息。可以先用lsblk -f看文件系统列是否为空再交叉确认。5.3 验证 fstab 挂载配置最常见的目标场景就是 fstab 挂载。先查 UUIDsudo blkid /dev/sdb1假设得到/dev/sdb1: UUID7c1a9e83-9b6d-4f2e-8b7a-5d6c4f3e2a1b TYPEext4然后编辑/etc/fstab加入一行UUID7c1a9e83-9b6d-4f2e-8b7a-5d6c4f3e2a1b /data ext4 defaults 0 2验证配置是否正确sudo mkdir -p /data sudo mount -a df -h /data如果df -h能看到/data挂载成功说明 UUID 和 fstab 配置都正确。这里最关键的一点是fstab 里 UUID 的写法不需要引号。不要写成UUID7c1a...直接UUID7c1a...。5.4 验证脚本取值把 UUID 取出来存成变量UUID_VAR$(sudo blkid -s UUID -o value /dev/sdb1) echo UUID is: $UUID_VAR如果能打印出纯 UUID说明脚本取值链路没问题。5.5 验证反查设备用刚才取出的 UUID 反查设备sudo blkid -U $UUID_VAR输出了对应的/dev/sdb1说明反查成功。5.6 判断成功的标准blkid能输出对应分区的完整元数据。mount -a不报错。反查能正确对应设备。脚本能拿到纯 UUID 字符串。如果以上全部通过blkid在你的环境里已经可以正式投入使用了。5.7 常见失败原因现象可能原因命令不存在util-linux 未安装没有输出设备未格式化或权限不足看不到 NVMe 分区内核未识别 nvme 设备驱动问题fstab 挂载失败fstab 中 UUID 写错、带引号、或设备文件系统类型不匹配普通用户执行无输出缺权限使用 sudo6. blkid 自动化场景与批量任务blkid本身支持一次扫描全部设备所以做批量检查非常合适。下面给几个可落地的脚本模板。6.1 批量列出所有磁盘的 UUID 和设备名#!/bin/bash for dev in $(lsblk -dp -o NAME | grep -v loop); do echo $dev sudo blkid $dev done这段脚本会遍历所有磁盘设备逐个输出详细信息。lsblk -dp只输出设备路径排除了 loop 回环设备。6.2 自动生成 fstab 挂载配置如果有很多数据盘需要统一挂载到/data1、/data2等目录可以先批量取出 UUID#!/bin/bash count1 for dev in $(sudo blkid -o device | grep -E sd[b-z]|vd[b-z]|nvme[0-9]n[0-9]p[0-9]); do uuid$(sudo blkid -s UUID -o value $dev) echo UUID$uuid /data$count ext4 defaults 0 2 count$((count1)) done注意这段脚本里把设备名过滤条件写成了常见的数据盘命名规则实际要根据你的机器环境调整。如果你的数据盘是/dev/vdb、/dev/vdc那就保留vd[b-z]。6.3 检测是否有重复 UUID克隆系统后容易遇到重复 UUID 的问题。批量检查所有设备的 UUID 是否唯一#!/bin/bash sudo blkid -s UUID -o device -o value 2/dev/null | grep -E ^[0-9a-fA-F-]{8,} | sort | uniq -d如果这个命令有输出说明存在重复 UUID需要处理。修复 ext4 文件系统的 UUIDsudo tune2fs -U random /dev/sdb1修复 XFS 文件系统的 UUIDsudo xfs_admin -U generate /dev/sdb2这里必须强调修改 UUID 前一定确认设备离线或已卸载避免数据损坏。6.4 与 udev 规则联动blkid的底层库和 udev 是同一套 libblkid 逻辑。系统在设备接入时也会调用类似机制生成/dev/disk/by-uuid/下的软链接ls -l /dev/disk/by-uuid/如果这个目录下能看到对应的 UUID 软链说明系统级磁盘识别正常。日常脚本中用/dev/disk/by-uuid/UUID作为设备路径也比直接用/dev/sdb1更稳定。7. 资源占用与性能观察blkid是一个轻量级命令本身内存和 CPU 占用极低执行一次通常在几十毫秒到几百毫秒之间。但由于它要扫描块设备元数据在某些环境下还是会遇到耗时问题。这里梳理几个实际观察点。7.1 磁盘数量对执行时间的影响服务器上只有一块系统盘时blkid基本瞬时返回。如果机器上有几十块盘或者挂着慢速机械盘、外接 USB 盘执行时间可能会增加到数秒。因为blkid需要逐一打开设备读取头部元数据。这时候可以做两件事只查指定设备不执行无参数的全盘扫描。使用缓存结果blkid -c /dev/null可以绕过缓存而默认会读取/etc/blkid.conf和缓存文件。查看命令执行时间time sudo blkid对比单设备查询time sudo blkid /dev/sda1如果差异明显说明你的环境磁盘多或者磁盘响应慢建议脚本中只查询需要的设备。7.2 权限对结果的影响普通用户执行blkid时部分设备信息可能因为权限不足而无法读取输出会不完整。生产环境建议统一采用sudo blkid或使用具有 sudo 权限的专用账号执行。这也是常见的一个坑明明lsblk能看到盘blkid却一片空白。7.3 缓存文件的作用blkid默认会读取/run/blkid/blkid.tab缓存避免每次重复探测设备。如果设备信息发生变化比如重新格式化需要确认缓存刷新情况。有些环境中刷新不及时会看到旧 UUID。可以用以下方式指定重新探测sudo blkid -c /dev/null /dev/sdb1这表示不使用缓存文件强制重新读取设备信息。如果希望完全忽略缓存并清理缓存文件sudo rm -f /run/blkid/blkid.tab sudo blkid生产环境执行前建议先确认这些缓存文件由系统管理手动删除后一般会自动重建但稳妥起见先备份。7.4 大批量磁盘场景的性能建议如果需要在几百台机器上批量执行blkid不建议每台机器都全盘扫描。先用lsblk -f做快速检查再对有问题的机器单独执行blkid深入探测。lsblk -f底层虽然也读系统信息但输出更轻量适合第一轮巡检。blkid更偏向定位问题时使用。8. blkid 常见问题与排查方法问题现象可能原因排查方式解决方案执行 blkid 没有任何输出设备未格式化 / 权限不足 / 驱动未识别先执行lsblk -f再检查dmesgsudo 执行格式化分区确认驱动提示 command not foundutil-linux 未安装执行which blkid用 yum/dnf/apt 安装 util-linuxfstab 挂载失败提示 UUID 不存在UUID 写错 / 文件系统类型不对blkid -U uuid反查是否存在对照 blkid 输出修正 fstabfstab 中的 UUID 带了引号配置格式问题查看/etc/fstab内容去掉引号写成UUIDxxxxxxxx克隆系统后 UUID 冲突原盘和克隆盘 UUID 一致执行sudo blkid看有没有重复ext4 用 tune2fsxfs 用 xfs_admin 重新生成 UUIDNVMe 磁盘看不到信息内核不识别或需要驱动dmesggrep -i nvme普通用户执行结果缺失权限不足对比sudo blkid与普通用户输出使用 sudo 或配置 udev 规则swap 分区没有 UUIDswap 未格式化 / 使用了 swapfileswapon --show查看使用mkswap格式化或改用 swapfile设备信息与系统不一致blkid 缓存未更新执行blkid -c /dev/null /dev/sdb1绕过缓存强制重新探测8.1 fstab 里到底用设备名还是 UUID这是最常被问到的问题。简单结论物理机或虚拟机环境优先用 UUID因为设备名不稳定。特殊环境中比如某些容器或只读根文件系统才考虑用设备名。多路径存储环境建议用/dev/mapper/路径而不是 UUID。8.2 为什么 blkid 显示的 UUID 和 /etc/fstab 里的对不上常见原因是磁盘重新格式化过。格式化后文件系统会生成新 UUID但 fstab 里还是旧值。这时候重新执行blkid获取新 UUID然后更新 fstab 即可。系统启动时报Failed to mount错误绝大多数是这种情况。8.3 blkid 和 lsblk -f 的区别两者都能看到 UUID 和文件系统类型但侧重点不同工具特点lsblk侧重设备树结构、挂载点、大小输出更易读blkid侧重块设备属性探测输出字段完整含 PARTUUID 等日常巡检用lsblk排查 UUID 和 PARTUUID 问题时用blkid互补使用效率最高。8.4 误删分区后用 blkid 还有没有可能找回 UUID分区别删除后如果分区表被覆盖blkid通常就扫不到该分区的文件系统了。但 GPT 分区有备份头用gdisk的恢复功能可能找回分区。这类属于数据恢复场景操作风险极高建议先做整盘镜像再操作不要在业务盘上直接试。9. blkid 最佳实践与使用建议9.1 先 lsblk 再 blkid任何磁盘管理操作前先用lsblk确认设备路径、大小、挂载点再用blkid获取 UUID。这个顺序能避免对错误设备执行操作。lsblk -f sudo blkid9.2 fstab 配置前先备份每次修改/etc/fstab前建议先备份sudo cp /etc/fstab /etc/fstab.bak.$(date %F)然后修改完执行sudo mount -a如果执行报错可以快速恢复备份。9.3 批量脚本统一用 -o value脚本中不要解析一长串的UUIDxxx TYPExxx直接用sudo blkid -s UUID -o value /dev/sdb1这样既稳定又简短避免因为个别字段为空导致脚本逻辑错乱。9.4 维护磁盘信息清单对生产服务器建议维护一份磁盘信息文档记录设备路径、UUID、挂载点、文件系统类型、用途。每次重新分区、格式化、调整挂载后都更新一次。可以用以下命令快速生成初始清单sudo blkid /etc/hostname-disk-$(date %F).txt以后排查问题时这份清单能节省大量时间。9.5 注意版权和敏感信息如果服务器信息需要截图或复制到博客、工单中注意脱敏。UUID 虽然是本机标识但本质上属于系统信息在公网传播时不要连内网 IP、主机名、业务标签一起贴出去。运维中最小化泄露是基本素养。9.6 不要贪图方便直接改 UUID除非遇到克隆系统后的 UUID 冲突否则不要随意修改 UUID。修改 UUID 的后果是所有引用旧 UUID 的配置fstab、grub、备份脚本都会失效影响面很大。非必要不改。10. 总结与下一步blkid是 Linux 磁盘管理中的基础命令功能简单但是地位很高。我们这次把它的核心用法完整梳理了一遍从查看 UUID、指定设备查询、按 UUID 反查设备、字段过滤到结合 fstab 配置、自动化脚本和批量巡检。最容易踩的坑就是 fstab 里 UUID 写错、带了引号、或者设备未格式化导致 blkid 无输出。建议收藏备用。下一步你可以对照自己手头的机器按下面的命令走一遍验证流程sudo blkid lsblk -f sudo blkid -s UUID -o value /dev/sda1 cat /etc/fstab如果这几条命令的输出你能一一对应上那 Linux 磁盘管理里的 UID/UUID 这道坎就算彻底过去了。接下来可以继续研究 PARTUUID 在多盘系统中的应用、LVM 逻辑卷的管理、以及tune2fs/xfs_admin在文件系统维护中的用法这些都是磁盘管理链条里很自然的进阶方向。