LVM詳解

目錄:

 一、概述

 二、LVM的相關概念

 三、概念圖

 四、LVM基本操作

   1.創建PV

   2.查看PV信息

   3.創建VG

   4.查看VG信息

   5.創建LV

   6.查看LV信息

   7.掛載LV

   8.擴展卷組

   9.縮減卷組

   10.擴展邏輯卷

   11.縮減邏輯卷

   12.移除邏輯卷

   13.移除卷組

   14.移除物理卷

 五、LVM快照實現

 六、總結


一、概述

  LVM全稱是Logical Volume Manager,即邏輯卷管理器。它是Linux環境下對磁盤分區進行管理的一種機制;它可以將多個物理分區整合在一起,并且可以根據實際需要動態調整文件系統空間。另外,它還可以提供快照,快照在剛創建的時候,其內容是和原卷一模一樣的,只有數據在原卷中發生變化的時候,快照會將被改動數據的原數據保存起來。

二、LVM的相關概念

  1.物理卷(Physical Volume)

    物理卷是組成LVM的最底層的元素,即Linux上的物理分區。

  2.卷組(Volume Group)

    將各個獨立的PV組合起來形成的一個存儲空間就稱為VG,VG的大小就是整個LVM的大小。

  3.邏輯卷(Logical Volume)

    可以被用戶格式化、掛載并提供數據存儲的對象就是LV。

  4.物理擴展塊(Physical Extent)

    PE相當于Linux分區中的block,它是LVM的最小存儲單位,默認為4M。

三、概念圖

lvm01.jpg

四、LVM基本操作

 1.創建PV

  首先得先創建分區,并將分區的類型改為8e。在這里,我們可以按照以下方式分別創建/dev/sdb1、/dev/sdb2、/dev/sdc1、/dev/sdc2.

  創建PV使用以下命令格式:

    pvcreate device_name

    例如: pvcreate /dev/sdb1

[root@localhost ~]# 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-2610, default 1): 
Using default value 1
Last cylinder, +cylinders or +size{K,M,G} (1-2610, default 2610): +5G
 
Command (m for help): t
Selected partition 1
Hex code (type L to list codes): 8e
Changed system type of partition 1 to 8e (Linux LVM)
 
Command (m for help): p
 
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: 0x05ff7b5d
 
   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1               1         654     5253223+  8e  Linux LVM
 
[root@localhost ~]# pvcreate /dev/sdb{1,2} /dev/sdc{1,2}
  Physical volume "/dev/sdb1" successfully created
  Physical volume "/dev/sdb2" successfully created
  Physical volume "/dev/sdc1" successfully created
  Physical volume "/dev/sdc2" successfully created

 2.查看PV信息

  使用的命令:

  (1)pvs 簡要查看PV信息

  (2)pvsdisplay 詳細查看PV信息。

    A.pvsdisplay 直接使用該命令,查看所有PV的信息。

    B.pvsdisplay device_name 表示查看device_name這個PV的信息。

[root@localhost ~]# pvs
  PV         VG   Fmt  Attr PSize PFree
  /dev/sdb1       lvm2 ---  5.01g 5.01g
  /dev/sdb2       lvm2 ---  5.01g 5.01g
  /dev/sdc1       lvm2 ---  5.01g 5.01g
  /dev/sdc2       lvm2 ---  5.01g 5.01g
 
[root@localhost ~]# pvdisplay /dev/sdb1
  "/dev/sdb1" is a new physical volume of "5.01 GiB"
  --- NEW Physical volume ---
  PV Name               /dev/sdb1
  VG Name               
  PV Size               5.01 GiB
  Allocatable           NO
  PE Size               0   
  Total PE              0
  Free PE               0
  Allocated PE          0
  PV UUID               rZsvZG-nMf0-To7I-3k2X-fzEL-jkvk-eNFd6h

 3.創建VG

  在有了PV之后,接下來我們要創建VG,創建VG使用以下命令:

   vgcreate VG_NAME PV_NAME

   -s PE:指定PE的大小

[root@localhost ~]# vgcreate testvg /dev/sd{b,c}1
  Volume group "testvg" successfully created

 4.查看VG信息

  查看VG使用以下命令:

   (1)vgs:簡要查看VG信息。

   (2)vgdisplay:詳細查看VG信息。

     A.vgdisplay: 直接使用該命令,查看所有VG的信息。

     B.vgdisplay VG_NAME: 表示查看這個VG的信息。

[root@localhost ~]# vgs
  VG     #PV #LV #SN Attr   VSize  VFree 
  testvg   2   0   0 wz--n- 10.02g 10.02g
[root@localhost ~]# vgdisplay testvg
  --- Volume group ---
  VG Name               testvg
  System ID             
  Format                lvm2
  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               10.02 GiB
  PE Size               4.00 MiB
  Total PE              2564
  Alloc PE / Size       0 / 0   
  Free  PE / Size       2564 / 10.02 GiB
  VG UUID               zmjsxc-4KPf-LEcC-96zL-BBDY-N0Cs-buSQ6n

 5.創建LV

  使用的命令:

   lvcreate -L SIZE -n LV_NAME VG_NAME

    -L 指定邏輯卷的大小

    -n 指定邏輯卷的名稱

    -l PE的個數

[root@localhost ~]# lvcreate -L 5G -n mylv testvg
  Logical volume "mylv" created

 6.查看LV信息

  查看LV使用以下命令:

   (1)lvs: 簡要查看LV信息

   (2)lvdisplay 邏輯卷的設備文件名稱: 詳細查看LV信息

     邏輯卷的設備文件名稱路徑:/dev/VG_NAME/LV_NAME 或者 /dev/mapper/VG_NAME-LV_NAME

[root@localhost ~]# lvs
  LV   VG     Attr       LSize Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  mylv testvg -wi-a----- 5.00g  
[root@localhost ~]# ll /dev/testvg/mylv 
lrwxrwxrwx 1 root root 7 Jul 24 01:19 /dev/testvg/mylv -> ../dm-0
 
[root@localhost ~]# ll /dev/mapper/testvg-mylv 
lrwxrwxrwx 1 root root 7 Jul 24 01:19 /dev/mapper/testvg-mylv -> ../dm-0
 
[root@localhost ~]# lvdisplay /dev/testvg/mylv 
  --- Logical volume ---
  LV Path                /dev/testvg/mylv
  LV Name                mylv
  VG Name                testvg
  LV UUID                cgrPIG-Zavs-GH9Z-55sR-MtSt-SFzg-SVETpG
  LV Write Access        read/write
  LV Creation host, time localhost.localdomain, 2015-07-24 01:19:20 +0800
  LV Status              available
  # open                 0
  LV Size                5.00 GiB
  Current LE             1280
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           253:0

 7.掛載LV

  在掛載LV之前,我們要對LV進行格式化后再掛載,然后存放文件看是否正常。

# 格式化LV
[root@localhost ~]# mke2fs -t ext4 /dev/testvg/mylv 
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
327680 inodes, 1310720 blocks
65536 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=1342177280
40 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks: 
        32768, 98304, 163840, 229376, 294912, 819200, 884736
 
Writing inode tables: done                            
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done
 
This filesystem will be automatically checked every 29 mounts or
180 days, whichever comes first.  Use tune2fs -c or -i to override.
# 掛載LV
[root@localhost ~]# mount /dev/testvg/mylv /mnt
# 查看掛載的分區信息
[root@localhost ~]# df -lh
Filesystem            Size  Used Avail Use% Mounted on
/dev/sda3              20G  1.1G   17G   6% /
tmpfs                 242M     0  242M   0% /dev/shm
/dev/sda1             194M   26M  159M  14% /boot
/dev/mapper/testvg-mylv
                      5.0G  138M  4.6G   3% /mnt
# 測試存放文件
[root@localhost ~]# cp /etc/inittab /mnt/
[root@localhost mnt]# tail -4 /mnt/inittab 
#   5 - X11
#   6 - reboot (Do NOT set initdefault to this)
# 
id:3:initdefault:

 8.擴展卷組

  步驟:

   (1)準備好一個PV

   (2)使用vgextend命令完成擴展,命令格式:vgextend VG_NAME /PATH/TO/PV

#查看使用和未使用的PV,其中/dev/sdb2和/dev/sdc2都還未使用
[root@localhost ~]# pvs
  PV         VG     Fmt  Attr PSize PFree
  /dev/sdb1  testvg lvm2 a--  5.01g 8.00m
  /dev/sdb2         lvm2 ---  5.01g 5.01g
  /dev/sdc1  testvg lvm2 a--  5.01g 5.01g
  /dev/sdc2         lvm2 ---  5.01g 5.01g
#未擴展前的VG大小
[root@localhost ~]# vgs
  VG     #PV #LV #SN Attr   VSize  VFree
  testvg   2   1   0 wz--n- 10.02g 5.02g
#擴展VG
[root@localhost ~]# vgextend testvg /dev/sdb2
  Volume group "testvg" successfully extended
#擴展后的VG大小
[root@localhost ~]# vgs
  VG     #PV #LV #SN Attr   VSize  VFree 
  testvg   3   1   0 wz--n- 15.02g 10.02g

 9.縮減卷組

  步驟:

   (1)確定要移除的PV

   (2)將此PV上的數據轉移至其他的PV

     命令:pvmove PV_NAME

   (3)從卷組中將此PV移除

     命令:vgreduce /PATH/TO/PV

# 查看已經使用在卷組中的PV
[root@localhost ~]# pvs
  PV         VG     Fmt  Attr PSize PFree
  /dev/sdb1  testvg lvm2 a--  5.01g 8.00m
  /dev/sdb2  testvg lvm2 a--  5.01g 5.01g
  /dev/sdc1  testvg lvm2 a--  5.01g 5.01g
  /dev/sdc2         lvm2 ---  5.01g 5.01g
# 現在確定要移除/dev/sdb1,在移除前需要將數據轉移到其他PV
[root@localhost ~]# pvmove /dev/sdb1 
  /dev/sdb1: Moved: 0.0%
  /dev/sdb1: Moved: 100.0%
# 將PV從卷組中移除
[root@localhost ~]# vgreduce testvg /dev/sdb1 
  Removed "/dev/sdb1" from volume group "testvg"
# 查看移除后的VG大小
[root@localhost ~]# vgs
  VG     #PV #LV #SN Attr   VSize  VFree
  testvg   2   1   0 wz--n- 10.02g 5.02g

 10.擴展邏輯卷

  步驟:

  (1)先確定擴展的LV大小,并確保對應卷組有足夠的空間

  (2)擴展物理邊界

    使用lvextend命令:lvextend -L [+]SIZE /PATH/TO/LV

    參數說明:

     -L [+]SIZE: 指定擴展的容量;如果帶+號,表示擴展的容量是在原來的基礎上加上SIZE的容量;如果不帶,表示擴展容量到SIZE,單位為"kKmMgGtT"

     -l [+]SIZE: 指定擴展的容量;如果帶+號,表示擴展的容量是在原來的基礎上加上SIZE個PE的容量;不帶+號,表示擴展到SIZE個PE的容量

      SIZE: 表示數字

  (3)擴展邏輯邊界

    使用resize2fs /PATH/TO/DEVICE

# 確定VG的容量
[root@localhost ~]# vgs
  VG     #PV #LV #SN Attr   VSize  VFree
  testvg   2   1   0 wz--n- 10.02g 5.02g
# 未擴展前的LV容量
[root@localhost ~]# lvs
  LV   VG     Attr       LSize Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  mylv testvg -wi-ao---- 5.00g
# 擴展LV到8G,即物理邊界
[root@localhost ~]# lvextend -L +3G /dev/testvg/mylv 
  Size of logical volume testvg/mylv changed from 5.00 GiB (1280 extents) to 8.00 GiB (2048 extents).
  Logical volume mylv successfully resized 
# 查看掛載的LV大小,發覺還是5G,因為還沒擴展邏輯邊界
[root@localhost ~]# df -lh
Filesystem            Size  Used Avail Use% Mounted on
/dev/sda3              20G  1.1G   17G   6% /
tmpfs                 242M     0  242M   0% /dev/shm
/dev/sda1             194M   26M  159M  14% /boot
/dev/mapper/testvg-mylv
                      5.0G  139M  4.6G   3% /mnt
# 擴展邏輯邊界
[root@localhost ~]# resize2fs /dev/testvg/mylv 
resize2fs 1.41.12 (17-May-2010)
Filesystem at /dev/testvg/mylv is mounted on /mnt; on-line resizing required
old desc_blocks = 1, new_desc_blocks = 1
Performing an on-line resize of /dev/testvg/mylv to 2097152 (4k) blocks.
The filesystem on /dev/testvg/mylv is now 2097152 blocks long.
# 查看分區大小,文件系統大小也擴展了
[root@localhost ~]# df -lh
Filesystem            Size  Used Avail Use% Mounted on
/dev/sda3              20G  1.1G   17G   6% /
tmpfs                 242M     0  242M   0% /dev/shm
/dev/sda1             194M   26M  159M  14% /boot
/dev/mapper/testvg-mylv
                      7.9G  140M  7.4G   2% /mnt

 11.縮減邏輯卷

  步驟:

  (1)確定縮減后的大小,至少確??s減后能容納原來的所有數據

  (2)執行縮減:

    A.因為縮減有風險,所以必須卸載并檢測文件系統,使用e2fsck -f命令

    B.縮減邏輯邊界,使用resize2fs命令

     resize2fs /path/to/device SIZE

    C.縮減物理邊界,使用lvreduce命令

     lvreduce -L [-]SIZE /path/to/lv

# 卸載并強行檢測
[root@localhost ~]# umount /mnt/
[root@localhost ~]# e2fsck -f /dev/testvg/mylv 
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/testvg/mylv: 12/524288 files (0.0% non-contiguous), 68623/2097152 blocks
# 縮減LV至3G,即邏輯邊界
[root@localhost ~]# resize2fs /dev/testvg/mylv 3G
resize2fs 1.41.12 (17-May-2010)
Resizing the filesystem on /dev/testvg/mylv to 786432 (4k) blocks.
The filesystem on /dev/testvg/mylv is now 786432 blocks long.
# 縮減物理邊界
[root@localhost ~]# lvreduce -L 3G /dev/testvg/mylv 
  WARNING: Reducing active logical volume to 3.00 GiB
  THIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really want to reduce mylv? [y/n]: y
  Size of logical volume testvg/mylv changed from 8.00 GiB (2048 extents) to 3.00 GiB (768 extents).
  Logical volume mylv successfully resized
# 為確保安全,再次檢測
[root@localhost ~]# e2fsck -f /dev/testvg/mylv   
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/testvg/mylv: 12/196608 files (0.0% non-contiguous), 47100/786432 blocks
# 掛載,查看分區大小并查看分區里面的文件是否正常
[root@localhost ~]# mount /dev/testvg/mylv /mnt/
[root@localhost ~]# df -lh
Filesystem            Size  Used Avail Use% Mounted on
/dev/sda3              20G  1.1G   17G   6% /
tmpfs                 242M     0  242M   0% /dev/shm
/dev/sda1             194M   26M  159M  14% /boot
/dev/mapper/testvg-mylv
                      3.0G  136M  2.7G   5% /mnt
[root@localhost ~]# cd /mnt/
[root@localhost mnt]# tail -4 /mnt/inittab 
#   5 - X11
#   6 - reboot (Do NOT set initdefault to this)
# 
id:3:initdefault:

 12.移除邏輯卷

  移除邏輯卷之前,確保已經沒有被掛載。此時使用lvremove /path/to/lv命令即可

# 查看邏輯卷
[root@localhost ~]# lvs
  LV        VG     Attr       LSize  Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  hello_lv  testvg -wi-a-----  1.00g                                                    
  mylv      testvg owi-aos---  3.00g 
# 移除hello_lv
[root@localhost ~]# lvremove /dev/testvg/hello_lv 
Do you really want to remove active logical volume hello_lv? [y/n]: y
  Logical volume "hello_lv" successfully removed
# 再次查看邏輯卷信息
[root@localhost ~]# lvs
  LV        VG     Attr       LSize  Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  mylv      testvg owi-aos---  3.00g

 13.移除卷組

  使用vgremove VG_NAME

# 查看卷組信息
[root@localhost ~]# vgs
  VG     #PV #LV #SN Attr   VSize  VFree 
  testvg   2   0   0 wz--n- 10.02g 10.02g
# 移除testvg
[root@localhost ~]# vgremove testvg
  Volume group "testvg" successfully removed

 14.移除物理卷

  使用pvremove PV_NAME命令

# 查看物理卷
[root@localhost ~]# pvs
  PV         VG   Fmt  Attr PSize PFree
  /dev/sdb2       lvm2 ---  5.01g 5.01g
  /dev/sdc1       lvm2 ---  5.01g 5.01g
  /dev/sdc2       lvm2 ---  5.01g 5.01g
# 移除物理卷
[root@localhost ~]# pvremove /dev/sdb2
  Labels on physical volume "/dev/sdb2" successfully wiped
[root@localhost ~]# pvremove /dev/sdc1
  Labels on physical volume "/dev/sdc1" successfully wiped
[root@localhost ~]# pvremove /dev/sdc2
  Labels on physical volume "/dev/sdc2" successfully wiped

五、LVM快照實現

 創建出來的快照卷是已經記錄了原卷某個時刻所有文件的狀態,在原卷沒有做出修改之前,快照卷只是作為訪問原卷的一個入口;一旦原卷中的文件發生改變的時候,系統會將原卷的文件復制一份到快照卷,這時的快照卷就不能作為訪問原卷的入口了,快照卷里面只有原卷沒有發生改變之前復制過來的文件。這時,我們就可以對快照卷里面的文件進行打包備份。

 創建快照使用lvcreate命令,使用以下參數

  -L SIZE: 指定快照卷的大小

  -s: 表示創建快照卷

  -p r: 限制快照卷為只讀訪問

  -n LV_NAME: 指定快照卷的名稱

  示例:lvcreate -L SIZE -s -p r -n LV_NAME /path/to/lv

# 創建快照卷
[root@localhost mnt]# lvcreate -L 50M -s -p r -n mylv-snap /dev/testvg/mylv 
  Rounding up size to full physical extent 52.00 MiB
  Logical volume "mylv-snap" created
[root@localhost mnt]# lvs
  LV        VG     Attr       LSize  Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  mylv      testvg owi-aos---  3.00g                                                    
  mylv-snap testvg sri-a-s--- 52.00m      mylv   0.02 
# 掛載快照卷
[root@localhost ~]# mount -o ro /dev/testvg/mylv-snap /media/
# 查看快照卷,此時的快照卷只是作為原卷的入口,所以內容和快照卷的是一樣的
[root@localhost mnt]# cd /media/
[root@localhost media]# ls
inittab  lost+found
# 修改原卷的內容
[root@localhost mnt]# cp /etc/fstab /mnt/
[root@localhost mnt]# echo "Hello World" >> /mnt/inittab 
# 查看快照卷及里面的內容,發現沒有新增的文件fstab,而且inittab的文件內容是和創建快照時一樣
[root@localhost ~]# cd /media/
[root@localhost media]# ls
inittab  lost+found
[root@localhost media]# tail -3 inittab 
#   6 - reboot (Do NOT set initdefault to this)
# 
id:3:initdefault:
# 打包備份
[root@localhost media]# tar zcf /tmp/backup.tar.gz /media/inittab 
tar: Removing leading `/' from member names
[root@localhost media]# ls /tmp/backup.tar.gz 
/tmp/backup.tar.gz
# 卸載快照卷
[root@localhost ~]# umount /media/

六、總結

 創建LV的過程:

  創建PV –> 創建VG –> 創建LV –> 格式化 –> 掛載

 擴展卷組的過程:

  準備PV –> 完成擴展

 縮減卷組的過程:

  確定移除的PV –> 轉移移除PV的數據到別的PV –> 從卷組中移除PV

 擴展邏輯卷的過程:

  確定擴展大小 –> 擴展物理邊界 –> 擴展邏輯邊界

 縮減邏輯卷的過程:

  確定縮減大小 –> 卸載邏輯卷 –> 縮減邏輯邊界 –> 縮減物理邊界

原創文章,作者:ucweb_qiuwc,如若轉載,請注明出處:http://www.www58058.com/8227

(0)
ucweb_qiuwcucweb_qiuwc
上一篇 2015-09-22
下一篇 2015-09-22

相關推薦

  • Linux的常用的計劃任務(一次任務與周期性任務) at & cron

      在Linux日常維護工作中,維護員不可能每時每刻都守在服務前前,但如果遇到例行的操作要進行怎么辦?設定計劃任務!?     Linux任務計劃、周期性任務執行     ? 未來的某時間點執行一次任務:      &n…

    Linux干貨 2016-09-09
  • bash 循環語句for、while、until

    循環執行 循環執行     定義:將某段代碼有次數或無次數循環執行多次。     構成要素:退出條件和進入條件     循環的三種語句:for、while、until for循環:      &nbs…

    Linux干貨 2016-08-21
  • N21天天第十周課程練習

    1、請詳細描述CentOS系統的啟動流程(詳細到每個過程系統做了哪些事情) CentOS主機按以下順序啟動 1、POST加電自檢 2、BIOS讀取CMOS中的BIOS設置的參數來識別基礎硬件,尋找到啟動設備 3、MBR 1)讀取啟動設備MBR中前446字節的bootloader 2)讀取MBR后的扇區用來識別grub以及內核kernel所在的區域 3)啟動g…

    Linux干貨 2016-09-26
  • linux文件系統

      ?文件系統: linux區分大小寫: ? ? ? ? ? ? ? ? ? ?標準的linux文件系統xfs ext(如ext4),嚴格區分大小寫,例:MAIL,Mail,mail;而windows是不那么敏感的。 這是因為文件系統的格式不同。比如:U盤的Fat32在linux中是vfat文件系統就可不區分大小寫 不同文件系統,下面顯示一個隱藏文…

    Linux干貨 2017-11-19
  • 馬哥教育網絡班22期+第五周課程練習

    1、顯示當前系統上root、fedora或user1用戶的默認shell; [xw@localhost ~]$ cat /etc/passwd | grep -E "^(root|fedora|user1)\>" | cut -d:&…

    Linux干貨 2016-10-09
  • 壓縮和歸檔——釋放你的磁盤空間

    壓縮和解壓縮工具 壓縮比:文件壓縮比就是指文件經過壓縮后的文件大小與源文件大小的一個比差,經過壓縮工具包可以把文件壓縮 壓縮的目的:      時間換空間      CPU時間換硬盤的空間 壓縮工具: compress/uncompress 以.Z作為文件后綴 gzip/gunz…

    Linux干貨 2016-08-18
欧美性久久久久