linux高级文件系统管理——LVM

在企业里面,很多时候,我们也无法估量应用程序对磁盘空间的使用量,如果我们使用用传统的文件系统,磁盘分区一旦确定下来以后,就再也无法更改使用空间了,如果需要更改就必须让应用程序离线后,对原有分区的数据进行备份,然后再对磁盘进行重新分区格式,重新复制原来的数据放回新的磁盘分区上,由此带来的麻烦是不言而喻的,如果是可以离线的业务,到也好说,如果是不允许离线的业务,那就影响更大。所以一代全新的文件系统LVM的问世,打破了这一技术瓶颈。它允许用户使用容量不不统一的硬盘和分区组合在一起,构成一个逻辑空间,用户可以在这个逻辑空间上划分自己想要的逻辑卷空间,并且可以随时扩展或者缩减已经划分好的逻辑卷大小,更可观的是扩展操作还可以在线进行。

一、LVM的概念

LVM:Logical Volume Manager(逻辑卷管理器)

允许对卷进行方便操作的抽象层,包括重新设定文件系统的大小

允许在多个物理设备间重新组织文件系统

将设备指定为物理卷,用一个或者多个物理卷来创建一个卷组,物理卷是用固定大小的物理区域(Physical Extent,PE)来定义的,在物理卷上创建的逻辑卷是由物理区域(PE)组成,可以在逻辑卷上创建文件系统

逻辑卷的层次

上层:逻辑卷:LV——logical volume(表示单位是LE——logical extend:默认单位4M)

中层:卷组:VG——volume group

底层:物理卷:PV——physical volume(表示单位PE——physical extend:默认单位4M)

二、PV管理命令

pvcreate:创建pv pvcreate /dev/sda{14,15}

pvremove:删除pv pvremove /dev/sda{14,15}

pvscan:扫描当前系统上的所有pv

pvdisplay:查看pv的详细属性 pvdisplay [/dev/sda15]省略即查看全部

pvmove:移动pv上的所有数据到其它pv pvmove /dev/sda15

pvs:简单查看pv属性

三、VG管理命令

vgcreate:创建vg vgcreate vg_name /path/to/pv -s #G

vgremove:删除vg vgremove vg_name

vgextend:扩展vg vgextend vg_name /dev/sda#

vgreduce:缩减vg vgreduce vg_name /dev/sda#

vgscan:扫描当前系统上的所有vg

vgdisplay:查看vg的详细属性

vgs:简单查看vg属性

四、LV管理命令

lvcreate:创建lv lvcreate -n lv_name -L #G vg_name

lvremove:删除lv lvremove /dev/vg_name/lv_name

lvextend:扩展lv

lvreduce:缩减lv

lvscan:扫描当前系统上的所有lv

lvdiskplay:查看lv的详细属性 lvdisplay /dev/vg_name/lv_name

lvs:简单查看lv属性

五、扩展逻辑卷

1、扩展物理边界

lvextend -L #G /dev/vg_name/lv_name 将当前lv扩展到#G

lvextend -L +#G /dev/vg_name/lv_name 在当前lv上再扩展#G

2:扩展逻辑边界

resize2fs /dev/vg_name/lv_name # 在当前lv的基础上再扩展#G

resize2fs -p /dev/vg_name/lv_name 物理边界有多大,就扩展到多大

两条命令可以合并:lvextend -r -l +#%FREE /dev/vg_name/lv_name

六、缩减逻辑卷

1、确保缩减后的空间大小能存储原有的所有数据,有条件的情况下最好先备份准备缩减的逻辑卷上的数据

2,取消逻辑卷的挂载状态(不能在线缩减逻辑卷)

umount /dev/vg_name/lv_name

3,进行缩减之前应先强行检查文件系统的,确保文件系统处于一致性状态

e2fsck -f /dev/vg_name/lv_name

4、缩减逻辑边界

resize2fs /dev/vg_name/lv_name #G

5、缩减物理边界

lvreduce -L # /dev/vg_name/lv_name 将当前lv缩减到#G

lvreduce -L -# /dev/vg_name/lv_name 在当前lv上缩减#G

七、逻辑卷创建实例

第一步:在服务器上装载4块20G的硬盘,查看系统上是否已经识别

[[email protected] test]# lsblk

NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT

sda      8:0    0   20G  0 disk

├─sda1   8:1    0  200M  0 part /boot

├─sda2   8:2    0    5G  0 part /

└─sda3   8:3    0    5G  0 part /test

sdb      8:16   0   20G  0 disk

sdc      8:32   0   20G  0 disk

sdd      8:48   0   20G  0 disk

sde      8:64   0   20G  0 disk

sr0     11:0    1  7.2G  0 rom

[[email protected] test]#

成功识别,可以开始创建pv

第二步:开始创建pv,将四块硬盘全部创建成pv,以备待用

[[email protected] test]# pvcreate /dev/sd{b,c,d,e}

Physical volume "/dev/sdb" successfully created

Physical volume "/dev/sdc" successfully created

Physical volume "/dev/sdd" successfully created

Physical volume "/dev/sde" successfully created

[[email protected] test]#

pv创建成功,可以使用pvscan扫描所有pv,pvdisplay查看pv的详细属性

[[email protected] test]# pvscan

PV /dev/sdd         lvm2 [20.00 GiB]

PV /dev/sdb         lvm2 [20.00 GiB]

PV /dev/sde         lvm2 [20.00 GiB]

PV /dev/sdc         lvm2 [20.00 GiB]

Total: 4 [80.00 GiB] / in use: 0 [0   ] / in no VG: 4 [80.00 GiB]

[[email protected] test]# pvdisplay /dev/sdb

"/dev/sdb" is a new physical volume of "20.00 GiB"

--- NEW Physical volume ---

PV Name               /dev/sdb

VG Name

PV Size               20.00 GiB

Allocatable           NO

PE Size               0

Total PE              0

Free PE               0

Allocated PE          0

PV UUID               6S63C2-MAKa-4Rho-fd6q-oP0a-hg6o-xKI1Oa

[[email protected] test]#

第三步:开始创建vg,vg命名为myvg

[[email protected] test]# vgcreate myvg /dev/sd{b,c,d}

Volume group "myvg" successfully created

[[email protected] test]#

vg创建成功,可以使用vgscan扫描所有vg,vgdisplay查看vg的详细属性

[[email protected] test]# vgscan

Reading all physical volumes.  This may take a while...

Found volume group "myvg" using metadata type lvm2

[[email protected] test]# vgdisplay /dev/myvg

--- Volume group ---

VG Name               myvg

System ID

Format                lvm2

Metadata Areas        3

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                3

Act PV                3

VG Size               59.99 GiB

PE Size               4.00 MiB

Total PE              15357

Alloc PE / Size       0 / 0

Free  PE / Size       15357 / 59.99 GiB

VG UUID               Fb6PT7-YAQa-JaKR-KWNO-EHh8-OBHC-56OA0s

[[email protected] test]#

第四步:开始创建lv,lv命名为mylv

[[email protected] test]# lvcreate -n mylv -L 40G myvg

Logical volume "mylv" created.

[[email protected] test]#

lv创建成功,可以使用lvscan扫描所有lv,lvdisplay查看lv详细属性

[[email protected] test]# lvscan

ACTIVE            ‘/dev/myvg/mylv‘ [40.00 GiB] inherit

[[email protected] test]# lvdisplay /dev/myvg/mylv

--- Logical volume ---

LV Path                /dev/myvg/mylv

LV Name                mylv

VG Name                myvg

LV UUID                GjUPmx-ww2H-RwIf-2up9-nnen-mRs2-IwC5Z6

LV Write Access        read/write

LV Creation host, time centos7, 2016-08-29 22:30:04 +0800

LV Status              available

# open                 0

LV Size                40.00 GiB

Current LE             10240

Segments               3

Allocation             inherit

Read ahead sectors     auto

- currently set to     8192

Block device           253:0

[[email protected] test]#

第五步:格式化lv,使用ext4系统,指定卷标为mylv

[[email protected] test]# mkfs.ext4 -L mylv /dev/myvg/mylv

mke2fs 1.42.9 (28-Dec-2013)

Filesystem label=mylv

OS type: Linux

Block size=4096 (log=2)

Fragment size=4096 (log=2)

Stride=0 blocks, Stripe width=0 blocks

2621440 inodes, 10485760 blocks

524288 blocks (5.00%) reserved for the super user

First data block=0

Maximum filesystem blocks=2157969408

320 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, 7962624

Allocating group tables: done

Writing inode tables: done

Creating journal (32768 blocks): done

Writing superblocks and filesystem accounting information: done

[[email protected] test]#

lv的文件系统已经建立,可以挂载使用了

第六步:挂载lv,创建/mylv做为挂载点,并验证结果

[[email protected] test]# mkdir /mylv

[[email protected] test]# mount /dev/myvg/mylv /mylv

[[email protected] test]# df -h

Filesystem             Size  Used Avail Use% Mounted on

/dev/sda2              5.0G  4.3G  744M  86% /

devtmpfs               899M     0  899M   0% /dev

tmpfs                  913M   84K  913M   1% /dev/shm

tmpfs                  913M  8.9M  904M   1% /run

tmpfs                  913M     0  913M   0% /sys/fs/cgroup

/dev/sda3              4.8G  1.2G  3.4G  26% /test

/dev/sda1              197M  139M   59M  71% /boot

tmpfs                  183M   16K  183M   1% /run/user/42

tmpfs                  183M     0  183M   0% /run/user/0

/dev/mapper/myvg-mylv   40G   49M   38G   1% /mylv

[[email protected] test]# ll /mylv

total 16

drwx------. 2 root root 16384 Aug 29 22:39 lost+found

[[email protected] test]#

第七步:为lv配置自动挂载,使用lv的UUID写入fstab自动挂载文件,方便长期使用

[[email protected] test]# blkid /dev/myvg/mylv

/dev/myvg/mylv: LABEL="mylv" UUID="184a8620-2b45-4f2e-ba6e-4951178ca261" TYPE="ext4"

[[email protected] test]# vim /etc/fstab

UUID="184a8620-2b45-4f2e-ba6e-4951178ca261" /mylv   ext4    defaults    0 0

八、逻辑卷扩展实例

第一步:扩展物理边界:lvextend -L [+] # /dev/myvg/mylv

查看当前lv物理边界

[[email protected] ~]# lvs /dev/myvg/mylv

LV   VG   Attr       LSize  Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert

mylv myvg -wi-a----- 40.00g

[[email protected] ~]#

查看当前vg的物理边界

[[email protected] ~]# vgs /dev/myvg

VG   #PV #LV #SN Attr   VSize  VFree

myvg   3   1   0 wz--n- 59.99g 19.99g

[[email protected] ~]#

接下来可以正式开始扩展物理边界了

[[email protected] ~]# lvextend -L +19.99G /dev/myvg/mylv

Rounding size to boundary between physical extents: 19.99 GiB

Insufficient free space: 5118 extents needed, but only 5117 available

[[email protected] ~]#

当前lv大小40G,vg大小59.99G,为什么我扩展19.99G,还报错了,原因很简单,le的尺寸是4M,我们指定的空间不一定是le的整数倍,也就有些误差,所以我们指定扩展容量的时候要比实际剩余值小一些才行,或者我们使用百分比模式去指定扩展空间就回避这个问题了。

[[email protected] ~]# lvextend -L +19.98G /dev/myvg/mylv

Rounding size to boundary between physical extents: 19.98 GiB

Size of logical volume myvg/mylv changed from 40.00 GiB (10240 extents) to 59.98 GiB (15355 extents).

Logical volume mylv successfully resized.

物理边界扩展成功,可以开始扩展逻辑边界了

第二步:扩展逻辑边界:resize2fs -p /dev/myvg/mylv

[[email protected] ~]# resize2fs -p /dev/myvg/mylv

resize2fs 1.42.9 (28-Dec-2013)

Filesystem at /dev/myvg/mylv is mounted on /mylv; on-line resizing required

old_desc_blocks = 5, new_desc_blocks = 8

The filesystem on /dev/myvg/mylv is now 15723520 blocks long.

[[email protected] ~]# lvs /dev/myvg/mylv

LV   VG   Attr       LSize  Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert

mylv myvg -wi-ao---- 59.98g

[[email protected] ~]#

mylv成功的从40G扩展到了60G

这是属于在vg还有空间的情况下去扩展lv,如果现在vg被lv全部占用完了,还想扩展lv的话,就必须首先扩展vg的物理边界,也就是说添加pv了,添加pv的前提是要添加硬盘或者分区了。在这里,我之前还有已经创建好的pv没用,所以我就略过此步,直接开始扩展vg了

第一步:扩展vg vgextend myvg /dev/sd#

[[email protected] ~]# vgextend /dev/myvg /dev/sde

Volume group "myvg" successfully extended

[[email protected] ~]#

[[email protected] ~]# vgs /dev/myvg

VG   #PV #LV #SN Attr   VSize  VFree

myvg   4   1   0 wz--n- 79.98g 19.98g

[[email protected] ~]#

myvg成功的从60G扩展到了80G

第二步:扩展物理边界和扩展逻辑边界可以一步到位(这次我们使用百分比表示准备扩展的空间) lvextend -r -l +#%FREE /dev/myvg/mylv

[[email protected] ~]# lvextend -r -l +100%FREE /dev/myvg/mylv

Size of logical volume myvg/mylv changed from 59.99 GiB (15357 extents) to 79.98 GiB (20476 extents).

Logical volume mylv successfully resized.

resize2fs 1.42.9 (28-Dec-2013)

Filesystem at /dev/mapper/myvg-mylv is mounted on /mylv; on-line resizing required

old_desc_blocks = 8, new_desc_blocks = 10

The filesystem on /dev/mapper/myvg-mylv is now 20967424 blocks long.

[[email protected] ~]# lvs /dev/myvg/mylv

LV   VG   Attr       LSize  Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert

mylv myvg -wi-ao---- 79.98g

[[email protected] ~]#

mylv成功的从60G扩展到了80G

九、逻辑卷缩减实例

如果我们vg空间分配的太大了,想把多余的空间回收一部分,这就涉及到了逻辑卷的缩减问题了,缩减逻辑卷和扩展逻辑卷虽然是一个逆向操作,但它们之间存在一定的区别,扩展逻辑卷可以在线操作,但缩减逻辑卷是不能在线操作的,而且扩展逻辑卷没什么风险,缩减逻辑卷相对来说有一定的风险,在有条件的情况下,建议先备份数据后再执行缩减操作。

第一步:取消逻辑卷的挂载状态 umont /dev/myvg/mylv

[[email protected] ~]# df -h

Filesystem             Size  Used Avail Use% Mounted on

/dev/sda2              5.0G  4.3G  743M  86% /

devtmpfs               899M     0  899M   0% /dev

tmpfs                  913M   84K  913M   1% /dev/shm

tmpfs                  913M  8.9M  904M   1% /run

tmpfs                  913M     0  913M   0% /sys/fs/cgroup

/dev/sda3              4.8G  1.2G  3.4G  26% /test

/dev/sda1              197M  139M   59M  71% /boot

tmpfs                  183M   16K  183M   1% /run/user/42

tmpfs                  183M     0  183M   0% /run/user/0

/dev/mapper/myvg-mylv   79G   56M   76G   1% /mylv

[[email protected] ~]# umount /dev/myvg/mylv

[[email protected] ~]# df -h

Filesystem      Size  Used Avail Use% Mounted on

/dev/sda2       5.0G  4.3G  743M  86% /

devtmpfs        899M     0  899M   0% /dev

tmpfs           913M   84K  913M   1% /dev/shm

tmpfs           913M  8.9M  904M   1% /run

tmpfs           913M     0  913M   0% /sys/fs/cgroup

/dev/sda3       4.8G  1.2G  3.4G  26% /test

/dev/sda1       197M  139M   59M  71% /boot

tmpfs           183M   16K  183M   1% /run/user/42

tmpfs           183M     0  183M   0% /run/user/0

[[email protected] ~]#

第二步:强行检查lv的文件系统 e2fsck -f /dev/myvg/mylv

[[email protected] ~]# e2fsck -f /dev/myvg/mylv

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

mylv: 11/5242880 files (0.0% non-contiguous), 376154/20967424 blocks

[[email protected] ~]#

第三步:缩减lv的逻辑边界

[[email protected] ~]# resize2fs /dev/myvg/mylv 60G

resize2fs 1.42.9 (28-Dec-2013)

Resizing the filesystem on /dev/myvg/mylv to 15728640 (4k) blocks.

The filesystem on /dev/myvg/mylv is now 15728640 blocks long.

[[email protected] ~]#

第四步:缩减lv的物理边界

[[email protected] ~]# lvreduce -L 60G /dev/myvg/mylv

WARNING: Reducing active logical volume to 60.00 GiB

THIS MAY DESTROY YOUR DATA (filesystem etc.)

Do you really want to reduce mylv? [y/n]: y

Size of logical volume myvg/mylv changed from 79.98 GiB (20476 extents) to 60.00 GiB (15360 extents).

Logical volume mylv successfully resized.

[[email protected] ~]# lvs /dev/myvg/mylv

LV   VG   Attr       LSize  Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert

mylv myvg -wi-a----- 60.00g

[[email protected] ~]#

mylv成功的从80G缩减到了60G

十、逻辑卷快照

很多时候,我们对逻辑卷上的数据做了修改之后,我们还想再次返回原来的状态,那么这个时候逻辑卷快照就派上用场了,这个逻辑卷快照它只会在我们给逻辑卷做快照的那一瞬间,把逻辑卷上原有的所有的数据状态做一个记录下来,并不是完全的复制一个副本,只是在逻辑卷的原有数据发生改变时,才会把快照那一瞬间的原文件复制一个副本保存到快照卷上。当我们需要恢复快照时,可以直接用快照上的文件去替换逻辑卷上被修改过的文件,没有被修改过的文件是不需要做任何操作。由此以来,快照卷的空间大小设定是需要视快照卷使用过程中的数据的修改量决定的。

(一)建立快照:lvcreate -s -n mylv_snap -L 10G -p r /dev/myvg/mylv

1、我们复制一些文件到逻辑卷,并给逻辑卷建立一个快照

[[email protected] ~]# df -h

Filesystem             Size  Used Avail Use% Mounted on

/dev/sda2              5.0G  4.3G  743M  86% /

devtmpfs               899M     0  899M   0% /dev

tmpfs                  913M   84K  913M   1% /dev/shm

tmpfs                  913M  8.9M  904M   1% /run

tmpfs                  913M     0  913M   0% /sys/fs/cgroup

/dev/sda3              4.8G  1.2G  3.4G  26% /test

/dev/sda1              197M  139M   59M  71% /boot

tmpfs                  183M   16K  183M   1% /run/user/42

tmpfs                  183M     0  183M   0% /run/user/0

/dev/mapper/myvg-mylv   59G   52M   57G   1% /mylv

[[email protected] ~]# cp /etc/fstab /mylv

[[email protected] ~]# cp /etc/fstab /mylv/a

[[email protected] ~]# cp /etc/fstab /mylv/b

[[email protected] ~]# ll /mylv

total 28

-rw-r--r--. 1 root root   444 Aug 30 21:55 a

-rw-r--r--. 1 root root   444 Aug 30 21:55 b

-rw-r--r--. 1 root root   444 Aug 30 21:55 fstab

drwx------. 2 root root 16384 Aug 29 22:39 lost+found

[[email protected] ~]# lvcreate -s -n mylv_snap -L 10G -p r /dev/myvg/mylv

Logical volume "mylv_snap" created.

[[email protected] ~]#

成功建立快照,接下来我们去查看一下快照卷上的内容

2、创建一个/snap做为挂载点,并把快照卷挂载上来看看里面的文件状态

[[email protected] ~]# mkdir /snap

[[email protected] ~]# mount /dev/myvg/mylv_snap /snap

mount: /dev/mapper/myvg-mylv_snap is write-protected, mounting read-only

[[email protected] ~]# ll /snap

total 28

-rw-r--r--. 1 root root   444 Aug 30 21:55 a

-rw-r--r--. 1 root root   444 Aug 30 21:55 b

-rw-r--r--. 1 root root   444 Aug 30 21:55 fstab

drwx------. 2 root root 16384 Aug 29 22:39 lost+found

[[email protected] ~]#

现在我们所看到的快照卷上的文件实际上是逻辑卷上文件的一个链接,并不是保存原有逻辑卷上文件的副本,这一点对于刚刚接触逻辑卷快照的同学来说是很难理解的,但其工作原理确实如此。接下来我们修改一下原逻辑卷上的文件,看看快照卷会不会有变化。

3、验证快照卷是否能保留住建立快照那一瞬间的状态

[[email protected] ~]# echo "hello world" >> /mylv/a

[[email protected] ~]# echo "hello world" > /mylv/b

[[email protected] ~]# rm -f /mylv/fstab

[[email protected] ~]# ll /mylv

total 24

-rw-r--r--. 1 root root   456 Aug 30 22:09 a

-rw-r--r--. 1 root root    12 Aug 30 22:10 b

drwx------. 2 root root 16384 Aug 29 22:39 lost+found

[[email protected] ~]# ll /snap

total 28

-rw-r--r--. 1 root root   444 Aug 30 21:55 a

-rw-r--r--. 1 root root   444 Aug 30 21:55 b

-rw-r--r--. 1 root root   444 Aug 30 21:55 fstab

drwx------. 2 root root 16384 Aug 29 22:39 lost+found

[[email protected] ~]#

对比着来看,快照卷上的数据始终停留在拍摄快照的那一瞬间,不管你后面在原逻辑卷上创建、追加、删除多少数据,它是始终如一的。

(二)还原快照

1、首先我们把快照卷上的所有文件打包成了一个压缩文件

[[email protected] ~]# mkdir /tmp/mylvbak

[[email protected] snap]# tar -zcf /tmp/mylvbak/mylv.tar.gz *

[[email protected] snap]# ll /tmp/mylvbak

total 4

-rw-r--r--. 1 root root 488 Aug 30 22:48 mylv.tar.gz

[[email protected] snap]#

打包成功,准备还原

2、卸载快照卷,删除快照卷,解包压缩文件,直接把解包出来的文件移动并覆盖原逻辑卷上的数据也就完成了还原快照的操作

[[email protected] ~]# umount /dev/myvg/mylv_snap

[[email protected] ~]# lvremove /dev/myvg/mylv_snap

Do you really want to remove active logical volume mylv_snap? [y/n]: y

Logical volume "mylv_snap" successfully removed

[[email protected] mylvbak]# tar -xf mylv.tar.gz

[[email protected] mylvbak]# ll

total 16

-rw-r--r--. 1 root root 444 Aug 30 21:55 a

-rw-r--r--. 1 root root 444 Aug 30 21:55 b

-rw-r--r--. 1 root root 444 Aug 30 21:55 fstab

drwx------. 2 root root   6 Aug 29 22:39 lost+found

-rw-r--r--. 1 root root 488 Aug 30 22:48 mylv.tar.gz

[[email protected] mylvbak]#

这一步的操作演示只是为了给大家展示一些原理性的东西,还原快照的操作非常简单,当我们需要还原快照的时候,去建立一个挂载点把快照卷临时挂载上来,复制快照上的数据去覆盖原逻辑卷上的数据即可。当前你在创建快照以后,在原逻辑卷上新建的和创建快照那一瞬间无关的数据,还原快照时是不会有任何更改的。

十一、删除pv

第一种情况:vg上还有剩余空间,并且剩余空间大于我们准备回收的PV的空间,此时我们可以直接使用pvmove把准备回收的pv上的已有数据移动到其它pv上,然后使用pvreomve直接删除pv即可

环境展示

[[email protected] ~]# lvs

LV   VG   Attr       LSize  Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert

mylv myvg -wi-a----- 50.00g

[[email protected] ~]# vgs

VG   #PV #LV #SN Attr   VSize  VFree

myvg   4   1   0 wz--n- 79.98g 29.98g

[[email protected] ~]# pvs

PV         VG   Fmt  Attr PSize  PFree

/dev/sdb   myvg lvm2 a--  20.00g     0

/dev/sdc   myvg lvm2 a--  20.00g     0

/dev/sdd   myvg lvm2 a--  20.00g  9.99g

/dev/sde   myvg lvm2 a--  20.00g 20.00g

[[email protected] ~]#

接下来我们可以移动pv上的数据,回收sdb硬盘

第一步:移动sdb这个pv上的数据

[[email protected] ~]# pvmove /dev/sdb

/dev/sdb: Moved: 0.1%

/dev/sdb: Moved: 21.5%

/dev/sdb: Moved: 46.6%

/dev/sdb: Moved: 71.8%

/dev/sdb: Moved: 97.0%

/dev/sdb: Moved: 100.0%

[[email protected] ~]# pvs

PV         VG   Fmt  Attr PSize  PFree

/dev/sdb   myvg lvm2 a--  20.00g 20.00g

/dev/sdc   myvg lvm2 a--  20.00g     0

/dev/sdd   myvg lvm2 a--  20.00g  9.99g

/dev/sde   myvg lvm2 a--  20.00g     0

[[email protected] ~]#

认真观察一下的朋友都能发现,其实,在我刚才展示的环境下,完全没有必要再移动sdb上的数据了,因为从环境展示的图中可以看出,sde是完全空闲状态的,所以我们选择sdb就可以完全省掉移动数据这个步骤了,这里纯粹是为了给大家展示所有pv上都存放有数据的情况

第二步:从vg中移除sdb这个pv

[[email protected] ~]# vgreduce /dev/myvg /dev/sdb

Removed "/dev/sdb" from volume group "myvg"

[[email protected] ~]# vgs

VG   #PV #LV #SN Attr   VSize  VFree

myvg   3   1   0 wz--n- 59.99g 9.99g

[[email protected] ~]#

已经成功的从vg中的移除sdb这个pv了,现在可以直接删除sdb这个pv了

第三步:删除sdb这个pv

[[email protected] ~]# pvremove /dev/sdb

Labels on physical volume "/dev/sdb" successfully wiped

[[email protected] ~]#

验证一下结果

[[email protected] ~]# pvs

PV         VG   Fmt  Attr PSize  PFree

/dev/sdc   myvg lvm2 a--  20.00g    0

/dev/sdd   myvg lvm2 a--  20.00g 9.99g

/dev/sde   myvg lvm2 a--  20.00g    0

[[email protected] ~]#

现在我们完全可以从服务器上直接拆除sdb这块物理硬盘了,sdb这块硬盘可以用用它处了。

第二种情况:如果vg上没有剩余空间,但是lv上的剩余空间大于我们准备回收的pv的空间,此时我们需要先缩减lv,把准备回收的pv的空间压缩回来,然后再执行第一种情况的操作,只有这样才能把多余的空间彻底释放出来用做它处。

环境展示

[[email protected] ~]# df -h

Filesystem             Size  Used Avail Use% Mounted on

/dev/sda2              5.0G  4.3G  743M  86% /

devtmpfs               899M     0  899M   0% /dev

tmpfs                  913M   84K  913M   1% /dev/shm

tmpfs                  913M  8.9M  904M   1% /run

tmpfs                  913M     0  913M   0% /sys/fs/cgroup

/dev/sda3              4.8G  1.2G  3.4G  26% /test

/dev/sda1              197M  139M   59M  71% /boot

tmpfs                  183M   16K  183M   1% /run/user/42

tmpfs                  183M     0  183M   0% /run/user/0

/dev/mapper/myvg-mylv   50G   52M   47G   1% /mylv

[[email protected] ~]# lvs

LV   VG   Attr       LSize  Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert

mylv myvg -wi-ao---- 50.00g

[[email protected] ~]# vgs

VG   #PV #LV #SN Attr   VSize  VFree

myvg   3   1   0 wz--n- 59.99g 9.99g

[[email protected] ~]# pvs

PV         VG   Fmt  Attr PSize  PFree

/dev/sdc   myvg lvm2 a--  20.00g    0

/dev/sdd   myvg lvm2 a--  20.00g 9.99g

/dev/sde   myvg lvm2 a--  20.00g    0

[[email protected] ~]#

仔细观察一下,可以发现我们同样可以从当前卷组中移除一个20G的pv,只不过这一次我们的步骤就比上一种情况要多一个lv缩减的过程了,因为当前的vg都处于使用中(也就是所有的pv都处于使用中)

第一步:将lv从50G缩减到35G

[[email protected] ~]# umount /dev/myvg/mylv

[[email protected] ~]# e2fsck -f /dev/myvg/mylv

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

mylv: 13/3276800 files (0.0% non-contiguous), 251766/13107200 blocks

[[email protected] ~]# resize2fs /dev/myvg/mylv 35G

resize2fs 1.42.9 (28-Dec-2013)

Resizing the filesystem on /dev/myvg/mylv to 9175040 (4k) blocks.

The filesystem on /dev/myvg/mylv is now 9175040 blocks long.

[[email protected] ~]# lvreduce -L 35G /dev/myvg/mylv

WARNING: Reducing active logical volume to 35.00 GiB

THIS MAY DESTROY YOUR DATA (filesystem etc.)

Do you really want to reduce mylv? [y/n]: y

Size of logical volume myvg/mylv changed from 50.00 GiB (12800 extents) to 35.00 GiB (8960 extents).

Logical volume mylv successfully resized.

[[email protected] ~]# lvs /dev/myvg/mylv

LV   VG   Attr       LSize  Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert

mylv myvg -wi-a----- 35.00g

[[email protected] ~]# vgs

VG   #PV #LV #SN Attr   VSize  VFree

myvg   3   1   0 wz--n- 59.99g 24.99g

[[email protected] ~]#

lv成功的从50G缩减到了35G,现在vg上也就剩余了足够我们回收的空间了,与此同时也就形成了第一种情况的环境,接下来重复一下第一种情况的操作步骤即可

第二步:从vg中移除pv,再删除pv,实现最终目录

[[email protected] ~]# pvs

PV         VG   Fmt  Attr PSize  PFree

/dev/sdc   myvg lvm2 a--  20.00g  4.99g

/dev/sdd   myvg lvm2 a--  20.00g 20.00g

/dev/sde   myvg lvm2 a--  20.00g     0

[[email protected] ~]# vgreduce /dev/myvg /dev/sdd

Removed "/dev/sdd" from volume group "myvg"

[[email protected] ~]# pvremove /dev/sdd

Labels on physical volume "/dev/sdd" successfully wiped

[[email protected] ~]# pvs

PV         VG   Fmt  Attr PSize  PFree

/dev/sdc   myvg lvm2 a--  20.00g 4.99g

/dev/sde   myvg lvm2 a--  20.00g    0

[[email protected] ~]#

因为这次我直接选择了空间处于完全空闲状态的pv,所以在从vg中移除pv之后,不用移动pv上的数据,就可以直接删除pv了

关于逻辑卷的操作也就分享这么多,大家对着教程多做几次实验基本掌握应该没问题。重点在于如何扩展和缩减逻辑卷,尤其是缩减的过种中涉及到步骤比较多,操作的先后顺序必须清析,才能成功实现。当然是实际生产环境中,缩减的情况比较少,大多都是空间不够了扩展的比较多。

时间: 2024-10-31 16:57:12

linux高级文件系统管理——LVM的相关文章

linux高级文件系统管理概述:处理交换分区、设置文件系统配额、配置raid和逻辑卷

8月26号,学习了linux(CentOS6.8)文件系统管理,内容颇多,主要分为如下几个部分: 一.处理交换分区和文件及移动介质的使用 二.常见工具free,df,du,dd的使用 三.设置文件系统配额 四.配置raid 五.配置逻辑卷 六.btrfs文件系统 一.处理交换分区和文件及移动介质的使用 交换分区是系统RAM的补充 基本设置包括: 创建交换分区或者文件 使用mkswap写入特殊签名 在/etc/fstab文件中添加适当的条目 使用swapon -a 激活交换空间 1.挂载交换分区

linux高级文件系统管理——btrfs

前几天,关于高级文件系统方面也给大家分享过RAID和LVM,今天给大家分享的这款文件系统可能比这两者更先进,可以将其二者合二为一.第一,它可以使用磁盘或者分区大小不一样的设备组建RAID:第二,它可以做到像LVM一样,随时扩展以及缩减使用空间,LVM支持在线扩展,但不能支持在线缩减,btrfs同时支持在线扩展和在线缩减:并且支持一条命令直接创建出带RAID功能的LV.所以个人体验之后觉得相当不错,分享于大家. 一.btrfs文件系统定义 1.Btrfs (B-tree, Butter FS, B

Linux 第15天: (08月29日) Linux高级文件系统管理

本章内容设定文件系统配额设定和管理软RAID设备配置逻辑卷设定LVM快照btrfs文件系统 配置配额系统综述在内核中执行以文件系统为单位启用对不同组或者用户的策略不同根据块或者节点进行限制执行软限制(soft limit)硬限制(hard limit)初始化分区挂载选项:usrquota.grpquota初始化数据库:quotacheck 为用户设定配额执行开启或者取消配额:quotaon.quotaoff直接编辑配额:edquota username在shell中直接编辑:setquota u

linux高级文件系统管理——RAID

作为大型企业,很多时候数据量相当庞大,由此以来对磁盘空间的要求比较高,更重要是的对数据的完整性的追求.所以单独的磁盘不仅空间使用满足不了,数据的完整性更是无从谈起,所以也就出现了专业的数据存储技术,而RAID是其中应用比较广泛,也是历史比较悠久的存数据储技术了.今天就给大家分享一下RAID的一些基本概念以及软件RAID的实现方法. 一.RAID的定义 RAID:Redundant Arrays of Inexpensive(Independent) Disks 1988年由加利福尼亚大学伯克利分

Linux运维 第二阶段 (七)高级文件系统管理

Linux运维第二阶段(七)高级文件系统管理 一.磁盘配额: 多用户共同使用一个硬盘,管理员应适当限制硬盘的空间,以妥善分配系统资源. #grepCONFIG_QUOTA /boot/config-2.6.32-279.el6.i686 #rpm–qa | grep quota 用户配额和组配额:磁盘容量限制和文件个数限制:软限制和硬限制:宽限时间. 注:如果用户的空间处于软限制和硬限制之间,系统会在用户登录时警告将满,宽限时间默认7天,如果达到了宽限时间未调整,软限制就会升级为硬限制. #mo

Linux之文件系统管理

文件系统不仅包含着文件中的数据而且还有文件系统的结构,不同Linux发行版本之间的文件系统差别很少,主要表现在系统管理的特色工具以及软件包管理方式的不同,文件目录结构基本上都是一样的. Linux的文件结构是单个的树状结构,根目录是"/",其他目录都要位于根目录下.每个目录一般都存放 特定类型的文件,下表常见目录: /  根目录,只能包含目录,不能包含具体文件 /bin  存放可执行文件.很多命令就对应/bin目录下的某个程序,例如 ls.cp.mkdir./bin目录对 所有用户有效

高级文件系统管理之mdadm与lvm的创建

※配置配额系统 磁盘配额就是管理员可以为用户所能使用的磁盘空间进行配额限制,每一用户只能使用最大配额范围内的磁盘空间,比如一些网盘就是基于这个功能来做的,分配给用户固定的空间,花钱买,可以将空间设置的更大. 功能作用 磁盘配额可以限制指定账户能够使用的磁盘空间,这样可以避免因某个用户的过度的使用磁盘空间造成其它用户无法运行或工作甚至影响系统运行.这个功能不止是linux有,windows系统当中也有磁盘配额. 综述 它是在内核中运行的,以文件系统为单位启用,对不同组合用户的策略不同,根据块或者节

高级文件系统管理——Linux基本命令(15)

1.配置配额 (1)初始化 分区挂载选项:usrquota.grpquota(用户挂载,组挂载) 初始化数据库:quotacheck -cug /home (2)执行 开启或者取消配额功能:quotaon.quotaoff (开启之后发现就无法删除了,被保护了) 直接编辑配额:edquota -u/g username(对用户.对组做配额限制) 分别对文件的大小和数量进行限制.软限制就是可以允许超过软限制会发出警告,而硬限制不允许超过.因此设置的时候,软应该小于硬. 在shell中直接编辑: s

Linux文件系统管理—LVM

1.LVM的基本简介 LVM:logical Volume Manager,逻辑卷管理,其目的在于可以弹性调整文件系统容量.LVM建立在硬盘和分区之上的一个逻辑层,来提高磁盘分区管理的灵活性,它可以整合多个物理分区在一起,让这些分区看起来像一个磁盘,而且,还可以将其他物理分区添加LVM中或从这个LVM管理的磁盘中删除. 2.LVM基本术语 PV:Physical Volume物理卷,就是指硬盘分区或从逻辑上与磁盘分区具有同样功能的设备(如RAID),是LVM的基本存储逻辑块,但和基本的物理存储介