Device file
From Wikipedia:
- In Unix-like operating systems, a device file or special file is an interface to a device driver that appears in a file system as if it were an ordinary file.
On Linux they are in the /dev
directory, according to the Filesystem Hierarchy Standard.
On Arch Linux the device nodes are managed by udev.
Block devices
A block device is a special file that provides buffered access to a hardware device. For a detailed description and comparison of virtual file system devices, see Wikipedia:Device file#Block devices.
Block device names
The beginning of the device name specifies the kernel's used driver subsystem to operate the block device.
SCSI
Storage devices, like hard disks, SSDs and flash drives, that support the SCSI command (SCSI, SAS, UASP), ATA (PATA, SATA) or USB mass storage connection are handled by the kernel's SCSI driver subsystem. They all share the same naming scheme.
The name of these devices starts with sd
. It is then followed by a lower-case letter starting from a
for the first discovered device (sda
), b
for the second discovered device (sdb
), and so on.
Examples:
/dev/sda
- devicea
, the first discovered device./dev/sde
- devicee
, the fifth discovered device.
NVMe
The name of storage devices, like SSDs, that are attached via NVM Express (NVMe) starts with nvme
. It is then followed by a number starting from 0
for the device controller, nvme0
for the first discovered NVMe controller, nvme1
for the second, and so on. Next is the letter "n" and a number starting from 1
expressing the namespace on a controller, i.e. nvme0n1
for first discovered namespace on first discovered controller, nvme0n2
for second discovered namespace on first discovered controller, and so on.
Examples:
/dev/nvme0n1
- device1
on controller0
, the first discovered device on the first discovered controller./dev/nvme2n5
- device5
on controller2
, the fifth discovered device on the third discovered controller.
MMC
SD cards, MMC cards and eMMC storage devices are handled by the kernel's mmc
driver and name of those devices start with mmcblk
. It is then followed by a number starting from 0
for the device, i.e. mmcblk0
for first discovered device, mmcblk1
for second discovered device and so on.
Examples:
/dev/mmcblk0
- device0
, the first discovered device./dev/mmcblk4
- device4
, the fifth discovered device.
SCSI optical disc drive
The name of optical disc drives (ODDs), that are attached using one of the interfaces supported by the SCSI driver subsystem, start with sr
. The name is then followed by a number starting from 0
for the device, ie. sr0
for the first discovered device, sr1
for the second discovered device, and so on.
Udev also provides /dev/cdrom
that is a symbolic link to /dev/sr0
. The name will always be cdrom
regardless of the drive's supported disc types or the inserted media.
Examples:
/dev/sr0
- optical disc drive0
, the first discovered optical disc drive./dev/sr4
- optical disc drive4
, the fifth discovered optical disc drive./dev/cdrom
- a symbolic link to/dev/sr0
.
virtio-blk
The name of drives attached to a virtio block device (virtio-blk) interface start with vd
. It is then followed by a lower-case letter starting from a
for the first discovered device (vda
), b
for the second discovered device (vdb
), and so on.
Examples:
/dev/vda
- devicea
, the first discovered device./dev/vde
- devicee
, the fifth discovered device.
Partition
Partition device names are a combination of the drive's device name and the partition number assigned to them in the partition table, i.e. /dev/drivepartition
. For drives whose device name ends with a number, the drive name and partition number is separated with the letter "p", i.e. /dev/driveppartition
.
Examples:
/dev/sda1
- partition1
on/dev/sda
./dev/nvme2n5p3
- partition3
on/dev/nvme2n5
./dev/mmcblk3p4
- partition4
on/dev/mmcblk3
./dev/vda1
- partition1
on/dev/vda
./dev/loop0p2
- partition2
on/dev/loop0
.
Utilities
lsblk
The util-linux package provides the lsblk(8) utility which lists block devices, for example:
$ 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 /
In the example above, only one device is available (sda
), and that device has three partitions (sda1
to sda3
), each with a different file system.
You can use the -o
/--output
option to enable a specific list of output columns:
# 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
The above is based on the options provided by the -f
/--fs
argument with removal of UUID and addition of partition label and disk size, which are useful when identifying multiple disks. See lsblk --help
for a full list of supported columns.
wipefs
wipefs can list or erase file system, RAID or partition-table signatures (magic strings) from the specified device to make the signatures invisible for libblkid(3). It does not erase the file systems themselves nor any other data from the device.
See wipefs(8) for more information.
For example, to erase all signatures from the device /dev/sdb
and create a signature backup ~/wipefs-sdb-offset.bak
file for each signature:
# wipefs --all --backup /dev/sdb
Pseudo-devices
Device nodes that do not have a physical device.
- /dev/random, see random(4)
- /dev/shm
- /dev/null, /dev/zero, see null(4)
- /dev/full, see full(4)
- /dev/ttyX, where X is a number