lsblk
是 Linux 系统中用于列出所有可用块设备(block devices)的命令。它提供关于硬盘、分区、挂载点等的详细信息,广泛用于系统管理和存储设备的操作。
lsblk
命令的基本用法
lsblk [选项]
默认情况下,lsblk
会以树状结构显示系统中所有块设备的信息,包括设备名称、主要和次要设备号、是否可移动、大小、只读状态、类型及挂载点。
常用选项
1. -a
或 --all
显示所有设备,包括空设备。
lsblk -a
2. -f
或 --fs
显示设备的文件系统类型、标签(LABEL)、UUID 及挂载点。
lsblk -f
输出示例:
NAME FSTYPE LABEL UUID MOUNTPOINT
sda
└─sda1 ext4 4d2b5d54-03c6-4bf5-8d6e-42b9b3b3657b /
sdb
└─sdb1 swap ebc9a571-e04f-4560-89b2-67eddf0450c1 [SWAP]
3. -l
或 --list
以列表形式显示输出,不使用树状结构。
lsblk -l
输出示例:
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 100G 0 disk
└─sda1 8:1 0 100G 0 part /
sdb 8:16 0 500G 0 disk
└─sdb1 8:17 0 500G 0 part [SWAP]
4. -o
或 --output
指定显示的列,控制输出的详细信息。常用列有:
- NAME: 设备名称
- SIZE: 设备大小
- TYPE: 设备类型(disk、part、lvm、rom 等)
- MOUNTPOINT: 挂载点
例如,显示设备的名称、大小和挂载点:
lsblk -o NAME,SIZE,MOUNTPOINT
输出示例:
NAME SIZE MOUNTPOINT
sda 100G
└─sda1 100G /
sdb 500G
└─sdb1 500G [SWAP]
5. -d
或 --nodeps
只显示设备本身,不显示其分区和依赖项。
lsblk -d
输出示例:
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 100G 0 disk
sdb 8:16 0 500G 0 disk
6. -e
或 --exclude
排除某些设备类型,依据主设备号(MAJ:MIN)进行排除。例如,排除 loop 设备(主设备号 7)和 RAM 设备(主设备号 1):
lsblk -e 7,1
7. -r
或 --raw
以纯文本形式显示输出,不进行格式化。
lsblk -r
8. -m
或 --perms
显示设备的访问权限。
lsblk -m
输出示例:
NAME SIZE OWNER GROUP MODE
sda 100G root disk brw-rw----
└─sda1 100G root disk brw-rw----
sdb 500G root disk brw-rw----
└─sdb1 500G root disk brw-rw----
9. -p
或 --paths
以完整路径形式显示设备名称。
lsblk -p
输出示例:
NAME SIZE MOUNTPOINT
/dev/sda 100G
└─/dev/sda1 100G /
/dev/sdb 500G
└─/dev/sdb1 500G [SWAP]
10. -n
或 --noheadings
隐藏表头,仅显示设备信息。
lsblk -n
11. -t
或 --topology
显示设备的拓扑结构,包括物理位置、主机等信息。
lsblk -t
12. -J
或 --json
以 JSON 格式输出设备信息,适合用于脚本处理。
lsblk -J
13. -P
或 --pairs
以键值对的格式显示设备信息,便于解析。
lsblk -P
输出示例:
NAME="sda" SIZE="100G" MOUNTPOINT=""
NAME="sda1" SIZE="100G" MOUNTPOINT="/"
NAME="sdb" SIZE="500G" MOUNTPOINT=""
NAME="sdb1" SIZE="500G" MOUNTPOINT="[SWAP]"
实用例子
1. 查看所有设备及其挂载点信息
lsblk -f
2. 只显示磁盘设备,不包括分区和依赖项
lsblk -d
3. 以列表形式查看设备及其大小
lsblk -l
4. 以完整路径显示所有设备信息
lsblk -p
5. 排除 loop 和 RAM 设备(通常是虚拟磁盘和内存设备)
lsblk -e 7,1
6. 显示设备的文件系统类型、UUID 和标签
lsblk -o NAME,FSTYPE,LABEL,UUID
输出示例:
NAME FSTYPE LABEL UUID MOUNTPOINT
sda
└─sda1 ext4 4d2b5d54-03c6-4bf5-8d6e-42b9b3b3657b /
sdb
└─sdb1 swap ebc9a571-e04f-4560-89b2-67eddf0450c1 [SWAP]
进阶用法
1. 结合 grep
过滤特定设备
例如,查找所有挂载在 /home
的设备:
lsblk -f | grep "/home"
2. 输出为 JSON 格式并使用 jq
进行处理
例如,获取所有设备的名称和大小:
lsblk -J | jq '.blockdevices[] | {name: .name, size: .size}'
3. 与 awk
结合提取特定信息
例如,提取所有挂载点及其对应的设备:
lsblk -o NAME,MOUNTPOINT | awk '$2 != "" {print $1 " is mounted on " $2}'
进阶拓展
1. 与脚本结合实现自动化管理
lsblk
可以与 shell 脚本结合,实现自动化的存储设备管理。例如,自动备份挂载点信息:
#!/bin/bash
output_file="mounted_devices_$(date +%F).txt"
lsblk -f | awk '$4 != "" {print $1, $4, $7}' > "$output_file"
echo "Mounted devices information saved to $output_file"
2. 使用 lsblk
进行磁盘健康检查
结合 lsblk
和 smartctl
(SMART工具)可以检查磁盘的健康状态:
for device in $(lsblk -dn -o NAME); do
sudo smartctl -a /dev/$device | grep -i "SMART overall-health"
done
3. 比较 lsblk
与其他相关命令
命令 | 功能描述 | 常用场景 |
---|---|---|
lsblk |
列出块设备及其信息 | 查看设备结构、挂载点、文件系统类型等 |
fdisk |
分区工具,管理磁盘分区 | 创建、删除、调整分区 |
blkid |
列出或查找块设备的 UUID 和属性 | 获取设备的 UUID、文件系统类型等 |
df |
显示文件系统的磁盘空间使用情况 | 查看挂载点的磁盘使用情况 |
du |
估算文件和目录的磁盘使用空间 | 查看特定目录或文件的磁盘使用情况 |
4. 高级过滤和排序
按设备大小排序
lsblk -o NAME,SIZE -l | sort -k2 -h
仅显示特定类型的设备
例如,仅显示磁盘类型(不显示分区):
lsblk -d -o NAME,SIZE,TYPE | grep "disk"
5. 可视化工具的集成
将 lsblk
的输出与可视化工具结合,生成图形化的存储设备拓扑图。例如,使用 Graphviz
:
lsblk -J | jq -r '
.blockdevices[] |
["digraph G {", (.children[]? | " \"" + .name + "\" -> \"" + .parent + "\";"), "}"] | .[]
' > topology.dot
dot -Tpng topology.dot -o topology.png
6. 使用 lsblk
监控设备变化
结合 watch
命令,实时监控设备变化:
watch -n 2 "lsblk -o NAME,SIZE,MOUNTPOINT"
注意事项
权限问题:某些系统可能需要以超级用户权限运行
lsblk
才能查看所有设备信息。使用sudo lsblk
以确保获取完整的信息。未分区设备显示:
lsblk
默认不会显示未分区的设备,除非使用-a
选项。设备挂载状态:
lsblk
显示的挂载点信息仅包括当前已挂载的设备。未挂载的设备不会显示MOUNTPOINT
。设备别名和符号链接:
lsblk
显示的设备名称基于/dev
下的设备节点,符号链接(如/dev/disk/by-uuid/
)需要使用-p
或其他相关选项查看。
常见问题与解决
1. lsblk
无法显示某些设备
原因:设备未正确连接或驱动未加载。
解决方法:
- 检查物理连接,如硬盘、电缆等。
- 使用
dmesg | grep -i "error"
检查内核日志中的错误信息。 - 确认相关驱动已加载,使用
lsmod
查看模块列表。
2. lsblk
输出信息不全
原因:缺乏必要的权限。
解决方法:
- 使用
sudo lsblk
以超级用户权限运行命令。
3. 无法识别文件系统类型
原因:文件系统未格式化或 lsblk
无法识别特定文件系统。
解决方法:
- 确认设备已格式化,并使用支持的文件系统。
- 更新
lsblk
及相关工具至最新版本。
最佳实践
定期检查存储设备:使用
lsblk
定期检查系统中的存储设备状态,确保所有设备正常工作。结合其他工具使用:将
lsblk
与fdisk
、blkid
、smartctl
等工具结合,全面管理和监控存储设备。脚本自动化:编写脚本自动化常见的存储管理任务,提高效率,减少人为错误。
备份关键数据:在进行分区、格式化等操作前,确保重要数据已备份,避免数据丢失。
总结
lsblk
命令是 Linux 系统中强大且灵活的工具,用于查看和管理块设备。通过掌握其各种选项和高级用法,系统管理员和高级用户可以高效地管理存储设备,监控系统状态,优化存储配置。结合脚本和其他工具的使用,lsblk
能够在自动化和复杂环境中发挥更大的作用,提升整体系统管理的效率和可靠性。