設備文件 - 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)

分類：​

- 系統管理

設備文件
新增話題