设备文件

来自 Arch Linux 中文维基

这篇文章的某些内容需要扩充。

原因: 需要添加对 Loop 设备的解释。 (在 Talk:设备文件 中讨论)

根据维基百科:设备文件在类 Unix 系统中是一个设备驱动程序的接口,并如常规文件一样出现在文件系统中。

根据文件系统层次结构标准 (FHS),设备文件在 /dev 目录中。

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

块设备[编辑 | 编辑源代码]

块设备是一种特殊文件,能通过缓冲区访问硬件设备。有关详细说明和虚拟文件系统设备之间的比较,请参阅维基百科

块设备名[编辑 | 编辑源代码]

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

警告: 块设备的内核名称描述符不固定,在每次启动时可能会变化。不应在配置文件里使用块设备名。

SCSI[编辑 | 编辑源代码]

支持 SCSI 命令 (SCSISASUASP)、ATA (PATASATA) 的存储设备或 USB 大容量存储设备,比如机械硬盘、固态硬盘和闪存驱动器,均由内核 SCSI 驱动子系统处理。这些设备的命名规范一致。

这些设备的名称以 sd 开头。之后是一个从 a 开始的小写字母,a 表示第一个发现的设备,b 表示第二个发现的设备,以此类推。

例如:

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

NVMe[编辑 | 编辑源代码]

通过 NVM Express(NVMe) 连接的设备,比如固态硬盘,名称以 nvme 开头。之后是一个从 0 开始的数字,表示设备控制器号。nvme0 表示第一个发现的 NVMe 控制器,nvme1 表示第二个发现的,以此类推。然后是字母 "n" 和一个从 1 开始的数字,表示控制器上的设备号。比如 nvme0n1 表示第一个控制器上第一个发现的设备,nvme0n2 表示第一个控制器上第二个发现的设备,以此类推。

例如:

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

MMC[编辑 | 编辑源代码]

这篇文章的某些内容需要扩充。

原因: 需要增加对 /dev/mmcblkXboot{0,1}[1]/dev/mmcblkXrpmb[2] 的说明。 (在 Talk:设备文件 中讨论)

SD 卡多媒体存储卡 (MMC 卡)eMMC 存储设备由内核的 mmc 驱动处理。这些设备的名称以 mmcblk 开头,之后是一个从 0 开始的数字表示设备号。比如 mmcblk0 表示第一个发现的设备,mmcblk1 表示第二个发现的设备,以此类推。

例如:

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

SCSI 光盘驱动器[编辑 | 编辑源代码]

通过受 SCSI 驱动子系统支持的接口连接的光盘驱动器,其名称以 sr 开头。之后是一个从 0 开始的数字,表示设备号。比如 sr0 表示第一个发现的设备, sr1 表示第二个发现的设备,以此类推。

Udev 也提供到 /dev/sr0 的符号链接,名为 /dev/cdrom。符号链接的名称 /dev/cdrom 与驱动器支持的光盘类型和插入的介质无关。

例如:

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

virtio-blk[编辑 | 编辑源代码]

连接到 virtio 块设备 (virtio-blk) 接口的驱动器,其名称以 vd 开头。之后是一个从 a 开始的小写字母,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)。此设备有 3 个分区 (从 sda1sda3),每个分区都有不同的文件系统

wipefs[编辑 | 编辑源代码]

这篇文章的某些内容需要扩充。

原因: 为什么要使签名对 libblkid 不可见? (在 Talk:设备文件 中讨论)

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

更多信息请参阅 wipefs(8)

例如,以下命令将擦除设备 /dev/sdb 的所有签名,并给每个签名创建签名备份文件 ~/wipefs-sdb-offset.bak

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

伪设备[编辑 | 编辑源代码]

无物理设备的设备节点。

另请参阅[编辑 | 编辑源代码]