设备文件
来自 维基百科
- 在类 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 表示第一个被发现的控制器上的第二个被发现的命名空间,依此类推。
示例
/dev/nvme0n1- 控制器0上的设备1,第一个被发现的控制器上的第一个被发现的设备。/dev/nvme2n5- 控制器2上的设备5,第三个被发现的控制器上的第五个被发现的设备。
MMC
SD 卡、MMC 卡 和 eMMC 存储设备 由内核的 mmc 驱动程序处理,这些设备的名称以 mmcblk 开头。然后,它后面跟一个数字,从 0 开始表示设备,即 mmcblk0 表示第一个被发现的设备,mmcblk1 表示第二个被发现的设备,依此类推。
示例
/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),依此类推。
示例
/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),并且该设备有三个分区 (sda1 到 sda3),每个分区都有不同的文件系统。
您可以使用 -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
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 是一个数字