Linux 磁盘管理

 

一、认识磁盘

 

1、什么是磁盘:

 

 

磁盘是一种计算机的外部存储器设备,由一个或多个覆盖有磁性材料的铝制或玻璃制的碟片组成,用来存储用户的信息,这种信息可以反复地被读取和改写。绝大多数磁盘被永久封存在一个密封的盒子里。

 

 

 

 

图2:

 

 

 

2、磁盘运行机理:

简单来说就是多个盘片之间靠主轴连接,电机带动主轴做旋转运动,通过多个磁头臂的摇摆和磁盘的旋转,磁头就可以在磁盘旋转的过程中就读取到磁盘中存储的各种数据

 

3、磁盘读写数据的原理

 

1) 磁盘是按照柱面为单位读写数据的,即先读取同一个盘面的某一个磁道,读完之后,如果数据没有读完,磁头也不会切换其他的磁道,而是选择切换磁头,读取下一个盘面的相同半径的磁道,直到所有盘面的相同半径
的磁道读取完成之后,如果数据还没有读写完成,才会切换其他不同半径的磁道,这个切换磁道的过程称为寻道
2)  不同磁头间的切换是电子切换,而不同磁道间的切换需要磁头做径向运动,这个径向运动需要步进电机调节,这个动作是机械的切换
3)   磁头寻道是机械运动,切换磁头是电子切换

 

4、磁盘的扇区、磁道、柱面:

 

(1)磁道:磁盘的每个盘面被划分为许多同心圆,这些同心圆的轨道叫做磁道。
(2)扇区:一个盘面划分为若干个内角相同的扇形,这样盘面上的每个磁道就被分为若干段圆弧,每段圆弧叫做一个扇区。每个扇区中的数据作为一个单元同时被读入或写入。每一个扇区是512字节,其中有64个字节存储的是分区表,一条分区信息占16个字节
(3)柱面:每一个盘片同一大小的同心圆可以看成连在一起的柱面,磁盘在分区的时候最小单位是柱面,每一个盘片的上下面都可以读取数据,每一个磁头,不可以跨盘面读取数据。

 

 

 

 

图2:

 

 

 

 

5、磁盘的分类:

(1)IDE磁盘:特点价格低廉,兼容性强,性价比高,数据传输慢,不支持热插拔等等。
(2)SCSI磁盘:传输速率高,读写性能好,运行稳定,可连接多个设备。可支持热插拔,占用CPU低,但是价格相对来说比较贵,一般用于工作站或服务器上。
(3)SATA磁盘:结构简单、支持热插拔
(4)USB
其中IDE的磁盘的文件名为          /dev/hd[a-d]
而SCSI、SATA、USB的磁盘文件名为    /dev/sd[a-p]

 

 

6、Linux磁盘分区重点小结

 

1)    给磁盘分区的实质就是针对上述0磁头0磁道1扇区的前446字节之后的64bytes的分区表进行设置,即主要是划分起始以及结束磁头号、扇区号即柱面号
2)    给磁盘分区的工具有fdisk(适合给小于2TB的磁盘分区),parted(擅长给大于2TB的磁盘分区,也可以对小于2TB的磁盘分区),首选fdisk,只有磁盘大于2TB时才去选parted
补充:(企业面试题:一台服务器6块600G的磁盘,raid5后,总大小3TB,此时无法安装系统,请问为什么?)
解决办法:
方法1:做raid5后,不要重启装系统,而是再回到raid界面,继续分1个小的虚拟磁盘vd 200G,用这个200G的虚拟磁盘装系统,装完系统后再把剩余的2.8T分区通过parted
方法2:先拿1块盘做raid0,剩下5块盘做raid5,在raid0上安装操作系统
方法3:装系统时,选择gpt分区格式,即可安装操作系统
3)    一块磁盘的分区表仅有64bytes大小,每个分区表要占用16字节,因此一块硬盘仅支持四个分区表信息,即主分区+扩展分区的总量不超过4个
4)    磁盘分区是按照柱面(cylinder)来划分的
5)    扩展分区不能直接使用,需要在扩展分区的基础上创建逻辑分区才行
6)    扩展分区有自己的分区表,因此扩展分区下面的逻辑分区可以有多个
磁盘在使用前一般要进行分区,当然如果不分区直接格式化使用也是没问题的,但这不是常见情况;磁盘分区有主分区、扩展分区和逻辑分区之分;一块硬盘最多可以有4个分区表信息(磁盘本身限制),其中一个主分区的
位置可以用一个扩展分区替换,且一块硬盘只能有一个扩展分区(操作系统限制),在这个扩展分区内可以划分多个逻辑分区(IDE磁盘逻辑分区大概编号可以是5-

 

MBR分区:支持最多4个主分区(Primary Partition)。如需超过4个分区,可以减少1个主分区,分扩展分区(Extended Partition),然后在扩展分区上分逻辑分区(Logical Partition)。
GPT分区:与普遍使用的主引导记录(MBR)分区方案相比,GPT提供了更加灵活的磁盘分区机制。支持超过2Tb的硬盘,可以分做多128个分区。

 

 

 

二、磁盘的分区

 

1、为什么要分区

 

(1)易于管理和使用:

 

比如说我们把磁盘分了sda1、sda2、sda3、sda4盘,我们假设sda1盘为系统盘,其他的比如说游戏、办公、软件盘,这样我们要重新分哪个区就直接在对应的盘分就可以了,不需要整块磁盘进行分区。根据用途我们也能较快的去使用相应的磁盘。

 

(2)有利于数据的安全:

通过分区可以降低数据损失的风险。出现硬盘坏道、错误操作、重装系统都有可能造成数据损失,如果分区了,那么我们就可以将损失最小化。

 

(3)节约寻找文件的时间:

 

这个我觉得跟第一条比较像,但是这里所说的寻找文件的时间,是指电脑搜索文件的时间。分区以后,电脑搜索文件时只需要在相对应的分区搜索就可以了,没必要进行全盘搜索。大大节省了寻找文件的时间。

下图为硬盘的柱面区间示意图:

 

 

 

由于我们之前说过一个扇区是512字节,其中有64个字节存储的是分区表,一条分区信息占16个字节,因此磁盘最多只能分四个分区,要想有多个分区怎么办?这时候就有了扩展分区。

 

2、扩展分区:

 

比如说是图中p4为扩展分区,扩展分区可以被继续划分为多个逻辑分区,逻辑分区是可以进行格式化的。扩展分区把逻辑分区的分区信息在扩展分区中找了一个位置给存起来。假如说p4扩展分区划分了三个逻辑分区那么第1个逻辑分区命名为sda5、第2个为sda6、第3个sda7,以此类推。
上面所说的是一个磁盘被分为四个分区,第四个分区被设置为扩展分区,第一个逻辑分区为sda5。但是当整个磁盘被分为3个分区的时候,我们把扩展分区划分的第1个逻辑分区依然命名为sda5,而不是其它的。总结一下,就是不论磁盘有几个主分区,第一个逻辑分区一定是从sda5开始。

 

3、磁盘的分区:

我们就创建1个1G的分区吧。
(1) 在进行分区时,首先我们需要查看当前磁盘的一个分区状况,使用命令:fdisk -l

 

 

 

 

注意:上图中/dev/sda1 后面有个*,表示该磁盘用于引导系统进行启动。
sda1:存放的是与系统相关的文件
sda2:虚拟内存交换分区
sda3:为我们系统上的跟分区
start、end表示分区开始的扇区位置和结束的扇区位置。
blocks:表示块的信息,一个块里面有多个扇区。
Id:表示磁盘编号
system:表示Linux系统分区的一个分区信息。

 

(2)然后使用命令:fdisk /dev/sda  让硬盘进入分区模式

 

 

 

 

此时命令栏提示输入m来寻求帮助,那么我们输入m,来看一下都有哪些选项

 

 

 

 

上图中:我将画横线的标记为经常会用到的,然后我们来解释一下其中的一些选项。

 

n添加一个新分区q不保存就退出p打印分区表m打印选项菜单
d 删除一个分区 w 保存退出 t 改变系统id号    

 

 

(3)开始创建分区,因此我们输入n,然后回车如下图。

 

 

 

 

 

我们看到黄颜色线条上显示的是3个主要分区,0个扩展分区,还有1个闲置分区。
绿色光标前的default e表示的是默认为扩展分区。我们除了直接回车进入下一步,也可以输入e进入下一步。 此时光标所在的位置表示选择输入起始位置,也就是起始扇区。当然,我们不用输入,直接回车就好进入下一步。它就是为了能够将后面的所有可用扇区充分的利用上,而默认选择可用扇区的起始最小扇区。

 

 

 

 

回车后进入下一步,如下:
此时光标所在的位置表示选择输入终了位置,也就是结束扇区。当然,我们不用输入,直接回车就可以把上面剩余的全部空间充分的利用上。

 

 

 

 

回车后如下:

 

 

 

 

到这里我们创建的扩展分区已经创建好了,我们在命令行界面输入p查看一下分区情况:
在这里插入图片描述
黄颜色框框所框取的信息就是我们创建的扩展分区,以及他的起始,终了扇区位置信息;块信息;id编号信息,分区信息。

有了扩展分区,那么我们才可以创建逻辑分区。
我们在命令行输入n添加一个新分区,此时添加的分区就是逻辑分区。
在这里插入图片描述
这时它询问设置逻辑分区的起始扇区,为了充分利用,我们选择默认值,然后回车。
在这里插入图片描述
到这里它在询问扇区结束位置,说白了就是我们在设置逻辑分区大小。输入格式为:+扇区 或者 +数值大小{单位}
然后我们输入:+1G  表示设置大小为的1G的逻辑空间。回车之后就完成了新的分区的设置。
紧接着我们输入p打印分区表查看分区信息。
在这里插入图片描述
上图中黄颜色的线上的文字为提示信息:提示分区5大小为1GB且已经创建。
此时不要着急,我们一定要记住要保存,在命令行输入w保存分区信息。我们通过w保存并退出后,使用fdisk -l  可以查看到磁盘的分区信息。
但是当你在格式化的时候,有可能找不到这个分区。这是因为Linux没有把分区信息读到内核来,我们需要输入partprobe这个命令,来使我们内核重读一下我们的分区信息。
在这里插入图片描述
到这里我们已经成功地创建了一个1G大小的分区,但是我们能用吗?不能,因为我们要对磁盘进行格式化后才可以进行数据的存储。

 

 

三、磁盘的格式化

 

1、认识格式化:

 

格式化:指将分区格式化成不同的文件系统。
那什么是文件系统呢?
文件系统:指操作系统用于明确存储设备或分区上的文件的方法和数据结构:即在存储设备上组织文件的方法。就好比一个教室,同学们的坐的位置总是与桌子凳子排列的方式有关系。桌子,凳子怎么摆放,就导致了同学坐的位置在哪里。文件系统存放数据也是这么个道理。

 

2、Linux系统下的文件类型:

 

Linux下的文件类型有ext2、ext3、ext4、xfs等等,我们可以使用命令:mkfs. 然后用按TABTAB来查看都有哪些文件类型。

 

 

 

 

 

3、磁盘的格式化:

 

我们现在要对刚才创建的逻辑分区5进行格式化。
(1)在命令行输入mkfs.ext3  /dev/sda5      

意思就是格式化根下的sda5分区,格式化类型为.ext3

 

 

 

当done都出现完毕后,意味着格式化已经进行完毕。
(2)格式化完毕后我们使用命令:ll  来查看我们格式化完毕后的分区的文件类型信息

 

 

 

 

我们从信息中可以看出来sda5为一个块设备文件。8表示主设备号,5表示的为从设备号。

到这里已经格式化好的sda5能用吗?答案是不能,要想用这个磁盘我们还需要挂载。

 

四、磁盘的挂载

 

1、认识挂载:

 

(1)Linux的宗旨是一切皆文件,从以上我们也看到。我们存储的所有文件都在sda3下存放着,sda3也就是我们的根。那我们要在sda5中写入文件时,首先要sda5要与sda3先建立一个联系,这个联系就是一个目录。建立联系的过程我们叫做挂载
(2)当我们访问sda3底下的这个目录的时候,实际上我们访问的才是sda5这个设备文件。这个目录相当于一个访问sda5的入口,可以理解为一个接口,有了这个接口才可以访问这个磁盘。

 

2、磁盘的挂载:

 

 

(1)挂载点目录:我们将磁盘切到根目录, mediamnt 这两个目录被叫做挂载点目录。除此之外,我们也可以自己创建一个目录作为一个挂载点目录,

 

 

 

 

(2)临时挂载:将指定的一个目录作为挂载点目录时,如果挂载点的目录有文件,那么文件会被隐藏。因此当我们需要挂载目录时,最好新建一个空文件夹来作为挂在点目录。(重启后失效
①首先在根下创建一个test目录用于测试,在test目录中创建一个文件file,和一个目录directory。

 

 

 

 

②然后我们挂载sda5,使用命令:mount /dev/sda5 /test   意思就是说将/dev/sda5挂载到test目录中
然后我们刷新一下切出去,重新进到这个目录。(当然你们也可以不刷新直接使用ll命令看看会出现什么)

 

 

 

 

③现在我们在test目录下的操作就相当于在sda5中进行操作,我们在里面写一个文件吧。

 

 

 

 

④按照上一步,我们的colour文件是在sda5中,那么我们将挂载的sda5给卸载掉。我们再进入test查看里面的文件有什么。注意卸载时一定要退出目录,不然无法进行卸载。卸载的命令:umount /dev/sda5或者是umount /test

 

 

 

 

⑤同理根据第③步的操作,我们在sda5里面写入一个文件。那么我们这次将这个sda5直接挂载到新建的一个目录test2。同理我们应该能想到,挂载后这个空文件夹也能够读到colour这个文件。(当然也要刷新一下)

 

 

 

到这里就能说明colour这个文件是属于磁盘里的而非目录里的。
现在我们回到开头,我们之前说过,我们这种挂载方式为临时挂载,因此你在命令行中输入reboot重启Linux后,进入test2中是看不到任何文件的。这里不再演示。
(3)怎样查看到当前系统上所有磁盘的挂载信息?
①使用mount命令,但读起来较费劲,黄色线条可以告诉我们在哪里挂载的,磁盘的格式类型,读写权限,等其他信息。

 

 

 

②使用命令df -h这更易于我们对磁盘的信息的了解。包括文件的大小,已经使用的分区大小,总共可用分区的大小,使用率,以及挂载的位置。(推荐)

 

 

 

注意:我们当时为sda5分配了1G的大小,但由于格式化后,要存储一些记录格式化的类型的信息。所以会占用一些空间,导致实际空间会比我们预先分配的空间要小。
(4)命令:blkid:查看对应分区的UUID(编号)。UUID唯一标识每一个分区,防止错误的挂载。除此之外,还会显示分区的类型。(建议先复制一下sda5的UUID,一会儿会用到)

 

 

 

 

 


(5)永久挂载:使用永久挂载,就意味着它开机会自动挂载。
①使用vim编辑 /etc/fstab  在命令行直接输入vim /etc/fstab 就可以编辑,实现开机自动挂载。

 

 

 

②在将光标移到UUID行,在命令模式下按o键进入插入模式,同时换行。将(4)步骤中复制好的sda5的UUID编号,粘贴进来。/test挂载点目录,ext3文件系统类型,第一个0表示不备份,第二个0表示不检查。注意格式一定要正确,可以不用对齐,最好的判断依据是依照颜色。
写完之后保存退出。

 

 

 

 

Ⅰ写完之后,你使用mount命令,是看不到test挂载信息的,只有开机时才会读取那个文件。你只需reboot然后打开相应的目录去查找我们之前创建的colour文件是否存在来判断自己是否挂载成功。

Ⅱ如果你着急的就想查看test的挂载分区存储的信息。由于内核还没有读取这个命令,我们使用mount -a 这个命令来让内核读取这个文件。然后用mount | grep /test来过滤信息,查看是否挂上。要么直接省去上一步,直接到test目录下去找colour文件是否存在。(如果失败了不要着急,很有可能你没有重新进这个区哦)

 

 

文末彩蛋:小伙伴们有没有发现当test目录被挂载后,该目录下多出了一个目录lost+found。
lost+found:顾名思义,丢失然后找到。它是一个特殊的目录,用来存放文件系统错误导致文件丢失的目录,因此我们的一些数据是可以通过它来找到的。这个目录是在分区的根目录上,就是我们挂载的分区。但这不是每个文件系统都有的目录,ext2/3就有这个目录,有些就没有这个目录。

本节所用到的主要Linux的命令总结

 

该命令的注释
fdisk -l 查看当前磁盘的分区状况
fdisk /dev/sda 让硬盘进入分区模式,所分的磁盘在 /dev 下的 sda 这块磁盘
partprobe 将分区信息读到内核中
mkfs.ext2 /dev/sda5 /dev下的 sda5 磁盘格式化为 ext2 的格式类型
mount /dev/sda5/test /dev/sda5 挂载到 test
umount /dev/sda5或者umount /test 卸载已经挂载的 /dev/sda5 磁盘也就是作为挂载接口的test目录
mount 查看当前磁盘的详细挂载信息
df -h 查看磁盘的信息(推荐)
blkid 查看对应分区的UUID(编号)
 
 
 
 
 
 
参考:https://blog.csdn.net/a1766855068/article/details/84942745
 
 
posted @ 2020-11-09 10:57  钟桂耀  阅读(408)  评论(0编辑  收藏  举报