LVM是建立在硬盘和分区之上的一个逻辑层,来提高磁盘分LVM区管理的灵活性。其结构为:PV——VG——LV——PE,LVM分区比较灵活的一个功能就是可以无损更改分区大小。目前我现网中的服务器也使用的是LVM分区,目前也遇到了某分区分间不足的问题,所以在测试环境上演练下更改分区大小,在此记录下。

  1. PV(Physical Volume):物理巻,处于LVM最底层,可以是物理硬盘或者分区。
  2. VG(Volume Group):巻组,建立在PV之上,可以含有一个到多个PV。
  3. LV(Logical Volume):逻辑巻,建立在PV之上,相当于原来分区的概念。不过大小可动态改变。
  4. PE(Physical Extend):物理区域,PV中可以用于分配的最小存储单位,可以在建立PV时指定,如1,2,4,8… …64M,同一VG中的所有PV的PE应该相同。

一、无损减小LVM分区大小

1、查看目前的分区情况

1[root@localhost ~]# df -hl
2文件系统              容量  已用 可用 已用% 挂载点
3/dev/sda5              48G  3.5G   42G   8% /
4/dev/sda1             190M   12M  169M   7% /boot
5tmpfs                 1.9G     0  1.9G   0% /dev/shm
6/dev/mapper/vg01-opt  403G  199M  382G   1% /opt
7You have mail in /var/spool/mail/root

当前测试环境下的/opt分区为LVM分区(普通分区也可以通过pvcreate、vgcreate、lvcreate等一系统命令完成),我在/opt分区下新建了一个文件abc,里面胡乱写了些东西。方便操作完成后,查看该文件的完整性,验证是否无损。

1[root@localhost opt]# cat abc
2dfafadfdafdfasdfsdsdsdsdsdsdffqwr23refasdfafdsafafa12423422323232323

2、卸载分区,调整大小

1[root@localhost /]# umount /opt/
2[root@localhost /]# e2fsck -f /dev/mapper/vg01-opt  //强制检查文件系统的正确性
3e2fsck 1.39 (29-May-2006)
4Pass 1: Checking inodes, blocks, and sizes
5Pass 2: Checking directory structure
6Pass 3: Checking directory connectivity
7Pass 4: Checking reference counts
8Pass 5: Checking group summary information
9/dev/mapper/vg01-opt: 12/53575680 files (8.3% non-contiguous), 1732039/107149312 blocks

缩小ext3文件系统,因为LVM分区还是在基本文件系统之上建立的,其更改需要文件系统也要做相应的更改。不然两大小是对等的,就会出问题了。

1[root@localhost /]# resize2fs /dev/mapper/vg01-opt 250G  //250G为调整后opt分区的大小
2resize2fs 1.39 (29-May-2006)
3Resizing the filesystem on /dev/mapper/vg01-opt to 65536000 (4k) blocks.
4The filesystem on /dev/mapper/vg01-opt is now 65536000 blocks long.

接下来,缩小LVM分区的大小。

1[root@localhost /]# lvresize -L  250G /dev/mapper/vg01-opt  //250G为调整后opt分区的大小<span style="background-color:#000000;"><span style="background-color:#ffffff;"><span style="color:#006600;"></span></span></span> WARNING: Reducing active logical volume to 250.00 GB
2  THIS MAY DESTROY YOUR DATA (filesystem etc.)
3Do you really want to reduce opt? [y/n]: y
4  Reducing logical volume opt to 250.00 GB
5  Logical volume opt successfully resized<span style="background-color:#ffffff;"><span style="color:#006600;"></span></span>

3、重新挂载,查看更改

1[root@localhost /]# mount /opt/
2[root@localhost /]# df -hl
3文件系统              容量  已用 可用 已用% 挂载点
4/dev/sda5              48G  3.5G   42G   8% /
5/dev/sda1             190M   12M  169M   7% /boot
6tmpfs                 1.9G     0  1.9G   0% /dev/shm
7/dev/mapper/vg01-opt  247G  188M  236G   1% /opt

注:fsck和e2fsck命令要慎用,尤其是fsck命令,使用不当会造成文件系统紊乱,系统重启后无法启动缩减后的大小一定要大于现有数据文件占用的空间大小,不然,会造成文件丢失。 以上步骤顺序不能更改,如果更改可能会出现下面的错误:

1[root@localhost /]# e2fsck -f /dev/mapper/vg01-opt
2e2fsck 1.39 (29-May-2006)
3The filesystem size (according to the superblock) is 80924672 blocks
4The physical size of the device is 65536000 blocks
5Either the superblock or the partition table is likely to be corrupt!
6Abort<y>? </y>

二、创建新的测试分区

我们利用刚刚/opt分区减小的分区,创建新的lv分区

1[root@localhost /]# pvscan
2  PV /dev/sda3   VG vg01   lvm2 [408.74 GB / 158.74 GB free]
3  Total: 1 [408.74 GB] / in use: 1 [408.74 GB] / in no VG: 0 [0   ]
4[root@localhost /]# lvcreate  -l 100%FREE -n /dev/vg01/home
5  Logical volume "home" created

格式化为ext3格式

 1[root@localhost /]# mkfs.ext3 /dev/vg01/home
 2mke2fs 1.39 (29-May-2006)
 3Filesystem label=
 4OS type: Linux
 5Block size=4096 (log=2)
 6Fragment size=4096 (log=2)
 720807680 inodes, 41613312 blocks
 82080665 blocks (5.00%) reserved for the super user
 9First data block=0
10Maximum filesystem blocks=4294967296
111270 block groups
1232768 blocks per group, 32768 fragments per group
1316384 inodes per group
14Superblock backups stored on blocks:
15        32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
16        4096000, 7962624, 11239424, 20480000, 23887872
17Writing inode tables: done
18Creating journal (32768 blocks): done
19Writing superblocks and filesystem accounting information: done
20This filesystem will be automatically checked every 22 mounts or
21180 days, whichever comes first.  Use tune2fs -c or -i to override.

挂载并使用

1[root@localhost /]# mount /dev/mapper/vg01-home /home/
2[root@localhost /]# df -hl
3文件系统              容量  已用 可用 已用% 挂载点
4/dev/sda5              48G  3.5G   42G   8% /
5/dev/sda1             190M   12M  169M   7% /boot
6tmpfs                 1.9G     0  1.9G   0% /dev/shm
7/dev/mapper/vg01-opt  247G  188M  236G   1% /opt
8/dev/mapper/vg01-home
9                      157G  188M  149G   1% /home

三、无损增大LVM分区

重复上面的减小空间步骤,使opt分区再减小50G的大小。在此就不再记录上面的无损减少的步骤,操作完成后,查看的结果如下:

 1[root@localhost /]# pvscan
 2  PV /dev/sda3   VG vg01   lvm2 [408.74 GB / 50.00 GB free]
 3  Total: 1 [408.74 GB] / in use: 1 [408.74 GB] / in no VG: 0 [0   ]
 4[root@localhost /]# df -hl
 5文件系统              容量  已用 可用 已用% 挂载点
 6/dev/sda5              48G  3.5G   42G   8% /
 7/dev/sda1             190M   12M  169M   7% /boot
 8tmpfs                 1.9G     0  1.9G   0% /dev/shm
 9/dev/mapper/vg01-home
10                      157G  188M  149G   1% /home
11/dev/mapper/vg01-opt  197G  188M  189G   1% /opt

卸载home分区,并增加大小 (不进行umount操作也可以, 不过在操作过程中会引起IO增高的问题

1[root@localhost /]# umount /home/
2[root@localhost /]# lvextend -L +50G /dev/vg01/home //新增50G的空间
3  Extending logical volume home to 208.74 GB
4  Logical volume home successfully resized

使更改生效

1[root@localhost /]# resize2fs /dev/vg01/home
2resize2fs 1.39 (29-May-2006)
3Please run 'e2fsck -f /dev/vg01/home' first.

提示需要先运行e2fsck检查,按照提示先进行分区检查(若无上面的提示,下面的步骤可以省略

 1[root@localhost /]# e2fsck -f /dev/vg01/home
 2e2fsck 1.39 (29-May-2006)
 3Pass 1: Checking inodes, blocks, and sizes
 4Pass 2: Checking directory structure
 5Pass 3: Checking directory connectivity
 6Pass 4: Checking reference counts
 7Pass 5: Checking group summary information
 8/dev/vg01/home: 11/20807680 files (9.1% non-contiguous), 700963/41613312 blocks
 9[root@localhost /]# resize2fs /dev/vg01/home
10resize2fs 1.39 (29-May-2006)
11Resizing the filesystem on /dev/vg01/home to 54720512 (4k) blocks.
12The filesystem on /dev/vg01/home is now 54720512 blocks long.

重新挂载,查看大小

1[root@localhost /]# mount /dev/vg01/home /home/
2[root@localhost /]# df -hl
3文件系统              容量  已用 可用 已用% 挂载点
4/dev/sda5              48G  3.5G   42G   8% /
5/dev/sda1             190M   12M  169M   7% /boot
6tmpfs                 1.9G     0  1.9G   0% /dev/shm
7/dev/mapper/vg01-opt  197G  188M  189G   1% /opt
8/dev/mapper/vg01-home
9                      206G  188M  197G   1% /home

验证opt分区文件

1[root@localhost opt]# cat abc
2dfafadfdafdfasdfsdsdsdsdsdsdffqwr23refasdfafdsafafa12423422323232323

注:操作不当时,有数据文件丢失的风险,乱用命令时,甚至会引起系统无法重启。因此,如果在生产环境上操作前,最好先备份数据再操作。