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) --- 是一种具有一定结构的随机存取设备,对这种设备的读写是按块进行的,他使用缓冲区来存放暂时 ...
随机推荐
- WPF 自定义窗口标题栏
1.建一个WPF资源词典,在其中定义窗口样式,并在App.xaml中指定其为程序资源 2.写一个继续自windows的类,并指定这个类的Style为第一步资源里的样式 3.新建窗口时,分别把xaml文 ...
- Java Timer, TimerTask
参考:http://batitan.iteye.com/blog/253483 TimerTask 就是一个run 方法,里边有些操作: Timer 是个线程,按各种调度方法(Timer.schedu ...
- python学习笔记4(列表)
列表是最通用的Python复合数据类型,列表中包含以逗号分隔,并在方括号([])包含的项目. 在一定程度上,列表相似C语言中的数组,它们之间的一个区别是,所有属于一个列表中的项目可以是不同的数据类型的 ...
- hdu 3631
最短路 执行一遍 Floyd算法 比赛的时候没有想到, 用了优化的Dijkstra 超时到死 #include <cstdio> #include <cstring> ...
- 如何优化 Android Studio 启动、编译和运行速度?
作为一名 Android 程序员,选择一个好的 IDE 工具可以使开发变得非常高效,很多程序员喜欢使用 Google 的 Android Studio来进行开发,但使用起来有时会出现卡顿等问题.本文介 ...
- POJ2527+多项式除法
模拟一遍即可. 注意一些特殊情况,见代码. #include<stdio.h> #include<stdlib.h> #include<math.h> #inclu ...
- Android 国际化文字
本例演示中英文切换 在resource文件夹添加values-zh,这个文件夹对应中文环境的values文件夹,然后添加strings.xml: <?xml version="1.0& ...
- EasyUI combotree值的设置 setValue
如果combotree的json数据如下: [ { "id":"2", "text":"wwwww", "st ...
- 【BZOJ 1045】 1045: [HAOI2008] 糖果传递
1045: [HAOI2008] 糖果传递 Description 有n个小朋友坐成一圈,每人有ai个糖果.每人只能给左右两人传递糖果.每人每次传递一个糖果代价为1. Input 第一行一个正整数n& ...
- ExtJS4 MVC开发教程:搭建开发环境
原文地址:http://www.lihuai.net/qianduan/extjs/864.html 博主系列教程:http://www.lihuai.net/qianduan/extjs 在所有的J ...