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

快速学会 逻辑卷的扩容,缩容,转移

云计算小千 2020-09-23
1612

逻辑卷详解

许多Linux使用者安装操作系统时都会遇到这样的困境:如何精确评估和分配各个硬盘分区的容量,如果当初评估不准确,一旦系统分区不够用时可能不得不备份、删除相关数据,甚至被迫重新规划分区并重装操作系统,以满足应用系统的需要。

比如很多人在使用win
的时候,都会遇见C盘分小了
的情况,磁盘不够用!

这个时候使用就要使用逻辑卷技术了!

1、逻辑卷简介

LVM将存储虚拟化,使用逻辑卷,你不会受限于物理磁盘的大小,另外,与硬件相关的存储设置被其隐藏,你可以不用停止应用或卸载文件系统来调整卷大小或数据迁移,这样可以减少操作成本。

逻辑卷相比物理卷的优点:

  • 灵活的容量
  • 可伸缩的存储池
  • 在线数据迁移
  • 方便的设备命名
  • 磁盘条块化
  • 提供如镜像卷,快照卷,精简缓存卷等多种类型和功能的卷

2、逻辑卷的组成

块设备(block)

硬盘
分区

物理卷Physical volume(PV)

物理卷在逻辑卷管理系统最底层,LVM逻辑卷要使用这些设备,这些设备必需要被初始化为PV
我们实际的 partition (或 Disk) 需要调整系统识别码 (system ID) 成为 8e (LVM 的识别码)
使用gdisk/fdisk创建

将一个磁盘做成PV之后,该磁盘的数据就丢了。

卷组Volume group (VG)

许多个物理卷组成卷组。这样创建了一个硬盘空间池可供逻辑卷使用。
VG 就是 LVM 组合起来的大磁盘!
LVM 默认使用 4MB 的 PE 区块,而 LVM 的 LV 在 32 位系统上最多仅能含有 65534 个 PE (lvm1 的格式),因此默认的 LVM 的 LV 会有 4M*65534/(1024M/G)=256G(限于lvm1版本)。

物理区域Physical extent (PE):逻辑卷最小单位,具有唯一编号,可以被LVM寻址。

逻辑卷Logical volume (LV)

虚拟分区,由物理区域(physical extents)组成。
由大VG切分而成
支持在线扩展,不影响业务,可以进行快照,还原

逻辑卷组成

3、制作逻辑卷

1、做成PV

对磁盘分区

$ fdisk /dev/sdb 

#
 分出下面sdb1,sdb2两个分区
Command (m for help): p

Disk /dev/sdb: 107.4 GB, 107374182400 bytes, 209715200 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: 0x8b10ccd0

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1            2048    10487807     5242880   83  Linux
/dev/sdb2        10487808    31459327    10485760   83  Linux

将标识更改标识为Linux LVM

# sdb1,sdb2都改为8e标识
Command (m for help): t
Partition number (1,2, default 2): 2
Hex code (type L to list all codes): 8e
Changed type of partition 'Linux' to 'Linux LVM'

Command (m for help): p

Disk /dev/sdb: 107.4 GB, 107374182400 bytes, 209715200 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: 0x64427aee

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1            2048    10487807     5242880   8e  Linux LVM
/dev/sdb2        10487808    31459327    10485760   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/sdb1
  Physical volume "/dev/sdb1" successfully created.
$ pvcreate /dev/sdb2
  Physical volume "/dev/sdb2" successfully created.
  
#
  查看物理卷
$ pvdisplay

2、做成VG

$ vgcreate vg0 /dev/sdb1 /dev/sdb2
  Volume group "vg0" successfully created
  
#
  查看卷组
$ vgdisplay

3、做成LV

$ lvcreate -L 8G -n lv0 vg0 
  Logical volume "lv0" created.
  
#
  查看逻辑卷
$ lvdisplay

4、使用逻辑卷

要使用,跟普通文件系统一样,格式化即可。

$ mkfs.ext4 /dev/vg0/lv0
meta-data=/dev/vg0/lv0           isize=512    agcount=4, agsize=524288 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=0, sparse=0
data     =                       bsize=4096   blocks=2097152, 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 /dev/vg0/lv0 /data/
$ df -h
Filesystem               Size  Used Avail Use% Mounted on
/dev/mapper/vg0-lv0      8.0G   33M  8.0G   1% /data

/dev/mapper/vg0-lv0
 是一个链接(l)设备

开机自动挂载,写入/etc/fstab

echo "/dev/vg0/lv0      /data         xfs     defaults 0 0" >>/etc/fstab

5、逻辑卷扩容

首先使用dd
命令配合/dev/zero
命令模拟/data
空间不够

$ dd if=/dev/zero of=/data/test5 bs=1M count=7168

$ df -h
Filesystem               Size  Used Avail Use% Mounted on
/dev/mapper/vg0-lv0      8.0G  7.1G  982M  89% /data

扩容步骤:

1、查看逻辑卷所在的卷组

$ vgdisplay vg0
  --- Volume group ---
 ...
  Free  PE / Size       1790 / 6.99 GiB   # 从这里可以看到,还剩下7G
 ...

假设现在需要扩容10G,原本的7G是不够扩的。

2、分一个/dev/sdb3分区

Command (m for help): p

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb3        31459328    52430847    10485760   8e  Linux LVM
Command (m for help): w

3、做成PV,加入VG中

$ pvcreate /dev/sdb3
  Physical volume "/dev/sdb3" successfully created.

$
 vgextend vg0 /dev/sdb3
  Volume group "vg0" successfully extended
$ vgdisplay vg0
  --- Volume group ---
...
  Free  PE / Size       4349 / <16.99 GiB #还剩17G,扩容Vg成功
...

4、扩容LV

$ lvextend -L +10G /dev/vg0/lv0
  Size of logical volume vg0/lv0 changed from 8.00 GiB (2048 extents) to 18.00 GiB (4608 extents).
  Logical volume vg0/lv0 successfully resized.

$ lvdisplay
 ...
  --- Logical volume ---
  LV Path                /dev/vg0/lv0
  LV Name                lv0
  VG Name                vg0
  LV UUID                jNXzjd-P5HZ-UWLk-kWzQ-6wj7-ViYR-2o4odz
  LV Write Access        read/write
  LV Creation host, time localhost.localdomain, 2020-09-21 17:38:41 +0800
  LV Status              available
  # open                 1
  LV Size                18.00 GiB  #扩容成功,由8G扩为18G
  ...

5、扩展文件系统

$ df -h
Filesystem               Size  Used Avail Use% Mounted on
...
/dev/mapper/vg0-lv0      8.0G  7.1G  982M  89% /data #发现/data并没有扩容
...

原因是新加入的10G没有格式化!没有格式化没有文件系统怎么可以使用呢?

执行调整

$ resize2fs /dev/vg0/lv0 

$ df -h
Filesystem               Size  Used Avail Use% Mounted on
...
/dev/mapper/vg0-lv0       18G  7.1G   11G  40% /data
...

resize2fs 命令       针对的是ext2、ext3、ext4文件系统xfs_growfs 命令     针对的是xfs文件系统

6、逻辑卷缩容

  • 一定要停掉业务,最好进行备份
  • xfs不支持缩容,强行缩容后,需要格式化后才能挂载

缩小/data
,先弄一点文件在data目录下,模拟资源数据

$ ls /data/
Bzm  etc  lost+found  test5

1、取消挂载

$ umount /data

2、扫描逻辑卷

$ e2fsck -f /dev/vg0/lv0
e2fsck 1.42.9 (28-Dec-2013)
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information
/dev/vg0/lv0: 12/1310720 files (0.0% non-contiguous), 1961320/5242880 blocks

3、缩小文件系统

$ resize2fs /dev/vg0/lv0 10G
resize2fs 1.42.9 (28-Dec-2013)
Resizing the filesystem on /dev/vg0/lv0 to 2621440 (4k) blocks.
The filesystem on /dev/vg0/lv0 is now 2621440 blocks long.

4、逻辑卷缩小

$ lvreduce -L 10G /dev/vg0/lv0 
  WARNING: Reducing active logical volume to 10.00 GiB.
  THIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really want to reduce vg0/lv0? [y/n]: y
  Size of logical volume vg0/lv0 changed from 20.00 GiB (5120 extents) to 10.00 GiB (2560 extents).
  Logical volume vg0/lv0 successfully resized.

5、检查缩容结果

$ lvdisplay
  --- Logical volume ---
  LV Path                /dev/vg0/lv0
  LV Name                lv0
  VG Name                vg0
  ...
  LV Size                10.00 GiB  #缩为10G
 ...

重新挂载,查看文件是否存在

$ mount -a
$ ls /data/
Bzm  etc  lost+found  test5

缩小,只要缩小后的逻辑卷大小比数据占用的空间大,一般不会丢失。

7、更换物理卷

必须在同一个卷组中,而且移动后的设备必须要大于等于之前设备

$ pvdisplay 
  --- Physical volume ---
  PV Name               /dev/sdb1
  VG Name               vg0
  PV Size               5.00 GiB / not usable 4.00 MiB
...
   
  --- Physical volume ---
  PV Name               /dev/sdb2
  VG Name               vg0
  PV Size               10.00 GiB / not usable 4.00 MiB
 ...
   
  --- Physical volume ---
  PV Name               /dev/sdb3
  VG Name               vg0
  PV Size               10.00 GiB / not usable 4.00 MiB
 ...

查看物理卷PV发现,10G都是使用的,/dev/sdb2
,如果遇到什么情况需要更换它,但是又不能影响业务。

1、新的磁盘加入卷组VG

加入过程略...

$ vgdisplay vg0 -v
  --- Volume group ---
  VG Name               vg0
...
  VG Size               34.98 GiB
...
  --- Physical volumes ---
  PV Name               /dev/sdb1     
  PV UUID               eGfgMo-J9AX-U9kr-rVuV-UCp0-uv5c-AIsIru
  PV Status             allocatable
  Total PE / Free PE    1279 / 1279
   
  PV Name               /dev/sdb2     
  PV UUID               1Dg6Kw-kzUe-3o0p-lhZe-O1s7-MaPt-eQWG1R
  PV Status             allocatable
  Total PE / Free PE    2559 / 0
   
  PV Name               /dev/sdb3     
  PV UUID               ydGSmi-81qo-KMDO-jULF-UMSa-znYO-XbeIKF
  PV Status             allocatable
  Total PE / Free PE    2559 / 2558
   
  PV Name               /dev/sdc1     #新的PV 
  PV UUID               Ph1ARr-Jxod-HyGH-dr4r-eTjc-v8PM-fD1536
  PV Status             allocatable
  Total PE / Free PE    2559 / 2559

2、更换PV

移动数据

$ pvmove /dev/sdb2 /dev/sdc1 
  /dev/sdb2: Moved: 2.46%
  /dev/sdb2: Moved: 100.00%

从卷组移除物理卷

$ vgreduce vg0 /dev/sdb2 
  Removed "/dev/sdb2" from volume group "vg0"

3、删除物理卷

$ pvremove /dev/sdb2
  Labels on physical volume "/dev/sdb2" successfully wiped.

就变成了块设备

8、移动卷组

在真实环境的,可能会遇见各种原因,逻辑卷需要需要从一台服务器转移到另外一台服务器上,硬盘的直接转移逻辑卷是识别不到的

1、导出卷组

$ umount /data 
# 将逻辑卷变为非激活状态
$ lvchange -a n /dev/vg0/lv0
-a :activate
# 将VG更改为导出状态
$ vgexport vg0 
  Volume group "vg0" successfully exported

导出状态,可以为VG提供一些保护机制,防止被意外使用

2、导入卷组

然后将硬盘插入另外一台服务器,或者将存储映射到另外一台服务器。

#硬盘识别到之后,扫描物理卷
$ pvscan 
  PV /dev/sda2   VG centos          lvm2 [58.00 GiB / 4.00 MiB free]
  PV /dev/sdb1    is in exported VG vg0 [<5.00 GiB / <5.00 GiB free]
  PV /dev/sdb3    is in exported VG vg0 [<10.00 GiB / 9.99 GiB free]
  PV /dev/sdc1    is in exported VG vg0 [<10.00 GiB / 0    free]
  Total: 4 [<82.99 GiB] / in use: 4 [<82.99 GiB] / in no VG: 0 [0   ]

# 将VG更改为导入状态
$ vgimport vg0 
  Volume group "vg0" successfully imported

$ lvscan 
  ACTIVE            '/dev/centos/root' [50.00 GiB] inherit
  ACTIVE            '/dev/centos/swap' [<8.00 GiB] inherit
  inactive          '/dev/vg0/lv0' [10.00 GiB] inherit
$ lvchange -a y /dev/vg0/lv0 

3、挂载查看

$ mount -a
$ df -h
Filesystem               Size  Used Avail Use% Mounted on
...
/dev/mapper/vg0-lv0      9.8G  7.1G  2.2G  77% /data


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

评论