在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挂载、操作前反复确认设备名。
