设备文件

来自 ArchWiki

此条目或章节需要扩充。

理由: 解释 loop 设备。(在 Talk:Device file 中讨论)

来自 维基百科

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

在 Linux 上,它们位于 /dev 目录中,根据 文件系统层次结构标准

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

块设备

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

块设备名称

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

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

SCSI

支持 SCSI 命令 (SCSI, SAS, UASP), ATA (PATA, SATA) 或 USB 大容量存储 连接的存储设备,如硬盘、SSD 和闪存驱动器,由内核的 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 驱动子系统支持的接口之一连接的光盘驱动器 (ODD) 的名称以 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

伪设备

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

另请参阅