Contents

查找连接到Linux计算机的所有存储设备

1. 简介

我们经常需要检查机器上存在的存储设备。当我们必须检查系统上是否可以识别所有硬盘和 SSD 以及系统是否正确处理任何外部存储设备时,这非常有用。Linux 提供了多种方法来列出连接到系统的存储设备。在本教程中,我们将一一查看它们。

2. 读取*/proc/partitions*

每个 Linux 发行版都带有一个*/proc*目录,其中包含不同的文件,这些文件提供有关系统当前状态的不同类型的信息。但是,这是一个虚拟文件系统。

这意味着这些文件实际上并不存在于磁盘上,但这些文件路径可以被任何应用程序或命令读取,就好像它们是真实文件一样。/proc/partitions是包含有关附加存储设备的详细信息的文件。因此,在***/proc/partitions*上运行cat 命令将为我们提供所需的信息**:

$ cat /proc/partitions 
major minor  #blocks  name
   8        0  117220824 sda
   8        1     524288 sda1
   8        2          1 sda2
   8        5  116694016 sda5
   8       16  976762584 sdb
   8       17       1024 sdb1
   8       18  976758784 sdb2

但是,此方法仅以块的形式显示输出,并带有每个分区的标签。

3. fdisk

fdisk 是用于在 Linux 中对磁盘和分区执行操作的 Linux 命令。我们可以**使用fdisk -l列出所有存储设备及其分区。**除非以 root 用户身份或使用sudo 运行,否则此命令可能不起作用:

# fdisk -l
Disk /dev/sda: 111.81 GiB, 120034123776 bytes, 234441648 sectors
Disk model: SATA SSD        
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x229714a0
Device     Boot   Start       End   Sectors   Size Id Type
/dev/sda1  *       2048   1050623   1048576   512M  b W95 FAT32
/dev/sda2       1052670 234440703 233388034 111.3G  5 Extended
/dev/sda5       1052672 234440703 233388032 111.3G 83 Linux
Disk /dev/sdb: 931.53 GiB, 1000204886016 bytes, 1953525168 sectors
Disk model: ST1000LM024 HN-M
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disklabel type: gpt
Disk identifier: 62FC8895-DF66-4DF6-9DAB-B193B64AA56B
Device     Start        End    Sectors   Size Type
/dev/sdb1   2048       4095       2048     1M Linux filesystem
/dev/sdb2   4096 1953521663 1953517568 931.5G Linux filesystem

正如我们在上面看到的,输出非常详细且格式整齐。它描述了连接到系统的所有存储设备及其总大小、型号、标签、分区和其他有用数据。

4. lsblk

lsblk 命令代表“列出块”,可用于列出连接到系统的所有块存储设备

$ lsblk
NAME   MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
sda      8:0    0 111.8G  0 disk 
├─sda1   8:1    0   512M  0 part /boot/efi
├─sda2   8:2    0     1K  0 part 
└─sda5   8:5    0 111.3G  0 part /
sdb      8:16   0 931.5G  0 disk 
├─sdb1   8:17   0     1M  0 part 
└─sdb2   8:18   0 931.5G  0 part

正如我们在上面看到的,分区的层次结构被清晰地打印出来,我们可以看到附加了哪些磁盘以及它们下面存在哪些分区。但是,仅打印设备标签而不打印设备名称。

5. lshw

lshw 命令还可用于列出连接到系统的存储设备。它代表“列出硬件”,默认列出连接到系统的所有硬件设备。

但是,我们可以使用class参数来过滤列表并仅显示“磁盘”设备。与fdisk一样,我们可能需要 root 或使用sudo才能使用此命令:

# lshw -class disk
  *-disk
       description: ATA Disk
       product: SATA SSD
       physical id: 0.0.0
       bus info: [[email protected]](/cdn_cgi/l/email_protection):0.0.0
       logical name: /dev/sda
       version: Sf10
       serial: 00000000000000000552
       size: 111GiB (120GB)
       capabilities: partitioned partitioned:dos
       configuration: ansiversion=5 logicalsectorsize=512 sectorsize=512 signature=229714a0
  *-disk
       description: ATA Disk
       product: ST1000LM024 HN-M
       physical id: 0.0.0
       bus info: [[email protected]](/cdn_cgi/l/email_protection):0.0.0
       logical name: /dev/sdb
       version: 0003
       serial: S314J90F791172
       size: 931GiB (1TB)
       capabilities: gpt-1.00 partitioned partitioned:gpt
       configuration: ansiversion=5 guid=62fc8895-df66-4df6-9dab-b193b64aa56b logicalsectorsize=512 sectorsize=4096

6. parted

parted 命令的实用性与fdisk命令的实用性非常相似。它可用于管理磁盘及其分区。我们可以使用*-l*参数来显示存储设备

# parted -l
Model: ATA SATA SSD (scsi)
Disk /dev/sda: 120GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags: 
Number  Start   End    Size   Type      File system  Flags
 1      1049kB  538MB  537MB  primary   fat32        boot
 2      539MB   120GB  119GB  extended
 5      539MB   120GB  119GB  logical   ext4
Model: ATA ST1000LM024 HN-M (scsi)
Disk /dev/sdb: 1000GB
Sector size (logical/physical): 512B/4096B
Partition Table: gpt
Disk Flags: 
Number  Start   End     Size    File system  Name  Flags
 1      1049kB  2097kB  1049kB
 2      2097kB  1000GB  1000GB  ext4

fdisk非常相似,我们可以看到所有附加的存储设备,以及它们的名称、标签、挂载点、文件系统类型和分区。

7. sfdisk

sfdiskfdisk命令。它的输出与parted非常相似,显示每个分区上的磁盘标签、磁盘模型分区和文件系统类型:

# sfdisk -l
Disk /dev/sda: 111.81 GiB, 120034123776 bytes, 234441648 sectors
Disk model: SATA SSD
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x229714a0
Device     Boot   Start       End   Sectors   Size Id Type
/dev/sda1  *       2048   1050623   1048576   512M  b W95 FAT32
/dev/sda2       1052670 234440703 233388034 111.3G  5 Extended
/dev/sda5       1052672 234440703 233388032 111.3G 83 Linux
Disk /dev/sdb: 931.53 GiB, 1000204886016 bytes, 1953525168 sectors
Disk model: ST1000LM024 HN-M
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disklabel type: gpt
Disk identifier: 62FC8895-DF66-4DF6-9DAB-B193B64AA56B
Device     Start        End    Sectors   Size Type
/dev/sdb1   2048       4095       2048     1M Linux filesystem
/dev/sdb2   4096 1953521663 1953517568 931.5G Linux filesystem