本節(jié)介紹如何對(duì)LVM進(jìn)行擴(kuò)容。
1、擴(kuò)展LV
現(xiàn)在假設(shè)lvol0的大小不夠用了。我們將vgpool1中剩余的4.99G都分配給他,對(duì)該LV進(jìn)行擴(kuò)容。
[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 ~]#
此時(shí)只是LV的大小增加了,可是文件系統(tǒng)的大小并沒(méi)有增加。
[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將文件系統(tǒng)的容量增加(若使用的是ext系列的文件系統(tǒng),則使用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確實(shí)增加了,使用df命令可以觀察到,文件系統(tǒng)也確實(shí)增加了:
[root@localhost srv]# df -Th | grep lvol0
/dev/mapper/vgpool1-lvol0 xfs 25G33M 25G 1% /mnt/lvmpool0_mount
關(guān)于LV縮容:
1、xfs文件系統(tǒng)不支持縮容
2、如果使用的是ext系列的文件系統(tǒng),在e2fsck檢測(cè)通過(guò)后,先用resize2fs將文件系統(tǒng)大小減少。然后可以使用lvreduce進(jìn)行縮容(該命令用法與lvextend基本一致)。建議先備份數(shù)據(jù),以免數(shù)據(jù)丟失。
2、擴(kuò)展VG
假設(shè)現(xiàn)在24.99G依然不夠用,由于VG的空間已經(jīng)使用完了,我們可以再?gòu)膕dc上分出一個(gè)5G的分區(qū),并把它加入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似乎沒(méi)有識(shí)別出來(lái)
[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
我們前面講過(guò),可以使用partx重讀分區(qū)表
[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 ~]#
此時(shí)內(nèi)核成功識(shí)別分區(qū),
創(chuàng)建PV并擴(kuò)展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
此時(shí)查看VG信息則可以發(fā)現(xiàn),VG大小擴(kuò)展至29.99GB(實(shí)際可能略有不足,7677*4M約為29.988G),已經(jīng)分配(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
此時(shí)VG已經(jīng)擴(kuò)展成功,再按需創(chuàng)建或者擴(kuò)展LV即可,在此不再贅述。
3、LVM快照
快照是對(duì)數(shù)據(jù)備份的一種方式,是從邏輯/軟件層面對(duì)數(shù)據(jù)的一種保護(hù)。
快照的建立必須快速,實(shí)時(shí)、準(zhǔn)確地記錄當(dāng)前狀態(tài)。(如果快照進(jìn)行十分緩慢的話,快照前后的數(shù)據(jù)很容易產(chǎn)生不一致的現(xiàn)象,你可以想象:拍照片一瞬間就能記錄你當(dāng)前的樣子,如果照片生成的特別慢,你可能最后得到的是嬰兒時(shí)期的頭部,少年時(shí)期的身體,老年時(shí)期的腿)。
由于實(shí)時(shí)、快速的要求,LVM的快照機(jī)制是這樣的:
劃出一塊沒(méi)有用的區(qū)域(這個(gè)過(guò)程速度很快)。劃分完畢之后,只記錄LV上發(fā)生變化的數(shù)據(jù),沒(méi)有發(fā)生變化的數(shù)據(jù)不記錄。因此,創(chuàng)建快照很快(創(chuàng)建之初大小為0),隨著數(shù)據(jù)變化增多,快照慢慢變大。
我們接下來(lái)創(chuàng)建一個(gè)快照,并嘗試用該快照恢復(fù)文件。
首先,我們?cè)贚V上創(chuàng)建10個(gè)文件模擬已有的環(huán)境:
[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這個(gè)邏輯卷創(chuàng)建快照,快照最大為1G,如下所示(-L選項(xiàng)指定大小,-s表示創(chuàng)建快照,-n指定名字為snap_lv0,這些選項(xiàng)含義從man手冊(cè)中都能找到):
[root@localhost lvmpool0_mount]# lvcreate -L 1G -s -n snap_lv0 /dev/vgpool1/lvol0
Logical volume "snap_lv0" created.
[root@localhost lvmpool0_mount]#
可以看到設(shè)備文件已經(jīng)生成了。
[root@localhost lvmpool0_mount]# ls /dev/vgpool1/
lvol0snap_lv0
現(xiàn)在我們將這些文件全部刪除
[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之前的文件系統(tǒng)還原出來(lái):
[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.
報(bào)錯(cuò)了。查看dmesg發(fā)現(xiàn),掛載的過(guò)程中產(chǎn)生了UUID(一種設(shè)備標(biāo)識(shí))沖突。我們之前創(chuàng)建的LV使用的是xfs的文件系統(tǒng),該文件系統(tǒng)默認(rèn)不允許同時(shí)掛載兩個(gè)相同的UUID的塊設(shè)備。而快照后快照設(shè)備的UUID與LV是相同的。因此mount時(shí)要用特殊選項(xiàng)-o nouuid去規(guī)避:
[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]#
看到了么,掛載快照后發(fā)現(xiàn),快照完好地重現(xiàn)了數(shù)據(jù)刪除前的場(chǎng)景,我們將這些文件拷貝回去即可。
因此,lvm快照可以在很大程度上避免因?yàn)檎J(rèn)為的誤操作(如誤刪、誤寫(xiě))導(dǎo)致的數(shù)據(jù)丟失。然而,如果是磁盤(pán)級(jí)別的故障導(dǎo)致的數(shù)據(jù)丟失,則快照毫無(wú)辦法。數(shù)據(jù)是企業(yè)的生命,因此衍生了大量的數(shù)據(jù)備份、冗余解決方案。更有專(zhuān)門(mén)的存儲(chǔ)設(shè)備廠商生產(chǎn)專(zhuān)門(mén)的存儲(chǔ)設(shè)備、提供相關(guān)的解決方案。這些東西暫時(shí)超出了目前介紹的范疇,大家了解即可。
在主機(jī)級(jí)別上,也有著常見(jiàn)的解決方案—RAID。他可以在磁盤(pán)級(jí)別為我們提供數(shù)據(jù)安全(一塊或多塊盤(pán)壞了數(shù)據(jù)不丟失甚至業(yè)務(wù)不中斷)。下一節(jié)為大家簡(jiǎn)單介紹RAID技術(shù)。
關(guān)注本公眾號(hào)獲取最新更新
每周一、三、五穩(wěn)定更新