设备文件
根据维基百科:设备文件在类 Unix 系统中是一个设备驱动程序的接口,并如常规文件一样出现在文件系统中。
根据文件系统层次结构标准 (FHS),设备文件在 /dev 目录中。
在 Arch Linux 上设备节点由 udev 管理。
块设备是一种特殊文件,能通过缓冲区访问硬件设备。有关详细说明和虚拟文件系统设备之间的比较,请参阅维基百科。
设备名的开头指定了内核操作块设备时使用的驱动子系统。
支持 SCSI 命令 (SCSI、SAS、UASP)、ATA (PATA、SATA) 的存储设备或 USB 大容量存储设备,比如机械硬盘、固态硬盘和闪存驱动器,均由内核 SCSI 驱动子系统处理。这些设备的命名规范一致。
这些设备的名称以 sd 开头。之后是一个从 a 开始的小写字母,a 表示第一个发现的设备,b 表示第二个发现的设备,以此类推。
例如:
-
/dev/sda- 设备a,第一个发现的设备。 -
/dev/sde- 设备e,第五个发现的设备。
通过 NVM Express(NVMe) 连接的设备,比如固态硬盘,名称以 nvme 开头。之后是一个从 0 开始的数字,表示设备控制器号。nvme0 表示第一个发现的 NVMe 控制器,nvme1 表示第二个发现的,以此类推。然后是字母 "n" 和一个从 1 开始的数字,表示控制器上的设备号。比如 nvme0n1 表示第一个控制器上第一个发现的设备,nvme0n2 表示第一个控制器上第二个发现的设备,以此类推。
例如:
-
/dev/nvme0n1- 控制器0上的设备1,第一个控制器上第一个发现的设备。 -
/dev/nvme2n5- 控制器2上的设备5,第三个控制器上第五个发现的设备。
SD 卡、多媒体存储卡 (MMC 卡) 和 eMMC 存储设备由内核的 mmc 驱动处理。这些设备的名称以 mmcblk 开头,之后是一个从 0 开始的数字表示设备号。比如 mmcblk0 表示第一个发现的设备,mmcblk1 表示第二个发现的设备,以此类推。
例如:
-
/dev/mmcblk0- 设备0,第一个发现的设备。 -
/dev/mmcblk4- 设备4,第五个发现的设备。
通过受 SCSI 驱动子系统支持的接口连接的光盘驱动器,其名称以 sr 开头。之后是一个从 0 开始的数字,表示设备号。比如 sr0 表示第一个发现的设备, sr1 表示第二个发现的设备,以此类推。
Udev 也提供到 /dev/sr0 的符号链接,名为 /dev/cdrom。符号链接的名称 /dev/cdrom 与驱动器支持的光盘类型和插入的介质无关。
例如:
-
/dev/sr0- 光盘驱动器0,第一个发现的光盘驱动器。 -
/dev/sr4- 光盘驱动器4,第五个发现的光盘驱动器。 -
/dev/cdrom- 到/dev/sr0的符号链接。
连接到 virtio 块设备 (virtio-blk) 接口的驱动器,其名称以 vd 开头。之后是一个从 a 开始的小写字母,a 表示第一个发现的设备 (vda),b 表示第二个发现的设备 (vdb),以此类推。
例如:
-
/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。
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 能列出或擦除指定设备上的文件系统、RAID 或分区表签名 (魔术字符串),从而使签名对 libblkid(3) 不可见。它不会擦除文件系统自身,也不会擦除设备上的任何其他数据。
更多信息请参阅 wipefs(8) 。
例如,以下命令将擦除设备 /dev/sdb 的所有签名,并给每个签名创建签名备份文件 ~/wipefs-sdb-offset.bak:
# wipefs --all --backup /dev/sdb
无物理设备的设备节点。