显示物理块设备

显示物理块设备

我需要列出系统中安装的所有块设备。有一个名为lsblk显示所有块设备的命令。

[kni@hist ttyid:0 pią kwi 13 17:56:26 ~]$ lsblk 
NAME                   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda                      8:0    0   16G  0 disk 
├─sda1                   8:1    0    1G  0 part /boot
└─sda2                   8:2    0 13,5G  0 part 
  ├─fedora_211829-root 253:0    0   10G  0 lvm  /
  ├─fedora_211829-swap 253:1    0  1,5G  0 lvm  [SWAP]
  └─fedora_211829-home 253:2    0    2G  0 lvm  /home
sr0                     11:0    1 55,3M  0 rom  /run/media/kni/VBox_GAs_5.2
[knis@hist ttyid:0 pią kwi 13 17:56:31 ~]$ 

lsblk这是在我的系统中执行命令的结果。磁盘是 sda我的系统中唯一的一个物理设备吗?分区和lvm是磁盘的逻辑部分。我对吗?

还有其他方法可以打印物理块设备吗?

答案1

假设你真的想看身体的设备,而不仅仅是所有块设备:

我的建议是:

lsblk -a -d -e 230

为什么?

让我们从手册页回顾一下这些命令行选项的作用:

       -a, --all
              Also list empty devices.  (By default they are skipped.)

奇怪的是,lsblk即使我的笔记本电脑的 DVD 刻录机是空的,也显示它没有-a.但保留它似乎并没有什么坏处。

       -d, --nodeps
              Do not print holder  devices  or  slaves.   For  example,  lsblk
              --nodeps /dev/sda prints information about the sda device only.

这意味着我们看不到设备上的分区,只能看到设备本身。

       -e, --exclude list
              Exclude  the  devices  specified  by the comma-separated list of
              major  device  numbers.   Note  that  RAM  disks  (major=1)  are
              excluded  by  default.   The  filter is applied to the top-level
              devices only.

最后,我用来-e 230排除 ZFS zvols,它使用这个主编号。它们完全是逻辑块设备,但 ZFS 驱动程序使它们看起来lsblk与物理磁盘设备相同。如果您使用 ZFS,则可以使用 来从显示中排除 zvol -e 230

[root@dalaran ~]# lsblk -a -d -e 230
NAME    MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
sda       8:0    0 894.3G  0 disk 
sr0      11:0    1  1024M  0 rom  
nvme0n1 259:0    0   477G  0 disk 

我愿意不是建议使用-S选项,因为这会导致 NVMe 设备不显示。


如果您想编写 shell 脚本,手册页中还有其他几个选项lsblk可以使输出更具机器可读性。例如-n-o-P

答案2

获取信息(无分区):

$ lsblk -a -d
NAME MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda    8:0    0   20G  0 disk
sdb    8:16   0   40G  0 disk
sr0   11:0    1 55.3M  0 rom

-a       print even empty devices (if disk is not loaded in CD/DVD device)
-d       discard print slaves

答案3

ls -l /sys/block/ | awk '$11 != "" && $11 !~ "^../devices/virtual" { print $9; }

相关内容