第1节. 磁盘工作原理详解
设备类型
一般将数据存到文件里,就是说的存到磁盘上了,不要较真说proc也是文件,你存到proc里就是存到内存里。
通常这里理解:1-存文件-存盘,2-生效-就是在内存里运行
块存储是一块一块(比如512为一块单位),当你读到内存里必须是块为单位512 512 地去取,,cpu就可以1bit1bit的处理了。
数据的访问时随机的,块设备的读取,你打开文件就是随机的一个数据,你也不知道存在哪里位置。怎么可能不知道具体在哪呢,inode是吃干饭的啊。
随机的意思是和顺序相对的,块设备和字符设备,一个是看磁盘空间空闲块,然后这些inode快bitmap是空的,然后就可以用来存放数据了没有像磁带那样的一个顺序读取,而是指针地址读取。写还有一定意义上的随机性,读可没有哦。
磁带就不能跳过,只能顺序的快进。
光盘可以跳过,也实现了随机读写
块有缓存,因为是随机的,所以将数据缓存了,
光驱和硬盘里面都有缓存,提供读取效率。
字符设备,比如键盘,就是一个字符一个字符的输入的,且是按照顺序的。字符设备没有缓存~
块设备要么硬盘、要么光盘
其他都是字符设备,比较多
下图👇是字符设备
这两个数据表示的是设备的类型,8类型,第5个。类型下的编号。
如果两个数字相同,就判定为同一个设备,并不看名称。
比如,构建一个光盘 11 0
创建一个同样编号,名称不一样的
mknod 创建设备
创建了光盘,然后将这个/dev/sr0同类型同编号的设备/dev/cd就是光盘了,挂载到/mnt,可以看到mnt下光盘内容了就:
不同接口命名不同
https://blog.51cto.com/u_12958700/1933385
并行理论OK,但是电磁干扰没办法目前,所以串行才是优选。
redhat 5 添加IDE硬盘
centos 6上加普通的SCSI硬盘
加了好几个
题外:家里搞个NAS?貌似这这样玩的。
上图IDE口在red5红帽5的显示:
除了IDE接口的都判定为sd---这是老的红帽5的做法👆
centos从 6 开始就不一样了,不管是什么接口的IDE SCSI SAS的MVNE的都是sdxx同一个命名
但是工作中不一定是物理介质,还有阿里云等,云服,虚拟机可能是dev/vd /dev/xvd xvd一般是zen虚拟化技术,vd一般是kvm的。
如果是1就是机械,如果是0就是固态--适用于物理机--虚拟机不能这么判断
sda就是第一块硬盘,
sdb就是第二块硬盘
sdaa...sdaz
sdza...sdzz就这么排下去。
机械盘才是旋转的,所以是1
当然这种方法只能看物理机上的情况,如果是虚拟机就不行了。
MBR方面:单块硬盘最多4个主分区(可以没有主分区),多块硬盘只要有一块有主分区,其他可以全部都是扩展分区,
扩展分区不能直接使用,需要再次创建逻辑分区才能使用。
主分区不能再继续划分成小的分区了,就是独立使用的。
注意sda4是一个扩展分区,下面的所有sda5 sda6(如果继续分的话),都是属于sda4扩展分区的一部分。
这个1K不是真的是1K,只是显示效果。扩展分区不能存数据,所以这里判定为1K,可以用fdisk来看真实大小
上图的红圈是起始位置,还有后面的结束为止,在
centos7里,起始位置和结束位置是以扇区为单位。从start扇区开始到end扇区结束(扩展分区里面分出的小逻辑分区一定是在这个扇区316672000-419430399内的--也就是sda5在sda4扇区里面的。),Blocks的值是它的真正大小。而1block是1K。所以上图的扩展分区就是50G大小的容量。
sda5就是4G的大小,还剩下40G+的空间未使用。
51379200单位是block,1个block是1kB。这个其实也是扇区512B/1024自然就是kB了。
然后1个block就是2个扇区,读取是整数倍也就是blocks是吧
------
这是centos6的,对比上面的7的发现,6比7多了Heads和cylinders。下面开始介绍硬盘结构,从来了解这些现象。
友情提示,硬盘是密闭的,不是真空的~真空早就压扁了。当然你要说是那个真空我也无话可说。
PS:数据是左上图框选的地方放一点,右上图框选的地方放一点,所以要读出来,磁头就要换道了。比如从内圈读完换到外圈,那估计盘片就转走了,就不是同一个扇面了,要等下一圈了就。
磁头换内外圈,就会影响速度了
硬盘的转速就是体现出来速度了。
磁头正反都得有,因为盘面就是正反的
不灵活,整体旋转的。
盘面数=磁头数
不可能是255个磁头,100多个盘片?物理上没这么多,这个head是逻辑上,早期确实就是这样的,后来保留了这种表达方式。
最外圈是0磁道,往里圈编号。
硬盘属于块设备,组织硬盘空间不是一个磁道来整合的。磁道切成一块块扇区。
早期扇区划分(就是在磁道上划分)是同心圆划分的,内外磁道的扇区数一样。这是早期的划法。
一个扇区的大小512字节固定的,整个硬盘要存放更多的数据,就要划更多的扇区。
上面的扇区划分,内圈磁道太短,存放数据有限,随着磁盘密度增大,内圈逐渐可用度越来越差。里圈以达到了工艺极限单位面积存放数据越来越多,但是外圈仍然富裕。同心圆的划分就不行了。
为了解决内圈拥挤外圈富裕的问题,所以产生了下面的扇区划分方法。
拽个名词ZBR
zbr 区位记录 法 磁盘扇区划分
这种外圈和里圈放的扇区数量不一样了。
磁头放在外圈数据读取块,放在里圈读取慢。
数据放外圈处理就快些(怎么放外圈啊?⚪),将来优化系统性能的思想。这是现有的硬盘基本都用ZBR划分的。
如果早期磁盘内外圈速度一样的。
通过磁道来识别外圈还是里圈,0磁道在最外圈,不过实际操作种你看不到磁道号吧,应该都是扇区号。
其实有N个0磁道,和N个n磁道:👇下图有6个0磁道,6个1磁道,6个. . .
所有的0磁道,1磁道,2磁道。。。都是各自组成了柱面
8bit来表示head 255个磁头heads的上限,0不用;
10bit来对应track磁道,1024个磁道上限;
6bit的扇区,63个扇区sectors上限,0不用。
63个扇区就是一圈
1cylinder(柱面的大小)= 512(1个扇区512个字节)* 63个扇区*255(磁头数也就是盘面数)=8M不到的样子
上面👆这些等到下一章节里就可以对应到MBR里的具体字段就知道怎么算的怎么由来的了。
其实就是这张图
CHS,cylinder柱面,H head,s sector扇区,这就是硬盘的三维
CHS,24bit的局限性
整个硬盘多大?512*63*1024(柱面的上限)*255≈8G,所以传统的磁盘最大8G。这就是CHS的极限。
LBA的容量大
所以又产生了LBA来表达磁盘大小的方式
LBA,只有扇区,全是扇区了就。所以centos7上就只有扇区,没有head和track以及cylinder了。👇
28位寻址就是👉28bit来表示扇区,一个扇区512,所以128GB=2^28*512B
128GB也不够用了
centos6实际上也是支持LBA的,只是为了兼容老版本,所以才是按CHS的方式显示的。
centos7也能够按CHS的方式显示👇
Units = cylinders of 16065 * 512 = 8225280 bytes 的意思是 一个柱面的大小,说明如下:
上文已讲过一个磁盘的容量怎么计算的,当然是最早期的磁盘。CHS,1024个磁道也就是柱面,255个磁头,63个扇区。一个扇区的大小是512B。所以,一个柱面的大小=63*255*512=16065*512
早期red5分区就是按柱面来分的(不是以扇区、磁头、磁道来划分的),就是最小单位是柱面cylinder。整个柱面为单位来划分。就是必须是1个柱面道100个柱面算一个分区,不能是0.5个柱面来划分,然后一个柱面的大小也是8M左右,所以分区的大小也是这个8M的整数倍。
centos6就打破了以柱面为单位,而是以扇区为单位进行划分了。但是centos6为了兼顾centos5,还是以柱面为单位显示的
如上图,第一个1柱面到131个柱面,但是可以打破单个柱面的。说的是partition1分区1跨了柱面了。也就是打破柱面为最小单元了。131到底属于sda1还是sda1,131都属于,说明131柱面跨分区了。也就是说分区的边界线切在了131柱面里面了。
下图就是centos6支持扇区分区,但是兼容柱面,所以显示最小单元是柱面,但是如果存在131这种切到柱面里面的,就会做个提示出来。Partiton 1 does not end on cylinder boundary
上图👆就很明显,分区1不在柱面的边界,那说明就是柱面中间切了一刀。
centos5不能这么干的,7彻底都是扇区了也就不提示这种信息了。
分区的话,扇面或者柱面必须是连续的--也就是单块硬盘的连续空间来作为某个分区。
windows的所谓的跨区卷,但不是分区,也不能跨硬盘。
100G分一个区在一个连续空间中,后来空间不够了,它前后的空间被别人占用了,就算没有被占用,我们统统认为分区不可扩展,不可缩小。后面有些技术LVM、RAID类解决此类问题。
windows某些软件号称可以扩,但是也就是玩一玩,很危险的操作。生产中统统认为分区不能扩!