第1节. 磁盘工作原理详解

img

设备类型

img

一般将数据存到文件里,就是说的存到磁盘上了,不要较真说proc也是文件,你存到proc里就是存到内存里。

通常这里理解:1-存文件-存盘,2-生效-就是在内存里运行

块存储是一块一块(比如512为一块单位),当你读到内存里必须是块为单位512 512 地去取,,cpu就可以1bit1bit的处理了。

数据的访问时随机的,块设备的读取,你打开文件就是随机的一个数据,你也不知道存在哪里位置。怎么可能不知道具体在哪呢,inode是吃干饭的啊。

随机的意思是和顺序相对的,块设备和字符设备,一个是看磁盘空间空闲块,然后这些inode快bitmap是空的,然后就可以用来存放数据了没有像磁带那样的一个顺序读取,而是指针地址读取。写还有一定意义上的随机性,读可没有哦。

磁带就不能跳过,只能顺序的快进。

光盘可以跳过,也实现了随机读写

块有缓存,因为是随机的,所以将数据缓存了,

光驱和硬盘里面都有缓存,提供读取效率。

字符设备,比如键盘,就是一个字符一个字符的输入的,且是按照顺序的。字符设备没有缓存~

img

块设备要么硬盘、要么光盘

img

其他都是字符设备,比较多

下图👇是字符设备

img

img

这两个数据表示的是设备的类型,8类型,第5个。类型下的编号。

如果两个数字相同,就判定为同一个设备,并不看名称。

比如,构建一个光盘 11 0

img

创建一个同样编号,名称不一样的

mknod 创建设备

创建了光盘,然后将这个/dev/sr0同类型同编号的设备/dev/cd就是光盘了,挂载到/mnt,可以看到mnt下光盘内容了就:image-20220216103621287

不同接口命名不同

https://blog.51cto.com/u_12958700/1933385

img

并行理论OK,但是电磁干扰没办法目前,所以串行才是优选。

redhat 5 添加IDE硬盘

image-20220216135925326

centos 6上加普通的SCSI硬盘

image-20220216140436543

加了好几个

image-20220216140629673

题外:家里搞个NAS?貌似这这样玩的。

上图IDE口在red5红帽5的显示:

img

除了IDE接口的都判定为sd---这是老的红帽5的做法👆

img

centos从 6 开始就不一样了,不管是什么接口的IDE SCSI SAS的MVNE的都是sdxx同一个命名

但是工作中不一定是物理介质,还有阿里云等,云服,虚拟机可能是dev/vd /dev/xvd xvd一般是zen虚拟化技术,vd一般是kvm的。

img

img

img

如果是1就是机械,如果是0就是固态--适用于物理机--虚拟机不能这么判断

img

sda就是第一块硬盘,

sdb就是第二块硬盘

sdaa...sdaz

sdza...sdzz就这么排下去。

img

机械盘才是旋转的,所以是1

当然这种方法只能看物理机上的情况,如果是虚拟机就不行了。

img

MBR方面:单块硬盘最多4个主分区(可以没有主分区),多块硬盘只要有一块有主分区,其他可以全部都是扩展分区,

扩展分区不能直接使用,需要再次创建逻辑分区才能使用。

主分区不能再继续划分成小的分区了,就是独立使用的。

注意sda4是一个扩展分区,下面的所有sda5 sda6(如果继续分的话),都是属于sda4扩展分区的一部分。

img

这个1K不是真的是1K,只是显示效果。扩展分区不能存数据,所以这里判定为1K,可以用fdisk来看真实大小

img

上图的红圈是起始位置,还有后面的结束为止,在

centos7里,起始位置和结束位置是以扇区为单位。从start扇区开始到end扇区结束(扩展分区里面分出的小逻辑分区一定是在这个扇区316672000-419430399内的--也就是sda5在sda4扇区里面的。),Blocks的值是它的真正大小。而1block是1K。所以上图的扩展分区就是50G大小的容量。

img

sda5就是4G的大小,还剩下40G+的空间未使用。

image-20220216181429402

image-20220216181500306

51379200单位是block,1个block是1kB。这个其实也是扇区512B/1024自然就是kB了。

然后1个block就是2个扇区,读取是整数倍也就是blocks是吧

------

img

img

这是centos6的,对比上面的7的发现,6比7多了Heads和cylinders。下面开始介绍硬盘结构,从来了解这些现象。

img

友情提示,硬盘是密闭的,不是真空的~真空早就压扁了。当然你要说是那个真空我也无话可说。

img img

PS:数据是左上图框选的地方放一点,右上图框选的地方放一点,所以要读出来,磁头就要换道了。比如从内圈读完换到外圈,那估计盘片就转走了,就不是同一个扇面了,要等下一圈了就。

磁头换内外圈,就会影响速度了

硬盘的转速就是体现出来速度了。

img

磁头正反都得有,因为盘面就是正反的

不灵活,整体旋转的。

盘面数=磁头数

img

不可能是255个磁头,100多个盘片?物理上没这么多,这个head是逻辑上,早期确实就是这样的,后来保留了这种表达方式。

img

img

img

img

最外圈是0磁道,往里圈编号。

硬盘属于块设备,组织硬盘空间不是一个磁道来整合的。磁道切成一块块扇区。

早期扇区划分(就是在磁道上划分)是同心圆划分的,内外磁道的扇区数一样。这是早期的划法。

img

一个扇区的大小512字节固定的,整个硬盘要存放更多的数据,就要划更多的扇区。

上面的扇区划分,内圈磁道太短,存放数据有限,随着磁盘密度增大,内圈逐渐可用度越来越差。里圈以达到了工艺极限单位面积存放数据越来越多,但是外圈仍然富裕。同心圆的划分就不行了。

为了解决内圈拥挤外圈富裕的问题,所以产生了下面的扇区划分方法。

拽个名词ZBR

img

zbr 区位记录 法 磁盘扇区划分

这种外圈和里圈放的扇区数量不一样了。

磁头放在外圈数据读取块,放在里圈读取慢。

数据放外圈处理就快些(怎么放外圈啊?⚪),将来优化系统性能的思想。这是现有的硬盘基本都用ZBR划分的。

如果早期磁盘内外圈速度一样的。

通过磁道来识别外圈还是里圈,0磁道在最外圈,不过实际操作种你看不到磁道号吧,应该都是扇区号。

其实有N个0磁道,和N个n磁道:👇下图有6个0磁道,6个1磁道,6个. . .

img

所有的0磁道,1磁道,2磁道。。。都是各自组成了柱面

img

8bit来表示head 255个磁头heads的上限,0不用;

10bit来对应track磁道,1024个磁道上限;

6bit的扇区,63个扇区sectors上限,0不用。

​ 63个扇区就是一圈

1cylinder(柱面的大小)= 512(1个扇区512个字节)* 63个扇区*255(磁头数也就是盘面数)=8M不到的样子

image-20220216205020565

上面👆这些等到下一章节里就可以对应到MBR里的具体字段就知道怎么算的怎么由来的了。

其实就是这张图

image-20220217191331903

img

CHS,cylinder柱面,H head,s sector扇区,这就是硬盘的三维

CHS,24bit的局限性

整个硬盘多大?512*63*1024(柱面的上限)*255≈8G,所以传统的磁盘最大8G。这就是CHS的极限。

image-20220216205728237

LBA的容量大

所以又产生了LBA来表达磁盘大小的方式

img

LBA,只有扇区,全是扇区了就。所以centos7上就只有扇区,没有head和track以及cylinder了。👇

img

img

28位寻址就是👉28bit来表示扇区,一个扇区512,所以128GB=2^28*512B

128GB也不够用了

img

centos6实际上也是支持LBA的,只是为了兼容老版本,所以才是按CHS的方式显示的。

centos7也能够按CHS的方式显示👇

img

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,还是以柱面为单位显示的

img

如上图,第一个1柱面到131个柱面,但是可以打破单个柱面的。说的是partition1分区1跨了柱面了。也就是打破柱面为最小单元了。131到底属于sda1还是sda1,131都属于,说明131柱面跨分区了。也就是说分区的边界线切在了131柱面里面了。

下图就是centos6支持扇区分区,但是兼容柱面,所以显示最小单元是柱面,但是如果存在131这种切到柱面里面的,就会做个提示出来。Partiton 1 does not end on cylinder boundary

img

上图👆就很明显,分区1不在柱面的边界,那说明就是柱面中间切了一刀。

centos5不能这么干的,7彻底都是扇区了也就不提示这种信息了。

分区的话,扇面或者柱面必须是连续的--也就是单块硬盘的连续空间来作为某个分区

windows的所谓的跨区卷,但不是分区,也不能跨硬盘。

100G分一个区在一个连续空间中,后来空间不够了,它前后的空间被别人占用了,就算没有被占用,我们统统认为分区不可扩展,不可缩小。后面有些技术LVM、RAID类解决此类问题。

windows某些软件号称可以扩,但是也就是玩一玩,很危险的操作。生产中统统认为分区不能扩!

Copyright 🌹 © oneyearice@126.com 2022 all right reserved,powered by Gitbook文档更新时间: 2024-07-28 14:47:33

results matching ""

    No results matching ""