一、命令介绍
lsblk(list block devices)
是一个用于列出块设备的命令,它提供了关于系统中所有块设备的详细信息。块设备包括硬盘、分区、磁盘镜像文件等。lsblk 命令非常有用,特别是在需要查看和管理存储设备时。
$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
vdb 253:16 0 300G 0 disk
vda 253:0 0 120G 0 disk
├─vda2 253:2 0 119G 0 part /
└─vda1 253:1 0 1G 0 part /boot
字段含义如下:
字段 | 含义 |
---|---|
NAME | 设备名称。 |
MAJ:MIN | 主设备号和次设备号。 |
RM | 是否可移动(Removable),1 表示可移动,0 表示不可移动。 |
SIZE | 设备大小。 |
RO | 只读标志,1 表示只读,0 表示可读写。 |
TYPE | 设备类型,如 disk(磁盘)、part(分区)、rom(只读存储)等。 |
MOUNTPOINT | 挂载点,如果设备没有挂载,则为空。 |
二、命令参数
2.1、参数含义
$ lsblk --help
Usage:
lsblk [options] [<device> ...]
Options:
-a, --all print all devices
-b, --bytes print SIZE in bytes rather than in human readable format
-d, --nodeps don't print slaves or holders
-D, --discard print discard capabilities
-e, --exclude <list> exclude devices by major number (default: RAM disks)
-I, --include <list> show only devices with specified major numbers
-f, --fs output info about filesystems
-h, --help usage information (this)
-i, --ascii use ascii characters only
-m, --perms output info about permissions
-l, --list use list format output
-n, --noheadings don't print headings
-o, --output <list> output columns
-p, --paths print complate device path
-P, --pairs use key="value" output format
-r, --raw use raw output format
-s, --inverse inverse dependencies
-t, --topology output info about topology
-S, --scsi output info about SCSI devices
-h, --help display this help and exit
-V, --version output version information and exit
参数 | 含义 |
---|---|
-a, --all | 显示所有设备,包括空设备。 |
-b, --bytes | 以字节为单位显示设备大小。 |
-d, --nodeps | 不显示依赖关系(例如,不显示分区下的子设备)。 |
-e, --exclude <list> | 排除指定类型的设备,多个类型用逗号分隔。例如,--exclude 1,7 排除设备类型 1 和 7。 |
-f, --fs | 显示文件系统信息。 |
-h, --help | 显示帮助信息。 |
-I, --include <list> | 仅显示指定类型的设备,多个类型用逗号分隔。例如,--include 8,9 只显示设备类型 8 和 9。 |
-l, --list | 使用列表格式输出。 |
-n, --noheadings | 不显示标题行。 |
-o, --output <list> | 指定要显示的列,多个列用逗号分隔。例如,--output NAME,SIZE,TYPE 。 |
-P, --pairs | 使用键值对格式输出。 |
-p, --paths | 显示完整路径。 |
-r, --raw | 使用原始格式输出。 |
-S, --scsi | 显示 SCSI 设备信息。 |
-t, --topology | 显示拓扑信息。 |
-V, --version | 显示版本信息。 |
2.2、示例展示
2.2.1、-a
显示所有设备,包括空设备
$ lsblk -a
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
loop1 7:1 0 0 loop
vdb 253:16 0 300G 0 disk
loop2 7:2 0 0 loop
loop0 7:0 0 0 loop
vda 253:0 0 120G 0 disk
├─vda2 253:2 0 119G 0 part /
└─vda1 253:1 0 1G 0 part /boot
# 相比lsblk展示了空设备
2.2.2、-b
以字节为单位显示设备大小
$ lsblk -b
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
vdb 253:16 0 322122547200 0 disk
vda 253:0 0 128849018880 0 disk
├─vda2 253:2 0 127773736960 0 part /
└─vda1 253:1 0 1073741824 0 part /boot
2.2.3、-d
不显示依赖关系(例如,不显示分区下的子设备)
$ lsblk -d
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
vdb 253:16 0 300G 0 disk
vda 253:0 0 120G 0 disk
2.2.4、-e
排除指定类型的设备,多个类型用逗号分隔,排除的设备需要写设备类型编号
$ lsblk -a
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
loop1 7:1 0 0 loop
vdb 253:16 0 300G 0 disk
loop2 7:2 0 0 loop
loop0 7:0 0 0 loop
vda 253:0 0 120G 0 disk
├─vda2 253:2 0 119G 0 part /
└─vda1 253:1 0 1G 0 part /boot
$ lsblk -e 7
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
vdb 253:16 0 300G 0 disk
vda 253:0 0 120G 0 disk
├─vda2 253:2 0 119G 0 part /
└─vda1 253:1 0 1G 0 part /boot
2.2.5、-I
仅显示指定类型的设备,多个类型用逗号分隔,同样需要书写指定的设备类型编号
$ lsblk -a
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
loop1 7:1 0 0 loop
vdb 253:16 0 300G 0 disk
loop2 7:2 0 0 loop
loop0 7:0 0 0 loop
vda 253:0 0 120G 0 disk
├─vda2 253:2 0 119G 0 part /
└─vda1 253:1 0 1G 0 part /boot
$ lsblk -a -I 7
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
loop1 7:1 0 0 loop
loop2 7:2 0 0 loop
loop0 7:0 0 0 loop
2.2.6、-f
显示文件系统信息
$ lsblk -f
NAME FSTYPE LABEL UUID MOUNTPOINT
vdb
vda
├─vda2 ext4 9518ef47-1658-44fa-90fd-4fbf4bd0c799 /
└─vda1 ext4 f0d8224f-6cba-426a-a091-b70024003f95 /boot
2.2.7、-l
使用列表格式输出
$ lsblk -l
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
vdb 253:16 0 300G 0 disk
vda 253:0 0 120G 0 disk
vda2 253:2 0 119G 0 part /
vda1 253:1 0 1G 0 part /boot
2.2.8、-n
不显示标题行
$ lsblk -n
vdb 253:16 0 300G 0 disk
vda 253:0 0 120G 0 disk
├─vda2 253:2 0 119G 0 part /
└─vda1 253:1 0 1G 0 part /boot
2.2.9、-o
指定要显示的列,多个列用逗号分隔.
$ lsblk -o name,type
NAME TYPE
vdb disk
vda disk
├─vda2 part
└─vda1 part
2.2.10、-P
使用键值对方式输出
$ lsblk -P
NAME="vdb" MAJ:MIN="253:16" RM="0" SIZE="300G" RO="0" TYPE="disk" MOUNTPOINT=""
NAME="vda" MAJ:MIN="253:0" RM="0" SIZE="120G" RO="0" TYPE="disk" MOUNTPOINT=""
NAME="vda2" MAJ:MIN="253:2" RM="0" SIZE="119G" RO="0" TYPE="part" MOUNTPOINT="/"
NAME="vda1" MAJ:MIN="253:1" RM="0" SIZE="1G" RO="0" TYPE="part" MOUNTPOINT="/boot"
2.2.11、-p
小写,显示完整路径
lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
vdb 253:16 0 300G 0 disk
vda 253:0 0 120G 0 disk
├─vda2 253:2 0 119G 0 part /
└─vda1 253:1 0 1G 0 part /boot
2.2.12、-r
以原始格式输出
$ lsblk -r
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
vdb 253:16 0 300G 0 disk
vda 253:0 0 120G 0 disk
vda2 253:2 0 119G 0 part /
vda1 253:1 0 1G 0 part /boot
2.2.13、-t
显示拓扑信息
$ lsblk -t
NAME ALIGNMENT MIN-IO OPT-IO PHY-SEC LOG-SEC ROTA SCHED RQ-SIZE RA WSAME
vdb 0 512 0 512 512 1 mq-deadline 256 128 0B
vda 0 512 0 512 512 1 mq-deadline 256 128 0B
├─vda2 0 512 0 512 512 1 mq-deadline 256 128 0B
└─vda1 0 512 0 512 512 1 mq-deadline 256 128 0B
2.3、-o
字段
-o
可用字段如下:
Available columns (for --output):
NAME device name
KNAME internal kernel device name
MAJ:MIN major:minor device number
FSTYPE filesystem type
MOUNTPOINT where the device is mounted
LABEL filesystem LABEL
UUID filesystem UUID
PARTLABEL partition LABEL
PARTUUID partition UUID
RA read-ahead of the device
RO read-only device
RM removable device
MODEL device identifier
SERIAL disk serial number
SIZE size of the device
STATE state of the device
OWNER user name
GROUP group name
MODE device node permissions
ALIGNMENT alignment offset
MIN-IO minimum I/O size
OPT-IO optimal I/O size
PHY-SEC physical sector size
LOG-SEC logical sector size
ROTA rotational device
SCHED I/O scheduler name
RQ-SIZE request queue size
TYPE device type
DISC-ALN discard alignment offset
DISC-GRAN discard granularity
DISC-MAX discard max bytes
DISC-ZERO discard zeroes data
WSAME write same max bytes
WWN unique storage identifier
RAND adds randomness
PKNAME internal parent kernel device name
HCTL Host:Channel:Target:Lun for SCSI
TRAN device transport type
REV device revision
VENDOR device vendor
字段含义如下表:
字段 | 含义 |
---|---|
NAME | 设备名称。这是用户空间中的设备名称。 |
KNAME | 内核中的设备名称。这是内核内部使用的设备名称。 |
MAJ:MIN | 主设备号和次设备号。主设备号标识设备类型,次设备号标识该类型的特定实例。 |
FSTYPE | 文件系统类型。例如,ext4、xfs 等。 |
MOUNTPOINT | 挂载点。显示设备被挂载到哪个目录。 |
LABEL | 文件系统标签。用户定义的文件系统标签。 |
UUID | 文件系统 UUID。全局唯一标识符,用于唯一标识文件系统。 |
PARTLABEL | 分区标签。用户定义的分区标签。 |
PARTUUID | 分区 UUID。全局唯一标识符,用于唯一标识分区。 |
RA | 读取预取大小。内核在读取数据时会预先读取的数据量。 |
RO | 只读设备。0 表示可读写,1 表示只读。 |
RM | 可移动设备。0 表示不可移动,1 表示可移动。 |
MODEL | 设备标识符。通常是设备的型号。 |
SERIAL | 磁盘序列号。设备的序列号。 |
SIZE | 设备大小。设备的总容量。 |
STATE | 设备状态。例如 “running” 表示设备正在运行。 |
OWNER | 设备所有者。拥有该设备节点的用户名。 |
GROUP | 设备组。拥有该设备节点的用户组名。 |
MODE | 设备节点权限。设备文件的权限设置。 |
ALIGNMENT | 对齐偏移量。设备的对齐偏移量。 |
MIN-IO | 最小 I/O 大小。设备支持的最小 I/O 操作大小。 |
OPT-IO | 最优 I/O 大小。设备的最佳 I/O 操作大小。 |
PHY-SEC | 物理扇区大小。设备的物理扇区大小。 |
LOG-SEC | 逻辑扇区大小。设备的逻辑扇区大小。 |
ROTA | 旋转设备。0 表示非旋转设备(如 SSD)即固态硬盘,1 表示旋转设备(如 HDD),即机械硬盘。 |
SCHED | I/O 调度器名称。当前使用的 I/O 调度算法。 |
RQ-SIZE | 请求队列大小。设备的请求队列大小。 |
TYPE | 设备类型。例如 disk(磁盘)、part(分区)等。 |
DISC-ALN | discard 对齐偏移量。discard 操作的对齐偏移量。 |
DISC-GRAN | discard 颗粒度。discard 操作的颗粒度。 |
DISC-MAX | discard 最大字节数。一次 discard 操作可以处理的最大字节数。 |
DISC-ZERO | discard 零数据。是否将 discard 区域填充为零。 |
WSAME | write same 最大字节数。一次 write same 操作可以处理的最大字节数。 |
WWN | 全球唯一存储标识符。设备的全球唯一标识符。 |
RAND | 添加随机性。设备是否支持随机访问。 |
PKNAME | 父设备的内核名称。如果是分区,显示其所属的磁盘的内核名称。 |
HCTL | Host:Channel:Target:Lun 用于 SCSI 设备。SCSI 设备的主机、通道、目标和逻辑单元编号。 |
TRAN | 设备传输类型。例如 sas、sata 等。 |
REV | 设备修订版本。设备的硬件或固件版本。 |
VENDOR | 设备制造商。设备的制造厂商 |
示例如下:
lsblk -o name,rm
# 用于列出块设备,并仅显示设备名称和是否可移动
三、blkid
使用
blkid
用于显示或查找块设备的属性。它可以从文件系统超级块、分区表和磁盘标签中提取信息,并显示这些信息。
blkid
/dev/vda2: UUID="9518ef47-1658-44fa-90fd-4fbf4bd0c799" TYPE="ext4"
/dev/vda1: UUID="f0d8224f-6cba-426a-a091-b70024003f95" TYPE="ext4"
参数如下:
Options:
-c <file> read from <file> instead of reading from the default
cache file (-c /dev/null means no cache)
-d don't encode non-printing characters
-h print this usage message and exit
-g garbage collect the blkid cache
-o <format> output format; can be one of:
value, device, export or full; (default: full)
-k list all known filesystems/RAIDs and exit
-s <tag> show specified tag(s) (default show all tags)
-t <token> find device with a specific token (NAME=value pair)
-l look up only first device with token specified by -t
-L <label> convert LABEL to device name
-U <uuid> convert UUID to device name
-V print version and exit
<dev> specify device(s) to probe (default: all devices)
四、相关知识
4.1、设备类型编号
在Linux下,一切皆文件,设备也不例外,为了管理这些设备,系统为它们各自都编了号,而每个设备号又分为主设备号和次设备号。主设备号用来区分不同类型的设备,而次设备号用来区分同一类型内的多个设备(及其设备分区)。
查看方法:
4.1.1、/proc/devices
文件
/proc/devices 文件是 Linux 系统中 /proc 虚拟文件系统的一部分,它提供了关于系统中字符设备和块设备的信息。这个文件列出了所有已注册的设备驱动程序及其对应的主设备号。
如下:
$ cat /proc/devices
Character devices:
1 mem
4 /dev/vc/0
4 tty
4 tty0
5 /dev/tty
5 /dev/console
5 /dev/ptmx
7 vcs
7 vcs1
7 vcsa
7 vcsa1
10 misc
13 input
29 fb
81 sg
180 usb
204 rtc
254 ttyprintk
254 vcoploop
Block devices:
1 ramdisk
7 loop
8 sd
9 md
11 sr
31 mdp
253 device-mapper
254 dm-verity
4.1.2、ll -l /dev
/dev 目录是 Linux 系统中一个非常重要的目录,它包含了系统中的设备文件。这些设备文件代表了硬件设备,如硬盘、终端、串口等。
$ ls -l /dev
...
crw--w---- 1 root tty 4, 60 Nov 30 2022 tty60
crw--w---- 1 root tty 4, 61 Nov 30 2022 tty61
crw-rw---- 1 root dialout 4, 66 Nov 30 2022 ttyS2
crw-rw---- 1 root dialout 4, 67 Nov 30 2022 ttyS3
crw------- 1 root root 10, 239 Nov 30 2022 uhid
crw------- 1 root root 10, 223 Nov 30 2022 uinput
crw-rw-rw- 1 root root 1, 9 Nov 30 2022 urandom
crw------- 1 root root 244, 0 Nov 30 2022 usbmon0
crw-rw---- 1 root tty 7, 0 Nov 30 2022 vcs
crw-rw---- 1 root tty 7, 1 Nov 30 2022 vcs1
brw-rw---- 1 root disk 253, 0 Nov 30 2022 vda
brw-rw---- 1 root disk 253, 1 Nov 30 2022 vda1
brw-rw---- 1 root disk 253, 2 Oct 20 2023 vda2
brw-rw---- 1 root disk 253, 16 Nov 30 2022 vdb
...
设备含义如下表:
设备名称 | 主设备号 | 描述 |
---|---|---|
mem | 1 | 系统内存设备。 |
kmsg | 1 | 内核消息缓冲区。 |
null | 1 | 空设备,任何写入该设备的数据都会被丢弃,而从它读取数据则总是返回EOF(End of File)。 |
full | 1 | 总是返回EIO错误的设备。 |
random | 1 | 随机数生成器。 |
urandom | 1 | 类似于/dev/random,但在熵池不足时会使用确定性随机数发生器。 |
zero | 1 | 零填充设备,无论何时读取都返回零字节。 |
port | 1 | I/O 端口 |
tty | 4 | 虚拟终端设备 |
ttyS | 4 | 串行通信端口 |
console | 5 | 控制台设备。 |
ptmx | 5 | Pseudo-Terminal Master Xfer device,用于创建伪终端。 |
vcs | 7 | Virtual Console Screen devices,虚拟控制台屏幕。 |
vcsa | 7 | Virtual Console Screen Attributes devices,虚拟控制台属性。 |
vcsu | 7 | Virtual Console Screen Unicode devices,虚拟控制台Unicode显示 |
loop | 7 | 循环设备,允许文件作为块设备使用。 |
autofs | 10 | 自动挂载文件系统。 |
btrfs-control | 10 | Btrfs文件系统的控制接口。 |
cpu_dma_latency | 10 | CPU DMA延迟控制。 |
cuse | 10 | 用户空间字符设备支持。 |
fuse | 10 | FUSE (Filesystem in Userspace) 设备。 |
hpet | 10 | High Precision Event Timer,高精度事件计时器。 |
hwrng | 10 | 硬件随机数生成器。 |
mcelog | 10 | Machine Check Exception日志,机器检查异常日志。 |
nvram | 10 | Non-Volatile RAM,非易失性 RAM。 |
rfkill | 10 | 无线设备开关控制。 |
snapshot | 10 | 快照设备。 |
uhid | 10 | 用户空间HID设备支持。 |
uinput | 10 | 用户空间输入事件支持。 |
vga_arbiter | 10 | VGA仲裁器。 |
vhci | 10 | Virtual Host Controller Interface。 |
vhost-net | 10 | Vhost网络设备。 |
vhost-vsock | 10 | Vhost虚拟套接字设备。 |
loop-control | 10 | 管理 loop 设备的控制接口 |
fb0 | 29 | 帧缓冲设备(Frame Buffer Device)的一个实例 |
ppp | 108 | 虚拟PPP设备,用于在两个节点之间建立直接的点对点连接,支持多种传输介质,如电话线、串行线、以太网等 |
vport0p1 | 242 | Open vSwitch 创建的一个内部端口,设备通常与虚拟交换机(如 Open vSwitch, OVS)相关联 |
usbmon0 | 244 | 用于 USB 监控的设备文件 |
rtc0 | 249 | rtc0 通常对应于硬件中的实时时钟芯片,如主板上的 CMOS 时钟 |
vda | 253 | 第一个虚拟磁盘 |
vda1 | 253 | 第一个虚拟磁盘的第一个分区 |
/dev 下目录含义表
目录 | 用途 | 内容 |
---|---|---|
/dev/block | 包含块设备文件。块设备是指可以随机访问固定大小数据块的设备,如硬盘、SSD 和分区。 | 通常包含与磁盘和分区相关的设备文件,例如 /dev/sda、/dev/sdb1 等。 |
/dev/char | 包含字符设备文件。字符设备是指按字节顺序读写的设备,如终端、串行端口等 | 通常包含与终端、串行端口、USB 设备等相关的设备文件,例如 /dev/ttyS0、/dev/usb/hiddev0 等。 |
/dev/cpu | 包含与 CPU 相关的设备文件。 | 通常包含与每个 CPU 核心相关的微码更新接口和其他控制文件,例如 /dev/cpu/0/msr、/dev/cpu/0/cpuid 等。 |
/dev/disk | 包含与磁盘相关的设备文件和子目录。 | 通常包含与磁盘和分区相关的子目录,例如 by-id、by-path、by-uuid 等,这些子目录用于通过不同的标识符访问磁盘设备。 |
/dev/dri | 包含 Direct Rendering Infrastructure (DRI) 设备文件,用于图形渲染。 | 通常包含与显卡和 GPU 相关的设备文件,例如 /dev/dri/card0、/dev/dri/renderD128 等。 |
/dev/hugepages | 用于管理大页内存(huge pages)。大页内存是一种优化技术,用于减少内存管理开销。 | 通常为空,但可以通过配置来使用大页内存。 |
/dev/input | 包含输入设备文件,如键盘、鼠标、触摸屏等。 | 通常包含与输入设备相关的设备文件,例如 /dev/input/event0、/dev/input/mouse0 等。 |
/dev/mapper | 包含逻辑卷管理器(LVM)或其他映射设备的设备文件。 | 通常包含由 LVM 或其他存储管理工具创建的逻辑卷设备文件,例如 /dev/mapper/vg0-lv0。 |
/dev/mqueue | 用于 POSIX 消息队列。POSIX 消息队列是一种进程间通信机制。 | 通常为空,但在使用消息队列时会生成相应的文件。 |
/dev/net | 包含与网络相关的设备文件。 | 通常包含与网络接口和隧道相关的设备文件,例如 /dev/net/tun 用于创建 TUN/TAP 设备。 |
/dev/pts | 包含伪终端(pseudo-terminal)设备文件。 | 通常包含与终端模拟器和远程登录会话相关的设备文件,例如 /dev/pts/0、/dev/pts/1 等。 |
/dev/raw | 包含原始设备文件,允许直接访问块设备。 | 通常包含 /dev/raw/rawX 文件,其中 X 是一个数字,用于将块设备绑定到原始设备。 |
/dev/shm | 是共享内存区域,用于进程间通信(IPC)。 | 通常包含临时文件和内存映射文件,可以在多个进程之间共享。 |
/dev/vfio | 包含 VFIO(Virtual Function I/O)设备文件,用于将物理设备直接分配给用户空间进程。 | 通常包含与 VFIO 相关的设备文件,例如 /dev/vfio/vfio0。 |
/dev/virtio-ports | 包含 VirtIO 串行端口设备文件,常用于虚拟化环境中进行主机与客户机之间的通信。 | 通常包含与 VirtIO 串行端口相关的设备文件,例如 /dev/virtio-ports/org.qemu.guest_agent.0。 |
!!!
主设备号(Major Device Number)通常用于标识设备类型,并且在大多数情况下是相对固定的。但还有一些设备号是动态分配的,还会因为不同厂商以及内核版本不同主设备号不同。
4.1.3、cat sys/class/*/*/dev
/sys/class 目录是 Linux 系统中 /sys 文件系统的一部分,用于组织和表示系统中的设备。/sys 文件系统提供了对内核数据结构的访问,使用户能够查看和操作设备的状态和属性,可以通过此目录下设备的dev文件查看主设备号和次设备号。如下:
$ cat /sys/class/block/loop0/dev
7:0
4.2、字符设备和块设备
4.2.1、字符设备:
字符设备是一种以字节流形式进行读写的设备。每次读写操作通常只涉及一个或几个字节。
字符设备通常是面向字符的,数据按顺序传输,没有缓存机制。
特点:
- 逐字节读写:字符设备的数据传输是逐字节进行的,不支持随机访问。
- 无缓冲:字符设备通常不使用缓冲区,数据直接传输到应用程序或从应用程序传输出去。
- 简单驱动程序:字符设备的驱动程序相对简单,因为它们不需要处理复杂的缓存和寻址问题。
- 常见例子:终端(如 /dev/tty)、串口(如 /dev/ttyS0)、鼠标、键盘等。
使用场景:
- 适用于需要逐字节读写数据的设备,例如终端输入输出、串口通信等。
- 适用于实时性要求较高的设备,因为数据可以立即传输而不需要等待缓存。
4.2.2、块设备(Block Devices)
块设备是一种以固定大小的数据块为单位进行读写的设备。每次读写操作通常涉及多个字节,通常是 512 字节或更多。块设备支持随机访问,可以跳过某些块直接读取或写入特定块。
特点:
- 块为单位读写:块设备的数据传输是以块为单位进行的,每个块的大小通常是固定的(如 512 字节、4KB 等)。
- 有缓冲:块设备通常使用缓冲区来提高读写效率,减少对物理设备的频繁访问。
- 复杂驱动程序:块设备的驱动程序较为复杂,需要处理缓存、寻址和错误恢复等问题。
- 常见例子:硬盘、SSD、USB 驱动器、CD-ROM、软盘等。
使用场景:
- 适用于需要高效存储和访问大量数据的设备,例如文件系统、数据库等。
- 适用于需要随机访问数据的场景,因为可以跳过某些块直接读取或写入特定块
4.2.3、字符设备和块设备比较
特点 | 字符设备 | 块设备 |
---|---|---|
数据单位 | 字节(逐字节读写) | 数据块(固定大小的块) |
访问方式 | 顺序访问 | 随机访问 |
缓冲 | 无缓冲 | 有缓冲 |
驱动程序复杂度 | 相对简单 | 较为复杂 |
常见例子 | 终端、串口、鼠标、键盘 | 硬盘、SSD、USB 驱动器、CD-ROM |
适用场景 | 实时性要求高、逐字节读写 | 大量数据存储、随机访问 |
4.3、可移动设备和不可移动设备
lsblk 的输出中包含多个列,其中 RM 列表示设备的可移动性(Removability)。
RM 值的含义:
- RM=1:表示设备是可移动的。
- RM=0:表示设备是不可移动的。
可移动设备 (RM=1):可移动设备是指可以随时从系统中移除而不会导致系统崩溃或数据丢失的设备。常见的可移动设备包括 USB 闪存盘、外部硬盘、SD 卡等。
特点:
- 这些设备通常通过 USB 或其他热插拔接口连接到系统。
- 系统会检测到这些设备的插入和移除,并相应地进行挂载和卸载操作。
- 移除这些设备时,系统会提示用户安全卸载以防止数据损坏。
不可移动设备 (RM=0):不可移动设备是指固定在系统中的设备,通常不能在系统运行时随意移除。常见的不可移动设备包括内置硬盘、SSD 和 NVMe 设备。
特点:
- 这些设备通常是系统启动和运行所必需的。
- 移除这些设备可能会导致系统崩溃或数据丢失。
- 系统对这些设备的管理更为严格,通常不允许在运行时移除。
4.4、固态硬盘和机械硬盘
硬盘(HDD)和固态硬盘(SSD)是两种常见的存储设备,它们在结构、性能和使用场景上有所不同。了解这些差异有助于更好地选择和管理存储设备。
硬盘(HDD):机械硬盘(Hard Disk Drive, HDD)是一种传统的存储设备,使用旋转的磁盘来存储数据。数据通过磁头读写到磁盘表面的不同位置。
特点:
- 容量:HDD 通常提供更大的存储容量,价格相对较低。
- 速度:由于需要物理移动磁头和旋转磁盘,HDD 的读写速度相对较慢。
- 耐用性:HDD 对物理冲击比较敏感,因为内部有活动部件。
- 功耗:HDD 的功耗较高,尤其是在启动和运行时。
- 噪音:HDD 在运行时会产生一定的噪音。
固态硬盘(SSD):固态硬盘(Solid State Drive, SSD)是一种基于闪存技术的存储设备,没有活动部件,数据存储在闪存芯片中。
特点:
- 容量:SSD 的容量通常较小,但近年来也在不断增加,且单位容量的价格逐渐下降。
- 速度:SSD 的读写速度远高于 HDD,因为它不需要物理移动部件。
- 耐用性:SSD 没有活动部件,对物理冲击的耐受性更强。
- 功耗:SSD 的功耗较低,适合移动设备和节能需求。
- 噪音:SSD 运行时几乎无声。
内置的 HDD 和 SSD 通常是不可移动设备,而通过 USB 接口连接的外部 HDD 和 SSD 则是可移动设备。
五、参考文档
1、https://cloud.tencent.com/developer/article/2297783
2、https://www.cnblogs.com/zhaobinyouth/p/6238158.html
3、https://www.cnblogs.com/lidabo/p/5300070.html
4、http://staff.ustc.edu.cn/~hdrq/jsjjc/scsi/scsi0101.htm
5、https://www.cnblogs.com/lidabo/p/5300070.html