Lvm教學文檔
一.簡介
VM是 Logical Volume Manager(邏輯卷管理)的簡寫,LVM將一個或多個硬盤的分區在邏輯上集合,相當於一個大硬盤來使用,當硬盤的空間不夠使用的時候,可以繼續將其它的硬盤的分區加入其中,這樣可以實現磁盤空間的動態管理,相對於普通的磁盤分區有很大的靈活性。
通俗的話來說下功能 就是動態無影響擴展分區大小!!
1、 LVM基本術語
前面談到,LVM是在磁盤分區和文件系統之間添加的一個邏輯層,來爲文件系統屏蔽下層磁盤分區佈局,提供一個抽象的盤卷,在盤捲上建立文件系統。首先我們討論以下幾個LVM術語:
物理存儲介質(The physical media):這裏指系統的存儲設備:硬盤,如:/dev/hda1、/dev/sda等等,是存儲系統最低層的存儲單元。
物理卷(physical volume):物理卷就是指硬盤分區或從邏輯上與磁盤分區具有同樣功能的設備(如RAID),是LVM的基本存儲邏輯塊,但和基本的物理存儲介質(如分區、磁盤等)比較,卻包含有與LVM相關的管理參數。
卷組(Volume Group):LVM卷組類似於非LVM系統中的物理硬盤,其由物理卷組成。可以在卷組上創建一個或多個“LVM分區”(邏輯卷),LVM卷組由一個或多個物理卷組成。
邏輯卷(logical volume):LVM的邏輯卷類似於非LVM系統中的硬盤分區,在邏輯卷之上可以建立文件系統(比如/home或者/usr等)。
PE(physical extent):每一個物理卷被劃分爲稱爲PE(Physical Extents)的基本單元,具有唯一編號的PE是可以被LVM尋址的最小單元。PE的大小是可配置的,默認爲4MB。
LE(logical extent):邏輯卷也被劃分爲被稱爲LE(Logical Extents) 的可被尋址的基本單位。在同一個卷組中,LE的大小和PE是相同的,並且一一對應。
簡單來說就是:
PV:是物理的磁盤分區
VG:LVM中的物理的磁盤分區,也就是PV,必須加入VG,可以將VG理解爲一個倉庫或者是幾個大的硬盤。
LV:也就是從VG中劃分的邏輯分區
二.邏輯分析圖:
1.如下圖所示
三.安裝以及操作演示
1.安裝
該軟件一般默認安裝
[root@mysql2 ~]# rpm -qa |grep lvm
l
vm2-2.02.98-9.el6.x86_64 lvm2-libs-2.02.98-9.el6.x86_64
如果命令結果輸入類似於上例,那麼說明系統已經安裝了LVM管理工具;如果命令沒有輸出則說明沒有安裝LVM管理工具,則需要安裝
2.配置
[root@mysql2 ~]# fdisk -l
Disk /dev/sda: 21.5 GB, 21474836480 bytes 255 heads, 63 sectors/track, 2610 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0x0006afb5 Device Boot Start End Blocks Id System /dev/sda1 * 1 39 307200 83 Linux Partition 1 does not end on cylinder boundary. /dev/sda2 39 2358 18631680 83 Linux /dev/sda3 2358 2611 2031616 82 Linux swap / Solaris
通過fdisk -l 可以看出目前分區空間以及完全使用完了
所以需要加一塊磁盤
然後一直點擊next知道最後選擇你想加的磁盤大小 我這裏是20G
[root@mysql2 ~]# reboot
Broadcast message from [email protected] (/dev/pts/1) at 18:47 ... The system is going down for reboot NOW!
重啓加載
[root@mysql2 ~]# fdisk -l
Disk /dev/sda: 21.5 GB, 21474836480 bytes 255 heads, 63 sectors/track, 2610 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0x0006afb5 Device Boot Start End Blocks Id System /dev/sda1 * 1 39 307200 83 Linux Partition 1 does not end on cylinder boundary. /dev/sda2 39 2358 18631680 83 Linux /dev/sda3 2358 2611 2031616 82 Linux swap / Solaris Disk /dev/sdb: 21.5 GB, 21474836480 bytes 255 heads, 63 sectors/track, 2610 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0x00000000
看到多出一塊磁盤叫/dev/sdb
此時可以將該磁盤轉爲物理卷
[root@mysql2 ~]# pvcreate /dev/sdb
Physical volume "/dev/sdb" successfully created
[root@mysql2 ~]# pvs
PV VG Fmt Attr PSize PFree /dev/sdb lvm2 a-- 20.00g 20.00g
當然了我這裏是直接將/dev/sdb全部的分掉 也可以先用fdisk 分區成/dev/sdb1 /dev/sdb2之後再做物理卷
[root@mysql2 ~]# pvremove /dev/sdb
Labels on physical volume "/dev/sdb" successfully wiped
這個是刪除剛剛的物理卷
今天主要學的是邏輯卷對於分區不做多講
步驟詳細開始:
[root@mysql2 ~]# pvcreate /dev/sdb
[root@mysql2 ~]# vgcreate vg1 /dev/sdb
Volume group "vg1" successfully created
創建卷組
[root@mysql2 ~]# vgs
VG #PV #LV #SN Attr VSize VFree vg1 1 0 0 wz--n- 20.00g 20.00g
[root@mysql2 ~]# vgdisplay
--- Volume group --- VG Name vg1 System ID Format lvm2 Metadata Areas 1 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 1 Act PV 1 VG Size 20.00 GiB PE Size 4.00 MiB Total PE 5119 Alloc PE / Size 0 / 0 Free PE / Size 5119 / 20.00 GiB VG UUID sawr9U-x7US-f0qw-kFPC-z4sU-1ZAr-JWXzjb
通過vgs查看一下 vgdisplay是以詳細的方式查看 同理曾在pvdisplay, pvs 和lvdisplay, lvs
[root@mysql2 ~]# lvcreate -L 1G -n lv1 vg1
Logical volume "lv1" created
創建一個1G的邏輯卷
[root@mysql2 ~]# lvs
LV VG Attr LSize Pool Origin Data% Move Log Cpy%Sync Convert lv1 vg1 -wi-a---- 1.00g
[root@mysql2 ~]# vgs
VG #PV #LV #SN Attr VSize VFree vg1 1 1 0 wz--n- 20.00g 19.00g
[root@mysql2 ~]# pvs
PV VG Fmt Attr PSize PFree /dev/sdb vg1 lvm2 a-- 20.00g 19.00g
可以看出還剩下19G 空間
[root@mysql2 ~]# ls /dev/mapper/vg1-lv1
看到了有了這個邏輯卷 可以開始格式化並且加載到分區了
[root@mysql2 ~]# mkfs.ext4 /dev/mapper/vg1-lv1
mke2fs 1.41.12 (17-May-2010) Filesystem label= OS type: Linux Block size=4096 (log=2) Fragment size=4096 (log=2) Stride=0 blocks, Stripe width=0 blocks 65536 inodes, 262144 blocks 13107 blocks (5.00%) reserved for the super user First data block=0 Maximum filesystem blocks=268435456 8 block groups 32768 blocks per group, 32768 fragments per group 8192 inodes per group Superblock backups stored on blocks: 32768, 98304, 163840, 229376 Writing inode tables: done Creating journal (8192 blocks): done Writing superblocks and filesystem accounting information: done This filesystem will be automatically checked every 36 mounts or 180 days, whichever comes first. Use tune2fs -c or -i to override.
至此格式化完成緊接着可以掛載
[root@mysql2 ~]# mkdir dandan
[root@mysql2 ~]# mount /dev/mapper/vg1-lv1 ~/dandan
[root@mysql2 ~]# df -h
Filesystem Size Used Avail Use% Mounted on /dev/sda2 18G 7.2G 9.5G 44% / tmpfs 495M 72K 495M 1% /dev/shm /dev/sda1 291M 33M 243M 12% /boot /dev/mapper/vg1-lv1 1008M 34M 924M 4% /root/dandan
3:動態增加空間
如果說以後需要擴展
假設這是我一個真實環境現在1G用掉了超過80% 擔心磁盤爆掉,假設又是在線上 所以動態擴展空間就非常必要了
現在將他擴展到20G
[root@mysql2 ~]# lvextend -L +18.9G /dev/mapper/vg1-lv1 Rounding size to boundary between physical extents: 18.90 GiB Extending logical volume lv1 to 19.90 GiB Logical volume lv1 successfully resized [root@mysql2 ~]# lvs LV VG Attr LSize Pool Origin Data% Move Log Cpy%Sync Convert lv1 vg1 -wi-ao--- 19.90g [root@mysql2 ~]# resize2fs /dev/mapper/vg1-lv1 resize2fs 1.41.12 (17-May-2010) Filesystem at /dev/mapper/vg1-lv1 is mounted on /root/dandan; on-line resizing required old desc_blocks = 1, new_desc_blocks = 2 Performing an on-line resize of /dev/mapper/vg1-lv1 to 5217280 (4k) blocks.
一個塊是4K 哦 可以自己設置塊的大小
[root@mysql2 ~]# df -h
Filesystem Size Used Avail Use% Mounted on /dev/sda2 18G 7.2G 9.5G 44% / tmpfs 495M 72K 495M 1% /dev/shm /dev/sda1 291M 33M 243M 12% /boot /dev/mapper/vg1-lv1 20G 35M 19G 1% /root/dandan
[root@mysql2 ~]# vgs
VG #PV #LV #SN Attr VSize VFree vg1 1 1 0 wz--n- 20.00g 96.00m
看到還有96M 乾脆全部加掉吧
[root@mysql2 ~]# lvextend -L +96.00Mib /dev/mapper/vg1-lv1
Extending logical volume lv1 to 20.00 GiB Logical volume lv1 successfully resized
[root@mysql2 ~]# resize2fs /dev/mapper/vg1-lv1
至此動態增長已經完成
現在老闆又說空間不夠了又要加
這次我給加的是10G
[root@mysql2 ~]# fdisk -l
Disk /dev/sda: 21.5 GB, 21474836480 bytes 255 heads, 63 sectors/track, 2610 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0x0006afb5 Device Boot Start End Blocks Id System /dev/sda1 * 1 39 307200 83 Linux Partition 1 does not end on cylinder boundary. /dev/sda2 39 2358 18631680 83 Linux /dev/sda3 2358 2611 2031616 82 Linux swap / Solaris Disk /dev/sdb: 21.5 GB, 21474836480 bytes 255 heads, 63 sectors/track, 2610 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0x00000000 Disk /dev/sdc: 10.7 GB, 10737418240 bytes 255 heads, 63 sectors/track, 1305 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0x00000000
Disk /dev/mapper/vg1-lv1: 21.5 GB, 21470642176 bytes 這是之前的sdb 255 heads, 63 sectors/track, 2610 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0x00000000
看到了sdc了吧
[root@mysql2 ~]# pvcreate /dev/sdc
Physical volume "/dev/sdc" successfully created
[root@mysql2 ~]# vgs
VG #PV #LV #SN Attr VSize VFree vg1 1 1 0 wz--n- 20.00g 0
[root@mysql2 ~]# vgextend vg1 /dev/sdc
Volume group "vg1" successfully extended
[root@mysql2 ~]# vgs
VG #PV #LV #SN Attr VSize VFree vg1 2 1 0 wz--n- 29.99g 10.00g
看到了vg1擴展了10G 現在老闆要把這10G 全部加到LV1裏面
[root@mysql2 ~]# vgs
VG #PV #LV #SN Attr VSize VFree vg1 2 1 0 wz--n- 29.99g 9.99g
[root@mysql2 ~]# lvextend -L +9.9999G /dev/mapper/vg1-lv1
Rounding size to boundary between physical extents: 9.99 GiB Extending logical volume lv1 to 29.99 GiB Logical volume lv1 successfully resized
注意有的時候你vgs查看明明有10G 卻加不了10G原因是因爲一個block塊是4K 你不是剛剛好整除的塊數 所以你就加9.9999G吧
[root@mysql2 ~]# resize2fs /dev/mapper/vg1-lv1 如果發現不行所以執行下面的命令
resize2fs 1.41.12 (17-May-2010) Please run 'e2fsck -f /dev/mapper/vg1-lv1' first.
[root@mysql2 ~]# e2fsck -f /dev/mapper/vg1-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/mapper/vg1-lv1: 11/1310720 files (0.0% non-contiguous), 91153/5217280 blocks
[root@mysql2 ~]# resize2fs /dev/mapper/vg1-lv1
resize2fs 1.41.12 (17-May-2010) Resizing the filesystem on /dev/mapper/vg1-lv1 to 7862272 (4k) blocks. The filesystem on /dev/mapper/vg1-lv1 is now 7862272 blocks long.
[root@mysql2 ~]# lvs
LV VG Attr LSize Pool Origin Data% Move Log Cpy%Sync Convert lv1 vg1 -wi-a---- 29.99g
[root@mysql2 ~]# mount /dev/mapper/vg1-lv1 /root/dandan/ 因爲之前重啓過機器所以需要再次掛載如果希望啓動機器自動掛載的話
[root@mysql2 ~]# df -h
Filesystem Size Used Avail Use% Mounted on /dev/sda2 18G 7.2G 9.5G 44% / tmpfs 495M 72K 495M 1% /dev/shm /dev/sda1 291M 33M 243M 12% /boot /dev/mapper/vg1-lv1 30G 172M 28G 1% /root/dandan
4.開啓機器自動掛載
[root@mysql2 ~]# vi /etc/fstab
再最後加上
/dev/mapper/vg1-lv1 /root/dandan ext4 defaults 0 0
保存退出
[root@mysql2 ~]# df -h
Filesystem Size Used Avail Use% Mounted on /dev/sda2 18G 7.2G 9.5G 44% / tmpfs 495M 72K 495M 1% /dev/shm /dev/sda1 291M 33M 243M 12% /boot /dev/mapper/vg1-lv1 30G 35M 28G 1% /root/dandan
5.動態縮小空間
擴展邏輯卷先擴大lv再擴大文件系統
縮小邏輯卷 先縮小文件系統再縮小lv
又過了一陣子發現不需要那麼大空間了 又要縮到10G
[root@mysql2 ~]# umount /root/dandan/
[root@mysql2 ~]# e2fsck -f /dev/mapper/vg1-lv1
e2fsck 1.41.12 (17-May-2010) /dev/mapper/vg1-lv1: clean, 11/1966080 files, 167409/7862272 blocks 檢查下文件系統的完成性 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/mapper/vg1-lv1: 11/1966080 files (0.0% non-contiguous), 167409/7862272 blocks
[root@mysql2 ~]# resize2fs /dev/mapper/vg1-lv1 10G
resize2fs 1.41.12 (17-May-2010) Resizing the filesystem on /dev/mapper/vg1-lv1 to 2621440 (4k) blocks. The filesystem on /dev/mapper/vg1-lv1 is now 2621440 blocks long. 將文件系統減小到10G
[root@mysql2 ~]# mount /dev/mapper/vg1-lv1 /root/dandan/
[root@mysql2 ~]# df -h
Filesystem Size Used Avail Use% Mounted on /dev/sda2 18G 7.2G 9.5G 44% / tmpfs 495M 72K 495M 1% /dev/shm /dev/sda1 291M 33M 243M 12% /boot /dev/mapper/vg1-lv1 9.9G 164M 9.2G 2% /root/dandan
[root@mysql2 ~]# umount /dev/mapper/vg1-lv1
[root@mysql2 ~]# lvchange -an /dev/mapper/vg1-lv1 -an的意思是不讓cd到/dev/mapper/vg1-lv1 -ay的意思是可以cd到/dev/mapper/vg1-lv1
暫時不讓使用邏輯卷
[root@mysql2 ~]# lvreduce -L -19G /dev/mapper/vg1-lv1
Reducing logical volume lv1 to 9.99 GiB Logical volume lv1 successfully resized [root@mysql2 ~]# lvs LV VG Attr LSize Pool Origin Data% Move Log Cpy%Sync Convert lv1 vg1 -wi------ 9.99g
[root@mysql2 ~]# lvchange -ay /dev/mapper/vg1-lv1
刪除掉之後可以再打開邏輯卷讓使用
注:如果不做lvchange操作而直接做減小邏輯卷,可能會導致數據寸壞,【數據無價】。如果要動態就不要lvchange -an 了
然後移除多餘的卷組
[root@mysql2 ~]# lvchange -an /dev/mapper/vg1-lv1
[root@mysql2 ~]# vgchange -an /dev/vg1
0 logical volume(s) in volume group "vg1" now active
[root@mysql2 ~]# vgreduce vg1 /dev/sdc
Removed "/dev/sdc" from volume group "vg1" 將/dev/sdc從vg1中取出
[root@mysql2 ~]# vgs
VG #PV #LV #SN Attr VSize VFree vg1 1 1 0 wz--n- 20.00g 10.00g 看到只 剩下一個PV
[root@mysql2 ~]# vgreduce vg1 /dev/sdc
Removed "/dev/sdc" from volume group "vg1"
[root@mysql2 ~]# lvchange -ay /dev/mapper/vg1-lv1
[root@mysql2 ~]# vgchange -ay /dev/vg1
1 logical volume(s) in volume group "vg1" now active
[root@mysql2 ~]# mount /dev/mapper/vg1-lv1 /root/dandan/
[root@mysql2 ~]# df -h
Filesystem Size Used Avail Use% Mounted on /dev/sda2 18G 7.2G 9.5G 44% / tmpfs 495M 72K 495M 1% /dev/shm /dev/sda1 291M 33M 243M 12% /boot /dev/mapper/vg1-lv1 9.9G 151M 9.2G 2% /root/dandan
[root@mysql2 ~]# pvs
PV VG Fmt Attr PSize PFree
/dev/sdb vg1 lvm2 a-- 20.00g 10.00g
/dev/sdc vg1 lvm2 a-- 10.00g 10.00g 注意這個是之前的
[root@mysql2 ~]# pvs
PV VG Fmt Attr PSize PFree /dev/sdb vg1 lvm2 a-- 20.00g 10.00g /dev/sdc lvm2 a-- 10.00g 10.00g 這個是現在的
兩個做一下對比知道現在的/dev/sdc已經不屬於任何的卷組了對吧
至此可以remove 掉/dev/sdc了
[root@mysql2 ~]# pvremove /dev/sdc
Labels on physical volume "/dev/sdc" successfully wiped
這樣sdc盤又可以幹其他的事情去了
[root@mysql2 ~]# pvs
PV VG Fmt Attr PSize PFree /dev/sdb vg1 lvm2 a-- 20.00g 10.00g
[root@mysql2 ~]# vgs
VG #PV #LV #SN Attr VSize VFree vg1 1 1 0 wz--n- 20.00g 10.00g
[root@mysql2 ~]# pvs
PV VG Fmt Attr PSize PFree /dev/sdb vg1 lvm2 a-- 20.00g 10.00g
[root@mysql2 ~]# vgs
VG #PV #LV #SN Attr VSize VFree vg1 1 1 0 wz--n- 20.00g 10.00g
[root@mysql2 ~]# lvs
LV VG Attr LSize Pool Origin Data% Move Log Cpy%Sync Convert lv1 vg1 -wi------ 9.99g
至此成功摘除/dev/sdc 可以拿出來 賣掉買恆大冰泉!!