设备文件 - Arch Linux 中文维基

跳转到内容

# 设备文件

来自 Arch Linux 中文维基
翻译状态：

- 本文（或部分内容）译自 Device file，最近一次同步于 2023-03-13，若英文版本有所更改，则您可以帮助同步与翻译更改的内容。
- 您可以在 ArchWiki 的对应页面找到本文翻译的原始修订历史。
- 本文可能与英文原文存在出入。

相关文章

- 块设备持久化命名

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

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

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

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

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

## 块设备

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

### 块设备名

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

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

#### SCSI

支持 SCSI 命令 (SCSI、SAS、UASP)、ATA (PATA、SATA) 的存储设备或 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 个分区 (从 `sda1` 到 `sda3`)，每个分区都有不同的文件系统。

#### wipefs

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

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

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

更多信息请参阅 wipefs(8) 。

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

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

## 伪设备

无物理设备的设备节点。

- /dev/random，参见 random(4)
- /dev/shm
- /dev/null，参见 /dev/zero 和 null(4)
- /dev/full，参见 full(4)
- /dev/ttyX (其中 X 是一个数字)

## 另请参阅

- Linux 内核文档 - Linux 已分配的设备 (English)
- Gentoo：设备文件 (English)

分类：​

- 系统管理

设备文件
添加话题