linux中的设备名称和设备号
看赵炯博士的《linux 0.11 源代码注释》已经两三周了,从今天起开始将一些个人总结和感悟分小标题写出来,聊作记忆以供后来查看。
在linux0.11源码的 /linux/boot/bootsect.s中,有一个标号定义ROOT_DEV
! ROOT_DEV: 0x000 - same type of floppy as boot.
! 0x301 - first partition on first drive etc
ROOT_DEV = 0x306
这里,ROOT_DEV是系统指定的根文件系统的设备号。大家都知道linux系统中“一切都是文件”,所以设备也是文件,这里的0x306就是根文件系统所在的设备对应的设备号。
这里要注意:Linux0.11中使用的设备号命名方式是老式命名规则,和今天的Linux系统设备号命名规则不同。下面分别进行说明。
1、老式Linux设备号命名规则:
设备号 = 主设备号 * 256 + 次设备号 (dev_no = (major << 8) + minor)。这里的主设备号是事先定义好的(1-内存,2-磁盘,3-硬盘,4-ttyx,5-tty,6-并行口,7-非命名管道),譬如对于硬盘,主设备号为3,因此3*256+0=0x300即为系统中第一个硬盘的设备号,依次有以下命名:
设备号 设备文件
对应的设备
0x300 /dev/hd0
系统中第一个硬盘
0x301 /dev/hd1
系统中第一个硬盘的第一分区
0x302 /dev/hd2
系统中第一个硬盘的第二分区
0x303 /dev/hd3
系统中第一个硬盘的第三分区
0x304 /dev/hd4
系统中第一个硬盘的第四分区
0x305 /dev/hd5
系统中第二个硬盘
0x306 /dev/hd6
系统中第二个硬盘的第一分区
······
2、现代Linux设备号命名规则:
现代Linux要管理的设备种类非常丰富,包括硬盘、U盘、打印机等各种设备。我们仍以硬盘为目标来说明设备命名规则。linux将硬盘分为两类:第一类是传统的IDE硬盘,使用hd标示;第二种是SATA、SCSI、USB硬盘、U盘(严格的说U盘不算硬盘)等,均用sd标示;(hd和sd即这两种硬盘的主设备名)。
因此,对于系统中的IDE硬盘,分别用hda,hdb,hdc,hdd来标示1号~4号硬盘(一般主要最多支持4个硬盘。而我们平时使用1块硬盘时,常将其装在主IDE上的主接口上因此单硬盘时硬盘设备名一般是hda)。hda后面的数字用来标示这块硬盘的各个分区,如下:
设备文件 对应的设备
/dev/hda 主IDE的主接口上的硬盘,即系统第一个硬盘
/dev/hda1 第一个硬盘的第一个主分区
/dev/hda2 第一个硬盘的第二个主分区
/dev/hda3 第一个硬盘的第三个主分区
/dev/hda4 第一个硬盘的第四个分区,即扩展分区
/dev/hda5 第一个硬盘的第一个逻辑分区
/dev/hda6 第一个硬盘的第二个逻辑分区
······
/dev/hdb 主IDE的从接口上的硬件,即系统第二个硬盘
/dev/hdb1 第二个硬盘的第一个主分区
······
对于SATA,SCSI,USB硬盘,U盘等,只要把hd改成sd就可以了。命名规则是相同的。
对比与总结:
1、老式命名方法中只有hd,估计是当时只有IDE硬盘的缘故吧。实际上现在IDE硬盘已经很少用了,查了下我的机子就是SATA硬盘的,用sd。
2、老式命名中没有考虑逻辑分区,所以每个硬盘需要占用5个数字标示(譬如第一个硬盘末尾从0~4)。而现代命名中硬盘代号改为abcd,后面的分区才用数字标示。并且有一个细节就是分区号是从1开始的,不是0(我猜这样设计是为了和之前老式命名兼容。因为老式命名中数字0代表整个硬盘,分区号也是从1开始的。因此即使现代命名硬盘名直接hda也没有hda0,然后第一个分区还是hda1)。
3、每个硬盘只能有四个主分区和扩展分区(三个主分区+一个扩展分区,或者四个主分区),这个是由硬盘本身决定的,跟操作系统没关系。
每个硬盘最多只能有一个扩展分区,这个是由操作系统限制的。我的理解,扩展分区只是标志该分区处被再次分成多个逻辑分区了,因此扩展分区相当于逻辑分区的容器而已,没有必要多个,因此OS限制了扩展分区最多只能有一个。
linux中的设备名称和设备号的更多相关文章
- Linux中删除特殊名称文件的多种方式
今日分享:我们在肉体的疾病方面花了不少钱,精神的病害方面却没有花什么,现在已经到了时候,我们应该有不平凡的学校.--<瓦尔登湖> 前言 我们都知道,在linux删除一个文件可以使用rm命令 ...
- Linux中一些目录名称的含义
挖Linux中的古老缩略语[2005-06-22 15:23][Nigel McFarlane][TechTarget] Unix已经有35年历史了.许多人认为它开始于中世纪,这个中世纪是相对于计算机 ...
- 如何在 Linux 中查看进程占用的端口号【转】
对于 Linux 系统管理员来说,清楚某个服务是否正确地绑定或监听某个端口,是至关重要的.如果你需要处理端口相关的问题,这篇文章可能会对你有用. 端口是 Linux 系统上特定进程之间逻辑连接的标识, ...
- linux中如何通过echo输出!(叹号)? -bash: !": event not found
需求描述: 今天在做通过echo结合passwd给用户改密码的过程中,出现无法修改的错误. 错误如下: [root@testvm ~]# useradd mytest [root@testvm ~]# ...
- linux中删除文件名称乱码
在最近的操作中发现一些上传的文件有乱码,更改几次都无法正常转换到中文.下面给出正确的解决方案: 使用 ls -i 或者 ls -inum 查找出文件id号(红色字体) [root@localhost ...
- linux中sftp默认登录的端口号是多少? sftp通过指定的端口号连接?sftp默认端口号
需求描述: 今天一个同事,遇到个问题,程序连接sftp服务器连接不上,问我端口号是多少, 我想了一下是21还是22,所以就做了测试,发现sftp默认的连接端口号是22, 在此做下记录. 操作过程: 1 ...
- 设备版本,设备号,APP版本,APP名称获取
//获取设备id号 UIDevice *device = [UIDevice currentDevice];//创建设备对象 NSString *deviceUID = [[NSString allo ...
- Linux下的硬件驱动——USB设备(转载)
usb_bulk_msg函数 当对usb设备进行一次读或者写时,usb_bulk_msg 函数是非常有用的; 然而, 当你需要连续地对设备进行读/写时,建议你建立一个自己的urbs,同时将urbs 提 ...
- 【转】Linux设备驱动--块设备(一)之概念和框架
原文地址:Linux设备驱动--块设备(一)之概念和框架 基本概念 块设备(blockdevice) --- 是一种具有一定结构的随机存取设备,对这种设备的读写是按块进行的,他使用缓冲区来存放暂时 ...
随机推荐
- 【BZOJ 2654】tree
Description 给你一个无向带权连通图,每条边是黑色或白色.让你求一棵最小权的恰好有need条白色边的生成树. 题目保证有解. Input 第一行V,E,need分别表示点数,边数和需要的白色 ...
- 微软职位内部推荐-Data Scientist
微软近期Open的职位: Job Description:Extracting accurate, insightful and actionable information from data is ...
- Qt智能指针简明说明
下面的智能指针分别对应boost库,Qt库,c++11的智能指针 boost::scoped_ptr QScopedPointer unique_ptr 在其生命期结束后会自动删除它所指的对象(确定 ...
- 关于sqlmap无法打开的问题解决办法
sqlmap无法打开这个问题困扰了我几天,今天才从一个论坛的视频教程里看到这个办法,有可能对其他有些情况依旧没用,但是希望和我一样状况的人看到这篇文章,能收到一些启发 我之前百度了很久,google了 ...
- PAT-乙级-1043. 输出PATest(20)
1043. 输出PATest(20) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue 给定一个长度不超过10000 ...
- html5移动web开发实战必读书记
原文 http://itindex.net/detail/50689-html5-移动-web 主题 HTML5 一.配置移动开发环境 1.各种仿真器.模拟器的下载安装 http://www.mob ...
- python top project of 2013
Hi Pythonistas! 测试和调试 Testing & Debugging 框架及Web Frameworks & Web 并发 Concurrency 任务调度 Job Sc ...
- linux网络环境配置
第一种方法: (red hat) (1)用root身份登录,运行setup命令进入到text mode setup utility 对网络进行配置,这里可以进行ip,子网掩码,默认网关,dns的设置. ...
- 【零基础学习iOS开发】【02-C语言】09-流程控制
前言 1.默认的运行流程 默认情况下,程序的运行流程是这样的:运行程序后,系统会按书写顺序执行程序中的每一行代码.比如下面的程序 1 #include <stdio.h> 2 3 int ...
- winform自定义文件程序-- 不允许所请求的注册表访问权(ZSSQL)
常见问题1: 不允许所请求的注册表访问权 win7.win8 双击程序文件ZSSQL时候会出现 不允许所请求的注册表访问权 的弹窗异常 解决方法:ZSSQL.exe 右键 属性--兼容性--以管理员身 ...