1. 程式人生 > 其它 >LVM基礎操作

LVM基礎操作

基本介紹

Linux使用者安裝Linux 作業系統時遇到的一個最常見的難以決定的問題就是如何正確地給評估各分割槽大小,以分配合適的硬碟空間。 隨著 Linux的邏輯盤卷管理功能的出現,這些問題都迎刃而解。
lvm是邏輯盤卷管理(Logical Volume Manager)的簡稱,它是 Linux環境下對磁碟分割槽進行管理的一種機制,LVM是建立在硬碟和分割槽之上的一個邏輯層,來提高磁碟分割槽管理的靈活性。

LVM基本術語
1)物理儲存介質:這裡指系統的儲存裝置:硬碟,如: /dev/hda、/dev/sda等等,是儲存系統最低層的儲存單元。
2)物理卷physical volume (PV )
物理卷就是指硬碟分割槽或從邏輯上與磁碟分割槽具有同樣功能的裝置(如 RAID),是 LVM的基本儲存邏輯塊
3)卷組Volume Group (VG )
LVM卷組由一個或多個物理卷組成,但是更確切的說,它包含由這些物理卷提供的許多PE。
4)邏輯卷logical volume (LV )
這裡是我們儲存資訊的地方,在邏輯卷之上可以建立檔案系統 (比如/home或者 /usr等)。
5)PE(physical extent )
每一個物理卷被劃分為稱為 PE的基本單元,具有唯一編號的 PE是可以被 LVM定址的最小單元。 PE的大小是可配置的,預設為 4MB。

具體操作
1)建立分割槽
[root@test-server ~]# fdisk -l #檢視磁碟情況
[root@test-server ~]# fdisk /dev/sda #進入磁碟(可以依次按鍵p->n->e->回車->回車->w,即用此磁碟所有空閒空間建立分割槽)
Command (m for help): n #n 為新增一個分割槽, p檢視分割槽
First cylinder (2898-10443, default 2898): #按Enter 鍵決定
Using default value 2898 #起始柱面選擇預設值
Last cylinder or +size or +sizeM or +sizeK (289810443, default 10443): +2G # 給2G的大小
Command (m for help): t #更改分割槽型別
Partition number (1-5): 5 # 選著分割槽
Hex code (type L to list codes): l #分割槽型別列表

Hex code (type L to list codes):8e #將新新增的分割槽標註成 lvm
Command (m for help): p #檢視分割槽表
/dev/sda5 2756 2999 1959898+ 8e Linux LVM
Command (m for help): w #儲存
[root@test-server ~]# partprobe /dev/sda #系統識別分割槽(代替重啟)
[root@test-server ~]# mkfs.ext4 /dev/sda5 #格式化新新增的分割槽

2)PV建立 ("yum install lvm2" 安裝lvm的操作命令,如pvcreate)
[root@test-server ~]# pvcreate /dev/sda5 #建立pv
Writing physical volume data to disk "/dev/sda5"
Physical volume "/dev/sda5" successfully created
[root@test-server ~]# pvs #或pvdisplay,檢視當前pv的資訊
PV VG Fmt Attr PSize PFree
/dev/sda5 lvm2 a-- 1.87G 1.87G

3)VG建立
[root@test-server ~]# vgcreate vg0 /dev/sda5 #vg0 為當前vg的名
Volume group "vg0" successfully created
[root@test-server ~]# vgs #或vgdispaly,檢視vg詳細資訊,會顯示PE數
VG #PV #LV #SN Attr VSize VFree
vg0 1 0 0 wz--n- 1.87G 1.87G

4)LV建立(使用vgdisplay檢視"Free PE"中可用的空間來製作LVM。比如這裡檢視到Free PE空間為500M,則最大隻能使用500M來製作lvm)

lvcreate -L +大小 -n lv_name vg_name (指定邏輯卷的大小,單位為"kKmMgGtT"位元組)

lvcreate -l +PE數 -n lv_name vg_name (或"lvcreate -l +百分比FREE -n lv_name vg_name"命令,即使用卷組剩餘所有空間的百分比)

[root@test-server ~]# lvcreate -L +500M -n lv01 vg0
Logical volume "lv01" created
[root@test-server ~]# lvs #或lvdispaly,檢視lv 的資訊
LV VG Attr LSize Origin Snap% Move Log Copy% Convert
lv01 vg0 -wi-a- 500.00M
You have mail in /var/spool/mail/root
[root@test-server ~]# mkfs.ext4 /dev/vg0/lv01 #格式化

5)掛載使用LVM
[root@test-server ~]# mkdir /mnt/lv01 #建立掛載目錄
[root@test-server ~]# mount /dev/vg0/lv01 /mnt/lv01 #將製作的lvm掛載起來
[root@test-server ~]# df -h
[root@test-server ~]# touch /mnt/lv01/lv.file
[root@test-server ~]#ls /mnt/lv01

LVM的增大
比如原來lv大小500M ,現在要拉伸分割槽到 800M。
前提是vg0裡面還有剩餘空間(vgdispaly檢視Free PE)。
先使用vgdisplay檢視vg0組是否還有多餘的空間.
[root@test-server ~]# vgdisplay
.......
Alloc PE / Size 1277 / 500M
Free PE / Size 490 / 300M
VG UUID hYScku-I097-bxMg-iUKq-WKnd-gEfQ-1wn5nU
...................

======================================================
如沒有剩餘,需要vgextend擴建。比如建立一個分割槽/dev/sdb1

pvcreate /dev/sdb1

vgextend vg0 /dev/sdb1 擴容到vg0組裡

vgdisplay 檢視vg0多餘的空間

======================================================

[root@test-server ~]# lvextend -L +300M /dev/vg0/lv01 #使用 "-L +300M" 或是 "-l +490" 都可以
Logical volume lv01 successfully resized # 或者直接使用" lvextend -l +100%FREE /dev/vg0/lv0 "命令,即使用卷組剩餘所有空間。
[root@test-server ~]# resize2fs /dev/vg0/lv01 #拉伸檔案系統
[root@test-server ~]# lvs
LV VG Attr LSize Origin Snap% Move Log Copy% Convert
lv01 vg0 -wi-ao 800.00M #大小變成了 800M

LVM的減小
[root@test-server ~]# umount /dev/vg0/lv01 #解除安裝邏輯卷 /dev/vg0/lv01,或者解除安裝/mnt/lv01目錄也可以
[root@test-server ~]# df -h #檢視
[root@test-server ~]# e2fsck -f /dev/vg0/lv01 #磁碟校驗
[root@test-server ~]# resize2fs /dev/vg0/lv01 500M #回縮檔案系統到 500M
[root@test-server ~]# lvreduce -L 500M /dev/vg0/lv01 #回縮分割槽到 500M
WARNING: Reducing active logical volume to 500.00 MB
THIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really want to reduce lv01? [y/n]: y
[root@test-server ~]# lvs
LV VG Attr LSize Origin Snap% Move Log Copy% Convert
lv01 vg0 -wi-a- 500.00M #此時已變成500M大小
[root@test-server ~]# mount /dev/vg0/lv01 /mnt/lv01 #重新掛載分割槽
[root@test-server ~]# df -h #檢視
[root@test-server ~]# ls /mnt/lv01 #檢視檔案

===========================================================
特別注意的是:
resize2fs命令 針對的是ext2、ext3、ext4檔案系統。
xfs_growfs命令 針對的是xfs檔案系統

LVM的系統快照
原理:系統快照(snapshot)是 lvm的另外一種重要的功能,快照就是將當時的資料記錄下來,就好像照相記錄一樣,以後資料有任何改動,原資料會被移動到快照區,沒有被改變的區域則由快照區與檔案系統共享。
由於快照區和原本的 LV共享很多 PE,所以快照區與被快照的區域必須在同一個 VG上
操作:
以上面建立的 lv01為例
1)掛載lvm
[root@test-server ~]# mount /dev/vg0/lv01 /mnt/lv01
[root@test-server ~]# cd /mnt/lv01
[root@test-server lv01]# touch {a,b,c}{a,b,c}
[root@test-server lv01]# ls
aa ab ac ba bb bc ca cb cc lost+found lv.file restoresymtable
2)為lvm建立快照
[root@test-server lv01]# lvcreate -L 64M -s -n lv-backup /dev/vg0/lv01
Logical volume "lv-backup" created
3)掛載快照
[root@test-server lv01]# mkdir /mnt/lv-backup
[root@test-server mnt]# mount -o ro /dev/vg0/lv-backup /mnt/lv-backup/
4)備份快照
[root@test-server tmp]# dump -0u -f /tmp/lv-backup.dump /mnt/lv-backup/ #備份
DUMP: Date of this level 0 dump: Sun Nov 11 14:53:31 2012
DUMP: Dumping /dev/mapper/vg0-lv--backup (/mnt/lv-backup) to /tmp/lv-backup.dump
5)刪除快照
[root@test-server tmp]# umount /mnt/lv-backup/
[root@test-server tmp]# lvremove /dev/vg0/lv-backup
Do you really want to remove active logical volume lv-backup? [y/n]: y
Logical volume "lv-backup" successfully removed
6)清空/dev/vg0/lv01下內容
[root@test-server tmp]# umount /mnt/lv01
[root@test-server tmp]# mkfs.ext3 /dev/vg0/lv01
mke2fs 1.39 (29-May-2006)
Filesystem label=
OS type: Linux
7)恢復資料
[root@test-server tmp]# mount /dev/vg0/lv01 /mnt/lv01
[root@test-server tmp]# cd /mnt/lv01
[root@test-server lv01]# ls
lost+found
[root@test-server lv01]# restore -rf /tmp/lv-backup.dump #恢復
restore: ./lost+found: File exists
[root@test-server lv01]# ls #由於之前都刪除了,所以這些都是改變的部分
aa ab ac ba bb bc ca cb cc lost+found lv.file restoresymtable

LVM的關閉 (刪除)
[root@test-server ~]# umount /mnt/lv01
[root@test-server ~]# lvremove /dev/vg0/lv01 #刪除lv
Do you really want to remove active logical volume lv01? [y/n]: y
Logical volume "lv01" successfully removed
[root@test-server ~]# vgchange -a n vg0 #使vg0不具有 active標誌
0 logical volume(s) in volume group "vg0" now active
[root@test-server ~]# vgremove vg0 #刪除vg
Volume group "vg0" successfully removed
[root@test-server ~]# pvremove /dev/sda5 #刪除pv
Labels on physical volume "/dev/sda5" successfully wiped