Linux lsblk 命令实用教程

LinuxBeginner
立即练习

介绍

在本实验中,我们将探索 Linux 的 lsblk command 命令,它用于显示系统上所有可用块设备的信息。块设备包括硬盘、固态硬盘(SSD)、U 盘和其他存储介质。lsblk 命令以清晰的树状格式呈现这些信息,让你可以轻松理解不同存储设备与其分区之间的关系。

对于任何使用 Linux 系统的人来说,了解存储设备都是至关重要的。无论你需要识别可用存储、检查分区大小还是验证挂载点,lsblk 命令都提供了一种快速且高效的方法来收集这些信息。

通过本实验,你将能够结合各种选项使用 lsblk 命令,从而获取有关 Linux 系统上存储设备的详细信息。

Linux 命令速查表

lsblk 命令的基础用法

在这一步中,你将使用 lsblk 命令来显示 Linux 系统上可用块设备的信息。块设备是指硬盘、固态硬盘(SSD)和 U 盘等存储设备。

如果终端尚未打开,请打开它。然后运行基础的 lsblk 命令:

lsblk

你应该会看到类似于以下的输出:

NAME   MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
loop0    7:0    0  55.5M  1 loop /snap/core18/2128
loop1    7:1    0  55.4M  1 loop /snap/core18/2284
loop2    7:2    0  43.6M  1 loop /snap/snapd/15534
loop3    7:3    0  61.9M  1 loop /snap/gtk-common-themes/1535
loop4    7:4    0  31.1M  1 loop /snap/snapd/16292
sda      8:0    0   50G  0 disk
├─sda1   8:1    0   49G  0 part /
└─sda2   8:2    0  976M  0 part [SWAP]

此输出显示了系统上的所有块设备,包含以下列:

  • NAME:设备名称
  • MAJ:MIN:主设备号和次设备号
  • RM:可移动设备标志(1 表示可移动,0 表示不可移动)
  • SIZE:设备大小
  • RO:只读标志(1 表示只读,0 表示读写)
  • TYPE:设备类型(disk、part、loop 等)
  • MOUNTPOINT:设备的挂载位置(如果适用)

在上面的示例中,你可以看到:

  • 几个由 snap 软件包使用的 loop 设备
  • 一个主存储设备 sda(这是一个 50GB 的磁盘)
  • sda 上的两个分区:sda1(挂载在根目录 /)和 sda2(用作交换空间 swap)

输出中的树状结构使得直观地查看哪些分区属于哪个磁盘变得非常容易。例如,你可以看到 sda1sda2 都是 sda 磁盘的分区。

既然你已经了解了 lsblk 命令的基本输出,接下来让我们在接下来的步骤中探索一些实用的选项。

使用 lsblk 显示附加信息

在这一步中,我们将学习如何将 lsblk 命令与不同的选项结合使用,以显示有关块设备的更详细信息。

使用 -f 选项显示文件系统信息

-f 选项用于显示文件系统信息,包括文件系统类型、卷标(label)、UUID 和挂载点。当你需要通过 UUID 识别设备或检查正在使用的是哪种文件系统类型时,这特别有用。

在终端中运行以下命令:

lsblk -f

你应该会看到类似于以下的输出:

NAME   FSTYPE   LABEL UUID                                 MOUNTPOINT
loop0  squashfs                                            /snap/core18/2128
loop1  squashfs                                            /snap/core18/2284
loop2  squashfs                                            /snap/snapd/15534
loop3  squashfs                                            /snap/gtk-common-themes/1535
loop4  squashfs                                            /snap/snapd/16292
sda
├─sda1 ext4           5fbb8eed-12a3-4b5c-9d67-9594ff4e2d1c /
└─sda2 swap           b409ae25-7589-44eb-a909-b56f1d42c5ab [SWAP]

现在的输出包含了额外的列:

  • FSTYPE:文件系统类型(ext4、swap、squashfs 等)
  • LABEL:已分配的任何文件系统卷标
  • UUID:文件系统的通用唯一识别码(Universal Unique Identifier)

使用 -m 选项显示设备所有者和权限模式信息

-m 选项显示块设备的权限和所有者信息。这在排查与权限相关的问题时非常有用。

运行以下命令:

lsblk -m

你应该会看到如下输出:

NAME   MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT OWNER GROUP MODE
loop0    7:0    0  55.5M  1 loop /snap/core18/2128 root  disk  brw-rw----
loop1    7:1    0  55.4M  1 loop /snap/core18/2284 root  disk  brw-rw----
loop2    7:2    0  43.6M  1 loop /snap/snapd/15534 root  disk  brw-rw----
loop3    7:3    0  61.9M  1 loop /snap/gtk-common-themes/1535 root  disk  brw-rw----
loop4    7:4    0  31.1M  1 loop /snap/snapd/16292 root  disk  brw-rw----
sda      8:0    0   50G  0 disk            root  disk  brw-rw----
├─sda1   8:1    0   49G  0 part /          root  disk  brw-rw----
└─sda2   8:2    0  976M  0 part [SWAP]     root  disk  brw-rw----

新的列显示了:

  • OWNER:拥有该设备的用户(通常为 root)
  • GROUP:拥有该设备的组(通常为 disk)
  • MODE:设备的权限模式

使用 -o 选项选择特定的输出列

-o 选项允许你指定要显示的列。当你只需要某些信息并希望输出更干净、更专注时,这非常有用。

让我们仅显示名称、大小和挂载点列:

lsblk -o NAME,SIZE,MOUNTPOINT

输出将会简洁得多:

NAME    SIZE MOUNTPOINT
loop0  55.5M /snap/core18/2128
loop1  55.4M /snap/core18/2284
loop2  43.6M /snap/snapd/15534
loop3  61.9M /snap/gtk-common-themes/1535
loop4  31.1M /snap/snapd/16292
sda     50G
├─sda1   49G /
└─sda2  976M [SWAP]

这种定制化的输出使得关注你所需的信息变得更加容易。你可以组合多个选项,以获取最符合你需求的格式和准确信息。

使用 lsblk 过滤块设备

在这一步中,我们将学习如何限制 lsblk 命令的输出,并以不同的格式显示信息。

仅显示顶级设备

--nodeps 选项(简写为 -d)会忽略诸如分区之类的依赖设备。当你想要获得顶级块设备的简明视图时,这非常有用。

运行以下命令:

lsblk --nodeps

输出将显示顶级设备,而没有分区树。设备名称和大小在不同系统间可能会有所不同:

NAME MAJ:MIN RM  SIZE RO TYPE MOUNTPOINTS
vda  253:0    0   40G  0 disk
vdb  253:16   0  100G  0 disk /etc/hosts

按主设备号排除设备

--exclude 选项(简写为 -e)接受一个以逗号分隔的主设备号列表以将其忽略。例如,loop 设备使用主设备号 7,因此以下命令会排除它们:

lsblk --exclude 7

此过滤器适用于顶级设备。它们的依赖分区仍然可以出现在树中。

显示设备路径

--paths 选项显示完整的设备路径,而不仅仅是设备名称。当你需要在脚本或命令中引用设备时,这非常有用。

运行以下命令:

lsblk --paths

输出将包含完整的设备路径:

NAME        MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
/dev/loop0    7:0    0  55.5M  1 loop /snap/core18/2128
/dev/loop1    7:1    0  55.4M  1 loop /snap/core18/2284
/dev/loop2    7:2    0  43.6M  1 loop /snap/snapd/15534
/dev/loop3    7:3    0  61.9M  1 loop /snap/gtk-common-themes/1535
/dev/loop4    7:4    0  31.1M  1 loop /snap/snapd/16292
/dev/sda      8:0    0   50G  0 disk
├─/dev/sda1   8:1    0   49G  0 part /
└─/dev/sda2   8:2    0  976M  0 part [SWAP]

以 JSON 格式显示输出

--json 选项以 JSON 格式输出信息,这对于程序化处理或与其他工具集成非常有用。

运行以下命令:

lsblk --json

输出将是 JSON 格式:

{
  "blockdevices": [
    {
      "name": "loop0",
      "maj:min": "7:0",
      "rm": false,
      "size": "55.5M",
      "ro": true,
      "type": "loop",
      "mountpoint": "/snap/core18/2128"
    },
    {
      "name": "loop1",
      "maj:min": "7:1",
      "rm": false,
      "size": "55.4M",
      "ro": true,
      "type": "loop",
      "mountpoint": "/snap/core18/2284"
    },
    {
      "name": "loop2",
      "maj:min": "7:2",
      "rm": false,
      "size": "43.6M",
      "ro": true,
      "type": "loop",
      "mountpoint": "/snap/snapd/15534"
    },
    {
      "name": "loop3",
      "maj:min": "7:3",
      "rm": false,
      "size": "61.9M",
      "ro": true,
      "type": "loop",
      "mountpoint": "/snap/gtk-common-themes/1535"
    },
    {
      "name": "loop4",
      "maj:min": "7:4",
      "rm": false,
      "size": "31.1M",
      "ro": true,
      "type": "loop",
      "mountpoint": "/snap/snapd/16292"
    },
    {
      "name": "sda",
      "maj:min": "8:0",
      "rm": false,
      "size": "50G",
      "ro": false,
      "type": "disk",
      "children": [
        {
          "name": "sda1",
          "maj:min": "8:1",
          "rm": false,
          "size": "49G",
          "ro": false,
          "type": "part",
          "mountpoint": "/"
        },
        {
          "name": "sda2",
          "maj:min": "8:2",
          "rm": false,
          "size": "976M",
          "ro": false,
          "type": "part",
          "mountpoint": "[SWAP]"
        }
      ]
    }
  ]
}

组合选项以实现精确控制

你可以组合多个选项来准确获取所需的信息。例如,要省略依赖设备和 loop 设备,同时以 JSON 格式显示完整路径:

lsblk --nodeps --exclude 7 --paths --json

输出将是带有完整路径的剩余顶级设备的 JSON 表示形式:

{
  "blockdevices": [
    {
      "name": "/dev/vda",
      "maj:min": "253:0",
      "rm": false,
      "size": "40G",
      "ro": false,
      "type": "disk"
    }
  ]
}

这些过滤选项使得 lsblk 命令非常灵活,能够让你精确获取系统上块设备所需的信息。

在实际场景中高级使用 lsblk

在这一步中,我们将探索 lsblk 命令在系统管理和故障排查任务中大显身手的实际场景。

检查磁盘使用情况和可用空间

要检查磁盘使用情况和可用空间,可以将 lsblk-b 选项(以字节为单位显示大小)结合使用,并选择特定的列:

lsblk -b -o NAME,SIZE,FSAVAIL,FSUSE%,MOUNTPOINT

输出将显示磁盘使用情况信息:

NAME     SIZE FSAVAIL FSUSE% MOUNTPOINT
loop0  58195968        0     - /snap/core18/2128
loop1  58130432        0     - /snap/core18/2284
loop2  45719552        0     - /snap/snapd/15534
loop3  64897024        0     - /snap/gtk-common-themes/1535
loop4  32604160        0     - /snap/snapd/16292
sda   53687091200       -     -
├─sda1 52613349376 39128932352  26% /
└─sda2 1023410176        0     - [SWAP]

这些列显示了:

  • SIZE:总大小(以字节为单位)
  • FSAVAIL:文件系统上的可用空间
  • FSUSE%:已使用的文件系统百分比
  • MOUNTPOINT:设备的挂载位置

识别 U 盘

当你插入 U 盘时,可以通过查找可移动设备来使用 lsblk 快速识别它:

lsblk -o NAME,SIZE,TYPE,RM,MOUNTPOINT

在输出中,寻找 RM(可移动)值为 1 的设备:

NAME   SIZE TYPE RM MOUNTPOINT
loop0  55.5M loop  0 /snap/core18/2128
loop1  55.4M loop  0 /snap/core18/2284
loop2  43.6M loop  0 /snap/snapd/15534
loop3  61.9M loop  0 /snap/gtk-common-themes/1535
loop4  31.1M loop  0 /snap/snapd/16292
sda     50G disk  0
├─sda1   49G part  0 /
└─sda2  976M part  0 [SWAP]

如果你连接了 U 盘,它通常会显示为一个额外的磁盘(例如 sdb),其 RM 值为 1

查找设备序列号

对于硬件清点或故障排查,你可能需要查找设备的序列号。lsblk 命令可以显示此信息:

lsblk -o NAME,SIZE,TYPE,SERIAL

输出将包含提供此信息的设备的序列号:

NAME   SIZE TYPE SERIAL
loop0  55.5M loop
loop1  55.4M loop
loop2  43.6M loop
loop3  61.9M loop
loop4  31.1M loop
sda     50G disk ABCD1234
├─sda1   49G part
└─sda2  976M part

请注意,并非所有设备都会报告序列号,像 loop 设备这样的虚拟设备通常没有序列号。

分析磁盘性能属性

要查看磁盘性能属性,你可以使用 --topology-t 选项:

lsblk --topology

输出包含诸如对齐方式(alignment)和最优 I/O 大小等拓扑信息:

NAME   ALIGNMENT MIN-IO OPT-IO PHY-SEC LOG-SEC ROTA SCHED     RQ-SIZE  RA WSAME
loop0          0    512      0     512     512    1 mq-deadline     256 128    0B
loop1          0    512      0     512     512    1 mq-deadline     256 128    0B
loop2          0    512      0     512     512    1 mq-deadline     256 128    0B
loop3          0    512      0     512     512    1 mq-deadline     256 128    0B
loop4          0    512      0     512     512    1 mq-deadline     256 128    0B
sda            0    512      0     512     512    1 mq-deadline     256 128    0B
├─sda1         0    512      0     512     512    1 mq-deadline     256 128    0B
└─sda2         0    512      0     512     512    1 mq-deadline     256 128    0B

这些信息对于性能调优和排查与 I/O 相关的问题非常有用。

这些实际示例展示了 lsblk 命令在日常系统管理任务中的多功能性。通过掌握这些技术,你可以快速收集有关 Linux 系统上存储设备的重要信息。

总结

在本实验中,我们探索了 Linux 的 lsblk 命令,这是一个用于列出和显示系统块设备信息的强大工具。我们涵盖了该命令的几个重要方面:

  • lsblk 的基本用法,用于显示所有块设备的树状列表
  • 如何显示附加信息,包括文件系统详情、所有者/权限以及自定义列选择
  • 用于关注特定设备类型或显示格式的过滤技术
  • 用于系统管理任务的高级使用场景

lsblk 命令是 Linux 系统管理员和需要管理存储设备的用户的必备工具。其灵活的选项允许你快速获取有关系统磁盘、分区和其他块设备的精确信息。

通过掌握 lsblk 命令,你可以更有效地:

  • 识别和管理存储设备
  • 监控磁盘使用情况和可用空间
  • 排查与存储相关的问题
  • 记录系统的存储配置

这些技能为更高级的存储管理相关 Linux 系统管理任务奠定了重要的基础。

Linux 命令速查表