Linux磁盘管理与文件系统

计算机硬件与存储

磁盘管理 - 图1
磁盘管理 - 图2
磁盘管理 - 图3
磁盘管理 - 图4

磁盘知识体系

磁盘管理 - 图5

Linux磁盘存储的经典描述

  1. 磁盘要放入计算机且被Linux系统识别,到可以使用磁盘存储数据,过程如下:
  2. 1.磁盘要存数据,相当于人盖房子
  3. 2.磁盘要分区后才能够存储数据,相当于房子改好了,需要隔断分出卧室,厨房,卫生间等区域
  4. 3.磁盘分区完成后,还得格式化后才能使用,且创建文件系统后才可以存储数据,相当于家里得装修后才能开始住人,不同的文件系统相当于不同的装修风格
  5. 4.磁盘分区,格式化,创建文件系统后,还得进行挂载到不同的文件夹,才能存放数据,相当于房子还得安装门、窗,才能和外界通信,进出

磁盘管理 - 图6

机械硬盘原理

机械硬盘由坚硬金属材料制成的涂以磁性介质的盘片,盘片两面称为盘面或扇面,都可以记录信息,由磁头对盘面进行操作,一般用磁头号区分。
结构特性决定了机械硬盘如果受到剧烈冲击,磁头与盘面可能产生的哪怕是轻微撞击都有可能报废。
磁盘管理 - 图7
磁头不动,硬盘旋转,磁头就会在磁盘表面画出一个圆形轨迹且磁化,数据就保存在磁化区域中,称之为磁道。
每个磁道分段,一个弧就是一个扇区。
一个硬盘表面可以有多个扇面,每个扇面磁道数相同,具有相同周长的磁道形成的圆柱称之为柱面,柱面数与磁道数相等。
磁盘管理 - 图8
磁盘管理 - 图9
磁盘的每一面被分为很多条磁道,即表面上的一些同心圆,越接近中心,圆就越小。
而每一个磁道又按512个字节(0.5 KB)为单位划分为等分,叫做扇区。
文件数据存储在硬盘上,硬盘中最小的存储单位是扇区(sector)
磁头读取扇区数据是按照连续的多个扇区,称之为块(block)
操作系统文件存取的最小单位是块,且单位是4kb,也就是8个扇区。

磁盘常见概念


磁盘管理 - 图10

磁盘管理的名词解释

  1. 扇区(sector)是磁盘最小的物理存储单元,单位是512字节
  2. 操作系统无法对数目众多的扇区进行寻址,因此操作系统将相邻的扇区组合在一起,形成了块(8个扇区,4k大小)
  3. Linux文件系统中多个连续的扇区称之为block,块,也是在系统中被认为是最小的存储单位
  4. du -h /tmp/*
  5. 在windows文件系统中多个连续的扇区称作簇
  6. 操作系统规定,一个block只能存放一个文件的内容,因此文件占用空间,只能是block的整数倍
  7. du -h /etc/*
  8. 即使文件大小,小于一个block,也就是小于4k,同样占用一个block的大小

磁盘管理 - 图11
硬盘中最小的存储单位是扇区(sector),扇区大小是512B,而硬盘在文件读写操作的时候并非以扇区为单位,是以簇为单位,一个簇包含了多个扇区。
在Windows下如NTFS等文件系统中叫做簇;
在Linux下如Ext4等文件系统中叫做块(block)
磁盘管理 - 图12


磁盘分区

硬盘分区是就使用分区编辑器(partition editor)将一个硬盘上划分几个独立的逻辑部分,盘片一旦划分成数个分区,不同类的目录与文件可以存储进不同的分区。
越多分区,也就有更多不同的地方,可以将文件的性质区分得更细,按照更为细分的性质,存储在不同的地方以管理文件;但太多分区就成了麻烦。
硬盘分区就像给一间空荡的房子划分出卧室,厨房,客厅等相互隔离的空间一样。主要是为了方面用户的使用。
另一方面,通过合理的硬盘分区,有效保护系统盘空间,确实能够提高系统运行速度,再者,硬盘分区也可以有效地对数据进行保护。
磁盘管理 - 图13
你当然可以不分区,只不过,当你面对越来越多的子目录,或者是越来越慢的Windows,不得不费功夫去管理你的文件,或者重装Windows的时候,恐怕会悔不当初。
磁盘管理 - 图14

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
磁盘管理 - 图15

GPT原理

现在大多的硬盘分区表都是gpt分区表
GPT分区:全称为Globally Unique Identifier Partition Table,也叫做GUID分区表,由于MBR限制在2TB容量,GPT诞生了,优点如下

  • GPT分区的硬盘容量几乎无限制
  • 分区个数无限制
  • 自带磁盘数据保险机制

    文件系统

    格式化文件系统

    磁盘管理 - 图16

  • FAT16/FAT32,最早期的windows文件系统,缺点单个文件不能超过2G/4G大小,现在一部蓝光电影十几G肯定不行

  • NTFS,支持文件加密,采用日志式文件系统,详细记录磁盘读写操作,提高数据和系统安全性,突破了4GB单个文件大小,对于flash闪存设备,过多读写造成磁盘寿命较短
  • exFAT,新式的文件系统,单个文件支持16GB,能够在windows和Linux,macos中同时识别。适合于flash闪存设备使用(ssd,u盘)

    平均寻道时间

    平均寻道时间,它是了解硬盘性能至关重要的参数之一。它是指硬盘在接收到系统指令后,磁头从开始移动到数据所在的磁道所花费时间的平均值,它在一定程度上体现了硬盘读取数据的能力,是影响硬盘内部数据传输率的重要参数。
    磁盘管理 - 图17
    读写头沿径向移动,移到要读取的扇区所在磁道的上方,这段时间称为寻道时间(seek time)。
    通过盘片的旋转,使得要读取的扇区转到读写头的下方,这段时间称为旋转延迟时间(rotational latency time)

    磁盘转速

    磁盘管理 - 图18
    RPM(revolutions per minute)它是指硬盘内电机主轴的旋转速度,也就是硬盘盘片在一分钟内所能完成的最大转数。
    磁盘管理 - 图19
    电脑刚诞生初期,几乎所有硬盘都是3600RPM,这是由于美国的交流电是60Hz
    1分=60s 60Hz 1转/Hz 60s/分钟 = 3600转/分钟
    市场如今主流的5400、7200转速
    3600RPM 1.5 = 5400 RPM 3600RPM 2 = 7200RPM
    5400和7200转速比较
    情况一
    磁盘管理 - 图20
    情况二
    磁盘管理 - 图21
    总结
    磁盘管理 - 图22

    Linux磁盘分区

  • 主分区,primary partition

  • 扩展分区,extended
    • 逻辑分区

linux一切接文件,磁盘设备在系统中也以文件形式展示
磁盘管理 - 图23

  • /dev/vd[a-d][1-128]:为虚拟磁盘的磁盘文件名 ```shell /dev/sda–第一个SCSI磁盘或简单的硬盘。。

/dev/sdb–第二个SCSI磁盘。

/dev/sdc–第三个SCSI磁盘。

/dev/hda–IDE主控制器上的主磁盘。

/dev/hdb–IDE主控制器上的从磁盘。

  1. **注意:CentOS 67统统将硬盘设备文件标识为/dev/sd[a-z]**
  2. <a name="lsXtj"></a>
  3. ### 分区类型
  4. 在系统上的/dev/sda1、/dev/sda2又是何物?答:代表分区(Partition
  5. ```shell
  6. /dev/sda1
  7. /dev/sda2
  8. /dev/sda3
  9. /dev/sda4
  10. /dev/sda5

一个硬盘的结构如下:
系统默认分区1~4留给了主分区和扩展分区

  • 主分区1 * (星号代表是引导分区,引导分区装在这里)
  • 主分区2
  • 主分区3
  • 主分区4(extended)
    • 逻辑分区n

      fdisk命令

      分区管理命令fdisk,命令危险,慎重使用
      1. fdisk - manipulate disk partition table 用来管理磁盘分区表,修改、查看
      2. fdisk -l [-u] [device...]
      3. fdisk -l /dev/sda
      磁盘管理 - 图24 ```shell [root@luffycity ~]# fdisk /dev/sda 欢迎使用 fdisk (util-linux 2.23.2)。

更改将停留在内存中,直到您决定将更改写入磁盘。 使用写入命令前请三思。

命令(输入 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 获取帮助):

  1. n:创建新分区
  2. d:删除已有分区
  3. t:修改分区类型
  4. l:查看所有已经ID
  5. w:保存并退出
  6. q:不保存并退出
  7. m:查看帮助信息
  8. p:显示现有分区信息
  1. <a name="yYgpA"></a>
  2. ### 新加一块硬盘进行磁盘分区
  3. 我们添加了/dev/sdb新硬盘
  4. ```shell
  5. [root@local-pyyu ~]# fdisk -l |grep sd[a-c]
  6. 磁盘 /dev/sda:21.5 GB, 21474836480 字节,41943040 个扇区
  7. /dev/sda1 * 2048 2099199 1048576 83 Linux
  8. /dev/sda2 2099200 41943039 19921920 8e Linux LVM
  9. 磁盘 /dev/sdb:21.5 GB, 21474836480 字节,41943040 个扇区
  10. fdisk磁盘分区命令
  11. -v 打印 fdisk 的版本信息并退出.
  12. -l 列出指定设备的分区表信息并退出。
  13. -u 以扇区数而不是以柱面数的形式显示分区表中各分区的信息.
  14. -s 分区 将分区的 大小 (单位为块)信息输出到标准输出

分区命令步骤图解

磁盘管理 - 图25

格式化

不同的文件系统,使用的文件系统也各有不同
Windows 98 平台

  1. FAT
  2. FAT16
  3. FAT32

Windows 2000

  1. NTFS文件系统

Linux的文件系统

  1. etx2
  2. etx3 centos5
  3. etx4 centos6
  4. 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 ~]#
磁盘管理 - 图26
用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