LVM(邏輯卷) 動態增大減小分區

          Lvm教學文檔

wKioL1PR6KaBW9tpAAEd7DKdROg400.jpg


By [email protected]

 

一.簡介


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.如下圖所示

wKiom1PQsX7S9kkSAAGmXr27Vkc483.jpg

三.安裝以及操作演示

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 可以看出目前分區空間以及完全使用完了

所以需要加一塊磁盤

wKioL1PQsrTiM93vAAJyuc3GPkg084.jpg

 

然後一直點擊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

wKioL1PQsuHD2-UnAAKUsBEJL2U932.jpg

[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 可以拿出來 賣掉買恆大冰泉!!

      




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章