# 磁盘管理与文件系统

349 阅读15分钟

一、认识磁盘

硬盘的物理结构

1、什么是磁盘

磁盘是计算机主要的存储介质,可以存储大量的二进制数据,并且断电后也能保持数据不丢失。早期计算机使用的磁盘是软磁盘(Floppy Disk,简称软盘),如今常用的磁盘是硬磁盘(Hard disk,简称硬盘)。

  • 机械硬盘:靠磁头转动磁盘来存储写入数据,价格相对低廉读写能力慢。
  • 固态硬盘:依靠芯片来存储数据,价格贵但写入读取速度快。

硬盘分为机械硬盘和固态硬盘,由于市场上固态硬盘和机械硬盘性价对比,现在主流还是机械硬盘为主,因为低廉的价格和大容量的空间深受市场的青睐。

盘片:硬盘有多个盘片,每盘片2面(正反两面)。

磁头:每面一个磁头。(并不是只有一个磁头)

image.png 机械硬盘

2、硬盘的数据结构

image.png

  • 扇区:盘片被分为多个扇形区域,每个扇区存放512字节的数据,硬盘的最小存储单位
  • 磁道:  同一盘片不同半径的同心圆, 是由磁头在盘片表面划出的圆形轨迹,方便数据存储
  • 柱面:  不同盘片相同半径构成的圆柱面,由同一半径圆的多个磁道组成

3、硬盘接口类型

image.png 磁盘的接口类型决定了数据的传输快慢,常用磁盘接口有SCSI、SATA、SAS。

  • SCSI(并口):接口速度640MB/s,并行接口,早期服务器。小型机系统接口,SCSI硬盘广为工作站级个人电脑以及服务器所使用,资料传输时 CPU占用率较低,转速快,支持热插拔等。
  • SATA(串口): 接口速度6Gpb/s,并行接口,早期服务器。抗干扰性强,支持热插拔等功能,速度快,纠错能力强。
  • SAS:是新一代的SCSI技术, 和SATA硬盘相同,都是采取序列式技术以获得更高的传输速度,可达到6Gb/s。SAS是以整条线,数据端口与电源端口是一体化的,SAS中是包含供电线的,而SATA不包含供电线。SATA标准实际是SAS标准的一个子集,二者可兼容,SATA硬盘可以插入SAS主板上,反之不行。

4、机械硬盘与固态硬盘

机械硬盘(HDD)

Hard Disk Drive,即是传统普通硬盘,主要由:盘片,磁头,盘片转轴及控制电机,磁头控制器,数据转换器,接口,缓存等几个部分组成。 磁头可沿盘片的半径方向运动,加上盘片每分钟几千转的高速旋转,磁头就可以定位在盘片的指定位置上进行数据的读写操作。信息通过离磁性表面很近的磁头,由电磁流来改变极性方式被电磁流写到磁盘上,信息可以通过相反的方式读取。硬盘作为精密设备,尘埃是其大敌,所以进入硬盘的空气必须过滤。

固态硬盘(SSD)

Solid State Disk或Solid State Drive,又称固态驱动器,是用固态电子存储芯片阵列制成的硬盘。固态硬盘,因为台湾的英语里把固体电容称为Solid而得名。SSD由控制单元和存储单元(FLASH芯片、DRAM芯片)组成。 固态硬盘在接口的规范和定义、功能及使用方法上与普通硬盘的完全相同,在产品外形和尺寸上基本与普通硬盘一致。

磁盘分区

# MBR与磁盘分区结构

  • MBT:只支持2T及以下,适配性强并且只支持4个分区。
  • GPT:可以支持2T以上,适配性相对来说比MBT弱可分为128个分区。

主引导记录(MBR:Master Boot Record)

  1. MBR位于硬盘第一个物理扇区处 ,想要读取数据都要从第一分区MBR表开始, MBR中包含硬盘的主引导程序和硬盘分区表,其中主引导程序会通过分区表协助硬件找到操作系统。
  2. 第一个扇区总共512字节,前446字节是主引导记录,分区表保存在扇区中的第447-512字节中(64字节)最后还有2字节结束位。
  3. 分区表有4个分区记录区,每个分区记录区占16字节

磁盘分区的表示

image.png /dev/hda5

  • /dev/:硬件设备文件所在的目录
  • hd:表示IDE设备(sd表示scsi设备)
  • a:硬盘的顺序号,表示的第几块硬盘,以a、b、c…表示
  • 5:分区的顺序号,表示第一块硬盘接口的第五个分区

磁盘分区类型

  • 硬盘中的主分区数目只有4个(总512-446/16=4)
  • 主分区: 可以直接使用,可以随意使用。 id范围是1-4.
  • 扩展分区:扩展分区是特殊的主分区,不可以直接使用, 需要再划分逻辑分区,解决分区只有4个的问题。id范围为1-4.
  • 逻辑分区:可以直接使用,逻辑分区的空间必须是扩展分区中得到的,id范围从5开始。

文件系统类型

文件系统:

安装在磁盘上的文件系统(软件),负责为用户建立文件,存入、读出、修改、转储文件,控制文件的存取、安全控制、日志、压缩加密等。是用来管理(增删改查恢复)文件的程序。

1.XFS文件系统

  • CenOS 7系统中默认使用的文件系统,高性能的日志型文件系统
  • 存放文件和目录数据的分区
  • 根据备份可迅速恢复磁盘文件内容
  • 可扩展性 :是一个全64-bit的文件系统,最大可以支持8EB的文件系统

Swap交换文件系统 (虚拟内存

当内存不足时,将硬盘的空间转化为内存使用

FAT16、FAT32

性能弱最大只能支持32GB分区,单个文件也只能支持最大4GB,不支持。

NTFS

NTFS文件系统所具备3个功能:错误预警功能、磁盘自我修复功能和日志功能。

EXT4

CenOS 6系统中默认使用的文件系统支持创建使用单个巨型文件1EB的文件系统

JFS

主要是为满足服务器的高吞吐量和可靠性需求而设计、开发的。单个文件最大限制16TB,该文件系统最大支持1PB的容量。但是要收费所以不在我们菜单里。

分区工具

分区工具介绍:

分完区,不保存不生效,有反悔的可能

  • fdisk 2T及以下分区。(一般来说使用这个)
  • gdisk 全支持,2T以上再考虑使用。 (推荐)

分完区立马生效

  • parted 全支持 ,即时生效,分完立马生效,没有反悔可能。(不推荐)

磁盘命令

命令说明
lsblk显示块设备(磁盘)显示比较详细
partprobe分完区后,系统未识别可以用来刷新分区表
blkid查看设备的唯一标识符
fdisk分区,查看分区情况
gdisk分区
mount挂载,显示所有挂载情况
df( disk free )查看挂载情况,磁盘剩余量
df -Th查看分区类型,人性化显示单位大小

查看磁盘分区的信息:分区工具fdisk

fdisk命令格式:fdisk [选项]

选项功能说明
fdisk -l查看磁盘信息
fdisk -l /dev/sdb查看sdb磁盘的
fdisk  设备名(必须是一整块的磁盘)对设备进行分区

演示:非交互式查看磁盘及其分区

[root@localhost ~]# fdisk -l

磁盘 /dev/sda:64.4 GB, 64424509440 字节,125829120 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x00099b5e

   设备 Boot      Start         End      Blocks   Id  System
/dev/sda1   *        2048     2099199     1048576   83  Linux
/dev/sda2         2099200    31475711    14688256   8e  Linux LVM

设备名:

  • /dev/sdb 一整块的磁盘
  • /dev/sdb1 磁盘的分区

交互式查看和管理磁盘分区

进入到分区命令中的选项:

  • m 打印出菜单
  • p 打印出当前分区表
  • n 新建一个分区
  • d 删除一个分区
  • t 改变分区的属性,系统ID
  • w 保存
  • q 不保存退出 具体实验在下文

演示:

用lsblk命令来查看本机的磁盘和分区情况 image.png

刷新硬件接口 image.png 使用命令fdisk /dev/adb来对磁盘进行分区

image.png 最后要加上w进行保存退出。

创建一个扩展分区 image.png 此次可发现一个1k的扩展分区 image.png

最后可得出一个逻辑分区 image.png

如果系统没有分辨出来可以用partprobe来进行刷新本机磁盘和分区情况。

创建文件系统(格式化)

创建文件系统——mkfx

Make Filesystem,创建文件系统(格式化)。

命令格式:

mkfs -t   文件系统类型 分区设备              
mkfs.文件系统类型 分区设备   //两种命令格式中,分区设备位置都要用绝对路径

演示:

格式化磁盘分区,将sdb1分区格式化为xfs文件系统。

[root@localhost /]# mkfs -t    //这里是系统类型,而默认为xfs
btrfs   ext2    ext4    minix   vfat    
cramfs  ext3    fat     msdos   xfs     
[root@localhost /]# mkfs -t xfs /dev/sdb1     //将sdb1格式化为xfs系统
meta-data=/dev/sdb1              isize=512    agcount=4, agsize=655360 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=0, sparse=0
data(数据)     =       (块大小)bsize=4096   blocks=2621440, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
log(日志)      =internal log           bsize=4096   blocks=2560, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0

也可这样写

[root@localhost /]# mkfs.xfs /dev/sdb5
meta-data=/dev/sdb5              isize=512    agcount=4, agsize=458752 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=0, sparse=0
data     =                       bsize=4096   blocks=1835008, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
log      =internal log           bsize=4096   blocks=2560, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0

挂载和卸载文件系统

挂载

挂载规则:

  • 不能挂文件,只能挂文件夹
  • 通常挂载点是已存在的空的目录(挂载目录需提前设置好,不能挂载不存在的目录。 最好挂载空目录,不然挂载点下原有文件可能丢失。)
  • 一个挂载点同一时间可以挂载多个设备,但只能看到最后一个设备的数据,其它设备上的数据将被隐藏
  • 一个设备可以挂载多个挂载点,但设备还是那个设备,并没有增加或减少,唯独增加的只是挂载点。
  • 挂载点目录不可被其他进程使用到

手动挂载文件系统————mount

  1. mount命令不仅可以挂载外接设备,还可以显示当前系统中挂载情况。

  2. 外来的设备包括(移动硬盘 光驱 u盘 新加硬盘)如果想在Linux中使用,一定要挂载在Linux内部找一个空文件夹,系统和设备做上关联。

  3. 使用mount命令挂载是一次性的, 关机后挂载关系就会取消,下次开机启动时仍然需要重新挂载。

  4. 需要使用硬盘里的空间就必须把硬盘挂载到系统里的一个空间里。

  5. 如果挂载一次没有成功的话可以再次尝试挂载。

mount挂载命令格式:mount [ 选项 ] 存储设备 挂载点目录

挂载目标通常是一个空的文件夹,当挂载成功该文件夹只代表了挂载的磁盘,相当于两者之间做了个关联。

mount /dev/sdb1  /opt     //挂载sdb1到opt目录下
mount /dev/sdb5  /mnt     //挂载sdb5到mnt目录下
mount [-t 文件系统类型] 存储设备 挂载点目录  
mount -o loop ISO镜像文件 挂载点目录         //挂载ISO镜像到指定文件夹

演示:

[root@localhost /]# mount /dev/sdb1 /mnt           //将sdb1临时挂载到mnt挂载点
[root@localhost /]# cd /mnt
[root@localhost mnt]# df -h                       //查看挂载后的内容
文件系统                 容量  已用  可用 已用% 挂载点
/dev/mapper/centos-root   10G  5.0G  5.1G   50% /
devtmpfs                 897M     0  897M    0% /dev
tmpfs                    912M     0  912M    0% /dev/shm
tmpfs                    912M  9.1M  903M    1% /run
tmpfs                    912M     0  912M    0% /sys/fs/cgroup
/dev/sda1               1014M  179M  836M   18% /boot
tmpfs                    183M     0  183M    0% /run/user/0
tmpfs                    183M   12K  183M    1% /run/user/42
/dev/sdb1                 10G   33M   10G    1% /mnt

现在mnt作为sdb1的入口,现在代表了sdb1磁盘。

解挂载

命令格式 : umount 存储设备位置 挂载点目录

注意!!! 可能有几种问题会导致无法顺利解挂载:

解挂载时在挂载目录下会导致无法顺利解挂载。

[root@localhost /]# mount /dev/sdb1 /mnt        //将sdb1挂载到mnt目录下
[root@localhost /]# cd /mnt                     //切换工作目录到mnt目录下
[root@localhost mnt]# umount /dev/sdb1          //解挂载
umount: /mnt:目标忙。                           //无法完成解挂载
        (有些情况下通过 lsof(8) 或 fuser(1) 可以
         找到有关使用该设备的进程的有用信息)
这时候需要把工作目录切换出去就可以了

有人在使用挂载目录

[root@localhost /]# umount /dev/sdb1               //解挂载
umount: /mnt:目标忙。                              //报错,无法完成
        (有些情况下通过 lsof(8) 或 fuser(1) 可以
         找到有关使用该设备的进程的有用信息)
[root@localhost /]# fuser -v /mnt/                 //可以使用该命令来查看当前谁在用
                     用户     进程号 权限   命令
/mnt:                root     kernel mount /mnt
                     zhu        3453 ..c.. bash
[root@localhost /]# fuser -km /mnt/                //使用该命令剔除用户,慎用!!!
/mnt:                 3453c
[root@localhost /]# umount /dev/sdb1 
[root@localhost /]#mount -o rw,remount /dev/sdb1  /mnt     //更改挂载文件权限可以达到重新挂载的效果


  • fuser -v /mnt/ 可以看到谁在用
  • fuser -km /mnt/ 把用户都剔除、

设置文件系统的自动挂载(永久挂载)

使用mount挂载只是临时性的挂载 ,重启一下挂载就没有了,如果想要得到永久性的挂载需要借助/etc/fstab这个文件,将挂载信息写入/etc/fstab文件下可以起到永久挂载的目的,但是该文件使用时要谨慎小心,该文件为开机启动项。但凡有一点点小差错都会造成无法正常开机。所以挂载信息写入/etc/fstab后一定要用 mount -a 测试一下,刷新fstab里有的挂载项,不报错即可。

首先可以使用blkid来查看设备的唯一标识符,例如拿/dev/sdb1来举例,此处的UUID号将在后面永久挂载上起到明确目标的作用 image.png

image.png

在/etc/fstab 文件中,每一行记录对应一个分区或设备的挂载配置信息,从左到右包括六个字段(使用空格或者制表符分隔)。以 “UUID=f7da955e-b563-4ac8-8d5c-5516ab5141b1 /mnt xfs defaults 0 0” 为例,各部分含义如下所述:

  • 字段1:设备名或设备卷标名、或设备的UUID(建议使用UUID,可使用lsbik命令查看)。
  • 字段2:文件系统的挂载点目录的位置。
  • 字段3:文件系统类型,如 XFS、swap 等。
  • 字段4:挂载参数,即 mount 命令”-o“选项后可使用的参数。例如,default、rw、ro、noexec 分别表示为默认参数、可读可写、只读、禁用执行程序。
  • 字段5:表示文件系统是否需要 dump 备份(dump是一个备份工具)。一般设为1时表示需要,设为0时将被dump忽略。
  • 字段6:该数字决定在系统启动时进行磁盘检查的顺序。0表示不进行检查, 1表示优先检查,2表示其次检查。根分区可设为1,其他分区设置为2。一般不进行检查,会影响系统性能。

最后的最后编辑好/etc/fstab退出来后需要输入mount -a验证一下有没有出差错,如果不幸在开机时出现错误需要输入ctrl+D后再输入密码,进行对/etc/fstad的修复。

Linux硬盘使用全流程

在虚拟机中添加硬盘

image.png

重启系统,刷新磁盘分区

image.png

分区

image.png

image.png

格式化

image.png

挂载

image.png

永久挂载

blkid查看设备唯一标识符然后进入永久挂载。

image.png

image.png

image.png