在CentOS服务器上新增一块磁盘后,系统不会自动挂载使用,你需要先用lsblk查看磁盘是否被识别、分区情况如何,再用blkid获取磁盘的UUID和文件系统类型,最后才能完成格式化和挂载操作。这两个命令是Linux运维中最基础也最常用的磁盘识别工具,掌握它们的配合使用,能让你在几分钟内搞定新磁盘的上线工作。

很多运维新手在给服务器加了新硬盘后,第一反应是去看/dev目录下有没有新设备文件,或者直接用fdisk去操作。其实最快最稳的方式是先跑一遍lsblk和blkid,把磁盘的基本信息摸清楚,避免误操作导致数据丢失。下面我会从实际操作出发,把这两个命令的用法、输出含义、常见场景全部讲透。

一、lsblk命令:快速查看磁盘和分区的树状结构

lsblk的全称是"list block devices",它会以树状结构列出所有块设备的信息,包括硬盘、分区、甚至LVM逻辑卷。这个命令不需要任何参数就能看到全貌,但加上参数后信息量更大。

最常用的基本用法就是直接输入:

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    48G  0 part 
│ ├─centos-root 253:0    0 44.8G  0 lvm  /
│ └─centos-swap 253:1    0  3.2G  0 lvm  [SWAP]
sdb      8:16   0   100G  0 disk 
└─sdb1   8:17   0   100G  0 part

从这个输出你能一眼看出:sda是系统盘,50G,已经分了两个区,sda2上还建了LVM;sdb是新加的100G磁盘,已经有一个分区sdb1。如果你的新磁盘还没分区,这里只会显示sdb而不会有sdb1,那就说明需要先分区。

想看更详细的信息,比如文件系统类型、UUID、挂载点,加上-f参数:

lsblk -f

输出会多出FSTYPE、UUID、MOUNTPOINT这几列,非常直观。如果你只想看某一块磁盘,可以指定设备名:

lsblk /dev/sdb

另外还有几个实用参数:-l以列表格式输出(不是树状),方便脚本解析;-o可以自定义输出列,比如只看设备名和大小:

lsblk -o NAME,SIZE,TYPE,MOUNTPOINT

在实际运维中,我建议养成习惯:每次加完新盘,先跑lsblk确认设备名,再跑lsblk -f确认分区和文件系统状态。这一步能帮你避免把新盘当成旧盘去格式化的低级错误。

二、blkid命令:获取磁盘UUID和文件系统类型的核心工具

如果说lsblk是看"长相"的,那blkid就是看"身份证"的。blkid会读取设备的超级块信息,返回UUID、文件系统类型、LABEL等关键数据。在CentOS中做永久挂载时,用UUID比用设备名(如/dev/sdb1)更可靠,因为设备名在磁盘顺序变化时可能会变,但UUID是固定的。

基本用法同样很简单:

blkid

输出类似:

/dev/sda1: UUID="a1b2c3d4" TYPE="xfs" PARTLABEL="EFI System Partition" PARTUUID="e5f6g7h8"
/dev/sda2: UUID="i9j0k1l2" TYPE="LVM2_member"
/dev/mapper/centos-root: UUID="m3n4o5p6" TYPE="xfs"
/dev/mapper/centos-swap: UUID="q7r8s9t0" TYPE="swap"
/dev/sdb1: UUID="u1v2w3x4" TYPE="xfs"

这里你能清楚看到sdb1的UUID是u1v2w3x4,文件系统是xfs。如果sdb1还没有文件系统,blkid可能不会输出它,或者提示"no filesystem detected",这时候你就知道需要先格式化。

也可以单独查看某个设备:

blkid /dev/sdb1

在CentOS 7和CentOS 8中,blkid命令通常预装。如果提示找不到命令,可以安装:

yum install -y util-linux

或者在较新的系统上:

dnf install -y util-linux

blkid还有一个重要用途:当你需要在/etc/fstab中配置自动挂载时,直接用blkid查出来的UUID写进去,比写/dev/sdb1安全得多。特别是在有多块磁盘的服务器上,设备名可能因为BIOS识别顺序、热插拔等原因发生变化,用UUID能确保每次启动都挂载到正确的盘上。

三、新磁盘从识别到挂载的完整操作流程

下面我把实际场景串起来,假设你刚给CentOS服务器加了一块200G的新硬盘,系统识别为/dev/sdb,但还没有任何分区和文件系统。完整步骤如下:

第一步,确认磁盘被系统识别:

lsblk

看到sdb 200G disk,没有分区,说明需要分区。

第二步,对新磁盘进行分区。CentOS上推荐用fdisk或parted:

fdisk /dev/sdb

进入fdisk交互界面后,依次输入:n(新建分区)→ p(主分区)→ 1(分区号)→ 回车(默认起始扇区)→ 回车(默认结束扇区,使用全部空间)→ w(写入并退出)。

第三步,再次用lsblk确认分区已创建:

lsblk /dev/sdb

应该能看到sdb1了。

第四步,格式化分区。CentOS默认用xfs文件系统:

mkfs.xfs /dev/sdb1

如果需要ext4:

mkfs.ext4 /dev/sdb1

第五步,用blkid获取UUID:

blkid /dev/sdb1

记下输出的UUID值,比如"abc123def456"。

第六步,创建挂载点并挂载:

mkdir -p /data
mount /dev/sdb1 /data

第七步,配置开机自动挂载。编辑/etc/fstab,添加一行:

UUID=abc123def456  /data  xfs  defaults  0  0

注意这里用的是UUID而不是/dev/sdb1。保存后用mount -a测试是否能正常挂载,不报错就说明配置正确。

四、lsblk和blkid在特殊场景下的进阶用法

在实际运维中,你会遇到各种复杂情况,这里讲几个高频场景。

场景一:磁盘已分区但文件系统损坏,blkid读不出信息。这时候可以用lsblk -f看看是否有输出,如果FSTYPE显示为空,说明文件系统确实有问题。可以尝试用xfs_repair或fsck修复,但修复前一定要确认这块盘上没有重要数据。

场景二:服务器有多块新盘,需要批量识别。可以用lsblk配合grep或awk筛选:

lsblk -o NAME,SIZE,TYPE | grep disk

或者用blkid批量查看所有设备:

blkid -o device -o value

场景三:磁盘是LVM物理卷。lsblk会显示TYPE为lvm,blkid会显示TYPE为LVM2_member。这时候你需要先用pvcreate创建物理卷,再用vgcreate创建卷组,最后用lvcreate创建逻辑卷。lsblk在这种情况下能帮你理清PV、VG、LV的层级关系。

场景四:磁盘被识别但状态异常,比如显示为"0 disk"但SIZE为0。这通常意味着磁盘本身有硬件问题,或者RAID控制器没有正确透传。这时候需要先检查dmesg日志:

dmesg | grep -i sd

看看内核层面有没有报错信息。

五、常见问题排查和注意事项

问题一:lsblk看不到新磁盘。先检查物理连接是否正常,再看dmesg有没有识别信息。如果是虚拟机环境,确认虚拟磁盘已经热添加并且在虚拟化平台上正确挂载。还有一种情况是磁盘被系统黑名单过滤了,检查/etc/modprobe.d/目录下有没有相关黑名单配置。

问题二:blkid显示的UUID和之前不一样。这种情况通常发生在你重新格式化了分区之后,UUID会变化。如果/etc/fstab里还写着旧UUID,系统启动时会挂载失败,需要及时更新。

问题三:分区后blkid仍然无法识别文件系统。可能是分区表类型不对,比如用了GPT但系统只支持MBR,或者分区后没有执行mkfs格式化。一定要先格式化再用blkid验证。

问题四:CentOS 8 Stream中lsblk输出格式有变化。CentOS 8的lsblk默认会显示更多信息,包括设备的调度器、读写状态等。如果你习惯了CentOS 7的输出格式,可以用-o参数自定义列来保持一致性。

最后提醒一点:在生产环境操作磁盘之前,一定要用lsblk反复确认设备名,特别是当服务器有多块盘的时候。格式化操作不可逆,选错设备就是灾难性后果。我见过不少运维因为没仔细看lsblk输出,把数据盘当成系统盘格式化的案例。养成先看后做的习惯,比什么都重要。

六、总结

lsblk和blkid是CentOS运维中识别和管理磁盘的两把利器。lsblk负责让你"看见"磁盘的结构和分区情况,blkid负责让你"确认"磁盘的身份信息。两者配合使用,从新盘上线到分区、格式化、挂载、配置自动挂载,整个流程清晰高效。掌握这两个命令的各种参数和输出含义,再结合fdisk、mkfs、mount等工具,你就能从容应对绝大多数磁盘管理场景。记住核心原则:先识别、再操作、用UUID挂载、操作前反复确认设备名。