Linux磁盘管理与文件系统
计算机硬件与存储
磁盘知识体系
Linux磁盘存储的经典描述
磁盘要放入计算机且被Linux系统识别,到可以使用磁盘存储数据,过程如下:1.磁盘要存数据,相当于人盖房子2.磁盘要分区后才能够存储数据,相当于房子改好了,需要隔断分出卧室,厨房,卫生间等区域3.磁盘分区完成后,还得格式化后才能使用,且创建文件系统后才可以存储数据,相当于家里得装修后才能开始住人,不同的文件系统相当于不同的装修风格4.磁盘分区,格式化,创建文件系统后,还得进行挂载到不同的文件夹,才能存放数据,相当于房子还得安装门、窗,才能和外界通信,进出
机械硬盘原理
机械硬盘由坚硬金属材料制成的涂以磁性介质的盘片,盘片两面称为盘面或扇面,都可以记录信息,由磁头对盘面进行操作,一般用磁头号区分。
结构特性决定了机械硬盘如果受到剧烈冲击,磁头与盘面可能产生的哪怕是轻微撞击都有可能报废。
磁头不动,硬盘旋转,磁头就会在磁盘表面画出一个圆形轨迹且磁化,数据就保存在磁化区域中,称之为磁道。
每个磁道分段,一个弧就是一个扇区。
一个硬盘表面可以有多个扇面,每个扇面磁道数相同,具有相同周长的磁道形成的圆柱称之为柱面,柱面数与磁道数相等。

磁盘的每一面被分为很多条磁道,即表面上的一些同心圆,越接近中心,圆就越小。
而每一个磁道又按512个字节(0.5 KB)为单位划分为等分,叫做扇区。
文件数据存储在硬盘上,硬盘中最小的存储单位是扇区(sector)
磁头读取扇区数据是按照连续的多个扇区,称之为块(block)
操作系统文件存取的最小单位是块,且单位是4kb,也就是8个扇区。
磁盘常见概念
磁盘管理的名词解释
扇区(sector)是磁盘最小的物理存储单元,单位是512字节操作系统无法对数目众多的扇区进行寻址,因此操作系统将相邻的扇区组合在一起,形成了块(8个扇区,4k大小)在Linux文件系统中多个连续的扇区称之为block,块,也是在系统中被认为是最小的存储单位du -h /tmp/*在windows文件系统中多个连续的扇区称作簇操作系统规定,一个block只能存放一个文件的内容,因此文件占用空间,只能是block的整数倍du -h /etc/*即使文件大小,小于一个block,也就是小于4k,同样占用一个block的大小

硬盘中最小的存储单位是扇区(sector),扇区大小是512B,而硬盘在文件读写操作的时候并非以扇区为单位,是以簇为单位,一个簇包含了多个扇区。
在Windows下如NTFS等文件系统中叫做簇;
在Linux下如Ext4等文件系统中叫做块(block)
磁盘分区
硬盘分区是就使用分区编辑器(partition editor)将一个硬盘上划分几个独立的逻辑部分,盘片一旦划分成数个分区,不同类的目录与文件可以存储进不同的分区。
越多分区,也就有更多不同的地方,可以将文件的性质区分得更细,按照更为细分的性质,存储在不同的地方以管理文件;但太多分区就成了麻烦。
硬盘分区就像给一间空荡的房子划分出卧室,厨房,客厅等相互隔离的空间一样。主要是为了方面用户的使用。
另一方面,通过合理的硬盘分区,有效保护系统盘空间,确实能够提高系统运行速度,再者,硬盘分区也可以有效地对数据进行保护。
你当然可以不分区,只不过,当你面对越来越多的子目录,或者是越来越慢的Windows,不得不费功夫去管理你的文件,或者重装Windows的时候,恐怕会悔不当初。
mbr原理
MBR:Master Boot Record,主分区引导记录。
磁盘的每块扇区都被分配了一个逻辑块地址,引导扇区是每个分区的第一扇区,主引导扇区是整个硬盘的第一扇区。
MBR就保存在主引导扇区中,且扇区还保存了硬盘分区表DPT(Disk Partition Table),和结束标志字(Magic number)。
扇区总计512字节,MBR占446字节(0000H - 01BDH),DPT占据64个字节(01BEH - 01FDH),最后的magic number占2字节(01FEH – 01FFH)。
MBR分区缺点是,硬盘容量最大2T
GPT原理
现在大多的硬盘分区表都是gpt分区表
GPT分区:全称为Globally Unique Identifier Partition Table,也叫做GUID分区表,由于MBR限制在2TB容量,GPT诞生了,优点如下
- GPT分区的硬盘容量几乎无限制
- 分区个数无限制
-
文件系统
格式化文件系统

FAT16/FAT32,最早期的windows文件系统,缺点单个文件不能超过2G/4G大小,现在一部蓝光电影十几G肯定不行
- NTFS,支持文件加密,采用日志式文件系统,详细记录磁盘读写操作,提高数据和系统安全性,突破了4GB单个文件大小,对于flash闪存设备,过多读写造成磁盘寿命较短
exFAT,新式的文件系统,单个文件支持16GB,能够在windows和Linux,macos中同时识别。适合于flash闪存设备使用(ssd,u盘)
平均寻道时间
平均寻道时间,它是了解硬盘性能至关重要的参数之一。它是指硬盘在接收到系统指令后,磁头从开始移动到数据所在的磁道所花费时间的平均值,它在一定程度上体现了硬盘读取数据的能力,是影响硬盘内部数据传输率的重要参数。

读写头沿径向移动,移到要读取的扇区所在磁道的上方,这段时间称为寻道时间(seek time)。
通过盘片的旋转,使得要读取的扇区转到读写头的下方,这段时间称为旋转延迟时间(rotational latency time)磁盘转速

RPM(revolutions per minute)它是指硬盘内电机主轴的旋转速度,也就是硬盘盘片在一分钟内所能完成的最大转数。
电脑刚诞生初期,几乎所有硬盘都是3600RPM,这是由于美国的交流电是60Hz
1分=60s 60Hz 1转/Hz 60s/分钟 = 3600转/分钟
市场如今主流的5400、7200转速
3600RPM 1.5 = 5400 RPM 3600RPM 2 = 7200RPM
5400和7200转速比较
情况一
情况二
总结
Linux磁盘分区
主分区,primary partition
- 扩展分区,extended
- 逻辑分区
linux一切接文件,磁盘设备在系统中也以文件形式展示
/dev/vd[a-d][1-128]:为虚拟磁盘的磁盘文件名 ```shell /dev/sda–第一个SCSI磁盘或简单的硬盘。。
/dev/sdb–第二个SCSI磁盘。
/dev/sdc–第三个SCSI磁盘。
/dev/hda–IDE主控制器上的主磁盘。
/dev/hdb–IDE主控制器上的从磁盘。
**注意:CentOS 6和7统统将硬盘设备文件标识为/dev/sd[a-z]**<a name="lsXtj"></a>### 分区类型在系统上的/dev/sda1、/dev/sda2又是何物?答:代表分区(Partition)```shell/dev/sda1/dev/sda2/dev/sda3/dev/sda4/dev/sda5
一个硬盘的结构如下:
系统默认分区1~4留给了主分区和扩展分区
- 主分区1 * (星号代表是引导分区,引导分区装在这里)
- 主分区2
- 主分区3
- 主分区4(extended)
更改将停留在内存中,直到您决定将更改写入磁盘。 使用写入命令前请三思。
命令(输入 m 获取帮助):m 命令操作 a toggle a bootable flag b edit bsd disklabel c toggle the dos compatibility flag d delete a partition g create a new empty GPT partition table G create an IRIX (SGI) partition table l list known partition types m print this menu n add a new partition o create a new empty DOS partition table p print the partition table q quit without saving changes s create a new empty Sun disklabel t change a partition’s system id u change display/entry units v verify the partition table w write table to disk and exit x extra functionality (experts only)
命令(输入 m 获取帮助):
n:创建新分区d:删除已有分区t:修改分区类型l:查看所有已经IDw:保存并退出q:不保存并退出m:查看帮助信息p:显示现有分区信息
<a name="yYgpA"></a>### 新加一块硬盘进行磁盘分区我们添加了/dev/sdb新硬盘```shell[root@local-pyyu ~]# fdisk -l |grep sd[a-c]磁盘 /dev/sda:21.5 GB, 21474836480 字节,41943040 个扇区/dev/sda1 * 2048 2099199 1048576 83 Linux/dev/sda2 2099200 41943039 19921920 8e Linux LVM磁盘 /dev/sdb:21.5 GB, 21474836480 字节,41943040 个扇区fdisk磁盘分区命令-v 打印 fdisk 的版本信息并退出.-l 列出指定设备的分区表信息并退出。-u 以扇区数而不是以柱面数的形式显示分区表中各分区的信息.-s 分区 将分区的 大小 (单位为块)信息输出到标准输出
分区命令步骤图解
格式化
不同的文件系统,使用的文件系统也各有不同
Windows 98 平台
- FAT
- FAT16
- FAT32
Windows 2000
- NTFS文件系统
Linux的文件系统
- etx2
- etx3 centos5
- etx4 centos6
- xfs centos7
网络共享文件系统
检查系统识别了新的分区
[root@local-pyyu ~]# cat /proc/partitions
major minor #blocks name
8 0 20971520 sda
8 1 1048576 sda1
8 2 19921920 sda2
8 16 20971520 sdb
8 17 262144 sdb1
8 18 1 sdb2
8 21 10485760 sdb5
8 22 10220544 sdb6
11 0 1048575 sr0
253 0 17821696 dm-0
253 1 2097152 dm-1
partprobe命令
centos 5系列:
partprobe命令用于重读分区表,当出现删除文件后,出现仍然占用空间。可以partprobe在不重启的情况下重读分区。
有时候使用fdisk命令对磁盘分区后,内核找不到新分区,得重启机器才能识别新分区,使用partprobe可以不重启重读新的分区表。
[root@localhost ~]# partprobe /dev/sdb #重读磁盘分区表
partx
partx命令告用来诉内核当前磁盘的分区情况,让内核重读分区表。
# 让内核重读分区表
# partx -a /dev/sdb
针对超过2TB的磁盘分区
parted命令
-l 显示所有分区信息
小于2TB的磁盘都可以用fdisk分区,但是大于2TB的磁盘,只能用parted命令分区,且转换磁盘为GPT格式
#超哥这里删除了/dev/sdb磁盘的所有分区,使用的是20G的硬盘模拟,同学们可以自己添加新硬盘
[root@local-pyyu ~]# fdisk -l
磁盘 /dev/sdb:21.5 GB, 21474836480 字节,41943040 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0xb1271efc
设备 Boot Start End Blocks Id System
Parted开始分区,针对/dev/sdb磁盘,GPT分区表没有extend类型
[root@local-pyyu ~]# parted /dev/sdb
GNU Parted 3.1
使用 /dev/sdb
Welcome to GNU Parted! Type 'help' to view a list of commands.
# 更改磁盘分区表类型
(parted) mklabel gpt
警告: The existing disk label on /dev/sdb will be destroyed and all data on this disk will be lost. Do you want to continue?
是/Yes/否/No? Yes
(parted) mkpart primary 0 500
警告: The resulting partition is not properly aligned for best performance.
忽略/Ignore/放弃/Cancel? Ignore
# 打印分区表类型
(parted) p
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sdb: 21.5GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:
Number Start End Size File system Name 标志
1 17.4kB 500MB 500MB primary
# 只有主分区和逻辑分区
(parted) mkpart logical 501 10000
(parted) p
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sdb: 21.5GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:
Number Start End Size File system Name 标志
1 17.4kB 500MB 500MB primary
2 501MB 10.0GB 9499MB logical
(parted) q
信息: You may need to update /etc/fstab.
[root@local-pyyu ~]# ls /dev/sdb*
/dev/sdb /dev/sdb1 /dev/sdb2
[root@local-pyyu ~]#
[root@local-pyyu ~]# ls /dev/sdb* /dev/sdb /dev/sdb1 /dev/sdb2 [root@local-pyyu ~]#
用fdisk命令检查sdb磁盘情况
[root@local-pyyu ~]# fdisk -l /dev/sdb
WARNING: fdisk GPT support is currently new, and therefore in an experimental phase. Use at your own discretion.
磁盘 /dev/sdb:21.5 GB, 21474836480 字节,41943040 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:gpt
Disk identifier: 24DA7CEB-EAD9-4540-A5C6-B9F7D566D388
# Start End Size Type Name
1 34 976562 476.8M Microsoft basic primary
2 978944 19531775 8.9G Microsoft basic logical
更换gpt表为mbr
fdisk命令是针对MBR分区格式的,虽然能用g命令把磁盘格式化为GPT,但是无法再重新格式化为MBR格式,因为fdisk命令无法操作GPT格式的磁盘。
可以使用parted命令更换磁盘分区格式
[root@chaoge /]# parted /dev/sdb //选中要转换到的磁盘
GNU Parted 3.1
Using /dev/sdb
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) mktable
New disk label type? msdos
// 按照习惯MBR格式一般在linux下称作dos,如果在New disk label type?后输入dos或者mbr会提示无效命令,这时候要用help mktable查看
//帮助信息,可以看到parted命令中MBR分区被称作msdos,其它分区如下: aix, amiga, bsd, dvh, gpt, mac, msdos, pc98, sun, loop
Warning: The existing disk label on /dev/sdb will be destroyed and all data on this disk will be lost. Do you want to continue?
Yes/No? Yes



```shell
[root@luffycity ~]# fdisk /dev/sda
欢迎使用 fdisk (util-linux 2.23.2)。
