Linux系统常规分区和LVM分区

作者: 郭子渝 分类: 红帽认证 发布时间: 2020-03-06 02:25 本文共5390个字,阅读需要14分钟。

上一篇博文我们说了Linux文件系统概要介绍,那么怎么创建文件系统呢,让我们来实战一下吧!

分区

磁盘分区表主要有两种格式,一种是限制较多的 MBR 分区表,一种是较新且限制较少的 GPT 分区表。

1. MBR

MBR 中,第一个扇区最重要,里面有主要开机记录(Master boot record, MBR)及分区表(partition table),其中主要开机记录占 446 bytes,分区表占 64 bytes。

传统分区类型有三种:主分区(Primary),扩展分区(Extended)和逻辑分区

每个分区项占用16个字节,这16个字节中存有活动状态标志、文件系统标识、起止柱面号、磁头号、扇区号、隐含扇区数目(4个字节)、分区总扇区数目(4个字节)等内容

由于分区表只有 64 bytes,所以最多只能存储 4 个分区,后来为了支持更多的分区,引入了扩展分区及逻辑分区的概念,将第四个分区记录为扩展分区,链接到其它扇区来记录额外的分区表,因此通过扩展分区可以分出更多分区,这些分区称为逻辑分区。但由于逻辑分区的分区信息不在主分区表内,所以无法引导操作系统启动

2. GPT

扇区是磁盘的最小存储单位,旧磁盘的扇区大小通常为 512 bytes,而最新的磁盘支持 4 k。GPT 为了兼容所有磁盘,在定义扇区上使用逻辑区块地址(Logical Block Address, LBA),LBA 默认大小为 512 bytes。

GPT 第 1 个区块记录了主要开机记录(MBR),紧接着是 33 个区块记录分区信息,并把最后的 33 个区块用于对分区信息进行备份。这 33 个区块第一个为 GPT 表头纪录,这个部份纪录了分区表本身的位置与大小和备份分区的位置,同时放置了分区表的校验码 (CRC32),操作系统可以根据这个校验码来判断 GPT 是否正确。若有错误,可以使用备份分区进行恢复。

GPT 没有扩展分区概念,都是主分区,每个 LBA 可以分 4 个分区,因此总共可以分 4 * 32 = 128 个分区。

MBR 不支持 2.2 TB 以上的硬盘,GPT 则最多支持到 233 TB = 8 ZB。

查看分区表

[root@desktop83 ~]# cat /proc/partitions 
Linux系统常规分区和LVM分区-郭子渝的博客

fdisk命令查看/修改分区表

 fdisk -l [<要操作的磁盘>]     列出分区表
Linux系统常规分区和LVM分区-郭子渝的博客

第六行中磁盘标签类型为dos,代表mbr分区,GPT分区显示为gpt,博主比较穷,电脑多年没换,所以不支持UEFI=-=

fdisk [选项] <磁盘>         更改分区表
Linux系统常规分区和LVM分区-郭子渝的博客

输入n新建分区

上一篇博文我们说到mbr磁盘可以分为主分区和扩展分区,主分区最多四个,在linux中,如果我们的主分区未到达四个,输入n的时候会询问建立的分区类型

Linux系统常规分区和LVM分区-郭子渝的博客
  • p : 主分区
  • e : 扩展分区
  • 由于博主的系统已经存在三个主分区,所以Linux认为我下一步会新建扩展分区,这里直接回车会建立扩展分区,当然,我也可以键入p来新建主分区

回车之后会显示分区编号并询问分区的开始扇区,一般直接回车

Linux系统常规分区和LVM分区-郭子渝的博客

回车之后会显示如下图,要求输入结束扇区,这里我们除了输入扇区号,也可以输入存储容量,记得带上+号,否则会变成绝对值,如果我需要1G的分区,则输入+1G,注意大小写。

Linux系统常规分区和LVM分区-郭子渝的博客

回车之后这个分区就建立完成,但是此时还没有保存,我们需要输入w并回车来保存我们的分区表。如果你觉得一个分区不够用,可以键入n来新建分区,直到分区结束,最后再键入w来保存分区,不保存分区表则键入q退出。

Linux系统常规分区和LVM分区-郭子渝的博客

此时我们可以使用开头介绍的两种命令来查看分区

fdisk -l [<磁盘>]
cat /proc/partitions
Linux系统常规分区和LVM分区-郭子渝的博客

创建完成分区后,我们还需要对分区进行格式化成指定的文件系统并挂载之后才能使用,Linux支持ext文件系统和xfs文件系统,博主建议使用xfs文件系统,所以ext文件系统不做详细介绍(红帽官方都放弃ext了

我们可以使用如下命令格式化文件系统

mkfs.ext2 <分区>  ##格式化成ext2文件系统
mkfs.ext3 <分区>  ##格式化成ext3文件系统
mkfs.ext4 <分区>  ##格式化成ext4文件系统
mkfs.xfs  <分区>  ###格式化成xfs文件系统
示例:mkfs.xfs  /dev/sda1
linux中,sda代表磁盘,sda1代表sda磁盘的第一个分区

除了以上的常规分区,Linux还有两种特殊分区

swap分区

Swap分区和windows系统的虚拟内存相似,他在系统的运行内存不够用的时候,把物理内存中的一部分空间释放出来,以供当前运行的程序使用。那些被释放的空间可能来自一些很长时间没有什么操作的程序,这些被释放的空间被临时保存到Swap分区中,等到那些程序要运行时,再从Swap分区中恢复保存的数据到内存中。

他还有另外一个用途是在系统休眠的时候将运行内存中的数据保存在该分区,以便于下一次启动的时候恢复,所以我建议在条件允许的情况下,将swap分区大小设置为运行内存的1-1.5倍,少于运行内存的话,可能会导致休眠后数据丢失!

我们可以使用以下命令将分区格式化为swap分区

mkswap  <分区>  ###格式化成swap文件系统
示例:mkswap  /dev/sda1

另外一种分区方式是lvm,这也是红帽系统默认的分区方式

LVM是 Logical Volume Manager(逻辑卷管理)的简写,它是Linux环境下对磁盘分区进行管理的一种机制;

Linux用户安装Linux操作系统时遇到的一个常见的难以决定的问题就是如何正确地评估各分区大小,以分配合适的硬盘空间。

普通的磁盘分区管理方式在逻辑分区划分好之后就无法改变其大小,当一个逻辑分区存放不下某个文件时,这个文件因为受上层文件系统的限制,也不能跨越多个分区来存放,所以也不能同时放到别的磁盘上。而遇到出现某个分区空间耗尽时,解决的方法通常是使用符号连接,或者停机使用调整分区大小的工具,但这只是暂时解决办法,没有从根本上解决问题。

随着Linux的逻辑卷管理功能的出现,这些问题都迎刃而解,用户在无需停机的情况下可以方便地调整各个分区大小。

注意:LVM是软件的卷管理方式,RAID是磁盘管理的方法。对于重要的数据使,用RAID保护物理硬盘不会因为故障而中断业务,再用LVM来实现对卷的良性管理,更好的利用硬盘资源。

Linux系统常规分区和LVM分区-郭子渝的博客

如上图所示,简单来说,lvm以物理磁盘为基础,将多个物理磁盘或分区(PV)合并为一个大的逻辑磁盘(VG),最后在这个逻辑磁盘(LV)中进行分区,在上层LV中的文件系统面前,VG将自己伪装成一个物理磁盘,但实际上他是在将数据分散存储在他底层的实际物理存储区(PV)。

每一个物理卷PV被划分为称为PE(Physical Extents)的基本单元,具有唯一编号的PE是可以被LVM寻址的最小单元。PE的大小是可配置的,默认为4MB。所以物理卷(PV)由大小等同的基本单元PE组成。PE在创建卷组的时候使用-s参数决定,在Lvm1中,PE大小从8KiB到16GiB,由于一个卷组最大限制为65534个PE。默认的4 MiB导致最大值逻辑卷大小约为256GiB。

Centos6以上版本默认采用Lvm2,没有上述限制,默认的大小依旧是4M,但是并不会限制最大PE数量,但是如果PE太小,大文件会占用很多PE,在进行数据读取的时候需要读取大量的PE,降低速度和性能;反过来如果PE太大,也可能会浪费硬盘空间,譬如这个卷组存储大量碎文件,一个文件只有1M,PE为设置为16M,由于一个PE只能存储一个文件,那么此时会浪费15M的存储空间。

所以在决定PE大小的时候应该更具需求决定,如果你有选择困难的话,就不要设置,按照默认4M进行吧

说了这么多理论,我们还是来实践一下吧!

第一步我们需要创建物理分区,这里也可以用整块磁盘作为物理卷

pvcreate /dev/sda #将磁盘sda格式化成物理卷(注意!该步骤会丢失磁盘sda的数据)
pvcreate /dev/sda1 #将分区sda1格式化成物理卷(注意!该步骤会丢失分区sda1的数据)
#以上两种方式一种是将磁盘作为物理卷,另一种是分区作为物理卷,博主建议新系统使用磁盘作为物理卷,对于旧系统,由于数据迁移不方便,可以使用分区作为物理卷

我们可以使用pvs或者pvdisplay来查看物理卷的详细信息(博主使用sdb磁盘作为例子)

Linux系统常规分区和LVM分区-郭子渝的博客
[root@desktop83 ~]# pvdisplay /dev/sdb
  "/dev/sdb" is a new physical volume of "10.00 GiB"
  --- NEW Physical volume ---
  PV Name               /dev/sdb             #PV名称,默认是磁盘路径
  VG Name                                    #卷组名称,此时没有加入卷组,所以为空
  PV Size               10.00 GiB            # PV大小,注意和PE区分
  Allocatable           NO
  PE Size               0
  Total PE              0
  Free PE               0
  Allocated PE          0
  PV UUID               lpggOu-zTr8-wUeD-mgNr-VNz8-xpNy-HBLXNd

第二步,将物理卷加入到逻辑卷组

vgcreate 卷组名称 物理卷路径
# 示例:
# vgcreate gzy2000 /dev/sda /dev/sdb1
# 以上示例表示创建逻辑卷组gzy2000,并将sda磁盘和sdb1分区加入卷组。

使用vgs或者vgdisplay来查看物理卷的详细信息(博主使用sdb磁盘作为例子)

Linux系统常规分区和LVM分区-郭子渝的博客
[root@desktop83 ~]# vgcreate gzy2000 /dev/sdb
  Volume group "gzy2000" successfully created
[root@desktop83 ~]# vgdisplay gzy2000
  --- Volume group ---
  VG Name               gzy2000    #卷组名称
  System ID
  Format                lvm2
  Metadata Areas        1
  Metadata Sequence No  1
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                0
  Open LV               0
  Max PV                0
  Cur PV                1
  Act PV                1
  VG Size               <10.00 GiB    #卷组大小
  PE Size               4.00 MiB      #PE大小
  Total PE              2559          #PE总数
  Alloc PE / Size       0 / 0         #已用PE
  Free  PE / Size       2559 / <10.00 GiB  #剩余PE和剩余空间
  VG UUID               7bgbBm-Ho2v-OtGn-ZYuq-bCcr-rUZY-EM1GMY

我们可以使用-s参数来定义PE大小,注意,卷组一旦创建如果需要修改PE大小只能重新创建,数据会丢失,博主这个磁盘是刚创建,里面没有数据,所以可以重新创建!

Linux系统常规分区和LVM分区-郭子渝的博客

此时PE大小为16M,比较刚才默认创建的结果,扣除卷组头部存储索引表之后剩余空间接近10G,PE增加后,这张截图只剩下9.98G,有10M左右的空间浪费。

第三步,在逻辑卷组上面创建逻辑卷

lvcreate -L 容量  卷组路径(此处无法自动补全)
#如果你想创建定大小的分区,可以使用这个选项
lvcreate -l PE数量 卷组路径(此处无法自动补全)
 #如果你想将所有空间使用完毕,可以使用这个选项

博主打算建立一个4G的分区用于swap,剩余6G全部放到一个分区。

Linux系统常规分区和LVM分区-郭子渝的博客
[root@desktop83 ~]# lvcreate -L +4G /dev/gzy2000  #创建4G分区
  Logical volume "lvol0" created.
[root@desktop83 ~]# vgdisplay /dev/gzy2000 #查看卷组信息,主要是想看看还有多少PE可用
  --- Volume group ---
  VG Name               gzy2000
  System ID
  Format                lvm2
  Metadata Areas        1
  Metadata Sequence No  2
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                1
  Open LV               0
  Max PV                0
  Cur PV                1
  Act PV                1
  VG Size               9.98 GiB
  PE Size               16.00 MiB
  Total PE              639
  Alloc PE / Size       256 / 4.00 GiB
  Free  PE / Size       383 / 5.98 GiB
  VG UUID               oVifzG-rX76-oqFI-zft5-C2cU-2vVw-0P6oLS
[root@desktop83 ~]# lvcreate -l 383 /dev/gzy2000  #创建分区,使用383个PE
  Logical volume "lvol1" created.
[root@desktop83 ~]# lvs
  LV    VG          Attr       LSize   Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  root  RAC12crhel7 -wi-ao---- <17.97g
  lvol0 gzy2000     -wi-a-----   4.00g
  lvol1 gzy2000     -wi-a-----   5.98g
[root@desktop83 ~]# 

最后,在分区上面建立文件系统(如图)就大功告成了

[root@desktop83 ~]# mkswap /dev/gzy2000/lvol0
[root@desktop83 ~]# mkfs.xfs /dev/gzy2000/lvol1
Linux系统常规分区和LVM分区-郭子渝的博客

现在,我们已经将磁盘分区和格式化,我们就像开发商一样盖了个房子,已经把房子隔断做成商品房(分区),然后装修(建立文件系统),剩下的是不是得把房子卖给用户了,这就是下一篇博文讲述的文件系统挂载。

具体可以查看我的博文《fstab和mount简单挂载

如果觉得我的文章对您有用,请订阅我的博客。您的支持将鼓励我继续创作!
3条评论
  • 郭子渝

    2020年3月26日 上午 05:46

    不错

  • 郭子渝

    2020年3月26日 上午 06:32

    收藏《Linux系统分区和修复》文章

  • 郭子渝

    2020年3月26日 上午 06:32

    点赞《Linux系统分区和修复》文章

Scroll Up