设备文件
来自 Wikipedia
- 在类 Unix 操作系统中,设备文件或特殊文件是设备驱动程序的接口,它在文件系统中显示为普通文件。
在 Linux 中,它们位于 /dev 目录中,遵循 文件系统层级标准。
在 Arch Linux 上,设备节点由 udev 管理。
块设备
块设备是一种特殊文件,提供对硬件设备的缓冲访问。有关虚拟文件系统设备的详细描述和比较,请参阅 Wikipedia:Device file#Block devices。
块设备名称
设备名称的开头指定了内核用于操作块设备的驱动程序子系统。
SCSI
硬盘、SSD 和闪存驱动器等存储设备,如果支持 SCSI 命令(SCSI、SAS、UASP)、ATA(PATA、SATA)或 USB 大容量存储连接,则由内核的 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 驱动程序子系统支持的接口之一连接的 光盘驱动器 (ODDs) 的名称以 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 是一个数字