一,机械硬盘的结构和工作原理简述
以下内容部分图片和文字来自知乎 @随风 的知乎回答
机械硬盘主要由盘片,磁头,盘片转轴以及控制电机,磁头控制器等几个部分组成。
机械硬盘内部结构(图1.1)磁盘由一个或多个盘片组成,每个盘片上下两面各有一个磁头,通过磁头臂控制磁头运动:
- 电机带动主轴,进而带动磁盘开始高速旋转
- 磁头与盘面保持一个微小的距离,在磁头动臂的控制下向指定位置移动
- 磁头到达指定位置,开始对磁盘进行读写操作
二,机械硬盘有关的几个基本概念
磁盘示意图(图2.1) 图2.2- 磁道 track:
当磁盘旋转时,磁头若保持在一个位置上,则每个磁头都会在磁盘表面划出一个圆形轨迹,这些圆形轨迹就叫做磁道。
- 扇区 sector:
磁盘上的每个磁道被等分为若干个弧段,这些弧段便是磁盘的扇区,每个扇区可以存放512个字节的信息,磁盘驱动器在向磁盘读取和写入数据时,以扇区为单位。(可参考上图2.1,2.2)
- 柱面 cylinder
硬盘通常由重叠的一组盘片构成,每个盘面都被划分为数目相等的磁道,并从外缘的"0"号磁道开始编号,从上面的硬盘结构示意图(图2.1)我们可以看出,具有相同编号的磁道形成一个圆柱,称之为磁盘的柱面。磁盘的柱面数与一个盘面上的磁道数是相等的。
- CHS
所谓硬盘的CHS,即Cylinder(柱面)、Head(磁头)、Sector(扇区),只要知道了硬盘的CHS的数目,即可确定硬盘的容量,硬盘的容量=柱面数×磁头数×扇区数×512B。
三,Linux磁盘管理
一切皆文件,这是Linux的基本理念之一。在Linux中,所有的硬件包括磁盘,也都是作为文件来管理的,通常我们称呼这类文件为设备文件。
在类Unix操作系统中,设备文件是设备驱动程序的接口,允许应用程序通过标准输入/输出系统调用使用其设备驱动程序与设备进行交互。使用标准系统调用简化了许多编程任务,并且无论设备的特性和功能如何,都可以实现一致的用户空间I / O机制。
可以粗略的认为,设备文件就是关联至一个设备驱动程序,进而能够跟对应的硬件设备进行通信的文件。
Linux中的设备文件通常存放在/dev目录下,在ll /dev | grep -v "^[dsl]"
查询返回的结果中可以看到类似下图的内容
结果说明:
- 第1部分,第一个字母表示文件类型,c表示字符设备,b表示块设备。后九个字母表示文件的权限(r读,w写,x执行,-无),每三位为一组,表明文件的属主、属组和其他人的权限。
- 第2部分,数字1,表示文件的硬链次数。
- 第3部分,左边是文件的属主,右边是文件的属组。
- 第4部分,逗号分隔的两个数字,前面是文件的主设备号,后面的是文件的次设备号。
- 第5部分,文件名
设备文件的主要类型
- 字符设备(Character Devices):指在I/O传输过程中,必须按照先后顺序存取数据的设备,以字符为单位进行传输。通常字符设备不使用缓冲区。例如键盘
- 块设备(Block Devices):是一种具有一定结构的随机存取设备,对这种设备的读写是以块为单位进行的。它使用缓冲区来暂时存放数据,待条件成熟后,从缓冲区一次性写入设备或从设备中一次性读出放入到缓冲区。例如硬盘
- 伪设备(Pseudo-devices):没有对应的物理设备,而是操作系统虚拟出来,用于实现某些特定功能的设备。
最常用的伪设备是 /dev/null 和 /dev/zero。
- /dev/null,也称为位桶(bit bucket),外号无底洞,黑洞。任何输出到它的数据都会被丢弃。如果不想让消息以标准输出显示或写入文件,那么可以将消息重定向到位桶。
如果试图从它读取数据,那么永远都只会得到EOF(End Of File)信号。- 验证:
输出到/dev/null的结果ls #用于和下方比较执行结果 ls &> /dev/null #将结果重定向到/dev/null echo $? #验证命令是否执行成功,0表示成功,其他数字表示错误码
- /dev/zero,无论从该设备读多少次,每次都会获得一个二进制数字0(即ASCII码为0的字符,在vim里显示为
^@
),因此也有人形象的称呼它泡泡机,吐零机。
而如果试图输出数据到它,也会像输出到/dev/null一样被全部丢弃。- 验证:
从/dev/zero复制一个字符成功dd if=/dev/zero of=a.txt count=1 bs=1 #从/dev/zero复制一个字符到a.txt
vi中查看a.txt的内容vi a.txt #查看a.txt的内容
网友评论