Linux磁盘管理与文件系统

磁盘基础

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

磁盘的结构

硬盘的物理结构

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

硬盘的数据结构

扇区:盘面被分成多个扇形区域,每个扇区存放512个字节的数据,硬盘的第一个扇区,叫做引导扇区
磁道:同一盘片不同半径的同心圆(当磁盘旋转时,磁头若保持在一个位置上,则每个磁头都会在磁盘表面划出一个圆形轨迹,这些圆形轨迹就叫做磁道(Track))

柱面:不同盘片相同半径构成的圆柱面(在有多个盘片构成的盘组中,由不同盘片的面,但处于同一半径圆的多个磁道组成的一个圆柱面(Cylinder))
在这里插入图片描述

存储容量

硬盘存储容量=磁头数 x 磁道(柱面)数 x 每道扇区数 x 每扇区字节数
可以用柱面/磁头/扇区来确定唯一定位磁盘上每一个区域,用fdisk -l查看分区信息

[root@localhost ~]# fdisk -l

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

   设备 Boot      Start         End      Blocks   Id  System
/dev/sda1   *        2048     2099199     1048576   83  Linux
/dev/sda2         2099200     6295551     2098176   82  Linux swap / Solaris
/dev/sda3         6295552   629145599   311425024   83  Linux

磁盘 /dev/sdb:322.1 GB, 322122547200 字节,629145600 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节

硬盘的接口

  • IDE、SATA、SCSI、SAS、光纤通道
    硬盘按照数据接口不同,分为以下几种(接口速率不是实际硬盘数据传输的速度)
    ATA(IDE(并口)):并口数据线连接主板与硬盘,抗干扰性太差,且排线占用空间较大,不利于电脑内部散热,逐渐被SATA所取代
    SATA(串口):全称是Serial ATA,抗干扰性强,支持热插热拔等功能,速度快,纠错能力强。
    SCSI:全称是 Small Computer System Interface(小型机系统接口),SCSI硬盘广为工作站级个人电脑以及服务器所使用的,资料传输时CPU占用率较低,转速快,支持热插热拔等
    SAS(Serial Attached SCSI):是新一代的SCSI技术,和SATA硬盘相同,都是采取序列式技术以获得更高的传输速度,可达到6Gb/s

磁盘分区表示

MBR

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

磁盘分区的表示

常见的硬盘可以划分为主分区、扩展分区和逻辑分区,通常情况下主分区只有四个,而扩展分区可以看成时一个特殊的主分区类型,在扩展分区中可以建立逻辑分区。主分区一般用来安装操作系统,拓展分区多用来储存文件数据。
Linux中将硬盘、分区等设备均表示为文件

  • 硬盘:对于IDE接口的硬盘设备,表示为“hdX”形式的文件名。而对于SCSI接口的硬盘设备,则表示为“sdX”形式的文件名。其中"X"可以为a,b,c,d等字母序号。例如:将系统中的第一个IDE设备(硬盘)表示为“hda”,将第二个SCSI设备表示为“sdb”
  • 分区:表示分区时,以硬盘设备的文件名作为基础,然后在后面添加该分区(主分区,扩展分区,逻辑分区)对应的数字序号即可。例如:第一个IDE硬盘中的第一个分区表示为"hda1",第二个分区表示为"hda2"。第二个SCSI硬盘中的第三个分区表示为"sdb3",第五个分区表示为"sdb5"
    在这里插入图片描述

磁盘分区结构

  • 硬盘中的主分区数目只有4个
  • 因此主分区和扩展分区的序号也就限制在1-4
  • 扩展分区再分为逻辑分区
  • 逻辑分区的序号将始终从5开始
    在这里插入图片描述

文件系统类型

文件系统(File System)类型决定了向分区中存放,读取文件数据的方式和效率,在对分区进行格式化的时候需要选择所用的文件系统类型,在Windows操作系统中,经常使用的文件系统类型包括FAT32 , NTFS等格式,而在Linux系统中,最常使用的文件系统主要包括以下几种格式

  • EXT4文件系统:第四代拓展文件系统
    1.存放文件和目录数据的分区
    2.高性能的日志型文件系统
    3.Linux系统中默认使用的文件系统

  • 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逻辑卷

检测并确认新的硬盘

挂载号新的硬盘设备并启动主机后,Linux系统会自动检测并加载该硬盘,无须额外安装驱动。

fdisk命令 列出当前系统中所有硬盘设备及其分区的信息

  • 查看或管理磁盘分区
    fdisk -l [磁盘设备]
    fdisk [磁盘设备]

  • 交互模式中的常用指令
    m、p、n、d、t、w、q
    常用指令
    a toggle a bootable flag
    b edit bsd disklabel
    c toggle the dos compatibility flag
    d delete a partition ###常用 删除分区
    l list known partition types ###常用 查看分区对应的系统ID号
    m print this menu ###常用 列出手册
    n add a new partition ###常用 添加分区/创建新分区
    o create a new empty DOS partition table
    p print the partition table ###常用 列出硬盘中的分区情况,信息显示的格式与执行"fdisk -l"命令相同
    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)

      [root@localhost ~]# fdisk -l
    
      磁盘 /dev/sda:322.1 GB, 322122547200 字节,629145600 个扇区
      Units = 扇区 of 1 * 512 = 512 bytes
      扇区大小(逻辑/物理):512 字节 / 512 字节
      I/O 大小(最小/最佳):512 字节 / 512 字节
      磁盘标签类型:dos
      磁盘标识符:0x000d477d
      	
         设备 Boot      Start         End      Blocks   Id  System
      /dev/sda1   *        2048     2099199     1048576   83  Linux
      /dev/sda2         2099200     6295551     2098176   82  Linux swap / Solaris
      /dev/sda3         6295552   629145599   311425024   83  Linux
      
      磁盘 /dev/sdb:322.1 GB, 322122547200 字节,629145600 个扇区
      Units = 扇区 of 1 * 512 = 512 bytes
      扇区大小(逻辑/物理):512 字节 / 512 字节
      I/O 大小(最小/最佳):512 字节 / 512 字节
    

例如

[root@localhost ~]# fdisk /dev/sdb     //进入fidsk分区工具的交互操作界面
欢迎使用 fdisk (util-linux 2.23.2)。

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

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

命令(输入 m 获取帮助):

命令(输入 m 获取帮助):p

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

   设备 Boot      Start         End      Blocks   Id  System

1)创建两个主分区。
首先建立第一个主分区(/dev/sdb1),容量指定为20G

命令(输入 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-629145599,默认为 629145599):+20G
分区 1 已设置为 Linux 类型,大小设为 20 GiB

按照类似的操作步骤继续创建第2个主分区(/dev/sdb2),容量也指定为20GB,完成后可以输入“p”指令查看分区情况

命令(输入 m 获取帮助):n
Partition type:
   p   primary (1 primary, 0 extended, 3 free)
   e   extended
Select (default p): p
分区号 (2-4,默认 2):2
起始 扇区 (41945088-629145599,默认为 41945088):
将使用默认值 41945088
Last 扇区, +扇区 or +size{K,M,G} (41945088-629145599,默认为 629145599):+20G
分区 2 已设置为 Linux 类型,大小设为 20 GiB

命令(输入 m 获取帮助):p

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

   设备 Boot      Start         End      Blocks   Id  System
/dev/sdb1            2048    41945087    20971520   83  Linux
/dev/sdb2        41945088    83888127    20971520   83  Linux

2)创建一个拓展分区和两个逻辑分区
接下来可以使用剩余的硬盘空间创建扩展分区,然后在扩展分区中创建逻辑分区。需要注意的是,若主分区、逻辑分区均已创建完毕(四个主分区号已用完),这再次输入“n”指令后将不再提示选择分区类别。
首先建立扩展分区(/dev/sdb4),使用剩下的所有空间(全部空间分配完毕后,将无法再建立新的主分区)。

命令(输入 m 获取帮助):n
Partition type:
   p   primary (2 primary, 0 extended, 2 free)
   e   extended
Select (default p): e //选择建立的为扩展分区
分区号 (3,4,默认 3):4 //选择4作为扩展分区的编号
起始 扇区 (83888128-629145599,默认为 83888128):
将使用默认值 83888128
Last 扇区, +扇区 or +size{K,M,G} (83888128-629145599,默认为 629145599):
将使用默认值 629145599
分区 4 已设置为 Extended 类型,大小设为 260 GiB

接下来在扩展分区建立第1个逻辑分区(/dev/sdb5),容量指定为2GB

命令(输入 m 获取帮助):n
Partition type:
   p   primary (2 primary, 1 extended, 1 free)
   l   logical (numbered from 5)
Select (default p): l //选择创建的分区为逻辑分区
添加逻辑分区 5
起始 扇区 (83890176-629145599,默认为 83890176):
将使用默认值 83890176
Last 扇区, +扇区 or +size{K,M,G} (83890176-629145599,默认为 629145599):+2G
分区 5 已设置为 Linux 类型,大小设为 2 GiB

按照类似的操作步骤继续创建第2个逻辑分区(/dev/sdb6),容量指定为10GB,完成后可以再次输入“p”指令查看分区情况

命令(输入 m 获取帮助):n
Partition type:
   p   primary (2 primary, 1 extended, 1 free)
   l   logical (numbered from 5)
Select (default p): l
添加逻辑分区 6
起始 扇区 (88086528-629145599,默认为 88086528):
将使用默认值 88086528
Last 扇区, +扇区 or +size{K,M,G} (88086528-629145599,默认为 629145599):+10G
分区 6 已设置为 Linux 类型,大小设为 10 GiB

命令(输入 m 获取帮助):p

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

   设备 Boot      Start         End      Blocks   Id  System
/dev/sdb1            2048    41945087    20971520   83  Linux
/dev/sdb2        41945088    83888127    20971520   83  Linux
/dev/sdb4        83888128   629145599   272628736    5  Extended
/dev/sdb5        83890176    88084479     2097152   83  Linux
/dev/sdb6        88086528   109058047    10485760   83  Linux

命令(输入 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				//保存退出

管理文件系统

在Linux系统中,使用fdisk工具在硬盘中建立分区之后,还需要对分区进行格式化并挂载到系统中的指定目录,然后才能用于存储文件、目录等数据。

穿件文件系统

穿件文件系统的过程也即格式化分区的过程,在Linux系统中使用mkfs(Make filesystem,创建文件系统)命令工具可以格式化FXS、EXT4、FAT等不同类型的分区,为使用mkswap命令可以格式化Swap交换分区

mkfs命令的使用

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

[root@localhost ~]# 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 -t 文件系统类型 分区设备
(1)创建EXT4文件系统
需要创建EXT4文件系统时,结合“-t ext4”选项指定类型,并指定要被格式化的分区设备即可。
把分区/dev/sdb1格式化为EXT4文件系统

[root@localhost ~]# mkfs -t ext4 /dev/sdb1
mke2fs 1.42.9 (28-Dec-2013)
文件系统标签=
OS type: Linux
块大小=4096 (log=2)
分块大小=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
1310720 inodes, 5242880 blocks
262144 blocks (5.00%) reserved for the super user
第一个数据块=0
Maximum filesystem blocks=2153775104
160 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks: 
        32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208, 
        4096000

Allocating group tables: 完成                            
正在写入inode表: 完成                            
Creating journal (32768 blocks): 完成
Writing superblocks and filesystem accounting information: 完成   

2)创建FAT32文件系统
一般来说,不建议在Linux系统中创建或使用Windows中的文件系统类型,包括FAT16、FAT32等,一些特殊情况,如Windows系统不可用、U盘系统被破坏除外。
若要在Linux系统中创建FAT32文件系统,可结合“-t vfat”选项指定类型,并添加“-F 32”选项指定FAT的版本。
centos7系统默认使用xfs文件系统

mkswap命令的使用

在Linux系统中,Swap分区的作用类似于Windows系统中的“虚拟内存”,可以在一定程度上缓解物理内存不足的情况。当当前Linux主机运行的服务较多,需要更多的交换空间支撑应用时,可以为其增加新的交换分区。
使用mkswap命令工具可以在指定的分区上创建交换文件系统,目标分区应先通过fdisk工具将ID号设为82。
将分区/dev/sdb5创建为交换分区

[root@localhost ~]# fdisk -l /dev/sdb5

磁盘 /dev/sdb5:2147 MB, 2147483648 字节,4194304 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
[root@localhost ~]# mkswap /dev/sdb5
正在设置交换空间版本 1,大小 = 2097148 KiB
无标签,UUID=35174256-b250-41c0-8257-d4c40bf7a647

对于新增加的交换分区,需要使用swapon命令进行启用,反之使用swapoff命令可以停用指定的交换分区。

[root@localhost ~]# cat /proc/meminfo|grep "SwapTotal:"  //查看总交换空间的大小
SwapTotal:       2098172 kB  
[root@localhost ~]# swapon /dev/sdb5  //启用交换分区 /dev/sdb5
[root@localhost ~]# cat /proc/meminfo|grep "SwapTotal:"  //确认交换分区大小已增加
SwapTotal:       4195320 kB
[root@localhost ~]# swapoff /dev/sdb5  //停用交换分区 /dev/sdb5

挂载、卸载文件系统

在Linux系统中,对各种储存设备中的资源访问(如读取、保存文件等)都是通过怒路结构进行的,虽然系统核心能够通过“设备文件”的方式操纵各种设备,但是对于用户来说,还需要增加一个“挂载”的过程,才能像正常访问目录一样访问储存设备中的资源。
当然,在安装Linux操作系统的过程中,自动建立或识别的分区通常会由系统自动完成挂载,如“/”分区、“/boot”分区等。然而对于后来新增加的硬盘分区、光盘等设备,有时候还需要管理员手动进行挂载,实际上用户访问的是经过格式化后建立的文件系统。挂载一个分区时,必须为其指定一个目录作为挂靠点(或称为挂载点),用户通过这个目录访问设备中的文件、目录数据。

挂载文件系统

mount 命令的基本使用格式
mount [-t 文件系统类型] 存储设备挂载点
其中文件系统类型可以省略(有系统自动识别),存储设备即对应分区的设备文件名(如/dev/sdb1、/dev/cdrom)或网络资源路径,挂载点即用户指定用于挂载的目录。
将光盘设备挂载到 /opt目录。

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

[root@localhost ~]# mount /dev/cdrom /opt
mount: /dev/sr0 写保护,将以只读方式挂载

不使用任何参数或选项的mount命令时,将显示出当前系统中已挂载的各个分区(文件系统)相关信息,最近挂载的文件系统显示在最后边。

[root@localhost ~]# mount
sysfs on /sys type sysfs (rw,nosuid,nodev,noexec,relatime,seclabel)
proc on /proc type proc (rw,nosuid,nodev,noexec,relatime)
devtmpfs on /dev type devtmpfs (rw,nosuid,seclabel,size=915784k,nr_inodes=228946,mode=755)
securityfs on /sys/kernel/security type securityfs (rw,nosuid,nodev,noexec,relatime)
tmpfs on /dev/shm type tmpfs (rw,nosuid,nodev,seclabel)
...... // 省略部分内容

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

卸载文件系统

需要卸载文件系统时,使用的命令为umount,使用挂载点目录或对用设备的文件名作为卸载参数。Linux系统中,由于同一个设备可以被挂载到多个目录下,所以一般建议通过挂载点的目录位置来进行卸载。

使用命令的基本格式
umount 存储设备位置
umount 挂载点目录

[root@localhost ~]# umount /dev/cdrom //通过设备文件卸载光盘

设置文件系统的自动挂载

系统中的/etc/fstab 文件可以视为 mount 命令的配置文件,其中存储了文件系统的静态挂载数据。Linux 操作系统在每次开机时,会自动读取这个文件的内容,自动挂载所指定的文件系统。默认的 fstab 文件中包括了根分区、/boot 分区、交换分区挂载配置。

[root@localhost ~]# cat /etc/fstab
……//省略部分信息


/dev/mapper/cl-root	/	xfs	defaults	0 0
UUID=a36c9228-cded-4f3a-96b5-0c03ce2feb61 /boot xfs	defaults	0 0

在/etc/fstab 文件中,每一行记录对应一个分区或设备的挂载配置信息,这些信息从左到右包括六个字段(使用空格或制表符分隔)
第 1 字段:设备名或设备卷标名。
第 2 字段:文件系统的挂载点目录的位置。
第 3 字段:文件系统类型,如 XFS、Swap 等。
第 4 字段:挂载参数,即mount 命令“-o”选项后可使用的参数。例如,defaults、rw、ro、noexec 分别表示默认参数、可写、只读、禁用执行程序。
第 5 字段:表示文件系统是否需要 dump 备份(dump 是一个备份工具)。一般设为 1 时表示需要,设为 0 时将被 dump 忽略。
第 6 字段:该数字决定在系统启动时进行磁盘检查的顺序。0 表示不进行检查,1 表示优先检查,2 表示其次检查。根分区应设为 1,其他分区设为 2。
通过在/etc/fstab 文件中添加相应的挂载配置,可以实现开机后自动挂载指定的分区。

使用 mount、umount 进行挂载、卸载操作时,若在/etc/fstab 文件中已设置有对应的挂载记录,则只需指定挂载点目录或设备文件名中的一个作为参数。例如,直接执行“mount
/dev/sdb1”或“mount /mailbox”命令,都可以将分区/dev/sdb1 挂载到/mailbox 目录下。

查看磁盘使用情况

df 命令使用文件或者设备作为命令参数,较常用的选项为“-h”和“-T”。其中,“-h”选项可以显示更易读的容量单位,而“-T”选项用于显示对应文件系统的类型。

[root@localhost ~]# df -hT
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章