暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

好好好,有了LVM再也不用担心磁盘空间扩容问题了

feelwow 2021-01-07
1146

LVM 简介

使用传统分区在进行分区完成后,一般情况下就不会再去调整了,如果要调整大小则会十分麻烦。但是,LVM 可以创建和管理“逻辑”卷,而不是直接使用物理硬盘。可以进行弹性的管理逻辑卷的扩缩容,操作简单,而不损坏已存储的数据。可以随意将新的硬盘添加到 LVM,以直接扩展已经存在的逻辑卷。

简而言之就是:可随时按需修改逻辑卷大小 在介绍 LVM 之前,需要先了解下硬盘的几个分区

三大分区介绍

以 Linux 系统为例,学习下磁盘的分区,磁盘分区可以分为三类,分别为:

  • 主分区:一块硬盘上可以被独立使用的一部分,一块硬盘最多可以有四个主分区
  • 扩展分区:因为一块物理硬盘只能有四个分区,所以为了解决这个问题,引入了扩展分区,但扩展分区不能直接使用
  • 逻辑分区:逻辑分区可以有任意多个,但不能单独存在,多个连续的逻辑分区可以组成一个扩展分区

因此,当我们部署系统时,需要对这三个分区做一个合理的规划,否则可能会浪费磁盘空间。

那么这三个分区之间的关系是什么呢?

简单来说就是,一个硬盘最多可划分四个主分区,如果想要更多的分区,则需要设置扩展分区,且只能有一个扩展分区,但是扩展分区不能直接使用,需要在扩展分区上设置逻辑分区,而逻辑分区可以划分多个。

既然是这种关系,那么可以有如下的关系图

P: 主分区
E: 扩展分区:因为一块物理硬盘只能有四个分区,所以为了解决这个问题,引入了扩展分区
L: 逻辑分区

disk

要么分四个主分区,没有扩展分区
要么就是不超过三个主分区,一个扩展分区,至少一个逻辑分区

一个硬盘为什么只能划分四个主分区?

要解释这个问题,需要知道硬盘的第一个扇区Boot Sector
的组成:MBR
(Master Boot Recorder,主引导记录),DPT
(Disk Partition Table,主分区表), Boot Record ID
,由这三部分组成。
硬盘的第一个扇区一共只有 512 字节,而其中MBR
占用了前 446 个字节,主要是存放系统的主引导程序,负责从活动分区中装载并运行系统引导程序
DPT
主分区表占用了 64 字节,记录了磁盘的基本分区信息,在主分区表里可以划分四个分区项,每一项占用 16 字节,这 16 字节记录的便是各个主分区的信息
Boot Record ID
引导区标记,占用两个字节,这个标记用来判断引导区是否合法

到这是不是就明白了,为什么一块硬盘可以划分四个主分区了,就是因为容量有限,只能划分四个

那么知道了这些,当你在进行分区的时候,是不是就能知道分区时的编号是咋来的了吧

需要注意的是,前四个编号已经被占用了,只能给主分区使用,逻辑分区只能从编号 5 开始往下排。

LVM 的一些概念简介

  • PV (Physical Volume): 物理卷,是 LVM 中最底层的单元,可以是一个磁盘/dev/vdb
    ,也可以是磁盘上的某个分区/dev/vdb1
  • VG (Volume Group): 卷组,可以设置多个卷组,每个卷组都有不同的用途,例如可以对 SSD 磁盘划分一个卷组
  • LV (Logical Volume): 逻辑卷,LV 是建立在 VG 之上的,可以在 LV 上创建一个文件系统
  • PE (Physical Extent): PV 中可以分配的最小存储单元,大小可指定
  • LE (Logical Extent): LV 中可分配的最小存储单元

怎么来理解这几个概念呢?
LVM 是把硬盘的分区分成了更小的单元(PE),然后再把这些单元组合成了分区 PV,然后 PV 又组成了 VG,最后在 VG 上创建分区

实战

机器是阿里云的 ECS,添加了一块1T
的数据盘,下面给分区成 LVM

分区

# fdisk /dev/vdb        #执行此命令,进行分区
Welcome to fdisk (util-linux 2.23.2).

Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.

Device does not contain a recognized partition table
Building a new DOS disklabel with disk identifier 0xdf09eb6a.

Command (m for help): p   #在此输入p

Disk /dev/vdb: 1073.7 GB, 1073741824000 bytes, 2097152000 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0xdf09eb6a

    Device Boot      Start         End      Blocks   Id  System

Command (m for help): n   #在此输入n
Partition type:
    p   primary (0 primary, 0 extended, 4 free)
    e   extended
Select (default p): p
Partition number (1-4, default 1): 1    #在此输入1
First sector (2048-419430399, default 2048):       #回车
Using default value 2048
Last sector, +sectors or +size{K,M,G} (2048-419430399, default 419430399):     #回车
Using default value 419430399
Partition 1 of type Linux and of size 200 GiB is set

Command (m for help): t   #在此输入t
Selected partition 1
Hex code (type L to list all codes): L     #在此输入L

  0  Empty           24  NEC DOS         81  Minix / old Lin bf  Solaris
  1  FAT12           27  Hidden NTFS Win 82  Linux swap / So c1  DRDOS/sec (FAT-
  2  XENIX root      39  Plan 9          83  Linux           c4  DRDOS/sec (FAT-
  3  XENIX usr       3c  PartitionMagic  84  OS/2 hidden C:  c6  DRDOS/sec (FAT-
  4  FAT16 <32M      40  Venix 80286     85  Linux extended  c7  Syrinx
  5  Extended        41  PPC PReP Boot   86  NTFS volume set da  Non-FS data
  6  FAT16           42  SFS             87  NTFS volume set db  CP/M / CTOS / .
  7  HPFS/NTFS/exFAT 4d  QNX4.x          88  Linux plaintext de  Dell Utility
  8  AIX             4e  QNX4.x 2nd part 8e  Linux LVM       df  BootIt
  9  AIX bootable    4f  QNX4.x 3rd part 93  Amoeba          e1  DOS access
  a  OS/2 Boot Manag 50  OnTrack DM      94  Amoeba BBT      e3  DOS R/O
  b  W95 FAT32       51  OnTrack DM6 Aux 9f  BSD/OS          e4  SpeedStor
  c  W95 FAT32 (LBA) 52  CP/M            a0  IBM Thinkpad hi eb  BeOS fs
  e  W95 FAT16 (LBA) 53  OnTrack DM6 Aux a5  FreeBSD         ee  GPT
  f  W95 Ext'd (LBA) 54  OnTrackDM6      a6  OpenBSD         ef  EFI (FAT-12/16/
10  OPUS            55  EZ-Drive        a7  NeXTSTEP        f0  Linux/PA-RISC b
11  Hidden FAT12    56  Golden Bow      a8  Darwin UFS      f1  SpeedStor
12  Compaq diagnost 5c  Priam Edisk     a9  NetBSD          f4  SpeedStor
14  Hidden FAT16 <3 61  SpeedStor       ab  Darwin boot     f2  DOS secondary
16  Hidden FAT16    63  GNU HURD or Sys af  HFS / HFS+      fb  VMware VMFS
17  Hidden HPFS/NTF 64  Novell Netware  b7  BSDI fs         fc  VMware VMKCORE
18  AST SmartSleep  65  Novell Netware  b8  BSDI swap       fd  Linux raid auto
1b  Hidden W95 FAT3 70  DiskSecure Mult bb  Boot Wizard hid fe  LANstep
1c  Hidden W95 FAT3 75  PC/IX           be  Solaris boot    ff  BBT
1e  Hidden W95 FAT1 80  Old Minix
Hex code (type L to list all codes): 8e      #输入lvm类型的hex代码
Changed type of partition '
Linux' to 'Linux LVM'

Command (m for help): p    #在此输入p

Disk /dev/sdb: 214.7 GB, 214748364800 bytes, 419430400 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0xdf09eb6a

    Device Boot      Start         End      Blocks   Id  System
/dev/vdb1            2048  2097151999  1048574976   8e  Linux LVM

Command (m for help): w     #保存
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.

创建 PV

pvcreate /dev/vdb1

创建好 PV 后,查看创建的 PV

# pvdisplay
  --- Physical volume ---
  PV Name               /dev/vdb1
  VG Name               vgdata
  PV Size               <1000.00 GiB / not usable 3.00 MiB
  Allocatable           yes
  PE Size               4.00 MiB
  Total PE              255999
  Free PE               255
  Allocated PE          255744
  PV UUID               dejeTn-cVJc-qWXM-EWRw-gKge-znNc-1a6VGH

创建 VG

vgcreate vgdata /dev/vdb1

查看创建的 VG

# vgdisplay
  --- Volume group ---
  VG Name               vgdata
  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               1
  Max PV                0
  Cur PV                1
  Act PV                1
  VG Size               <1000.00 GiB
  PE Size               4.00 MiB
  Total PE              255999
  Alloc PE / Size       255744 / 999.00 GiB
  Free  PE / Size       255 / 1020.00 MiB
  VG UUID               R0tJm5-guE4-vy3Q-UgJX-jSkt-mLdo-T4bvxU

创建 LV

lvcreate -L 999G -n lvdata vgdata

上面这个命令是指定具体的大小,也可以指定所有的空间,比如我这里大小是 1000G,如果指定 1000G 然后去创建 LV 就会失败,正确的命令应该是:

lvcreate -l 100%FREE 0n lvdata vgdata

格式化

mkfs.ext4 /dev/vgdata/lvdata

创建目录并挂载 LV 到此目录

mkdir /data
mount /dev/vgdata/lvdata /data

查看挂载后的分区

# df -hT
Filesystem                Type      Size  Used Avail Use% Mounted on
/dev/vda1                 ext4      493G  114G  354G  25% /
devtmpfs                  devtmpfs  7.8G     0  7.8G   0% /dev
tmpfs                     tmpfs     7.8G     0  7.8G   0% /dev/shm
tmpfs                     tmpfs     7.8G  636K  7.8G   1% /run
tmpfs                     tmpfs     7.8G     0  7.8G   0% /sys/fs/cgroup
tmpfs                     tmpfs     1.6G     0  1.6G   0% /run/user/1000
/dev/mapper/vgdata-lvdata ext4      984G  102G  832G  11% /data

设置开机自动挂载

vim /etc/fstab
/dev/vgdata/lvdata /data ext4 defaults 0 0   #添加到最后一行即可

简单介绍下每一列的含义:

第一列:要挂载的磁盘
第二列:挂载点
第三列:文件类型
第四列:挂载选项,详细参考man mount. 下面列出一些常用的选项:

auto: 系统自动挂载,fstab默认就是这个选项
   ro: read-only
   rw: read-write
   defaults: rw, suid, dev, exec, auto, nouser, and async.

第五列:为dump选项,设置是否让备份程序dump备份文件系统,0为忽略,1为备份。
第六列:为fsck选项,告诉fsck程序以什么顺序检查文件系统,0为忽略。

以上简单介绍了 LVM 以及如何新增一个磁盘并分区成 LVM,以及介绍了为什么要用 LVM,还有一篇文章是介绍现有分区磁盘空间已经满了,如何通过 LVM 来动态的扩容,文章链接:lvm 添加硬盘并扩容至已有分区



文章转载自feelwow,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论