OpenC
OpenC
发布于 2024-09-07 / 39 阅读
0
0

lsblk的使用方法

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 进行磁盘健康检查

结合 lsblksmartctl(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 定期检查系统中的存储设备状态,确保所有设备正常工作。

  • 结合其他工具使用:将 lsblkfdiskblkidsmartctl 等工具结合,全面管理和监控存储设备。

  • 脚本自动化:编写脚本自动化常见的存储管理任务,提高效率,减少人为错误。

  • 备份关键数据:在进行分区、格式化等操作前,确保重要数据已备份,避免数据丢失。

总结

lsblk 命令是 Linux 系统中强大且灵活的工具,用于查看和管理块设备。通过掌握其各种选项和高级用法,系统管理员和高级用户可以高效地管理存储设备,监控系统状态,优化存储配置。结合脚本和其他工具的使用,lsblk 能够在自动化和复杂环境中发挥更大的作用,提升整体系统管理的效率和可靠性。


评论