Linux命令之lsblk:从基础查询到高级系统信息整合 1. 初识lsblk你的Linux存储设备导航仪第一次在终端里输入lsblk时我盯着那棵漂亮的设备树看了好久——原来我的硬盘里藏着这样的秘密花园这个命令就像存储设备的X光机能透视你电脑里所有硬盘、分区和挂载点的骨骼结构。什么是块设备简单说就是按块读写数据的硬件比如你的固态硬盘/dev/nvme0n1、机械硬盘/dev/sda甚至是U盘/dev/sdb。它们不像普通文件那样可以随意编辑必须整块整块地操作。最让我惊喜的是它的树状展示能力。比如插上U盘后直接运行lsblk你会看到类似这样的结构NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT nvme0n1 259:0 0 512G 0 disk ├─nvme0n1p1 259:1 0 512M 0 part /boot/efi ├─nvme0n1p2 259:2 0 16G 0 part [SWAP] └─nvme0n1p3 259:3 0 495.5G 0 part / sda 8:0 1 14.9G 0 disk └─sda1 8:1 1 14.9G 0 part /media/usb这里清晰展示了我的NVMe固态硬盘带EFI分区、交换分区和根分区以及刚插入的14.9GB U盘。那个可爱的树形符号├─和└─完美呈现了设备间的父子关系。小技巧如果显示乱码可以加-i参数强制使用ASCII字符lsblk -i2. 玩转参数解锁lsblk的隐藏技能刚开始我只用基础命令直到有次服务器磁盘告急时前辈教我用了-f参数——瞬间打开了新世界的大门。这个看似简单的工具其实藏着不少实用技巧2.1 查看文件系统信息-flsblk -f输出会多出这些列FSTYPE LABEL UUID MOUNTPOINT ext4 c7b3d8a1-3a2f-4d5b-b6c7-d8e9f0a1b2c3 / swap 82b1c1c9-3e3f-4d5e-a6b7-c7d8e9f0a1b2 [SWAP] vfat ESP 67E3-17ED /boot/efi现在你一眼就能看出根分区是ext4格式交换分区没标签但有个UUIDEFI分区是FAT32格式。当需要修改/etc/fstab时这些UUID可比设备名可靠多了。2.2 显示权限信息-mlsblk -m输出示例NAME SIZE OWNER GROUP MODE sda 500G root disk brw-rw---- ├─sda1 100G root disk brw-rw---- └─sda2 400G root disk brw-rw----这里揭示了谁有权操作这些设备。曾经有次遇到权限问题就是靠这个发现某个分区的GROUP被误改成了staff而不是disk。2.3 JSON格式输出-Jlsblk -J会得到这样的结构化数据{ blockdevices: [ { name: sda, type: disk, children: [ { name: sda1, type: part, mountpoint: / } ] } ] }这个功能太适合写脚本时解析了我常用它搭配jq命令处理数据比如lsblk -J | jq .blockdevices[].name3. 实战组合拳系统管理的黄金搭档单独用lsblk已经很强但和其他命令组合才是真正的杀手锏。分享几个我常用的组合技3.1 快速定位未挂载分区lsblk -f | grep -v MOUNTPOINT | grep -v FSTYPE这个管道组合能过滤出所有未挂载的分区。上周就用它发现了一个被遗忘的200GB分区直接解决了存储危机。3.2 监控设备变化watch -n 1 lsblk -f动态刷新显示设备状态特别适合调试USB设备热插拔或iSCSI连接。有次排查外接硬盘异常断开就是靠这个发现的规律性掉线。3.3 与blkid强强联合lsblk -o NAME,UUID | grep -v NAME | while read dev uuid; do [ -n $uuid ] blkid -U $uuid done这个脚本通过UUID关联两个命令的输出能验证设备标签是否一致。曾经帮我发现过因UUID冲突导致的启动故障。4. 高级应用从运维到自动化当你不满足于简单查询时这些进阶玩法会让lsblk变身系统管理瑞士军刀4.1 存储容量分析lsblk -b -o NAME,SIZE,MOUNTPOINT | awk NR1 { size[$3]$2 } END { for(m in size) printf %-20s %15.2f GB\n, m, size[m]/1024/1024/1024 }这个awk脚本可以统计每个挂载点的总容量。输出类似/ 487.52 GB /boot/efi 0.49 GB [SWAP] 15.99 GB4.2 自动化挂载脚本#!/bin/bash UNMOUNTED$(lsblk -rno NAME,MOUNTPOINT | awk $2 {print $1}) for DEV in $UNMOUNTED; do UUID$(lsblk -dno UUID /dev/$DEV 2/dev/null) [ -n $UUID ] mkdir -p /mnt/$DEV mount -U $UUID /mnt/$DEV done这个安全脚本会自动挂载所有未挂载的有效分区到/mnt下特别适合批量处理新硬盘。4.3 设备拓扑分析lsblk -t输出示例NAME ALIGNMENT MIN-IO OPT-IO PHY-SEC LOG-SEC ROTA SCHED RQ-SIZE RA WSAME sda 0 512 0 512 512 1 mq-deadline 256 128 0B这些拓扑信息对数据库调优特别有用。比如ROTA1表示旋转式磁盘机械硬盘ROTA0则是SSD。我曾经据此调整了MySQL的I/O调度策略。重要提示操作存储设备前务必备份数据误操作可能导致数据丢失。特别是脚本自动化处理时建议先用-n参数做干运行测试。