磁盘(disk)是指利用磁记录技术存储数据的存储器。
磁盘是计算机主要的存储介质,可以存储大量的二进制数据,并且断电后也能保持数据不丢失。早期计算机使用的磁盘是软磁盘(Floppy Disk,简称软盘),如今常用的磁盘是硬磁盘(Hard disk,简称硬盘)。
在 Linux 系统中,文件系统是创建在硬盘上的。
磁盘是计算机的主要外部存储设备。计算机中的存储设备种类非常多,常见的主要有光盘、硬盘、U 盘等,甚至还有网络存储设备 SAN、NAS 等,使用最多的还是硬盘。
从存储数据的介质上来区分,硬盘可分为机械硬盘(Hard Disk Drive, HDD)和固态硬盘(Solid State Disk, SSD)
1.基本组成
硬盘的盘片一般采用合金材料,多数为铝合金(IBM曾经开发过玻璃材质的盘片但不多见),盘面上涂着磁性材料,厚度一般在0.5mm左右。有些硬盘只装一张盘片,有些则有多张。
硬盘盘片安装在主轴电机的转轴上,在主轴电机的带动下作高速旋转。每张盘片的容量称为单碟容量,而一块硬盘的总容量就是所有盘片容量的总和。早期硬盘由于单碟容量低,所以盘片较多。现代的硬盘盘片一般只有少数几片。
盘片上的记录密度很大,而且盘片工作时会高速旋转,为保证其工作的稳定,数据保存的长久,所以硬片都是密封在硬盘内部。不可自行拆卸硬盘,在普通环境下空气中的灰尘、指纹、头发丝等细小杂质都会对硬盘造成永久损害。
数据就存放在磁盘盘片中。类似于留声机吗。留声机上使用的唱片磁盘盘片非常相似,不过留声机只有一个磁头,而硬盘是上下双磁头,盘片在两个磁头中间高速旋转。
2.逻辑结构
磁头 read-writer head
一张单面的盘片需要一个磁头,双面的盘片则需要两个磁头。硬盘采用高精度、轻型磁头驱动和定位系统。这种系统能使磁头在盘面上快速移动,读写硬盘时,磁头依靠磁盘的高速旋转引起的空气动力效应悬浮在盘面上,与盘面的距离不到1微米(约为头发直径的百分之一),可以在极短的时间内精确定位到计算机指令指定的磁道上。
磁道 track
每个盘片的每个盘面被划分成多个狭窄的同心圆环,数据就是存储在这样的同心圆环上,我们将这样的圆环称为磁道(Track),每个盘面可以划分多个磁道。关机时磁头停留在硬盘的着陆区(Landing Zone),这个着陆区以前是位于离盘心最近的区域,不存放任何数据。
扇区 sector
把每个磁道划分成若干弧段,每段称为一个扇区(Sector)。扇区是硬盘上存储的物理单位,每个扇区一般为512B或4K。也就是说即使计算机只需要硬盘上存储的某个字节,也须一次把这个字节所在的扇区中的全部512字节读入内存,再选择所需的那个字节。
为了对扇区进行查找和管理,需要对扇区进行编号,扇区的编号从0磁道开始,起始扇区为1扇区,其后为2扇区、3扇区……,0磁道的扇区编号结束后,1磁道的起始扇区累计编号,直到最后一个磁道的最后一个扇区(n扇区)
Tips:扇区是最小的物理存储单位,有512bytes和4K两种格式,最小分区单位通常为扇区
交叉因子:在硬盘磁道中,扇区号是按照某个间隔跳跃着编排。比如,2号扇区并不是1号扇区后的按顺序的第一个而是第八个,3号扇区又是2号扇区后的按顺序的第八个,依此类推,这个“八”称为交叉因子。
数据读取经常需要按顺序读取一系列相邻的扇区(逻辑数据相邻)。如对磁道扇区按物理顺序进行编号,很有可能出现当磁头读取完第一个扇区后,由于盘片转速过快来不及读取下一个扇区,(要知道物理相邻扇区位置距离是极小的),必须等待转完一圈,这极大浪费了时间。所以就用交叉来解决这个问题。
硬盘数据的读写是按柱面进行,即磁头读写数据时首先在同一柱面内从0磁头开始进行操作,依次向下在同一柱面的不同盘面(即磁头上)进行操作,只有在同一柱面所有的磁头全部读写完毕后磁头才转移到下一柱面
簇
将物理相邻的若干个扇区称为了一个簇。操作系统读写磁盘的基本单位是扇区,而文件系统的基本单位是簇。
如查看一个文件的大小,显示:大小:15 字节 (15 字节), 占用空间:4.00 KB (4,096 字节)。这里的占用空间就是机器分区的簇大小,因为再小的文件都会占用空间,逻辑基本单位是4K,所以都会占用4K。
硬盘的容量=柱面数(磁道数) * 磁头数 * 单磁道扇区数 * 单个容量扇区大小(一般初始为512字节)
硬盘的接口
- IDE磁盘:特点价格低廉,兼容性强,性价比高,数据传输慢,不支持热插拔等等。
- SCSI磁盘:传输速率高,读写性能好,运行稳定,可连接多个设备。可支持热插拔,占用CPU低,但是价格相对来说比较贵,一般用于工作站或服务器上。
- SATA磁盘:结构简单、支持热插拔
- USB
其中IDE的磁盘的文件名为 /dev/hd[a-d]
而SCSI、SATA、USB的磁盘文件名为 /dev/sd[a-p]
固态硬盘因为丟弃了机械硬盘的物理结构,所以相比机械硬盘具有了低能耗、无噪声、抗震动、低散热、体积小和速度快的优势;不过价格相比机械硬盘更高,而且使用寿命有限。
硬盘分区是指将硬盘的整体存储空间划分成多个独立的区域,分别用来安装操作系统、安装应用程序以及存储数据文件等。
但在分区之前,应该做一些准备及计划工作,包括一块硬盘要划分为几个分区,每个分区应该有多大的容量,以及每个分区准备使用什么文件系统等。对于某些操作系统而言,硬盘必须分区后才能使用,否则不能被识别。
通常,从文件存放和管理的方便、容易、快捷性出发,建议将硬盘划分多个分区,用以存放不同类型的文件,如存放操作系统、应用程序、数据文件等
只有将磁盘进行分区格式化之后,才能成为操作系统能够利用的文件系统格式(filesystem)传统的磁盘与文件系统的应用中,一个分区可以格式化成为了一个文件系统。
所以我们可以说一个filesystem就是一个partition,随着技术的革新,有了LVM,RAID之后,打破了这个一一对应的关系,现在我们在格式化的时候已经不再针对一个parition,而是我们称为一个可被挂载的数据块为一个文件系统。
硬盘分区表可以说是支持硬盘正常工作的骨架。操作系统正是通过它把硬盘划分为若干个分区,然后再在每个分区里面创建文件系统,写入数据文件。
为什么要分区:
(1)易于管理和使用;(2)有利于数据的安全;(3)节约寻找文件的时间;
目前磁盘分区主要有MBR以及GPT两种格式
1. MBR(MS-DOS 主引导记录区)方案
MBR(Main Boot Record 主引导记录区)位于整个硬盘的0磁道0柱面1扇区。
不过,在总共512字节的主引导扇区中,MBR只占用了其中的446个字节,另外的64个字节交给了 DPT(Disk Partition Table硬盘分区表),最后两个字节“55,AA”是分区的结束标志。这个整体构成了硬盘的主引导扇区。
Tips:零磁道一旦受损,将使硬盘的主引导程序和分区表信息将遭到严重破坏,从而导致硬盘无法引导
主引导扇区内的信息可以通过任何一种基于某种操作系统的分区软件写入,但和某种操作系统没有特定的关系,即只要创建了有效的主引导记录就可以引导任意一种操作系统
MBR分区表上有四项,每一项表示一个分区,所以一个分区表最多只能表示4个分区。分区表上的4项用来表示主分区和扩展分区的信息。因为扩展分区最多只能有一个,所以硬盘最多可以有四个主分区或者三个主分区,一个扩展分区。余下的分区表是表示逻辑分区的。
这里有必要阐述一点:逻辑区都是位于扩展分区里面的,并且逻辑分区的个数没有限制。
硬盘的分区由主分区、扩展分区和逻辑分区组成:主分区(注意扩展分区也是一个主分区)的最大个数是四个,其
个数是由硬盘的主引导记录MBR(Master Boot Recorder)决定的,MBR存放启动管理程序(如GRUB)和分区表记录。
扩展分区下又可以包含多个逻辑分区 — 所以主分区范围是从1-4,逻辑分区是从5开始的
MBR只支持不超过2T的硬盘。
2.GPT(GUID Partition Table)方案
这是另外一种分区,针对MBR分区,它有很多优点:
(1)几乎突破了分区个数的限制。
在GPT分区表中最多可以支持128个主分区。
(2)单个分区容量几乎没有限制。
单个分区最大支持1EB容量。
因此GPT分区中,主分区和扩展分区,逻辑分区的概念已经很模糊了。甚至没必要这么叫。其实扩展分区之所以存在,意义就是为了解决MBR中分区个数的限制问题。既然在GPT中,分区个数几乎没有了限制,那么这些概念就会模糊起来。
观察硬盘分区状态,以树形结构列出系统上的所有磁盘列表
用法: lsblk [选项] [device]
选项:
- -d:仅列出磁盘本身,并不会列出该磁盘的分区数据
- -f:同时列出该磁盘内的文件系统名称
- -i:使用ASCII的字符输出,不要使用复杂的编码
- m:同时输出该设备在/dev下面的权限信息(rwx数据)
- p:列出该设备的完整文件名,而不是仅列出最后的名字而已
- t:列出该磁盘设备的详细数据,包括磁盘阵列机制,预读写的数据量大小
【例 1】
可以看出:有一个sda、一个sdb和一个sr0设备,而sda设备下又有三个分区,其中sda2甚至还有因为LVM而产生的文件系统。
输出信息:
【例 2】
仅列出/dev/sda设备内的所有数据的完整文件名
同时列出该磁盘内的文件系统与UUID数据信息
UUID是全局唯一标识符,Linux会将系统内所有的设备都赋予一个独一无二的标识符,同时也可以使用blkid命令进行查看
如上所示,每一行代表一个文件系统,主要列出设备名称,UUID名称以及文件系统的类型(TYPE),不过无法查看磁盘的分区类型,可以使用parted命令查看:
通过输出可以看到,该磁盘的分区格式是使用的是msdos分区格式
MBR分区表建议使用fdisk分区,GPT分区建议使用gdisk分区,否则会导致分区失败。
其实这两个工具的软件非常类似,执行了该软件,可以根据该软件内部的操作说明来操作,只需知道方法即可。
1.gdisk
对大于2TB硬盘进行分区
用法: gdisk device
先使用lsblk查看需要进行分区的设备名称
这里我们选取/dev/sdc 进行分区
例如:新增分区
(1)01024GB的xfs文件系统(Linux)
(2)1024GB的vfat文件系统(Windows)
继续添加第二个分区:
使用 p 可以列出这块磁盘的分区表信息,输出信息为:
- 第一行:磁盘容量:3.0T,共有6442450944个扇区
- 第二行:每个扇区的容量为512B(现在的分区主要是以扇区为最小单位)
- Number:分区编号,对于当前设备来说,1号指的是/dev/sdc1,2号便指的是/dev/sdc2……
- Start(sector):每一个分区的开始扇区号码位置
- End (sector):每一个分区的结束扇区号码位置,通过与Start之间可以计算出分区的总容量
- Size:分区的容量
- Code:分区的文件类型
- Name:文件系统的名称
可以看到:还可以继续进行分区,因为最大扇区为6442450944,目前只是用到4294969343;分区的设计中,新分区通常会选用上一个分区的结束扇区号码数加1作为起始扇区号码
注意:gdisk只有root才能执行;使用的设备文不能加上数字,因为磁盘分区是针对整个磁盘设备而不是某个分区
确认分区信息无误后输入 w 进行保存并退出:
使用 lsblk查看分区后的情况
可以看到,sdc1和sdc2,说明添加分区成功
删除一个分区: