Linux--磁盘管理与文件系统(磁盘基础+新硬盘的管理+创建、挂载、卸载文件系统)

前言

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

一、磁盘基础

硬盘(Hard Disk Driver,简称HDD)是计算机常用的存储设备之一。

1.1磁盘结构

在这里插入图片描述

1.1.1硬盘的物理结构

  • 盘片:硬盘有多个盘片,每个盘片2面
  • 磁头:每面一个磁头

1.1.2硬盘的数据结构

  • 扇区:盘面被分成多个扇形区域,每个扇区存放512个字节的数据
  • 硬盘的第一个扇区,叫做引导扇区
  • 磁道:同一盘片不同半径的同心圆(当磁盘旋转时,磁头若保持在一个位置上,则每个磁头都会在磁盘表面划出一个圆形轨迹,这些圆形轨迹就叫做磁道(Track))
  • 柱面:不同盘片相同半径构成的圆柱面(在有多个盘片构成的盘组中,由不同盘片的面,但处于同一半径圆的多个磁道组成的一个圆柱面(Cylinder))
  • 固态硬盘:电子芯片存储,速度快,但是数据丢失无法恢复
  • ​ 机械硬盘:磁道存储,速度一般,数据丢失有几率恢复

1.1.3存储容量

  • 硬盘存储容量=磁头数 x 磁道(柱面)数 x 每道扇区数 x 每扇区字节数
  • 可以用柱面/磁头/扇区来确定唯一定位磁盘上每一个区域
  • 用fdisk -l查看分区信息
[root@localhost ~]# fdisk -l
    下面是详细信息
磁盘 /dev/sda:42.9 GB, 42949672960 字节,83886080 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x000a58c6

   设备 Boot      Start         End      Blocks   Id  System            
/dev/sda1   *        2048    12584959     6291456   83  Linux         ' //这是引导分区'
/dev/sda2        12584960    54527999    20971520   83  Linux
/dev/sda3        54528000    62916607     4194304   82  Linux swap / Solaris
/dev/sda4        62916608    83886079    10484736    5  Extended
/dev/sda5        62918656    83886079    10483712   83  Linux

1.1.4硬盘的接口

硬盘按照数据接口不同,分为以下几种(接口速率不是实际硬盘数据传输的速度)

ATA(IDE(并口)):现在已经很少见到,逐渐被SATA所取代
SATA(串口):全称是Serial ATA,抗干扰性强,支持热插热拔等功能,速度快,纠错能力强。
SCSI:全称是 Small Computer System Interface(小型机系统接口),SCSI硬盘广为工作站级个人电脑以及服务器所使用的,资料传输时CPU占用率较低,转速快,支持热插热拔等
SAS(Serial Attached SCSI):是新一代的SCSI技术,和SATA硬盘相同,都是采取序列式技术以获得更高的传输速度,可达到6Gb/s

1.2MBR与磁盘分区表示

1.2.1MBR

MBR是主引导记录(Master Boot Record),位于硬盘第一个物理扇区处(引导扇区)
MBR中包含硬盘的主引导程序和硬盘分区表。分区表有4个分区记录区,每个分区记录区占16个字节
MBR最多四个分区,可创建逻辑分区

1.2.2磁盘分区的表示

  • 常见的硬盘可以划分为主分区,扩展分区和逻辑分区,通常情况下主分区只有四个,而扩展分区可以看成是一个特殊的主分区类型,在扩展分区中可以建立逻辑分区
  • 主分区一般用来安装操作系统,扩展分区则多用来存储文件数据(不能直接存储数据,存储在逻辑分区上)
    在这里插入图片描述
  • Linux中将硬盘,分区等设备均表示为文件
  • 硬盘:对于IDE接口的硬盘设备,表示为“hdX”形式的文件名。而对于SCSI接口的硬盘设备,则表示为“sdX”形式的文件名。其中"X"可以为a,b,c,d等字母序号。例如:将系统中的第一个IDE设备(硬盘)表示为“hda”,将第二个SCSI设备表示为“sdb”
  • 分区:表示分区时,以硬盘设备的文件名作为基础,然后在后面添加该分区(主分区,扩展分区,逻辑分区)对应的数字序号即可。例如:第一个IDE硬盘中的第一个分区表示为"hda1",第二个分区表示为"hda2"。第二个SCSI硬盘中的第三个分区表示为"sdb3",第五个分区表示为"sdb5"
  • 硬盘中的主分区数目只有4个
  • 因此主分区和扩展分区的序号也就限制在1-4
  • 扩展分区再分为逻辑分区
  • 逻辑分区的序号将始终从5开始

1.2.3Linux系统中使用的文件系统类型

文件系统(File System)类型决定了向分区中存放,读取文件数据的方式和效率,在对分区进行格式化的时候需要选择所用的文件系统类型

在Windows操作系统中,经常使用的文件系统类型包括FAT32 , NTFS等格式

Linux系统中,主要使用以下几种格式

  • EXT4文件系统:
    1.存放文件和目录数据的分区

2.高性能的日志型文件系统

3.CentOS 6系统中默认使用的文件系统

  • SWAP,交换文件系统
    1.为Linux系统建立的交换分区

2.交换分区相当于虚拟内存,能够在一定程度上缓解物理内存不足的问题

3.一般建议将交换分区的大小设置为物理内存的1.5-2倍。

  • Linux支持的其它文件系统类型
    1.FAT16 , FAT32 , NTFS

2.EXT4 M JFS …

  • XFS
    1.开启了日志功能,即使发生宕机也不怕数据遭到破坏,可以根据日志记录在短时间内进行数据恢复。

2.高性能的日志文件系统,特别擅长处理大文件,可支持上百万T字节的存储空间

3.CentOS 7系统默认使用XFS文件系统

二、新硬盘的管理

在Linux服务器中,当现有硬盘的分区规划不能满足要求(例如,根分区的剩余空间过少,无法继续安装新的系统程序)时,就需要对硬盘中的分区进行重新规划和调整,有时候还需要添加新的硬盘设备来扩展存储空间

实现上述操作需要用到fdisk磁盘及分区管理工具,fdisk是大多数Linux系统中自带的基本工具之一。

分区对应的系统ID号中,83表示Linux中的EXT4分区,8e 表示LVM逻辑卷

2.1fdisk 命令–查看或管理磁盘分区

在硬盘设备中创建,删除,更改分区等操作同样通过fdisk命令进行,主要使用硬盘的设备文件作为参数

fdisk -l [磁盘设备]

fdisk [磁盘设备]
查看时,带有“*”标识的是引导分区

fdisk /dev/sdb 进入交互式的分区管理界面
常用指令
p 列出硬盘中的分区情况,信息显示的格式与执行"fdisk -l"命令相同
n 创建新分区
d 删除分区
t 变更分区类型,转换格式
w 保持配置
q 退出
l 查看分区对应的系统ID号

命令举例
[root@localhost ~]# fdisk /dev/sda1
欢迎使用 fdisk (util-linux 2.23.2)。

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

Device does not contain a recognized partition table
使用磁盘标识符 0x3556a5c2 创建新的 DOS 磁盘标签。

命令(输入 m 获取帮助):m
命令操作
   a   toggle a bootable flag
   b   edit bsd disklabel
   c   toggle the dos compatibility flag
   d   delete a partition                           常用 删除分区★
   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)


这么多指令,我们就可以输入指令实现自己的要求

使用“n”命令可以进行创建分区的操作,包括主分区和扩展分区

例如:创建分区/dev/sdb1
[root@hostname ~]# fdisk /dev/sdb		#先用fdisk命令工具进入交互式的分区管理界面
欢迎使用 fdisk (util-linux 2.23.2)。

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

Device does not contain a recognized partition table
使用磁盘标识符 0x227f39cd 创建新的 DOS 磁盘标签。

命令(输入 m 获取帮助):n					#开始创建分区
Partition type:
   p   primary (0 primary, 0 extended, 4 free)
   e   extended
Select (default p): 					#直接回车,接受默认p:创建主分区
Using default response p
分区号 (1-4,默认 1):						#直接回车,接受默认值1,主分区的编号为1
起始 扇区 (2048-41943039,默认为 2048):		#直接回车,接受默认扇区大小2048
将使用默认值 2048
Last 扇区, +扇区 or +size [K,M,G] (2048-41943039,默认为 41943039):		#直接回车,将所有空间分配给创建的分区
将使用默认值 41943039
分区 1 已设置为 Linux 类型,大小设为 20 GiB
命令(输入 m 获取帮助):t						#设置分区对应的ID号:82代表设置为交换文件系统
已选择分区 1
Hex 代码(输入 L 列出所有代码):82
已将分区“Linux”的类型更改为“Linux swap / Solaris”

命令(输入 m 获取帮助):p						#查看分区情况

磁盘 /dev/sdb:21.5 GB, 21474836480 字节,41943040 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x227f39cd

   设备 Boot      Start         End      Blocks   Id  System
/dev/sdb1            2048    41943039    20970496   82  Linux swap / Solaris
命令(输入 m 获取帮助):wq				//保存退出

2.2parted命令-磁盘分区工具

parted命令是由GNU组织开发的一款功能强大的磁盘分区和分区大小调整工具,与fdisk不同,它支持调整分区的大小。作为一种设计用于Linux的工具,它没有构建成处理与fdisk关联的多种分区类型,但是,它可以处理最常见的分区格式,包括:ext2、ext3、fat16、fat32、NTFS、ReiserFS、JFS、XFS、UFS、HFS以及Linux交换分区。

parted命令为大于2T硬盘分区,一般来说我们对磁盘分区都是用fdisk命令,但是对于硬盘容量大于2T时,这个命令就不管用了,因为MBR分区表只支持2T磁盘;所以大于2T的磁盘必须使用GPT分区表,这时我们就需要用到parted命令。
用法:parted [选项] [设备] [指令]
将带有“参数”的命令应用于“设备”。如果没有给出“命令”,则以交互模式运行。

选项:
-h,   显示此求助信息
-l,   列出系统系统中所有的磁盘设备,和fdisk -l命令的作用差不多。
-m,   进入交互模式,如果后面不加设备则对第一个磁盘进行操作
-s,   脚本模式
-v,    显示版本

设备:磁盘设备名称,如/dev/sda

指令:如果没有给出“指令”,则parted将进入交互模式运行。

align-check       检查分区N的类型(min|opt)是否对齐
help          打印通用求助信息,或关于[指令]的帮助信息
mklabel        创建新的磁盘标签 (分区表)
mkpart        创建一个分区
name         给指定的分区命名
print        打印分区表,或者分区
quit         退出程序
rescue        修复丢失的分区
resizepart      调整分区大小
rm          删除分区
select        选择要编辑的设备,默认只对指定的设备操作,这里可以改变指定的设备
disk_set       更改选定设备上的标志
disk_toggle     切换选定设备上的标志状态
set          更改分区的标记
toggle        设置或取消分区的标记
unit         设置默认的单位
version        显示版本信息

添加一块4T的硬盘为/dev/sdb
[root@localhost ~]# parted /dev/sdb                  #使用parted命令对sdb进行分区
GNU Parted 3.1
使用 /dev/sdb
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) mklabel gpt                                 #创建新的磁盘标签 (分区表)为gpt
(parted) print                                       #打印分区表,或者分区
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sdb: 4398GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags: 

Number  Start  End  Size  File system  Name  标志
 (parted) mkpart primary 0 1TB                       #创建主分区大小为0-1TB
警告: The resulting partition is not properly aligned for best
performance.
  忽略/Ignore/放弃/Cancel? ignore                      #忽略                        
 (parted) print                                       #查看分区表 
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sdb: 4398GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags: 

Number  Start   End     Size    File system  Name     标志
 1      17.4kB  1000GB  1000GB               primary            #分区1已经创建完成

 (parted) mkpart primary 1TB 3TB                       #继续创建第2个主分区,大小为1TB-3TB
 (parted) print                                       
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sdb: 4398GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags: 

Number  Start   End     Size    File system  Name     标志
 1      17.4kB  1000GB  1000GB               primary
 2      1000GB  3000GB  2000GB               primary

三、创建文件系统

创建文件系统的过程也是格式化分区的过程,在Linux系统中使用mkfs(Make Filesystem,创建文件系统)命令格式可以格式化XFS , EXT4 ,FAT等不同类型的分区,而使用mkswap命令可以格式化Swap交换分区

3.1mkfs命令

实际上 mkfs命令是一个前端工具,可以自动加载不同的程序来创建各种类型的分区,而后端包括有多个与mkfs命令相关的工具程序,这些程序位于/sbin/目录中,例如:支持XFS分区格式的mkfs.xfs程序等

[root@hostname ~]# ls /sbin/mkfs*
/sbin/mkfs         /sbin/mkfs.ext2  /sbin/mkfs.fat    /sbin/mkfs.vfat
/sbin/mkfs.btrfs   /sbin/mkfs.ext3  /sbin/mkfs.minix  /sbin/mkfs.xfs
/sbin/mkfs.cramfs  /sbin/mkfs.ext4  /sbin/mkfs.msdos

mkfs命令:Make Filesystem,创建文件系统(格式化)

mkfs命令使用格式
mkfs -t 文件系统类型 分区设备
CentOS7默认xfs文件系统类型,所以我们现在常用这条命令
-[root@localhost ~]# mkfs.xfs /dev/卷组名/逻辑卷名

创建EXT4文件系统

创建EXT4文件系统时,结合"-t ext4"选项指定类型,并指定要被格式化的分区设备即可
例如:将分区 /dev/sdb2 格式化为EXT4文件系统
[root@hostname ~]# mkfs -t ext4 /dev/sda2

创建FAT32文件系统

一般来说,不建议在Linux系统中创建或使用Windows中的文件系统类型,包括FAT16 , FAT32等,一些特殊情况,如Windows系统不可用,U盘系统被饼图破坏等除外。

若要在Linux系统中创建FAT32文件系统,可结合’-t vfat’选项指定类型,并添加’-F 32’选项指定FAT的版本
例如,将分区 /dev/sdb6 格式化为FAT32文件系统(先通过fdisk工具添加/dev/sdb6分区,并且将ID号设为6)
[root@hostname ~]# mkfs -t vfat -F 32 /dev/sdb6
或者
[root@hostname ~]# mkfs.vfat -F 32 /dev/sdb6
两个命令是一个意思	

3.2mkswap命令

在Linux系统中,Swap分区的作用类似于Windows系统中的“虚拟内存”,可以在一定程度上缓解物理内存不足的情况。在当前Linux主机运行的服务较多,需要更多的交换空间支撑应用时,可以为其增加新的交换分区

使用mkswap命令工具可以在指定的分区上创建交换文件系统,目标分区应先通过fdisk工具将ID号设为82
make swap:创建交换文件系统

命令使用的格式
mkswap 分区设备
cat /proc/meminfo | grep "SwapTotal"    ' //查看总交换空间大小'
swapon /dev/sdb1						'//开启交换分区/dev/sdb1'
swapoff /dev/sdb1					'	//关闭交换分区/dev/sdb1'
例如:将分区/dev/sdb1创建为交换分区(先用fdisk命令工具将ID号设为82)
[root@hostname ~]# fdisk /dev/sdb		'//先用fdisk命令工具进入交互式的分区管理界面'
欢迎使用 fdisk (util-linux 2.23.2)。

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

Device does not contain a recognized partition table
使用磁盘标识符 0x227f39cd 创建新的 DOS 磁盘标签。

命令(输入 m 获取帮助):n					'//开始创建分区'
Partition type:
   p   primary (0 primary, 0 extended, 4 free)
   e   extended
Select (default p): 					'//直接回车,接受默认p:创建主分区'
Using default response p
分区号 (1-4,默认 1):						'//直接回车,接受默认值1,主分区的编号为1'
起始 扇区 (2048-41943039,默认为 2048):		'//直接回车,接受默认扇区大小2048'
将使用默认值 2048
Last 扇区, +扇区 or +size[K,M,G] (2048-41943039,默认为 41943039):		'//直接回车,将所有空间分配给创建的分区'
将使用默认值 41943039
分区 1 已设置为 Linux 类型,大小设为 20 GiB
命令(输入 m 获取帮助):t						'//设置分区对应的ID号:82代表设置为交换文件系统'
已选择分区 1
Hex 代码(输入 L 列出所有代码):82
已将分区“Linux”的类型更改为“Linux swap / Solaris”

命令(输入 m 获取帮助):p						'//查看分区情况'

磁盘 /dev/sdb:21.5 GB, 21474836480 字节,41943040 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x227f39cd

   设备 Boot      Start         End      Blocks   Id  System
/dev/sdb1            2048    41943039    20970496   82  Linux swap / Solaris
命令(输入 m 获取帮助):w			'//保存退出'
[root@hostname ~]# mkswap /dev/sdb1				'//将分区/dev/sdb1创建为交换分区'
正在设置交换空间版本 1,大小 = 20970492 KiB
无标签,UUID=5736a379-3e6c-4e12-9a5c-78cb6a586cf7
[root@hostname ~]# cat /proc/meminfo | grep "SwapTotal"		'//查看总交换空间的大小'
SwapTotal:       4194300 kB									'//原本是4G多'
[root@hostname ~]# swapon /dev/sdb1							'//开启交换分区/dev/sdb1'
[root@hostname ~]# cat /proc/meminfo | grep "SwapTotal"		'//再次查看总交换空间的大小'
SwapTotal:      25164792 kB									'//现在变成了25G'
[root@hostname ~]# swapoff /dev/sdb1						'//关闭交换分区 /dev/sdb1'
[root@hostname ~]# cat /proc/meminfo | grep "SwapTotal"		'//再次查看总交换空间大小'
SwapTotal:       4194300 kB									'//交换空间变成了原来的4G多'

四、挂载,卸载文件系统

在Linux系统中,对各种存储设备中的资源访问(如读取,保存文件等)都是通过目录结构进行的,虽然系统核心能够通过“设备文件”的方式操纵各种设备,但是对于用户来说,还需要增加一个“挂载”的过程,才能像正常访问目录一样访问存储设备中的资源。

当然,在安装Linux操作系统的过程中,自动建立或识别的分区通常会由系统自动完成挂载,如“/”分区,“boot”分区等。然而对于后来新增加的硬盘分区,光盘等设备,有时候还需要管理员手动进行挂载,实际上用户访问的是经过格式化后建立的文件系统。挂载一个分区时,必须为其制定一个目录作为挂靠点(或称为挂载点),用户通过这个目录访问设备中 的文件,目录数据

4.1mount命令–挂载文件系统

挂载文件系统个,ISO镜像到指定文件夹

mount命令基本格式
mount          显示当前系统中已挂载的各个分区(文件系统)的相关信息,最近挂载的文件信息将显示在最后面
mount [-t 文件系统类型] 存储设备 挂载点目录
mount -o loop ISO镜像文件 挂载点目录
mount -a  将现在所有能挂载的都挂载

文件系统类型通常可以省略,系统会自动识别

存储设备即对应分区的设备文件名(如/dev/sdb1 , /dev/cdrom)或网络资源路径

挂载点即用户指定用于挂载的目录

光盘对应的设备文件通常使用’/dev/cdrom’,其实这是一个连接文件,连接到实际的光盘设备’/dev/sr0’。这两个名称都表示光盘设备。由于光盘是只读的存储介质,因此在挂载时系统会出现’mounting read-only’的提示信息

例如,将光盘设备挂载到/media/cdrom目录 
[root@hostname ~]#mount /dev/cdrom /media/cdrom

挂载Linux分区或U盘设备时的用法也一样,只需要指定正确的设备位置和挂载目录即可

例如:将/dev/sdb1分区挂载到新建的/ccc目录下
[root@hostname ~]#mkdir /ccc
[root@hostname ~]#mount /dev/sdb1 /ccc

在Linux系统中,U盘设备被模拟成SCSI设备,因此与挂载普通的SCSI硬盘中的分区并没有明显的区别。U盘一般使用FAT16或FAT32的文件系统,若不确定U盘设备文件的位置,可以先执行‘fdisk -l’命令进行查看,确认

例如:将位于/dev/sdc1的U盘设备挂载到新建的/ccc/usbdisk目录下
[root@hostname ~]#mkdir /ccc/usbdisk
[root@hostname ~]#mount /dev/sdc1 /ccc/usbdisk

proc,sysfs,tmpfs等文件系统是Linux运行所需要的的临时文件系统,并没有实际的硬盘分区与其相对应,因此也成为了’伪文件系统’。

例如:proc文件系统实际上映射了内存及CPU寄存器中的部分数据

在实际工作中,可能会经常从互联网中下载一些软件或应用系统的ISO镜像文件,在无法刻录光盘的情况下,需要将其解压后才能浏览,使用其中的文件数据。若使用mount挂载命令,则无需解开文件包即可浏览,使用ISO镜像文件中的数据。

ISO镜像文件通常被视为一种特殊的“回环”文件系统,因此在挂载时需要添加“-o loop”选项

例如:将下载的CentOS系统的DVD光盘镜像文件“CentOS-7-x86_64-DVD-1611.iso”挂载到/media/mnt目录下。
[root@hostname ~]#mount -o loop CentOS-7-x86_64-DVD-1611.iso /media/mnt

4.2umount命令–卸载文件系统

卸载文件系统时,使用挂在单目录或对应设备的文件名作为卸载参数

Linux系统中,由于同一个设备可以被挂载到多个目录下,所以一般建议通过挂载点的目录位置来进行卸载
umount命令–卸载已挂载的文件系统

使用命令的基本格式
umount 存储设备位置
umount 挂载点目录
例如:通过umount命令卸载之前挂载的Linux分区,光盘设备
[root@hostname ~]#umount /ccc				'//通过挂载点目录卸载对应的分区'
[root@hostname ~]#umount /dev/cdrom			'//通过设备文件卸载光盘'

4.3设置文件系统的自动挂载

系统中的/etc/fstab文件可以视为mount命令的配置文件,其中存储了文件系统的静态挂载数据,Linux系统在每次开机时,会自动读取这个文件的内容,自动挂载所指定的文件系统。

默认的fstab文件中包括了根分区,/boot分区,交换分区及proc,tmpfs等伪文件系统的挂载配置

例如:设置swap分区sdc1永久挂载
vi /etc/fstab
在配置文件最后一行加入
/dev/sdc1 swap swap defaults 0 0
保存后退出重新启动系统

猜你喜欢

转载自blog.csdn.net/weixin_47153988/article/details/106807144