LVM的創建
本次實驗的環境是RHEL6系統,一個分區,一塊磁盤,一個RAID0設備。所以你的環境至少有三個磁盤,一個分區,爲了後面的實驗,你還需要有更多的空間,爲了擴大LVM。
關於環境的搭建,我相信通過前面的學習,因爲不會有問題了!如果你不太瞭解RAID創建的話,參考前面的課程:http://www.opsers.org/base/learning-linux-the-day-that-the-system-configuration-in-the-rhel6-disk-array-raid.html
我這裏就快速的搭建一下。
創建個分區
[root@yufei ~]# fdisk /dev/sdb
Command (m for help): n
Command action
e extended
p primary partition (1-4)
p
Partition number (1-4): 1
First cylinder (1-261, default 1):
Using default value 1
Last cylinder, +cylinders or +size{K,M,G} (1-261, default 261):
Using default value 261
Command (m for help): w
創建個RAID0
[root@yufei ~]# mdadm -C /dev/md0 -l0 -n2 /dev/sd{c,d}
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md0 started.
[root@yufei ~]# mdadm -Ds >> /etc/mdadm.conf
現在我們用三個設備來做,一個分區sdb1 一個RAID設備md0 一個磁盤sde
下面就來演示LVM的的創建過程
1、創建PV
[root@yufei ~]# pvcreate /dev/sdb1 /dev/sde /dev/md0
Physical volume "/dev/sdb1" successfully created
Physical volume "/dev/sde" successfully created
Physical volume "/dev/md0" successfully created
三個設備類型:分區、磁盤、RAID
查看PV創建出來的結果
[root@yufei ~]# pvdisplay
"/dev/md0" is a new physical volume of "4.00 GiB"
--- NEW Physical volume ---
PV Name /dev/md0
VG Name
PV Size 4.00 GiB
Allocatable NO
PE Size 0
Total PE 0
Free PE 0
Allocated PE 0
PV UUID 66E15n-AkNA-5mu8-dy4S-TGTZ-8UoK-dVH8Gd
"/dev/sdb1" is a new physical volume of "2.00 GiB"
--- NEW Physical volume ---
PV Name /dev/sdb1
VG Name
PV Size 2.00 GiB
Allocatable NO
PE Size 0
Total PE 0
Free PE 0
Allocated PE 0
PV UUID gDhuiG-Rfkk-rwoR-D2ux-jlhj-tpRS-ANbrGC
"/dev/sde" is a new physical volume of "2.00 GiB"
--- NEW Physical volume ---
PV Name /dev/sde
VG Name
PV Size 2.00 GiB
Allocatable NO
PE Size 0
Total PE 0
Free PE 0
Allocated PE 0
PV UUID zz1nd4-JMZm-DN0O-25Ae-QIQ8-HfM7-nGQJEY
RAID0是4G,分區sdb1是2G,磁盤sde是2G
2、創建VG
[root@yufei ~]# vgcreate VG0 /dev/sdb1 /dev/sde /dev/md0
Volume group "VG0" successfully created
參數說明:
VG0:創建的VG設備的名字,隨便起。
後面接的是設備
整個命令的意思就是:把三個設備組合成一個VG0設備
查看VG0的信息
[root@yufei ~]# vgdisplay
--- Volume group ---
VG Name VG0
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 7.99 GiB
PE Size 4.00 MiB
Total PE 2045
Alloc PE / Size 0 / 0
Free PE / Size 2045 / 7.99 GiB
VG UUID 690fRw-0HIo-rlXZ-WpOZ-5xjv-Em36-ZqtKDA
三個設備加起來是8G,我們這裏也是顯示的8G啊。這裏面PE的大小是4M,如果想設置這個值,可以在創建VG的時候加上-s並指定大小
3、從VG中劃分出LV
[root@yufei ~]# lvcreate -L 1G -n lv1 VG0
Logical volume "lv1" created
參數說明:
-L 指定創建LV大小
-l 指定創建LV的PE數量
-n LV的名字
上面命令的意思是:從VG0中分出1G的空間給LV1使用
查看LV的信息
[root@yufei ~]# lvdisplay
--- Logical volume ---
LV Name /dev/VG0/lv1
VG Name VG0
LV UUID U4yTiy-s25E-Qori-oKTd-TUam-ylA2-nv02Ce
LV Write Access read/write
LV Status available
# open 0
LV Size 1.00 GiB
Current LE 256
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 256
Block device 253:0
這個LV設備的路徑,是系統方便我們管理,而自動設置此格式的。
4、格式化LV
[root@yufei ~]# mkfs.ext4 /dev/VG0/lv1
5、掛載使用
[root@yufei ~]# mount /dev/VG0/lv1 /mnt
[root@yufei ~]# df
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/sda1 15118728 7082808 7267920 50% /
tmpfs 255784 0 255784 0% /dev/shm
/dev/mapper/VG0-lv1 1032088 34052 945608 4% /mnt
把掛載信息加入到/etc/fstab
/dev/VG0/lv1 /mnt ext4 defaults 0 0
爲了繼續下面的實驗,我們向此設備中增加一些數據
[root@yufei ~]# touch /mnt/testfile
[root@yufei ~]# touch /mnt/testfile1
[root@yufei ~]# touch /mnt/testfile2
[root@yufei ~]# ls /mnt
lost+found testfile testfile1 testfile2
LVM的擴容操作
假設:我的這個LV1空間不夠用了,我要怎麼辦呢?
因爲我們的VG0空間還有剩餘,所以我們可以從VG0中再分配點空間給LV
下面看如何實現
[root@yufei ~]# lvextend -L +1G /dev/VG0/lv1
Extending logical volume lv1 to 2.00 GiB
Logical volume lv1 successfully resized
這裏面的-L/-l和上面是一樣的意思,就是一個是PE值,一個是空間大小
而“+”就是在原有的基礎上加多少
如果不加“+”就表示這個LV的空間是多少
注意看上面的信息是說,lv1已經擴展到2G的大小了
但我們用df命令查看還是1G,爲什麼呢?
[root@yufei ~]# df -H
Filesystem Size Used Avail Use% Mounted on
/dev/sda1 16G 7.3G 7.5G 50% /
tmpfs 262M 0 262M 0% /dev/shm
/dev/mapper/VG0-lv1 1.1G 35M 969M 4% /mnt
繼續看下面的操作
[root@yufei ~]# resize2fs /dev/VG0/lv1
resize2fs 1.41.12 (17-May-2010)
Filesystem at /dev/VG0/lv1 is mounted on /mnt; on-line resizing required
old desc_blocks = 1, new_desc_blocks = 1
Performing an on-line resize of /dev/VG0/lv1 to 524288 (4k) blocks.
The filesystem on /dev/VG0/lv1 is now 524288 blocks long.
這時候再看
[root@yufei ~]# df -H
Filesystem Size Used Avail Use% Mounted on
/dev/sda1 16G 7.3G 7.5G 50% /
tmpfs 262M 0 262M 0% /dev/shm
/dev/mapper/VG0-lv1 2.2G 36M 2.0G 2% /mnt
哈哈已經變成了2G了
我們再來觀察一下看看裏面的數據也是正常的
注意,我們整個操作都是在線的哦,沒有umount過文件系統啊。
假設:我的VG0空間不夠用了,那要怎麼辦?
一種方法:通過PV來增加
你可以增加硬盤或者分區,然後再創建PV設備,然後把他加入VG中就可以了。下面我們以硬盤爲例/dev/sdf。
1、創建PV
[root@yufei ~]# pvcreate /dev/sdf
Physical volume "/dev/sdf" successfully created
2、拉昇VG
[root@yufei ~]# vgextend VG0 /dev/sdf
Volume group "VG0" successfully extended
[root@yufei ~]# vgdisplay
--- Volume group ---
VG Name VG0
System ID
Format lvm2
Metadata Areas 4
Metadata Sequence No 4
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 1
Open LV 1
Max PV 0
Cur PV 4
Act PV 4
VG Size 9.98 GiB
PE Size 4.00 MiB
Total PE 2556
Alloc PE / Size 512 / 2.00 GiB
Free PE / Size 2044 / 7.98 GiB
VG UUID 690fRw-0HIo-rlXZ-WpOZ-5xjv-Em36-ZqtKDA
此時的VG0已經由8G變成了10G了。
第二種方法,通過擴展RAID設備的容量,來增加VG的容量
(強烈建議先路過此內容,最後再進行此實驗)由於前面我們是用RAID0來做的實驗,但這個RAID0只能重新創建才能正常擴容(爲什麼是這樣,請參考:http://www.opsers.org/base/add-on-to-the-hard-disk-raid0-invalid-argument-error-message-to-the-construction.html)所以我們需要就把RAID0重新做成RAID5。
0、刪除以前做的LVM(參見本文章),刪除RAID0(參見http://www.opsers.org/base/learning-linux-the-day-that-the-system-configuration-in-the-rhel6-disk-array-raid.html)
1、創建RAID5
[root@yufei ~]# mdadm -C /dev/md5 -l5 -n3 /dev/sd{c,d,e}
[root@yufei ~]# mdadm -Ds >> /etc/mdadm.conf
[root@yufei ~]# mdadm -D /dev/md5
/dev/md5:
Version : 1.2
Creation Time : Thu Jun 2 17:06:33 2011
Raid Level : raid5
Array Size : 4191232 (4.00 GiB 4.29 GB)
這裏MD5是4G的空間
2、創建PV
[root@yufei ~]# pvcreate /dev/sdb1 /dev/md5
Physical volume "/dev/sdb1" successfully created
Physical volume "/dev/md5" successfully created
3、創建VG
[root@yufei ~]# vgcreate VG0 /dev/sdb1 /dev/md5
Volume group "VG0" successfully created
4、查看VG大小情況
[root@yufei ~]# vgdisplay VG0 |grep "VG Size"
VG Size 5.99 GiB
因爲後面的LV我們不需要,所以LV就不創建了,直接演示通過向RAID5中增加磁盤來實現VG的擴容
5、向RAID5中增加一磁盤
[root@yufei ~]# mdadm /dev/md5 -a /dev/sdf
mdadm: added /dev/sdf
[root@yufei ~]# mdadm -G /dev/md5 -n4
mdadm: Need to backup 3072K of critical section..
[root@yufei ~]# mdadm -D /dev/md5
/dev/md5:
Version : 1.2
Creation Time : Thu Jun 2 17:06:33 2011
Raid Level : raid5
Array Size : 6286848 (6.00 GiB 6.44 GB)
這時候RAID5的空間增加了2G了
6、擴展VG
再來查看一下VG的大小,發現還是6G
[root@yufei ~]# vgdisplay VG0 |grep "VG Size"
VG Size 5.99 GiB
因爲/dev/md5的大小變化了,所以我們需要調整PV大小
[root@yufei ~]# pvresize /dev/md5
Physical volume "/dev/md5" changed
1 physical volume(s) resized / 0 physical volume(s) not resized
再來看一下VG的容量,發現增加了
[root@yufei ~]# vgdisplay VG0 |grep "VG Size"
VG Size 7.99 GiB
LVM的減少操作
既然可以增加,當然也可以減少,下面我們還是分兩個方面來給大家講解
縮小LV
這個和增加LV空間不同,他需要離線來處理,下面是操作步驟,不要把步驟或操作搞錯哦,如果系統的根在LVM上的話,可能會導致進入不了系統。所以縮小一定要慎重。
1、umount文件系統
[root@yufei ~]# umount /mnt
2、檢測LV
[root@yufei ~]# e2fsck -f /dev/VG0/lv1
e2fsck 1.41.12 (17-May-2010)
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/lv1: 15/131072 files (0.0% non-contiguous), 16812/524288 blocks
3、設置縮小到的空間大小
[root@yufei ~]# resize2fs /dev/VG0/lv1 500M
resize2fs 1.41.12 (17-May-2010)
Resizing the filesystem on /dev/VG0/lv1 to 128000 (4k) blocks.
The filesystem on /dev/VG0/lv1 is now 128000 blocks long.
4、縮小LV的大小
這時候,LV的大小其實還沒有改變,可以通過lvdisplay查看,我們需要縮小LV的大小
[root@yufei ~]# lvreduce /dev/VG0/lv1 -L 500M
WARNING: Reducing active logical volume to 500.00 MiB
THIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really want to reduce lv1? [y/n]: y
Reducing logical volume lv1 to 500.00 MiB
Logical volume lv1 successfully resized
再用lvdisplay查看一次LV的情況,發現此時已經縮小到了500M了
注意:這裏面可以用-1500M來操作,就是減少多少的意思,而不加“-”就表示到多少的意思,和上面的類似。
5、重新掛載上查看數據情況
[root@yufei ~]# mount -a
[root@yufei ~]# df -H
Filesystem Size Used Avail Use% Mounted on
/dev/sda1 16G 7.3G 7.5G 50% /
tmpfs 262M 0 262M 0% /dev/shm
/dev/mapper/VG0-lv1 516M 35M 456M 8% /mnt
[root@yufei ~]# ls /mnt
lost+found testfile testfile1 testfile2
一切正常
注意:
1、第2步和第3步不能顛倒。
2、第3步設置縮小到的空間大小,不能小於裏面數據的大小
3、第4步縮小LV的大小應與第2步設置的一樣
縮小VG
1、umount lv設備
[root@yufei ~]# umount /mnt
1、用pvdisplay查看VG中的設備
[root@yufei ~]# pvdisplay
省略
--- Physical volume ---
PV Name /dev/sdf
VG Name VG0
PV Size 2.00 GiB / not usable 4.00 MiB
Allocatable yes
PE Size 4.00 MiB
Total PE 511
Free PE 511
Allocated PE 0
PV UUID YvnosK-Hi2U-21YE-wRFU-63C7-KUdo-1ul6oy
我就以此PV爲例來演示
2、移除裏面的pv設備
先查看VG的大小
[root@yufei ~]# vgreduce VG0 /dev/sdf
Removed "/dev/sdf" from volume group "VG0"
再次查看VG的大小,發現已經變小了
刪除LVM,並還原系統
如果說要徹底的來移除LVM的話,你需要把創建的步驟反過來操作。
1、umount
2、移除LV
[root@yufei ~]# lvremove /dev/VG0/lv1
Do you really want to remove active logical volume lv1? [y/n]: y
Logical volume "lv1" successfully removed
3、移除VG
[root@yufei ~]# vgremove VG0
Volume group "VG0" successfully removed
4、移除PV
[root@yufei ~]# pvdisplay
針對查找出來的,進行清理
[root@yufei ~]# pvremove /dev/sdf /dev/sde /dev/md0 /dev/sdb1
Labels on physical volume "/dev/sdf" successfully wiped
Labels on physical volume "/dev/sde" successfully wiped
Labels on physical volume "/dev/md0" successfully wiped
Labels on physical volume "/dev/sdb1" successfully wiped
5、 如果是分區的話,使用fdisk 把ID 改回來
6、如果有RAID設備的話,也同樣清除掉吧
OK,看到這裏,你可以回到 (第二種方法,通過擴展RAID設備的容量,來增加VG的容量) 這裏來看了。因爲我們下面也需要這裏建立的快照。
邏輯卷(LVM)快照
快照這個詞對我們學習Linux的人來說,應該是不會陌生。他就是在某個時刻,爲系統做個照片。方便用於還原操作。而我們的LVM的快照和我們虛擬機上的快照功能差不多,但他更常用於數據非常大的時候,比如說數據庫需要備份,但這時候數據庫又在使用中,而這時候的備份肯定是不完全的或者是有問題的。這個時候就需要LVM的快照來幫助我們了。LVM快照還有一種應用,就是用在資源共享的時候,我可以把某個做好的東西做個快照,然後把這個快照共享出來供大家使用,如果這個快照資源損壞了,我們可以迅速創建,並投入使用。
快照的建立
因爲我們還沒有建立LV,所以我們要建立個LV,然後對其進行格式化、掛載
[root@yufei ~]# lvcreate -L 500M -n lv1 VG0
Logical volume "lv1" created
[root@yufei ~]# mkfs.ext4 /dev/VG0/lv1
[root@yufei ~]# mount /dev/VG0/lv1 /mnt
[root@yufei ~]# cp -a /etc/* /mnt
[root@yufei ~]# df -H
Filesystem Size Used Avail Use% Mounted on
/dev/sda1 16G 7.3G 7.5G 50% /
tmpfs 262M 0 262M 0% /dev/shm
/dev/mapper/VG0-lv1 508M 38M 445M 8% /mnt
這時候我們的LV就已經建立好,並在裏面寫入了相應的數據了。下面我們就爲這個LV建立個快照。
[root@yufei ~]# lvcreate -L 10M -s -n lv1snap /dev/VG0/lv1
Rounding up size to full physical extent 12.00 MiB
Logical volume "lv1snap" created
上述命令的意思就是,爲/dev/VG0/lv1 創建一個10M大小,名字爲lv1snap的快照。
[root@yufei ~]# ls /dev/VG0/
lv1 lv1snap
我們把他們掛載起來對比一下看看
[root@yufei ~]# mkdir /lv1
[root@yufei ~]# mkdir /lv1snap
[root@yufei ~]# mount /dev/VG0/lv1 /lv1
[root@yufei ~]# mount /dev/VG0/lv1snap /lv1snap/
[root@yufei ~]# df
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/sda1 15118728 7084428 7266300 50% /
tmpfs 255784 0 255784 0% /dev/shm
/dev/mapper/VG0-lv1 495844 35018 435226 8% /mnt
/dev/mapper/VG0-lv1 495844 35018 435226 8% /lv1
/dev/mapper/VG0-lv1snap
495844 35018 435226 8% /lv1snap
/mnt是我們之前掛載的,後面兩個是剛纔掛載的,我們發現他們三個是完全一樣的大小。
查看裏面的文件也是一樣的,其實這個快照只記錄了當時那一刻LV1的情況,而如果我們再向LV1裏面增加數據,這些數據是不會顯示在LV1的快照lv1snap中的,只要向LV1中寫入的內容不超過我們創建LV1快照的大小(我們指定的是10M),就不會破壞lv1snap,一旦超過10M,那麼這個快照就損壞了,失去了他的作用了。這個大家可以自行測試一下吧。
大家可能會這樣一個疑問,爲什麼一個很小的空間(10M)能快照出一個很大的空間(30M)的內容呢?網上的很多資料說的可能都不能讓大家徹底明白,而我這麼理解的,快照的空間是用來記錄源的更改情況,如果源的改動超過了快照的空間,當然快照就不起作用了啊。當一個snapshot創建的時候,僅拷貝原始卷裏數據的元數據(meta-data),創建的時候,並不會有數據的物理拷貝,因此snapshot的創建幾乎是實時的。
刪除快照
1、umount快照
[root@yufei ~]# umount /dev/mapper/VG0-lv1snap
2、刪除快照
[root@yufei ~]# lvremove /dev/VG0/lv1snap
Do you really want to remove active logical volume lv1snap? [y/n]: y
Logical volume "lv1snap" successfully removed