跳转至内容

设备文件

来自 ArchWiki
(重定向自 Lsblk)

本文章或章节需要扩充。

原因: 解释 loop 设备。(在 Talk:Device file 讨论)

来自 Wikipedia

在类 Unix 操作系统中,设备文件或特殊文件是设备驱动程序的接口,它在文件系统中显示为普通文件。

在 Linux 中,它们位于 /dev 目录中,遵循 文件系统层级标准

在 Arch Linux 上,设备节点由 udev 管理。

块设备

块设备是一种特殊文件,提供对硬件设备的缓冲访问。有关虚拟文件系统设备的详细描述和比较,请参阅 Wikipedia:Device file#Block devices

块设备名称

设备名称的开头指定了内核用于操作块设备的驱动程序子系统。

警告 块设备的内核名称描述符不是 持久的,并且可能在每次启动时发生变化,不应在配置文件中使用。

SCSI

硬盘、SSD 和闪存驱动器等存储设备,如果支持 SCSI 命令SCSISASUASP)、ATA(PATASATA)或 USB 大容量存储连接,则由内核的 SCSI 驱动程序子系统处理。它们都共享相同的命名方案。

这些设备的名称以 sd 开头。然后是一个从 a 开始的字母,表示第一个发现的设备(sda),b 表示第二个发现的设备(sdb),依此类推。

示例

  • /dev/sda - 设备 a,第一个发现的设备。
  • /dev/sde - 设备 e,第五个发现的设备。

NVMe

通过 NVM Express (NVMe) 连接的存储设备(如 SSD)的名称以 nvme 开头。然后是一个从 0 开始的数字,表示设备控制器,nvme0 表示第一个发现的 NVMe 控制器,nvme1 表示第二个,依此类推。接下来是字母 "n" 和一个从 1 开始的数字,表示控制器上的命名空间,例如,nvme0n1 表示第一个发现的控制器上的第一个发现的命名空间,nvme0n2 表示第一个发现的控制器上的第二个发现的命名空间,依此类推。

注意 内核分配的命名空间编号不保证与 NVMe 命名空间 ID (NSID) 匹配。

示例

  • /dev/nvme0n1 - 控制器 0 上的设备 1,第一个发现的控制器上的第一个发现的设备。
  • /dev/nvme2n5 - 控制器 2 上的设备 5,第三个发现的控制器上的第五个发现的设备。

MMC

本文章或章节需要扩充。

原因: 提及 /dev/mmcblkXboot{0,1}[1]/dev/mmcblkXrpmb[2]。(在 Talk:Partitioning#mmcblk0p{1,2,3,4}, mmcblk0boot{0,1}, mmcblk0rpmb 讨论)

SD 卡MMC 卡eMMC 存储设备 由内核的 mmc 驱动程序处理,这些设备的名称以 mmcblk 开头。然后是一个从 0 开始的数字,表示设备,例如,mmcblk0 表示第一个发现的设备,mmcblk1 表示第二个发现的设备,依此类推。

注意 如果 SD/MMC 读卡器使用 USB 接口,则块设备将由 SCSI 驱动程序子系统处理并遵循其命名方案

示例

  • /dev/mmcblk0 - 设备 0,第一个发现的设备。
  • /dev/mmcblk4 - 设备 4,第五个发现的设备。

SCSI 光盘驱动器

使用 SCSI 驱动程序子系统支持的接口之一连接的 光盘驱动器 (ODDs) 的名称以 sr 开头。然后是一个从 0 开始的数字,表示设备,例如,sr0 表示第一个发现的设备,sr1 表示第二个发现的设备,依此类推。

Udev 还提供了 /dev/cdrom,这是一个指向 /dev/sr0 的符号链接。无论驱动器支持的磁盘类型或插入的介质如何,名称始终是 cdrom

示例

  • /dev/sr0 - 光盘驱动器 0,第一个发现的光盘驱动器。
  • /dev/sr4 - 光盘驱动器 4,第五个发现的光盘驱动器。
  • /dev/cdrom - 指向 /dev/sr0 的符号链接。

virtio-blk

连接到 virtio 块设备 (virtio-blk) 接口的驱动器的名称以 vd 开头。然后是一个从 a 开始的字母,表示第一个发现的设备(vda),b 表示第二个发现的设备(vdb),依此类推。

注意 不要将 virtio-blk 与 virtio-scsi 混淆,后者模拟 SCSI 控制器,因此遵循 SCSI 命名约定

示例

  • /dev/vda - 设备 a,第一个发现的设备。
  • /dev/vde - 设备 e,第五个发现的设备。

分区

分区设备名称是驱动器的设备名称与其在分区表中分配的分区号的组合,即 /dev/drivepartition。对于设备名称以数字结尾的驱动器,驱动器名称和分区号之间用字母 "p" 分隔,即 /dev/driveppartition

示例

  • /dev/sda1 - /dev/sda 上的分区 1
  • /dev/nvme2n5p3 - /dev/nvme2n5 上的分区 3
  • /dev/mmcblk3p4 - /dev/mmcblk3 上的分区 4
  • /dev/vda1 - /dev/vda 上的分区 1
  • /dev/loop0p2 - /dev/loop0 上的分区 2

工具

lsblk

util-linux 包提供了 lsblk(8) 工具,该工具用于列出块设备,例如

$ lsblk --fs
NAME   FSTYPE   LABEL       UUID                                 MOUNTPOINT
sda
├─sda1 vfat                 C4DA-2C4D                            /boot
├─sda2 swap                 5b1564b2-2e2c-452c-bcfa-d1f572ae99f2 [SWAP]
└─sda3 ext4                 56adc99b-a61e-46af-aab7-a6d07e504652 /

在上面的示例中,只有一个可用设备(sda),该设备有三个分区(sda1sda3),每个分区都有一个不同的 文件系统

您可以使用 -o/--output 选项来启用特定列的输出列表

# lsblk --output NAME,PTTYPE,PARTLABEL,FSTYPE,FSVER,LABEL,FSSIZE,FSAVAIL,FSUSE%,MOUNTPOINTS
NAME             PTTYPE PARTLABEL       FSTYPE      FSVER LABEL          FSSIZE FSAVAIL FSUSE% MOUNTPOINTS
sda              gpt                                                                           
└─sda1           gpt    cryptdata1      crypto_LUKS 2                                          
  └─data1                               btrfs             data1            7.3T    2.3T    68% /mnt/data
sdb              gpt                                                                           
└─sdb1           gpt    cryptdata2      crypto_LUKS 2                                          
  └─data2                               btrfs             data1                                
sdc              gpt                                                                           
└─sdc1           gpt    cappdata        crypto_LUKS 2                                          
  └─appdata                             ext4        1.0   appdata          3.6T    3.4T     0% /mnt/appdata
sdd              gpt                                                                           
└─sdd1           gpt    cappdata_backup crypto_LUKS 2                                          
  └─appdata_back                        ext4        1.0   appdata_backup                       
nvme1n1          gpt                                                                           
├─nvme1n1p1      gpt    BACKUP_EFI      vfat        FAT32 EFI                4G    3.9G     2% /boot
├─nvme1n1p2      gpt    backup_swap                                                            
├─nvme1n1p3      gpt    csys1           crypto_LUKS 2                                          
│ └─sys1                                btrfs             arch1                                
└─nvme1n1p4      gpt    cext1           crypto_LUKS 2                                          
  └─ext1                                btrfs             ext0fs                               
nvme0n1          gpt                                                                           
├─nvme0n1p1      gpt    EFI             vfat        FAT32 EFI                                  
├─nvme0n1p2      gpt    cswap                                                                  
├─nvme0n1p3      gpt    csys0           crypto_LUKS 2     sys0parent                           
│ └─sys0                                btrfs             arch0             60G   56.2G     3% /
└─nvme0n1p4      gpt    cext0           crypto_LUKS 2                                          
  └─ext0                                btrfs             ext0fs         389.2G  388.1G     0% /home

以上基于 -f/--fs 参数提供的选项,移除了 UUID 并添加了分区标签和磁盘大小,这在识别多个磁盘时非常有用。有关支持的列的完整列表,请参阅 lsblk --help

wipefs

本文章或章节需要扩充。

原因: 为什么您想让 libblkid 无法看到签名?(在 Talk:Device file 讨论)

wipefs 可以列出或擦除指定设备上的 文件系统RAID分区表 签名(魔术字符串),使签名对 libblkid(3) 不可见。它不会擦除文件系统本身或设备上的任何其他数据。

有关更多信息,请参阅 wipefs(8)

例如,要擦除设备 /dev/sdb 上的所有签名,并为每个签名创建一个签名备份 ~/wipefs-sdb-offset.bak 文件

# wipefs --all --backup /dev/sdb

伪设备

没有物理设备的设备节点。

参见