Linux 常见主设备号设备清单# 在Linux系统中,设备通常通过主设备号和次设备号来标识。主设备号用于区分设备的大类,例如硬盘、字符设备等;次设备号用于在同一大类设备中区分不同的设备。...NVMe 设备的主设备号是在设备驱动程序注册到内核时由内核动态分配的,因此,不同的系统,内核版本或配置可能会有所不同。在许多现代 Linux 系统中,NVMe 设备的主设备号可能是 259。...插入一块 NVMe 到 linux ,看到如下设备 $ ls -l /dev/nvme0* crw------- 1 root root 243, 0 5月 4 12:01 /dev/nvme0 brw-rw...大多数用户和应用程序不会直接使用这个设备文件,而是使用下面的块设备文件。 /dev/nvme0n1:这是 NVMe 磁盘设备。它的主设备号是 259,表示它是一个块设备(由前面的 ‘b’ 表示)。.../dev/nvme0n1p1, /dev/nvme0n1p2, /dev/nvme0n1p3:这些是 NVMe 磁盘设备的分区。它们的主设备号也是 259,表示它们也是块设备。
Linux系统一次读取磁盘的大小是一个块,而不是一个扇区,块设备驱动由此得名。 二、块设备处理过程 1、linux 内核中,块设备将数据存储与固定的大小的块中,每个块都有自己的固定地址。...Linux内核中块设备和其他模块的关系如下。 ? 1、块设备的处理过程涉及Linux内核中的很多模块,下面简单描述之间的处理过过程。 ... ?...(Linux系统中,对块设备的IO请求,都会向块设备驱动发出一个请求,在驱动中用request结构体描述) 内核结构如下:. struct request { struct list_head queuelist...基本上就只有如下作用: 1)分局major分配一个块设备号 2)在/proc/devices中新增加一行数据,表示块设备的信息) (3)根据是否需要I/O调度,将情况分为两种情况,一种是使用请求队列进行数据传输
按照ldd的说法,linux的设备驱动包括了char,block,net三种设备。char设备是比较简单的,只要分配了major、minor号,就可以进行读写处理了。...换一句话说,所有fs对block设备的请求,最终都会转变为request的形式。所以,对于block设备驱动开发的朋友来说,处理好了request queue就掌握了block设备的一半。...闲话不多说,我们看看一个ramdisk代码驱动是怎么写的,代码来自《深入linux 设备驱动程序内核机制》, #include #include #include #include #include #include ...#include #include #include #define RAMHD_NAME
Linux 常见固定主次设备号设备清单# 在 Unix 或 Linux 系统中,一些设备的主次设备号是固定的。...下面是一些常见的设备及其固定的主次设备号: 设备前缀 设备路径 设备描述 主设备号 次设备号 c /dev/null 空设备,接收且丢弃所有输入,读取时立即返回EOF 1 3 c /dev/zero 零设备...5 0 c /dev/tty0 当前虚拟控制台 4 0 c /dev/console 系统主控制台 5 1 c /dev/ptmx 伪终端主设备 5 2 c /dev/mem 物理内存访问设备 1 1...c /dev/kmem 内核虚拟内存访问设备 1 2 c /dev/full 写入总是返回磁盘已满错误,读取返回null字节 1 7 请注意,上述设备号在大多数Unix和Linux系统上是固定的,但这是由内核源代码中的设备注册逻辑决定的...此外,设备文件是否存在以及其权限设置也可能会因系统配置和安全策略的不同而变化。 注:本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。
应用程序可以打开、关闭和读写这些设备文件,完成对设备的操作,就像操作普通的数据文件一样。为了管理这些设备,系统为设备编了号,每个设备号又分为主设备号和次设备号。...主设备号用来区分不同种类的设备,而次设备号用来区分同一类型的多个设备。对于常用设备,Linux有约定俗成的编号。 一个字符设备或者块设备都有一个主设备号和次设备号。主设备号和次设备号统称为设备号。...主设备号用来表示一个特定的驱动程序。次设备号用来表示使用该驱动程序的各设备。...71 sd 128 sd 129 sd 130 sd 131 sd 132 sd 133 sd 134 sd 135 sd 253 device-mapper 254 mdp 如上所示,该命令会显示字符设备和块设备的主设备号...关于次设备号的主要用途,这篇博客主设备号和次设备号介绍了部分内容。
Bcache简介 Bcache是Linux内核块设备层cache,支持多块HDD使用同一块SSD作为缓存盘。它让SSD作为HDD的缓存成为了可能。...Bcache是从Linux-3.10开始正式并入内核主线的,因此,要使用Bcache,需要将内核升级到3.10及以上版本才行。...安装 1 2 sudo apt-get update sudo apt-get install bcache-tools 操作 假设我们的HDD设备为/dev/sdb, SSD设备为/dev/sdc,...我们需要用SSD加速HDD 擦除磁盘中的超级块信息 1 2 # wipefs -a /dev/sdb # wipefs -a /dev/sdc 创建后端磁盘(HDD) 1 make-bcache -B.../sys/block/bcache0/bcache/attach' 注意,写入UUID必须以root身份才能执行,在zsh里面sudo可能会出现权限不够的问题,所以直接用bash -c来做 看一下块设备结构
通过上节的块设备驱动分析,本节便通过内存来模拟块设备驱动 ,方便我们更加熟悉块设备驱动框架 参考内核自带的块设备驱动程序: drivers/block /xd.c drivers/block /z2ram.c... 1.本节需要的结构体如下: 1.1 gendisk磁盘结构体: struct gendisk { int major; //设备主设备号,等于...register_blkdev()函数里的major int first_minor; //起始次设备号,等于0,则表示此设备号从0开始的 int...,当major==0时,表示动态创建,创建成功会返回一个主设备号 unregister_blkdev(unsigned int major, const char *name); 卸载一个块设备, 在出口函数中使用...,major:主设备号, name:名称 struct gendisk *alloc_disk(int minors); 分配一个gendisk结构,minors为分区数,填1表示不分区 void del_gendisk
Linux内核版本: 3.5 一、块设备介绍 块是一种具有一定结构的随机存取设备,对这种设备的读写是按块进行的,他使用缓冲区来存放暂时的数据,待条件成熟后,从缓存一次性写入设备或者从设备一次性读到缓冲区...块设备是与字符设备并列的概念, 这两类设备在 Linux 中驱动的结构有较大差异,总体而言, 块设备驱动比字符设备驱动要复杂得多,在 I/O 操作上表现出极大的不同,缓冲、 I/O 调度、请求队列等都是与块设备驱动相关的概念...注册函数 int register_blkdev(unsigned int major, const char *name) 函数功能介绍: 注册一个新的块设备 函数参数介绍: @major:块设备的主设备号...如果major = 0,表示尝试分配未使用的主设备号,返回值就表示分配成功的主设备号。 @name:新块设备的名称。 注意: 名称必须保证在系统中是唯一的(不能与设备名称重名)。...函数参数介绍: @major: 主设备号 @name: 设备名称 注销示例: unregister_blkdev(Tiny4412_block_major, "Tiny4412_block"); 2.3
0 0 0 0 0 0|10 0|0 0|0 fdisk -l /dev/mapper/cachedev 可以看到一个设备...identifier: 0x0002da0a Device Boot Start End Blocks Id System 使用: 可以当一个块设备来使用
Bcache简介 Bcache是Linux内核块设备层cache,支持多块HDD使用同一块SSD作为缓存盘。它让SSD作为HDD的缓存成为了可能。...注:Bcache是从Linux-3.10开始正式并入内核主线的,因此,要使用Bcache,需要将内核升级到3.10及以上版本才行。...擦除磁盘中的超级块信息: 创建Bcache后端磁盘(HDD): 创建Bcache缓存磁盘(SSD): 查看Bcache磁盘: Bcache磁盘配置 格式化Bcache磁盘并挂载 要使用bcache...(28-Dec-2013) Discarding device blocks: done Filesystem label= OS type: Linux...Bcache使用之系统配置 配置/etc/fstab /etc/fstab文件保存着Linux系统启动过程中,使用的挂载配置,文件中的每一行都对应着系统中的一个挂载点,有关fstab文件的说明,在此不做介绍
块设备是文件系统的底层支撑,完成数据的存储和访问。块设备也能脱离文件系统以螺设备的形式工作。 块设备以“块”为最小访问单元,可随机访问(定位寻址),逻辑上具有“通用设备层,物理磁盘,分区概念“。...块设备的处理流程较为复杂,包括通用块层,IO调度层和块设备驱动程序的三层组织架构。 通用块设备层负责将bio 到request请求的变换和组织。...物理磁盘gendisk 逻辑分区对象hd_struct 块设备对象block_device 物理磁盘请求队列request_queue ~/Downloads/research/linux-5.15.4...Use disk_devt() and disk_max_parts(). */ int major; /* major number of driver 主设备号*/ int...first_minor; /*与磁盘关联的第一个次设备号*/ int minors; /* 次设备好的最大数量,没有分区的设备,此值为1 maximum number of minors
在Linux的世界里,设备是构成系统的基础,它们使得计算机能够与外界互动。Linux设备可以大致分为几种类型,每种类型都有其独特的特性和用途。让我们一起探索这些设备类型及其特性。1....主要用于设备如终端(TTY)、串行端口等。2. 块设备(Block Devices)块设备允许存储和检索固定大小的数据块,如硬盘、SSD或USB驱动器。...它们是构建文件系统的基石,可以随机访问存储在设备上的任何数据块。特性:随机访问:可以直接访问任何数据块,不需要按顺序。缓存操作:通常操作系统会缓存块设备操作,提高数据处理效率。...总结Linux设备的多样性和复杂性是Linux系统强大功能的体现。通过了解不同类型的Linux设备及其特性,开发者和系统管理员可以更有效地管理和利用这些设备,为用户提供丰富的计算体验。...掌握这些基础知识,是深入Linux世界的第一步。
1.1 初始化一些东西 //暂时使用COMPAQ_SMART2_MAJOR作为主设备号,防止设备号冲突 #define SIMP_BLKDEV_DEVICEMAJOR COMPAQ_SMART2_MAJOR...simp_blkdev_disk->major = SIMP_BLKDEV_DEVICEMAJOR;//主设备号 simp_blkdev_disk->first_minor = 0;/...代码参考 写一个块设备驱动.pdf 资料参考 《Linux内核设计与实现》 《Linux内核完全注释》 Linux.Generic.Block.Layer.pdf https://zhuanlan.zhihu.com...暂时使用COMPAQ_SMART2_MAJOR作为主设备号 #define SIMP_BLKDEV_DISKNAME "simp_blkdev" #define SIMP_BLKDEV_BYTES (16...#define SIMP_BLKDEV_DEVICEMAJOR COMPAQ_SMART2_MAJOR//暂时使用COMPAQ_SMART2_MAJOR作为主设备号 #define SIMP_BLKDEV_DISKNAME
块设备:系统中可以随机访问(不按顺序访问)数据,这种设备称为块设备。比如我们常用的磁盘就是一种典型的块设备。 字符设备: 系统中按字符流的方式有序的访问数据,这种设备称为字符设备。...为什么说磁盘是一种典型的块设备呢? 假如磁盘是按字符设备的方式访问数据, 那就是说磁盘是按顺序访问数据的。 如果读取数据时一个数据在1扇区,另一个数据在20扇区。...为什么说键盘是一种典型的字符设备呢? 字符设备的特点是读取数据是按顺序读取数据。假如我从键盘输入数据,键盘读取的顺序都不固定,而是随机的顺序,那这样输入的数据明显是不对的。所以键盘是一种字符设备。...简单的来说块设备就是随机的读取,而字符设备却是按顺序读取的。
Linux 用户可以拥有一个称为“循环设备”的虚拟块设备,它将普通文件映射到虚拟块,使其成为与隔离进程相关的任务的理想选择。...利用循环设备的最佳示例是 snap 包,这是一个沙盒软件解决方案,包含所有必要的依赖项并作为loop设备安装: 图片如果您有兴趣创建自己的虚拟块设备,本文将一步步教你。...现在,让我们通过给定的命令验证最近创建的块的大小:du -sh VirtBlock.img 图片2.创建循环设备在这一步中,我将使用该losetup实用程序在最近创建的文件中创建循环设备映射。...现在,是时候使用给定的-a选项来打印所有循环设备了:losetupsudo losetup -a图片但是您的块需要有一个文件系统来创建、存储和配置该块的文件,我将使用 ext4:sudo mkfs.ext4...最后使用循环设备进行隔离是一个方便的 Linux 功能。
如果系统启动期间发现新新磁盘设备,内核产生的可插拔消息包含了磁盘驱动给新磁盘分配的主从设备号,接着udevd监听这些消息,完成新磁盘的注册,完成以后会在/dev中创建对应的项,用户可以访问该磁盘设备了。...块设备可以在数据中任何位置进行访问,而字符设备是有可能但不是必然的行为;数据的传输总是按照固定的长度的块进行传输,即使请求一个字节的数据,块设备的驱动程序也会从块设备读取一个完成的块数据,而字符设备只能返回单个字节...块设备、磁盘、分区在内核中如何表示? 块设备是用struct block_device结构表示;struct gendisk用于表示磁盘;struct hd_struct用于表示分区。...他们的之间的关系如下: struct block_device { // bd_dev保存块设备号 dev_t bd_dev; // bd_openers表示块设备打开的次数 int...bio用于系统和设备之间的数据传输,bio是位于通用的块设备层介于磁盘文件系统和驱动程序之间的通用块设备层Generic Block Layer。
Ceph 块设备(也叫RBD)服务提供了大小可调、精炼、支持快照和克隆的块设备。为提供高性能, Ceph 把块设备条带化到整个集群。...在linux上使用iscsi挂载块设备 1....创建文件系统并挂载块设备 [root@summer163-200 ~]# mkfs.xfs /dev/sdd1 specified blocksize 4096 is less than device...0 disk └─sdm1 8:193 0 447.1G 0 part root@Kylin102:~# fdisk /dev/sdm Welcome to fdisk (util-linux
1997年4月,Pavel Machek 写了他的网络块设备代码,并被当时的Linux Kernel 2.1.55接受。...本文描述了网络块设备、驱动、以及它的开发历史。 NBD的驱动程序提供了一种在这个面向网络的世界中更为普遍的访问模型。...它在本地客户端模拟了一个块设备,比如一个磁盘或者是一块磁盘分区,但实际提供物理支持的却是通过网络连接的远程服务器。在本地,该设备看起来是一个磁盘分区,但那只是远程服务器的表面。...远程服务器是一段轻量级的守护进程代码,它提供对远程设备的访问,而且该守护进程并不需要运行在linux平台之上。...本地操作系统必须是linux,而且要支持Linux内核NBD驱动,并且能够运行本地客户端进程。安装NBD可被用来进行远程存储和备份,而且能用来在地球的任意一个角落虚拟地传送物理设备。 ?
lsblk可以查看分区和挂载的磁盘使用情况 lsblk全部的參数 -a, –all 显示全部设备 -b, –bytes 以bytes方式显示设备大小...不显示 slaves 或 holders -D, –discard print discard capabilities -e, –exclude 排除设备
我们在vdpa-dev.gitlab.io上 收集了其中一些;我建议您至少探索以下内容:vDPA内核框架介绍介绍 VDUSE:virtio 的软件定义数据路径块设备vDPA 中的大部分工作是由网络设备驱动的...,但近年来,我们也开发了对块设备的支持。...在这种情况下,vDPA 设备可以直接暴露给客户机,绕过 QEMU 的模拟。libblkio公开了用于在用户空间中访问块设备的通用 API。它支持多个驱动程序。...这种统一在单一框架下,设备对于 QEMU 而言是相同的,有助于无缝集成硬件和软件组件。内核设备关于内核设备,从 Linux v5.13 开始,存在一个专为开发和调试目的而设计的简单模拟器。...iproute2中的工具vdpa可以通过netlink方便的管理vdpa设备,可以分配和释放这些设备。从 Linux 5.17 开始,vDPA 驱动程序支持driver_ovveride。
领取专属 10元无门槛券
手把手带您无忧上云