LVM

LVM

  LVM(Logical Volume Manger),是一種磁盤分區管理機制,可以靈活的調整分區的大小。它是將多個硬盤組成卷組的形式實現的。說白了就是通過軟件來實現對分區靈活管理。

  LVM是將多塊硬盤組成PV,再由PV組成VG,VG再組成lv,然後在lv上創建文件系統。

  物理存儲介:指的就是硬盤等,最基本的存儲單元。

  PV(physical volume) 物理卷:這個卷的作用就是將多塊硬盤創建爲能被VG卷組直接調用的格式。

  VG (volume group) 卷組:卷組就是由多個由磁盤組成的pv構成,並且在內部創建PE,然後多個PE提供給LV,這樣可以靈活的實現擴容和縮減

  LV (logical volume )邏輯卷:調用由卷組提供的PE,將其組成一個整體,以便供系統格式化調用。

  PE (physical extent),能被LVM調用的最小單元,具有唯一的編號,默認大小4MB。如文件系統中block。

  LE (logical extent),能被系統調用的最小單元,和PE大小一樣

PV,VG,LV 三者關係如圖

WlbQ33e.png

  一、確定本機是否安裝了LVM軟件。沒有安裝,請自行yum安裝。

   [root@localhost bin]# rpm -qa|grep  "lvm"     
   mesa-private-llvm-3.6.2-1.el6.x86_64   
   lvm2-2.02.143-7.el6.x86_64   
   lvm2-libs-2.02.143-7.el6.x86_64

二、創建使用工具

  上面已經說了,是通過軟件來實現對分區的靈活管理。所以創建到使用都是通過一些列命令來來實現的。而這些命令又是按照PV,VG,LV三者的關係區分。三者的命令功能基本相同,方便記憶。不得不說開發人員的心思縝密和用心良苦。

1、lv系列

  pvcrate 創建physical volume 
     e.g.  pvcreate /dev/sdb{1,2,3} 
  pvs,pvdispaly 查看pv簡略或者詳細信息 
  pvremove 移除physical volume 
  pvmove 移動數據 (當需要縮減卷組時,首先應該執行這條命令保證數據被移到卷組的其他physical volume ) 
     e.g.  pvmove /dev/sdb3(將要被移除的physical volume)

2、vg系列

  vgcreate 創建volume group
        -s:pe大小,默認4M 
        e.g.vgcreate 卷組名(必須指定名稱) /dev/sdb{1,2,3} 
  vgs,vgdispaly 查看vg簡略或者詳細信息 
  vgextend(擴充) 
        e.g.vgextend 卷組名 /dev/sdb4 #將pvcreate /dev/sdb4後的添加至vg卷組中
  vgremove(刪除) 
        e.g.vgremove 卷組名 #移除vg整個卷組 
  vgreduce(移除,縮容) 
        e.g.vgextend 卷組名 /dev/sdb4 #移除vg卷組的中/dev/sdb4

3、lv系列

  lvcreate 創建volume group
        -n:指定名稱  
        -L: 指定大小         -l:%vg|pvs|FREE,打算分配這個vg中的百分比         e.g. lvcreate -n 邏輯卷名 -L 5G 卷組名(上面指定的vg名) 
  lvs,lvdispaly 查看lv簡略或者詳細信息 
  lvextend(擴充) 
        -l:%vg|pvs|FREE,打算分配這個vg中的百分比 
        -L: 指定大小 
  vgremove(刪除) 
        e.g.lvremove 卷組名 #移除lv整個邏輯卷組 
  vgreduce(移除,縮容) 
        用法選項同擴容一樣。

三、分區修改步驟及注意事項

邏輯卷擴展的步驟: 1.先確保擴展的大小;並確保所屬的卷組有足夠的剩餘空間 
2、擴展物理邊界 
最好先卸載,然後用e2fsck 檢測一下。

lvextend -L [+]size /path/to/lv_device

3、擴展邏輯邊界

resize2fs /path/to/lv_devive

縮減邏輯卷的步驟: 
1、卸載卷,並執行強制檢查

e2fsck -f /path/to/lv_devive

2、縮減邏輯邊界

resize2fs /path/to/lv_device SIZE

3、縮減物理邊界:

lvreduce -L [-]size /path/to/lv_device

4、掛載卷

擴展卷組: 1.準備要添加的物理卷
2 擴展卷組: 
添加物理卷至卷組中

   vgextend vg_name /path/to/device

縮減卷組: 
1.確定要移除的物理卷的總空間大小,要小於VG當前的可用空間大小 2.將要移除的物理捲上的所有pe移動至其他PV

   pvmove /path/to/pv_device

3.縮減vg

  vgreduce vg_name /path/to/pv/device

快照: 也是邏輯卷的一種,提供過去某一時間的元卷的通道

 lvcreate -s  -L Size -n name 卷組名 -p r,rw /path/to/lv_devsive
 -p:訪問權限

四、使用範例及注意事項

下面以圖片中的練習題示例。 
pIxlvBT.png 
1、創建兩個大小爲20G的分區,創建方法不懂,自行查看關於創建分區的知識。 
vttN897.png

NOTE:創建分區是,每個分區的編號一定是8e,創建分區結果如上圖。

2、將兩物理分區創建爲PV

[root@localhost bin]# pvcreate /dev/sdb{1,2}
  Physical volume "/dev/sdb1" successfully created
  Physical volume "/dev/sdb2" successfully created

結果顯示,physical volume 由/dev/sdb{1,2}成功創建 ,確保正確,我們在用pvs和pvdisplay查看一下。

[root@localhost bin]# pvs
  PV         VG     Fmt  Attr PSize  PFree 
  /dev/sdb1  testvg lvm2 a--u 20.01g 20.01g
  /dev/sdb2  testvg lvm2 a--u 20.01g 20.01g

上面顯示格式是PV卷名、VG卷名、卷組格式、卷組屬性、PV的大小、PV空閒大小

[root@localhost bin]# pvdisplay
  --- Physical volume ---
  PV Name               /dev/sdb1  #PV名稱
  VG Name               testvg  #VG名稱
  PV Size               20.01 GiB / not usable 1.12 MiB #PV大小
  Allocatable           yes  #是否可以使用
  PE Size               4.00 MiB #默認PE的大小,我們再VG的創建的時候可以修改,最小即爲默認大小
  Total PE              5122 #PE的總個數
  Free PE               5122 #空閒PE的個數
  Allocated PE          0  #已經被使用的PE個數
  PV UUID               8N4eft-2rvg-jbhd-QHgb-e1iM-Oc1O-74NBM2 #PV的UUID 

  --- Physical volume ---
  PV Name               /dev/sdb2
  VG Name               testvg
  PV Size               20.01 GiB / not usable 1.15 MiB
  Allocatable           yes 
  PE Size               4.00 MiB
  Total PE              5122
  Free PE               5122
  Allocated PE          0
  PV UUID               9pTEAr-aPBT-PwDg-BK8D-up0n-Hbn2-P27yVE
 

3、創建VG,並指定PE的大小

[root@localhost bin]# vgcreate testvg -s 16M /dev/sdb{1,2} #創建命令
  Volume group "testvg" successfully created #顯示創建已經成功
[root@localhost bin]# vgs  #查看VG的簡略信息
  VG     #PV #LV #SN Attr   VSize  VFree 
  testvg   2   0   0 wz--n- 40.00g 40.00g #格式爲:VG名稱、使用PV的個數、LV的個數、SN、屬性、VG的大小、空間VG的大小
[root@localhost bin]# vgdisplay #詳細信息關於本機上面的所有VG
  --- Volume group ---
  VG Name               testvg  #VG名
  System ID             
  Format                lvm2  #VG格式
  Metadata Areas        2 
  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                2
  Act PV                2
  VG Size               40.00 GiB #VG大小
  PE Size               16.00 MiB #PE大小
  Total PE              2560 #PE的總個數
  Alloc PE / Size       0 / 0   #被使用的PE個數/大小
  Free  PE / Size       2560 / 40.00 GiB #空閒PE的個數/大小
  VG UUID               cAK6Jk-b44O-kTEt-eyFH-0h6n-l1er-rBCCE9 #VG的uuid

結果顯示testvg這個vg卷組成功創建,接下來我們就不在需要用物理分區路徑了。這裏就將兩個磁盤組成一個包含2560個16M的PE的VG卷組。接下來我們所使用就是這些PE了,根據需要分配一定的PE,就能實現靈活分區。

4、創建LV

[root@localhost bin]# lvcreate -n "testlv" -L 5G testvg #創建命令
  Logical volume "testlv" created. #提示創建成功
[root@localhost bin]# lvs #簡略信息
  LV     VG     Attr       LSize  Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  testlv testvg -wi-a-----  5.00g  #格式如上                   
[root@localhost bin]# lvdisplay     #詳細信息                          
  --- Logical volume ---
  LV Path                /dev/testvg/testlv #創建成功系統分配的路徑
  LV Name                testlv #LV名
  VG Name                testvg #VG名
  LV UUID                R6NUAZ-yOGi-s3Bz-c0Nm-43gQ-r5y7-8ubPQj #LV的UUID
  LV Write Access        read/write #可以讀寫
  LV Creation host, time localhost.localdomain, 2016-08-10 13:49:44 +0800 #創建時間,主機
  LV Status              available #當前狀態
  # open                 0
  LV Size                5.00 GiB #LV的大小
  Current LE             320 #當前LE的個數
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           253:4

5、(自行增加的要求,目的熟悉掌握文件系統格式化命令)格式化爲ext4文件系統,塊大小爲4096,預留塊大小1%,文件系統名“testext4”,並開機掛載至/usr目錄

[root@localhost bin]# mke2fs -t ext4 -L "testext4" -m 1 -b 4096 /dev/mapper/testvg-testlv #創建文件系統相關命令,
mke2fs 1.41.12 (17-May-2010)
Filesystem label=testext4......以下省略
dumpe2fs -h /dev/mapper/testvg-testlv ##查看文件系統相關信息
dumpe2fs 1.41.12 (17-May-2010)
Filesystem volume name:   testext4
Last mounted on:          <not available>
Filesystem UUID:          9e0da4a9-03e3-4392-8188-816b165dddf7 ......以下省略
[root@localhost bin]# echo "/dev/mapper/testvg-testlv /users ext4 defaults 0 0" >>/etc/fstab ##通過echo命令追加至/etc/fstab文件,注意每個參數後面的空格
[root@localhost bin]# mount -a 自動掛載存在於/etc/fstab上面的文件系統
[root@localhost bin]# mount | grep "users" ##檢查是否掛載成功
/dev/mapper/testvg-testlv on /users type ext4 (rw) 
[root@localhost bin]# cd /users #切換到新掛載的目錄下
[root@localhost users]# ls 
lost+found ###出現CentOS 6 出現這個文件即代表掛載成功。

6、新新建用戶archlinux,並且家目錄爲/users/archlinux,而後切換用戶,並將/etc/pam.d拷貝至家目錄下。

[root@localhost users]# useradd -d /users/archlinux archlinux #創建家目錄爲指定家目錄的用戶
[root@localhost users]# su - archlinux #切換用戶
[archlinux@localhost ~]$ ls
[archlinux@localhost ~]$ pwd #顯示當前路徑
/users/archlinux
[archlinux@localhost ~]$ cp -r /etc/pam.d /users/archlinux/ #拷貝文件
[archlinux@localhost ~]$ ls #查看文件是否成功
pam.d

7、擴展testlv爲7G,要求archliunx的文件不能丟失。 [archlinux@localhost ~]$ su - root #切換爲root用戶 [root@localhost users]# lvextend -L 7G /dev/mapper/testvg-testlv #擴張爲7G Size of logical volume testvg/testlv changed from 5.00 GiB (320 extents) to 7.00 GiB (448 extents). Logical volume testlv successfully resized.#顯示已經成功。 爲了安全起見,我們最好再用vgs和vgdisplay

[root@localhost users]# lvs
LV     VG     Attr       LSize  Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
testlv testvg -wi-ao----  7.00g  #成功了
[root@localhost users]# lvdisplay
  --- Logical volume ---
  LV Path                /dev/testvg/testlv
  LV Name                testlv
  VG Name                testvg
  LV UUID                R6NUAZ-yOGi-s3Bz-c0Nm-43gQ-r5y7-8ubPQj
  LV Write Access        read/write
  LV Creation host, time localhost.localdomain, 2016-08-10 13:49:44 +0800
  LV Status              available
  # open                 1
  LV Size                7.00 GiB  #成功了。
  Current LE             448
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           253:4

在切換至archliunx用戶,到自己的家目錄下面查看。。這裏就不展示結果,因爲擴張損壞數據的可能性幾乎爲0,我也在本機查看了,未損失。若你的不行損失,請檢查步驟和自己的RP。

8、收縮至3G,要求數據不損失。

在收縮時一定需要先取消掛載,並且 e2fsck -f 強制檢查,收縮完畢後再一次強行檢查。注意查看檢測結果

[root@localhost ~]# e2fsck -f /dev/mapper/testvg-testlv
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
testext4: 76/327680 files (0.0% non-contiguous), 55962/1310720 blocks

下面開始縮減文件系統大小,此操作慎重。(縮減)

[root@localhost ~]# resize2fs  /dev/mapper/testvg-testlv 3G  #縮減文件系統
resize2fs 1.41.12 (17-May-2010)
Resizing the filesystem on /dev/mapper/testvg-testlv to 786432 (4k) blocks.
The filesystem on /dev/mapper/testvg-testlv is now 786432 blocks long.

繼續縮減lv的大小,先執行上面的操作,不然會造成不可恢復的錯誤,不相信你可試試。

[root@localhost ~]# lvreduce -L 3G /dev/mapper/testvg-testlv 
  WARNING: Reducing active logical volume to 3.00 GiB.
  THIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really want to reduce testvg/testlv? [y/n]: y
  Size of logical volume testvg/testlv changed from 7.00 GiB (448 extents) to 3.00 GiB (192 extents).
  Logical volume testlv successfully resized.

自行查看用lvs和lvdisply查看修改後的LV大小 
再次強制檢查此分區

e2fsck -f /dev/mapper/testvg-testlv 
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/testvg-testlv: 75/196608 files (0.0% non-contiguous), 47863/786432 blocks

檢查無錯誤,若出現錯誤請仔細對照每一步的操作。然後進行掛載和查看數據是否還在。

[root@localhost pam.d]# ls
abrt-cli-root   eject                other             runuser-l          su-l
atd             fingerprint-auth     passwd            setup              system-auth
authconfig      fingerprint-auth-ac  password-auth     smartcard-auth     system-auth-ac
authconfig-gtk  gdm                  password-auth-ac  smartcard-auth-ac  system-config-authentication
authconfig-tui  gdm-autologin        polkit-1          smtp               system-config-date
chfn            gdm-fingerprint      poweroff          smtp.postfix       system-config-kdump
chsh            gdm-password         ppp               sshd               system-config-keyboard
config-util     gnome-screensaver    reboot            ssh-keycat         system-config-network
crond           halt                 remote            su                 system-config-network-cmd
cups            login                run_init          sudo               system-config-users
cvs             newrole

一切正常。 
9、創建快照,並備份,和驗證快照的功能。因爲前面VG還有空間沒有完,因此這裏直接就用VG剩餘的大小。

[root@localhost ~]# lvcreate -s -L 3G -n testlv.backup -p r  /dev/testvg/testlv  #創建一個大小和原文件相同備份分區
  Logical volume "testlv.backup" created. ##提示成功
[root@localhost ~]# mke2fs -t ext4 /dev/mapper/testvg-testlv.backup 掛載分區
mke2fs 1.41.12 (17-May-2010)
/dev/mapper/testvg-testlv.backup: Operation not permitted while setting up superblock
[root@localhost ~]# mount /dev/mapper/testvg-testlv.backup /mnt
mount: block device /dev/mapper/testvg-testlv.backup is write-protected, mounting read-only
[root@localhost ~]# cd /mnt
[root@localhost mnt]# ls
archlinux  lost+found   #查看文件存在


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