站长资讯网
最全最丰富的资讯网站

Linux入门解析

Linux入门解析

本节介绍如何对LVM进行扩容。

1、扩展LV

现在假设lvol0的大小不够用了。我们将vgpool1中剩余的4.99G都分配给他,对该LV进行扩容。

[root@localhost ~]# lvextend -L +4.99G/dev/vgpool1/lvol0

Rounding size to boundary between physical extents: 4.99 GiB.

Size of logical volume vgpool1/lvol0 changed from 20.00 GiB (5120extents) to 24.99 GiB (6398 extents).

Logical volume vgpool1/lvol0 successfully resized.

[root@localhost ~]#

此时只是LV的大小增加了,可是文件系统的大小并没有增加。

[root@localhost ~]# lvscan | grep lvol0

ACTIVE'/dev/vgpool1/lvol0' [24.99 GiB] inherit

[root@localhost ~]# df -h | grep lvol0

/dev/mapper/vgpool1-lvol0 20G33M 20G 1% /mnt/lvmpool0_mount

[root@localhost ~]#

使用xfs_growfs将文件系统的容量增加(若使用的是ext系列的文件系统,则使用resize2fs)

[root@localhost srv]# xfs_growfs /mnt/lvmpool0_mount/

meta-data=/dev/mapper/vgpool1-lvol0isize=512 agcount=4, agsize=1310720blks

=sectsz=512 attr=2, projid32bit=1

= crc=1 finobt=0 spinodes=0

data=bsize=4096 blocks=5242880,imaxpct=25

=sunit=0 swidth=0 blks

naming=version 2bsize=4096 ascii-ci=0 ftype=1

log=internalbsize=4096 blocks=2560,version=2

=sectsz=512 sunit=0 blks,lazy-count=1

realtime =none extsz=4096 blocks=0, rtextents=0

data blocks changed from 5242880 to 6551552

我们可以看到block确实增加了,使用df命令可以观察到,文件系统也确实增加了:

[root@localhost srv]# df -Th | grep lvol0

/dev/mapper/vgpool1-lvol0 xfs 25G33M 25G 1% /mnt/lvmpool0_mount

关于LV缩容:

1、xfs文件系统不支持缩容

2、如果使用的是ext系列的文件系统,在e2fsck检测通过后,先用resize2fs将文件系统大小减少。然后可以使用lvreduce进行缩容(该命令用法与lvextend基本一致)。建议先备份数据,以免数据丢失。

2、扩展VG

假设现在24.99G依然不够用,由于VG的空间已经使用完了,我们可以再从sdc上分出一个5G的分区,并把它加入VG中

[root@localhost ~]# fdisk /dev/sdc

Welcome to fdisk (util-linux 2.23.2).

Changes will remain in memory only, untilyou decide to write them.

Be careful before using the write command.

Command (m for help): p

Disk /dev/sdc: 21.5 GB, 21474836480 bytes,41943040 sectors

Units = sectors of 1 * 512 = 512 bytes

Sector size (logical/physical): 512 bytes /512 bytes

I/O size (minimum/optimal): 512 bytes / 512bytes

Disk label type: dos

Disk identifier: 0xa8ca5dfd

Device Boot Start End BlocksId System

/dev/sdc1 2048 104878075242880 8e Linux LVM

Command (m for help): n

Partition type:

p primary (1 primary, 0 extended,3 free)

e extended

Select (default p): p

Partition number (2-4, default 2):

First sector (10487808-41943039, default10487808):

Using default value 10487808

Last sector, +sectors or +size{K,M,G}(10487808-41943039, default 41943039): +5G

Partition 2 of type Linux and of size 5 GiBis set

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 'LinuxLVM'

Command (m for help): p

Disk /dev/sdc: 21.5 GB, 21474836480 bytes,41943040 sectors

Units = sectors of 1 * 512 = 512 bytes

Sector size (logical/physical): 512 bytes /512 bytes

I/O size (minimum/optimal): 512 bytes / 512bytes

Disk label type: dos

Disk identifier: 0xa8ca5dfd

Device Boot Start End BlocksId System

/dev/sdc1 2048 104878075242880 8e Linux LVM

/dev/sdc2 10487808 209735675242880 8e Linux LVM

Command (m for help): w

The partition table has been altered!

Calling ioctl() to re-read partition table.

WARNING: Re-reading the partition tablefailed with error 16: Device or resource busy.

The kernel still uses the old table. Thenew table will be used at

the next reboot or after you runpartprobe(8) or kpartx(8)

Syncing disks.

[root@localhost ~]#

[root@localhost ~]# ls /dev/sd*

/dev/sda/dev/sda1 /dev/sda2 /dev/sdb/dev/sdc /dev/sdc1

sdc2似乎没有识别出来

[root@localhost ~]# cat /proc/partitions

major minor#blocks name

8 0 20971520 sda

8 11048576 sda1

8 2 19921920 sda2

8 16 20971520 sdb

8 32 20971520 sdc

8 33 5242880 sdc1

11 0 927744 sr0

2530 17821696 dm-0

2531 2097152 dm-1

2532 26206208 dm-2

我们前面讲过,可以使用partx重读分区表

[root@localhost ~]# partx -a /dev/sdc

partx: /dev/sdc: error adding partition 1

[root@localhost ~]# partx -a /dev/sdc

partx: /dev/sdc: error adding partitions1-2

[root@localhost ~]# cat /proc/partitions

major minor#blocks name

8 0 20971520 sda

8 1 1048576 sda1

8 2 19921920 sda2

8 16 20971520 sdb

8 32 20971520 sdc

8 33 5242880 sdc1

8 34 5242880 sdc2

11 0 927744 sr0

2530 17821696 dm-0

2531 2097152 dm-1

2532 26206208 dm-2

[root@localhost ~]#

此时内核成功识别分区,

创建PV并扩展VG

[root@localhost ~]# pvcreate /dev/sdc2

Physical volume "/dev/sdc2" successfully created.

[root@localhost ~]# man vgextend

[root@localhost ~]# vgextend /dev/vgpool1 /dev/sdc2

Volume group "vgpool1" successfully extended

此时查看VG信息则可以发现,VG大小扩展至29.99GB(实际可能略有不足,7677*4M约为29.988G),已经分配(Alloc PE)了24.99G,剩余(free PE)约5G(1279*4M)

[root@localhost ~]# vgdisplay /dev/vgpool1

—Volume group —

VGName vgpool1

System ID

Format lvm2

Metadata Areas 3

Metadata Sequence No 4

VGAccess read/write

VGStatus resizable

MAXLV 0

CurLV 1

Open LV 1

MaxPV 0

CurPV 3

ActPV 3

VGSize <29.99 GiB

PESize 4.00 MiB

Total PE 7677

Alloc PE / Size 6398 / 24.99GiB

Free PE / Size 1279 / <5.00 GiB

VGUUIDyTpx8x-z3ic-JWY2-BPTv-T5rg-NIKr-sz4LeY

此时VG已经扩展成功,再按需创建或者扩展LV即可,在此不再赘述。

3、LVM快照

快照是对数据备份的一种方式,是从逻辑/软件层面对数据的一种保护。

快照的建立必须快速,实时、准确地记录当前状态。(如果快照进行十分缓慢的话,快照前后的数据很容易产生不一致的现象,你可以想象:拍照片一瞬间就能记录你当前的样子,如果照片生成的特别慢,你可能最后得到的是婴儿时期的头部,少年时期的身体,老年时期的腿)。

由于实时、快速的要求,LVM的快照机制是这样的:

划出一块没有用的区域(这个过程速度很快)。划分完毕之后,只记录LV上发生变化的数据,没有发生变化的数据不记录。因此,创建快照很快(创建之初大小为0),随着数据变化增多,快照慢慢变大。

我们接下来创建一个快照,并尝试用该快照恢复文件。

首先,我们在LV上创建10个文件模拟已有的环境:

[root@localhost ~]# cd /mnt/lvmpool0_mount/

[root@localhost lvmpool0_mount]# for i in{1..10};do touch file_$i ;done

[root@localhost lvmpool0_mount]# ls

file_1file_10 file_2 file_3file_4 file_5 file_6file_7 file_8 file_9

[root@localhost lvmpool0_mount]#

给lvol0这个逻辑卷创建快照,快照最大为1G,如下所示(-L选项指定大小,-s表示创建快照,-n指定名字为snap_lv0,这些选项含义从man手册中都能找到):

[root@localhost lvmpool0_mount]# lvcreate -L 1G -s -n snap_lv0 /dev/vgpool1/lvol0

Logical volume "snap_lv0" created.

[root@localhost lvmpool0_mount]#

可以看到设备文件已经生成了。

[root@localhost lvmpool0_mount]# ls /dev/vgpool1/

lvol0snap_lv0

现在我们将这些文件全部删除

[root@localhost lvmpool0_mount]# ls

file_1file_10 file_2 file_3file_4 file_5 file_6file_7 file_8 file_9

[root@localhost lvmpool0_mount]# rm -f file_*

[root@localhost lvmpool0_mount]# ls

[root@localhost lvmpool0_mount]#

我们将快照文件挂载到某一目录,该快照可以将LV之前的文件系统还原出来:

[root@localhost mnt]# mount /dev/vgpool1/snap_lv0 /mnt/snap_point/

mount: wrong fs type, bad option, badsuperblock on /dev/mapper/vgpool1-snap_lv0,

missing codepage or helper program, orother error

In some cases useful info is found in syslog – try

dmesg | tail or so.

报错了。查看dmesg发现,挂载的过程中产生了UUID(一种设备标识)冲突。我们之前创建的LV使用的是xfs的文件系统,该文件系统默认不允许同时挂载两个相同的UUID的块设备。而快照后快照设备的UUID与LV是相同的。因此mount时要用特殊选项-o nouuid去规避:

[root@localhost dev]# blkid /dev/vgpool1/lvol0

/dev/vgpool1/lvol0:UUID="47f14142-866e-4c3c-86d8-84b8c9f4c3de" TYPE="xfs"

[root@localhost dev]# blkid/dev/vgpool1/snap_lv0

/dev/vgpool1/snap_lv0: UUID="47f14142-866e-4c3c-86d8-84b8c9f4c3de"TYPE="xfs"

[root@localhost dev]#

[root@localhost dev]# mount -o nouuid /dev/vgpool1/snap_lv0 /mnt/snap_point/

[root@localhost dev]# cd /mnt/snap_point/

[root@localhost snap_point]# ls

file_1file_10 file_2 file_3file_4 file_5 file_6file_7 file_8 file_9

[root@localhost snap_point]#

看到了么,挂载快照后发现,快照完好地重现了数据删除前的场景,我们将这些文件拷贝回去即可。

因此,lvm快照可以在很大程度上避免因为认为的误操作(如误删、误写)导致的数据丢失。然而,如果是磁盘级别的故障导致的数据丢失,则快照毫无办法。数据是企业的生命,因此衍生了大量的数据备份、冗余解决方案。更有专门的存储设备厂商生产专门的存储设备、提供相关的解决方案。这些东西暂时超出了目前介绍的范畴,大家了解即可。

在主机级别上,也有着常见的解决方案—RAID。他可以在磁盘级别为我们提供数据安全(一块或多块盘坏了数据不丢失甚至业务不中断)。下一节为大家简单介绍RAID技术。

关注本公众号获取最新更新

每周一、三、五稳定更新

Linux入门解析

赞(0)
分享到: 更多 (0)
网站地图   沪ICP备18035694号-2    沪公网安备31011702889846号