设备文件
来自 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
存储设备(如 SSD)的名称,通过 NVM Express (NVMe) 连接,以 nvme
开头。然后,它后面跟着一个数字,从设备控制器 0
开始,第一个发现的 NVMe 控制器为 nvme0
,第二个为 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 光盘驱动器
光盘驱动器 (ODD) 的名称,使用 SCSI 驱动程序子系统支持的接口之一连接,以 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 是一个数字