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限制了扩展分区最多只能有一个。

时间: 2024-10-29 19:11:39

linux中的设备名称和设备号的相关文章

linux中普通文件和块设备文件的区别

1,基本概念 普通文件(Regular File).指普通意义上的文件,如数据文件.可执行文件等. 设备文件(Device File).类unix操作系统都是基于文件概念的,文件是由字节序列而构成的信息载体.根据这一点,可以把IO设备当作设备文件这种所谓的特殊文件来处理:因此,与磁盘上的普通文件进行交互所用的同一系统调用可直接用于IO设备.根据设备驱动程序的基本特征,设备文件可以分为两种:块和字符.这两种硬件设备之间的差异并不容易划分,但我们至少可以假定以下的差异:[1] · 块设备的数据可以随

Linux 中修改网卡名称【ubuntu + Centos7】

有时候安装好Linux系统之后,网卡的名称不是ethX, 这时候可以通过以下方式修改网卡的名称为ethX(以eth0为例). ubuntu 14.04 1. 查看是否存在/etc/udev/rules.d/70-persistent-net.rules 文件,如不存在,可以通过以下方式生成(或者从其它机器上拷贝一个) # ifconfig em1 Link encap:以太网 硬件地址 18:66:da:7e:64:10 inet 地址:192.168.2.38 广播:192.168.2.255

linux中删除文件名称乱码

在最近的操作中发现一些上传的文件有乱码,更改几次都无法正常转换到中文.下面给出正确的解决方案: 使用 ls -i 或者 ls -inum 查找出文件id号(红色字体) [[email protected] home]# ls -i260615 epel-release-latest-6.noarch.rpm 273780 test.txt[[email protected] home]# ls -inum273780 test.txt, 260615 epel-release-latest-6.

Linux下的硬件驱动——USB设备(转载)

usb_bulk_msg函数 当对usb设备进行一次读或者写时,usb_bulk_msg 函数是非常有用的; 然而, 当你需要连续地对设备进行读/写时,建议你建立一个自己的urbs,同时将urbs 提交给usb子系统. 转载于此http://os.chinaunix.net/a2003/0630/1056/000001056933.shtml Linux下的硬件驱动——USB设备(上)(驱动配置部分) USB设备越来越多,而Linux在硬件配置上仍然没有做到完全即插即用,对于Linux怎样配置和

Linux设备驱动--块设备(一)之概念和框架

基本概念   块设备(blockdevice) --- 是一种具有一定结构的随机存取设备,对这种设备的读写是按块进行的,他使用缓冲区来存放暂时的数据,待条件成熟后,从缓存一次性写入设备或者从设备一次性读到缓冲区. 字符设备(Character device) ---是一个顺序的数据流设备,对这种设备的读写是按字符进行的,而且这些字符是连续地形成一个数据流.他不具备缓冲区,所以对这种设备的读写是实时的. 扇区(Sectors):任何块设备硬件对数据处理的基本单位.通常,1个扇区的大小为512byt

【转】Linux设备驱动--块设备(一)之概念和框架

原文地址:Linux设备驱动--块设备(一)之概念和框架 基本概念   块设备(blockdevice) --- 是一种具有一定结构的随机存取设备,对这种设备的读写是按块进行的,他使用缓冲区来存放暂时的数据,待条件成熟后,从缓存一次性写入设备或者从设备一次性读到缓冲区. 字符设备(Character device) ---是一个顺序的数据流设备,对这种设备的读写是按字符进行的,而且这些字符是连续地形成一个数据流.他不具备缓冲区,所以对这种设备的读写是实时的. 扇区(Sectors):任何块设备硬

linux中目录的说明小结

/bin/ /sbin/ /usr/bin/ /usr/sbin/ 主要是存放系统命令,其中/bin/ /usr/bin/ 是普通用户都可以执行的系统命令,而/sbin/ /usr/sbin 中的命令只有超级用户root能执行,其实很好区分,bin前面有s字母的都代表super用户,就是超级用户的意思: /boot/:这是系统启动目录,保存系统启动的相关文件: /dev/:设备文件保存位置,注:在linux中所有皆文件,设备文件就保存在这: /etc/:采用默认安装方式的安装配置文件保存在这个目

Linux中“!&quot;的神奇用法

前言 实际上,不起眼的"!"在linux中有着很多让你惊叹的妙用.本文就来细数那些"!"的神奇用法. 执行上一条命令 例如,在执行完上面一条命令后,可以使用下面的方式再次执行上一条命令: $ whereis bash  #执行命令bash: /bin/bash /etc/bash.bashrc /usr/share/man/man1/bash.1.gz $ !!            #再次执行上一条命令whereis bashbash: /bin/bash /et

Linux中的一些点

前言 本文记录一些日常使用linux的一些点. 系统负载评估 理解Linux系统负荷 查看 ps -ef [[email protected] ~]# ps -ef UID PID PPID C STIME TTY TIME CMD root 1 0 0 2018 ? 00:00:29 /usr/lib/systemd/systemd --system --deserialize 21 root 2 0 0 2018 ? 00:00:00 [kthreadd] root 3 2 0 2018 ?