lsblk默认不显示挂载点,因其仅输出块设备拓扑结构,需加-f或-m才读取/proc/mounts等挂载信息;-f显示fstype、label、uuid和mountpoint,-m权限更宽松。

lsblk 默认输出为什么看不到挂载点?
因为 lsblk 默认只显示块设备拓扑结构,不主动查询挂载信息——它依赖 /proc/mounts 或 findmnt 的实时数据,而普通用户权限下可能读不到部分挂载项(比如某些 tmpfs 或容器内部挂载)。
要看到挂载点,必须显式加 -f(显示文件系统类型和挂载点)或 -m(以更宽松的权限尝试读取挂载信息)。
-
lsblk -f:最常用,显示 FSTYPE、LABEL、UUID 和 MOUNTPOINT,但对未挂载分区显示空白 -
lsblk -m:绕过部分权限限制,MOUNTPOINT 列可能比-f多几行,适合排查“明明挂了却没显示”的情况 - 如果 MOUNTPOINT 仍是空的,先确认是否真挂载了:
findmnt | grep /dev/sdX - 注意:
lsblk不刷新缓存,刚挂载后立即运行可能延迟一两秒才更新
怎么区分物理盘、LVM 逻辑卷和 RAID 设备?
靠缩进层级 + TYPE 字段 + 名称前缀。物理盘(如 sda)在最顶层,TYPE 是 disk;它的子节点如果是 part,就是分区;如果出现 lvm 类型,且名字是 centos-root、ubuntu-swap_1 这种风格,基本是 LVM;RAID 设备通常叫 md0、md127,TYPE 是 raid1 或 raid5。
- TYPE 值只有几个关键类型:
disk、part、lvm、rom、raid1等,不是所有发行版都显示完整 - LVM 逻辑卷不会直接显示 PV/VG 名字,得配合
pvs、vgs查;lsblk只告诉你“这东西是 lvm 类型” - RAID 成员盘(如
sdb)可能被标记为part而非disk,因为 RAID 元数据常写在分区开头,不是整盘
lsblk 输出里 SIZE 和 FSSIZE 不一样正常吗?
完全正常。SIZE 是设备/分区的原始容量(字节),FSSIZE(仅 -f 下可见)是文件系统实际可用空间,已扣除 reserved blocks(ext4 默认保留 5% 给 root)、inode 表、日志区等开销。
- 例如 ext4 根分区 100G,
FSSIZE可能只显示 ~93G;xfs 通常更接近原始大小,但仍有少量元数据占用 -
FSSIZE列为空,说明该分区没创建文件系统(比如刚fdisk分完还没mkfs),或文件系统类型不被识别(如 btrfs 在旧版 util-linux 中可能不显示) - 不要用
lsblk -f的FSSIZE做磁盘告警阈值——它不含已用空间,得看df -h
为什么 lsblk 在容器里只能看到 loop 设备?
因为容器默认只挂载了宿主机的部分设备节点(通常是 /dev/loop*),而真实硬盘(/dev/sd*、/dev/nvme*)被 cgroup 或 mount namespace 隔离掉了。这不是 lsblk 的问题,是容器运行时的设备访问策略。
- Podman/Docker 启动时需显式加
--device=/dev/sda:/dev/sda:rwm才能暴露指定块设备 - 即使加了
--privileged,某些安全模块(如 SELinux enforcing 模式)仍会拦截设备访问,得配securityContext.deviceAccess或临时 setenforce 0 测试 - 容器内跑
lsblk -f还可能因缺少/proc/mounts权限而漏掉挂载点,这时findmnt更可靠
真正麻烦的是嵌套虚拟化场景:KVM 里跑 Docker,再跑 lsblk —— 层层 namespace 和设备过滤会让输出越来越简略,这时候别硬扛,直接回宿主机查。










