【轉載】Linux磁盤管理:LVM邏輯卷管理

這篇隨筆將詳細講解Linux磁盤管理機制中的LVM邏輯卷的基本概念以及LVM的工做原理!!!

1、傳統的磁盤管理node

其實在Linux操做系統中,咱們的磁盤管理機制和windows上的差很少,絕大多數都是使用MBR(Master Boot Recorder)都是經過先對一個硬盤進行分區,而後再將該分區進行文件系統的格式化,在Linux系統中若是要使用該分區就將其掛載上去便可,windows的話其實底層也就是自動將全部的分區掛載好,而後咱們就能夠對該分區進行使用了。數據庫

可是這種傳統的磁盤管理常常會帶來不少的問題,好比說當咱們使用的一個分區,其空間大小已經再也不夠用了,這個時候咱們沒有辦法經過拉伸分區來進行分區擴充,固然目前也有其餘第三方的磁盤管理軟件能夠進行磁盤的分區空間劃分,可是這樣會給咱們的文件系統形成很大的傷害,有時會致使文件系統崩潰等問題。對於傳統的磁盤管理若是說咱們碰到當分區大小不足的時候,咱們只能經過增長新的硬盤,而後在新的硬盤上建立分區,對分區進行格式化之後,而後將以前分區的全部東西都拷貝到新的分區裏面才行。可是新增長的硬盤是做爲獨立的文件系統存在的,原有的文件系統並無獲得任何的擴充,上層應用只能訪問到一個文件系統。這樣的方式對我的的電腦來講可能還能接受,可是若是對於生產環境下的服務器來講,這是不可接受的。由於若是要把一個分區的內容都拷貝到另外一個分區上去,勢必要首先卸載掉以前的那個分區,而後*對整個分區進行拷貝,若是服務器上運行着一個重要的服務,好比說WWW或者FTP,其要求是 7*24 小時運行正常的,那麼卸載掉分區這是不可想象的,同時若是該分區保存的內容很是很是的多,那麼在對分區進行轉移時時間可能會耗費好久,因此,這個時候咱們就會受到傳統磁盤管理的限制,由於其不可以進行動態的磁盤管理。所以,爲了解決這個問題,LVM技術就誕生了!!!windows

2、LVM的磁盤管理服務器

正是由於傳統的磁盤管理不能對咱們的磁盤空間進行動態的管理,所以就誕生出了LVM這個技術,那麼LVM究竟是什麼呢?它又是怎麼對磁盤進行管理的呢?app

LVM(Logical volume Manager)是邏輯卷管理的簡稱。它是Linux環境下對磁盤分區進行管理的一種機制。如今不只僅是Linux系統上可使用LVM這種磁盤管理機制,對於其它的類UNIX操做系統,以及windows操做系統都有相似與LVM這種磁盤管理軟件。ide

LVM的工做原理其實很簡單,它就是經過將底層的物理硬盤抽象的封裝起來,而後以邏輯卷的方式呈現給上層應用。在傳統的磁盤管理機制中,咱們的上層應用是直接訪問文件系統,從而對底層的物理硬盤進行讀取,而在LVM中,其經過對底層的硬盤進行封裝,當咱們對底層的物理硬盤進行操做時,其再也不是針對於分區進行操做,而是經過一個叫作邏輯卷的東西來對其進行底層的磁盤管理操做。好比說我增長一個物理硬盤,這個時候上層的服務是感受不到的,由於呈現給上次服務的是以邏輯卷的方式。學習

LVM最大的特色就是能夠對磁盤進行動態管理。由於邏輯卷的大小是能夠動態調整的,並且不會丟失現有的數據。咱們若是新增長了硬盤,其也不會改變現有上層的邏輯卷。做爲一個動態磁盤管理機制,邏輯卷技術大大提升了磁盤管理的靈活性!!!ui

3、LVM的原理spa

要想理解好LVM的原理,咱們必須首先要掌握4個基本的邏輯卷概念。操作系統

①PE  (Physical Extend)  物理拓展

②PV  (Physical Volume)  物理卷

③VG  (Volume Group)  卷組

④LV  (Logical Volume)  邏輯卷

咱們知道在使用LVM對磁盤進行動態管理之後,咱們是以邏輯卷的方式呈現給上層的服務的。因此咱們全部的操做目的,其實就是去建立一個LV(Logical Volume),邏輯卷就是用來取代咱們以前的分區,咱們經過對邏輯捲進行格式化,而後進行掛載操做就可使用了。那麼LVM的工做原理是什麼呢?所謂無圖無真相,我們下面經過圖來對邏輯卷的原理進行解釋!!

1.將咱們的物理硬盤格式化成PV(Physical Volume)

咱們看到,這裏有兩塊硬盤,一塊是sda,另外一塊是sdb,在LVM磁盤管理裏,我首先要將這兩塊硬盤格式化爲咱們的PV(Physical Volume),也就是咱們的物理卷,其實格式化物理卷的過程當中LVM是將底層的硬盤劃分爲了一個一個的PE(Physical Extend),咱們的LVM磁盤管理中PE的默認大小是4M大小,其實PE就是咱們邏輯卷管理的最基本單位。好比說我有一個400M的硬盤,那麼在將其格式化成PV的時候,其實際就是將這塊物理硬盤劃分紅了100個的PE,由於PE默認的大小就是4M。這個就是咱們的第一步操做。

2.建立一個VG(Volume Group)

在將硬盤格式化成PV之後,咱們第二步操做就是建立一個卷組,也就是VG(Volume Group),卷組在這裏咱們能夠將其抽象化成一個空間池,VG的做用就是用來裝PE的,咱們能夠把一個或者多個PV加到VG當中,由於在第一步操做時就已經將該硬盤劃分紅了多個PE,因此將多個PV加到VG裏面後,VG裏面就存放了許許多多來自不一樣PV中的PE,咱們經過上面的圖片就能夠看到,咱們格式化了兩塊硬盤,每一個硬盤分別格式化成了3個PE,而後將兩塊硬盤的PE都加到了咱們的VG當中,那麼咱們的VG當中就包含了6個PE,這6個PE就是兩個硬盤的PE之和。一般建立一個卷組的時候咱們會爲其取一個名字,也就是該VG的名字。

3.基於VG建立咱們最後要使用的LV(Logical Volume)

【注意】PV以及VG建立好之後咱們是不可以直接使用的,由於PV、VG是咱們邏輯卷底層的東西,咱們其實最後使用的是在VG基礎上建立的LV(Logical Volume),因此第三步操做就是基於VG來建立咱們最終要使用的LV。

當咱們建立好咱們的VG之後,這個時候咱們建立LV其實就是從VG中拿出咱們指定數量的PE,仍是拿上圖來講,咱們看到咱們此時的VG裏面已經擁有了6個PE,這時候咱們建立了咱們的第一個邏輯卷,它的大小是4個PE的大小,也就是16M(由於一個PE的默認大小是4M),而這4個PE有三個是來自於第一塊硬盤,而另一個PE則是來自第二塊硬盤。當咱們建立第二個邏輯卷時,它的大小就最多隻有兩個PE的大小了,由於其中的4個PE已經分配給了咱們的第一個邏輯卷。

因此建立邏輯卷其實就是咱們從VG中拿出咱們指定數量的PE,VG中的PE能夠來自不一樣的PV,咱們能夠建立的邏輯卷的大小取決於VG當中PE存在的數量,而且咱們建立的邏輯卷其大小必定是PE的整數倍(即邏輯卷的大小必定要是4M的整數倍)。

4.將咱們建立好的LV進行文件系統的格式化,而後掛載使用

在建立好LV之後,這個時候咱們就可以對其進行文件系統的格式化了,咱們最終使用的就是咱們剛建立好的LV,其就至關於傳統的文件管理的分區,咱們首先要對其進行文件系統的格式化操做,而後經過mount命令對其進行掛載,這個時候咱們就可以像使用日常的分區同樣來使用咱們的邏輯捲了。

咱們在建立好LV之後,咱們會在 /dev 目錄下看到咱們的LV信息,例如 /dev/vgname/lvname, 咱們每建立一個VG,其會在/dev目錄下建立一個以該VG名字命名的文件夾,在該VG的基礎上建立好LV之後,咱們會在這個VG目錄下多出一個以LV名字命名的邏輯卷。

下面咱們來對整個LVM的工做原理進行一個總結:

(1)物理磁盤被格式化爲PV,空間被劃分爲一個個的PE

(2)不一樣的PV加入到同一個VG中,不一樣PV的PE所有進入到了VG的PE池內

(3)LV基於PE建立,大小爲PE的整數倍,組成LV的PE可能來自不一樣的物理磁盤

(4)LV如今就直接能夠格式化後掛載使用了

(5)LV的擴充縮減實際上就是增長或減小組成該LV的PE數量,其過程不會丟失原始數據

 

咱們看到,咱們這裏若是要對LV進行擴充,直接加進來一塊sdc硬盤,而後將其格式化成PE,而後將該PV加入到了VG當中,這個時候咱們就能夠經過增長LV中PE的數量來動態的對LV進行擴充了,只要咱們的LV的大小不要超過咱們VG空餘空間的大小就好了!!

本篇隨筆主要講解了傳統磁盤管理與LVM動態管理磁盤機制的不一樣,並詳細講解了LVM的工做原理,在下一篇隨筆當中,將會詳細的講解LVM的基本配置,包括建立PV、VG以及VG,並動態的對咱們的LV進行擴充、減小操做!!!

 

 

Linux學習之CentOS(二十六)--Linux磁盤管理:LVM邏輯卷的建立及使用

 

在上一篇隨筆裏面 Linux學習之CentOS(二十五)--Linux磁盤管理:LVM邏輯卷基本概念及LVM的工做原理,詳細的講解了Linux的動態磁盤管理LVM邏輯卷的基本概念以及LVM的工做原理,包括LVM中最重要的四個基本點(PE、PV、VG以及LV),這篇隨筆將會詳細的講解LVM邏輯卷的建立、使用以及刪除.

1、建立LVM邏輯卷

 

咱們經過圖文並茂的方式來看看如何建立咱們的LVM,在上一篇隨筆中,咱們已經熟悉了LVM的工做原理,首先是要將咱們的物理硬盤格式化成PV,而後將多個PV加入到建立好的VG中,最後經過VG建立咱們的LV。因此咱們第一步就是將咱們的物理硬盤格式化成PV(物理卷)

①將物理硬盤格式化成PV(物理卷)  使用的是 pvcreate 命令

這裏我已經事先虛擬化了3快物理硬盤,每塊硬盤的大小爲8G,經過 fdisk -l 命令能夠查看

複製代碼

[root@xiaoluo ~]# 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: 0x00093d90

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1               1         523     4194304   82  Linux swap / Solaris
Partition 1 does not end on cylinder boundary.
/dev/sda2   *         523        2611    16776192   83  Linux

Disk /dev/sdb: 8589 MB, 8589934592 bytes
255 heads, 63 sectors/track, 1044 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: 8589 MB, 8589934592 bytes
255 heads, 63 sectors/track, 1044 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/sdd: 8589 MB, 8589934592 bytes
255 heads, 63 sectors/track, 1044 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、 /dev/sdc 兩塊硬盤格式化成PV

[root@xiaoluo ~]# pvcreate /dev/sdb /dev/sdc 

  Physical volume "/dev/sdb" successfully created
  Physical volume "/dev/sdc" successfully created

建立完PV之後,咱們可使用pvdisplay(顯示詳細信息)、pvs命令來查看當前pv的信息

複製代碼

[root@xiaoluo ~]# pvdisplay
  "/dev/sdb" is a new physical volume of "8.00 GiB"
  --- NEW Physical volume ---
  PV Name               /dev/sdb
  VG Name               
  PV Size               8.00 GiB
  Allocatable           NO
  PE Size               0   
  Total PE              0
  Free PE               0
  Allocated PE          0
  PV UUID               93UEEl-cxBU-A4HC-LNSh-jp9G-uU5Q-EG8LM9
   
  "/dev/sdc" is a new physical volume of "8.00 GiB"
  --- NEW Physical volume ---
  PV Name               /dev/sdc
  VG Name               
  PV Size               8.00 GiB
  Allocatable           NO
  PE Size               0   
  Total PE              0
  Free PE               0
  Allocated PE          0
  PV UUID               lH1vul-KBHx-H2C6-wbt1-8AdK-yHpr-bBIul5
   
[root@xiaoluo ~]# pvs
  PV         VG   Fmt  Attr PSize PFree
  /dev/sdb        lvm2 a--  8.00g 8.00g
  /dev/sdc        lvm2 a--  8.00g 8.00g

複製代碼

經過這兩個命令咱們能夠看到咱們已經建立好的PV的信息,兩個PV都是8G,目前尚未使用,PFree都是8G.

②建立卷組(VG),並將PV加入到卷組中  經過 vgcreate 命令

在建立完PV之後,這時候咱們須要建立一個VG,而後將咱們的PV都加入到這個卷組當中,在建立卷組時要給該卷組起一個名字

[root@xiaoluo ~]# vgcreate xiaoluo /dev/sdb /dev/sdc 

  Volume group "xiaoluo" successfully created

一樣,在建立好VG之後,咱們也可使用 vgdisplay 或者 vgs 命來來查看VG的信息

複製代碼

[root@xiaoluo ~]# vgdisplay 
  --- Volume group ---
  VG Name               xiaoluo
  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  // 當前這裏有兩個PV,分別是咱們的 /dev/sdb 和 /dev/sdc
  Act PV                2
  VG Size               15.99 GiB  // 當前VG的大小
  PE Size               4.00 MiB  // 經過這個咱們也能夠看到咱們LVM默認的PE大小就是4M
  Total PE              4094  // 由於VG裏面存放的就是各個PV中的PE,因此PE的數量就是VG大小除以默認PE的大小
  Alloc PE / Size       0 / 0   
  Free  PE / Size       4094 / 15.99 GiB
  VG UUID               B8eavI-21kD-Phnm-F1t1-eo4K-wgvg-T5qUbt
   
[root@xiaoluo ~]# vgs
  VG      #PV #LV #SN Attr   VSize  VFree 
  xiaoluo   2   0   0 wz--n- 15.99g 15.99g

複製代碼

③基於卷組(VG)建立邏輯卷(LV)  經過 lvcreate 命令

由於建立好的PV、VG都是底層的東西,咱們上層使用的是邏輯卷,因此咱們要基於VG建立咱們的邏輯卷才行

[root@xiaoluo ~]# lvcreate -n mylv -L 2G xiaoluo

  Logical volume "mylv" created

經過 lvcreate 命令基於VG建立好咱們的邏輯卷,名字爲mylv,大小爲2G,一樣咱們可使用 lvdisplay 或者 lvs 命令來查看建立好的邏輯卷的信息

複製代碼

[root@xiaoluo ~]# lvdisplay 
  --- Logical volume ---
  LV Path                /dev/xiaoluo/mylv  // 邏輯卷的路徑
  LV Name                mylv  // 邏輯卷的名字
  VG Name                xiaoluo  // 邏輯卷所屬卷組的名字
  LV UUID                PYuiYy-WpI6-XZB8-IhnQ-ANjM-lcz0-dlk4LR
  LV Write Access        read/write
  LV Creation host, time xiaoluo, 2013-05-23 23:45:08 +0800
  LV Status              available
  # open                 0
  LV Size                2.00 GiB  // 邏輯卷的大小
  Current LE             512
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           253:0
   
[root@xiaoluo ~]# lvs
  LV   VG      Attr      LSize Pool Origin Data%  Move Log Cpy%Sync Convert
  mylv xiaoluo -wi-a---- 2.00g

複製代碼

這樣子咱們的邏輯卷也就已經建立好了,咱們這個時候再經過 vgs 還有 pvs 命令查看一下咱們的PV與VG的信息

複製代碼

[root@xiaoluo mnt]# vgs
  VG      #PV #LV #SN Attr   VSize  VFree 
  xiaoluo   2   1   0 wz--n- 15.99g 13.99g  // 咱們看到LV的數量此時變成了1,由於咱們剛建立好了一個LV,LVFree還有14G
[root@xiaoluo mnt]# pvs
  PV         VG      Fmt  Attr PSize PFree
  /dev/sdb   xiaoluo lvm2 a--  8.00g 6.00g  // 剛建立好的LV用的是 /dev/sdb 這塊硬盤的,因此這塊硬盤的PFree還剩下6G
  /dev/sdc   xiaoluo lvm2 a--  8.00g 8.00g

複製代碼

咱們發現,當咱們每建立完一個LV時,VG與PV的信息都是時時在變化的,而且咱們建立LV的大小是根據當前VG的大小來決定的,不能超過當前VG的剩餘大小!

咱們在上一篇隨筆裏面有講過,每建立好一個邏輯卷,都會在 /dev 目錄下出現一個以該卷組命名的文件夾,基於該卷組建立的全部的邏輯卷都是存放在這個文件夾下面,咱們能夠查看一下

[root@xiaoluo ~]# ls /dev/xiaoluo/mylv 
/dev/xiaoluo/mylv

咱們每建立一個新的邏輯卷,該VG目錄下都會多出這麼一個設備。

2、格式化並使用咱們的邏輯卷

咱們已經建立好了咱們的PV、VG以及LV,這時候咱們若是要使用邏輯卷,就必須將其格式化成咱們須要用的文件系統,並將其掛載起來,而後就能夠像使用分區同樣去使用邏輯捲了

 

複製代碼

[root@xiaoluo ~]# mkfs.ext4 /dev/xiaoluo/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
131072 inodes, 524288 blocks
26214 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=536870912
16 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks: 
    32768, 98304, 163840, 229376, 294912

Writing inode tables: done                            
Creating journal (16384 blocks): done
Writing superblocks and filesystem accounting information: done

This filesystem will be automatically checked every 31 mounts or
180 days, whichever comes first.  Use tune2fs -c or -i to override.

複製代碼

 

格式化咱們的邏輯卷之後,就可使用 mount 命令將其進行掛載,咱們將其掛載到 /mnt 目錄下

複製代碼

[root@xiaoluo ~]# mount /dev/xiaoluo/mylv /mnt
[root@xiaoluo ~]# mount
/dev/sda2 on / type ext4 (rw)
proc on /proc type proc (rw)
sysfs on /sys type sysfs (rw)
devpts on /dev/pts type devpts (rw,gid=5,mode=620)
tmpfs on /dev/shm type tmpfs (rw,rootcontext="system_u:object_r:tmpfs_t:s0")
none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)
sunrpc on /var/lib/nfs/rpc_pipefs type rpc_pipefs (rw)
/dev/mapper/xiaoluo-mylv on /mnt type ext4 (rw)
[root@xiaoluo ~]# cd /mnt/
[root@xiaoluo mnt]# ls
lost+found
[root@xiaoluo mnt]# touch xiaoluo.txt
[root@xiaoluo mnt]# ls
lost+found  xiaoluo.txt

複製代碼

咱們看到,咱們的卷組已經掛載好了,而且能夠像使用分區同樣來對其進行文件操做了。

3、刪除邏輯卷

咱們在建立好邏輯卷後能夠經過建立文件系統,掛載邏輯捲來使用它,若是說咱們不想用了也能夠將其刪除掉。

【注意:】對於建立物理卷、建立卷組以及建立邏輯卷咱們是有嚴格順序的,一樣,對於刪除邏輯卷、刪除卷組以及刪除物理卷也是有嚴格順序要求的

①首先將正在使用的邏輯卷卸載掉  經過 umount 命令

②將邏輯卷先刪除  經過 lvremove 命令

③刪除卷組  經過 vgremove 命令

④最後再來刪除咱們的物理卷  經過 pvremove 命令

複製代碼

[root@xiaoluo /]# mount /dev/xiaoluo/mylv /mnt/
[root@xiaoluo /]# umount /mnt/
[root@xiaoluo /]# lvremove /dev/xiaoluo/mylv 
Do you really want to remove active logical volume mylv? [y/n]: y
  Logical volume "mylv" successfully removed

[root@xiaoluo /]# vgremove xiaoluo
  Volume group "xiaoluo" successfully removed

[root@xiaoluo /]# pvremove /dev/sdb 
  Labels on physical volume "/dev/sdb" successfully wiped

複製代碼

此時咱們的剛建立的邏輯卷 mylv,卷組 xiaoluo以及物理卷 /dev/sdb 已經從咱們當前操做系統上刪除掉了,經過 lvs、vgs、pvs命令能夠查看一下

複製代碼

[root@xiaoluo /]# lvs
  No volume groups found  // 邏輯卷已經沒有了
[root@xiaoluo /]# vgs
  No volume groups found  // 卷組也沒有了
[root@xiaoluo /]# pvs
  PV         VG   Fmt  Attr PSize PFree
  /dev/sdc        lvm2 a--  8.00g 8.00g  // sdb物理卷已經沒有了,只剩下 sdc物理捲了

複製代碼

本篇隨筆詳細講解了LVM邏輯卷的建立、使用及刪除,在下一篇隨筆裏咱們將繼續講解LVM邏輯卷的知識,包括如何對邏輯捲進行動態的拉伸以及對其進行壓縮!!!

 

 

Linux學習之CentOS(二十七)--Linux磁盤管理:LVM邏輯卷的拉伸及縮減

 

在上一篇隨筆裏面 Linux學習之CentOS(二十六)--Linux磁盤管理:LVM邏輯卷的建立及使用 詳細講解了LVM邏輯卷的建立及使用,咱們知道建立邏輯卷的步驟是先格式化物理硬盤位PV,而後建立一個VG,再將多個PV加入到VG中,最後基於VG建立咱們的LV。在這篇隨筆裏,咱們將繼續學習LVM邏輯卷的知識,包括邏輯卷的拉伸及縮減...

1、拉伸一個邏輯卷

咱們知道相比於傳統磁盤管理方式的各類問題,使用LVM邏輯捲來管理咱們的磁盤,咱們能夠對其進行動態的管理。在傳統的磁盤管理方式中,咱們若是出現分區大小不足的狀況下,咱們此時只能經過加入一塊物理硬盤,而後對其進行分區,由於加入的硬盤做爲獨立的文件系統存在,因此對原有分區並無影響,若是此時咱們須要擴大分區,就只能先將以前的分區先卸載掉,而後將全部的信息轉移到新的分區下,最後再將新的分區掛載上去,若是是在生產環境下,這樣是不可想象的,正由於如此,咱們纔出現了LVM的磁盤管理方式,能夠動態的對咱們的磁盤進行管理。

咱們首先來看下動態拉伸一個邏輯卷的示意圖:

 

咱們從上圖能夠看到,咱們在對邏輯捲進行拉伸時,其實際就是向邏輯卷中增長PE的數量,而PE的數量是由VG中剩餘PE的數量所決定的。

【注意:】邏輯卷的拉伸操做能夠在線進行,不須要卸載掉咱們的邏輯卷

這樣的好處就是當咱們的邏輯卷的大小不夠用時,咱們不須要對其進行卸載,就能夠動態的增長咱們的邏輯卷的大小,並不會對咱們的系統產生任何影響。例如若是咱們的服務器上運行着一個重要的服務或者數據庫,並要求咱們7*24小時不間斷保持在線,那麼這樣的動態增長邏輯卷的大小就很是的有必要了。

接下來咱們來看看拉伸邏輯卷的步驟:

由於咱們的邏輯卷的拉伸操做是能夠在線進行的,因此這裏咱們先將邏輯卷掛載上,並在使用狀況下動態的拉伸咱們的邏輯卷

 

複製代碼

[root@xiaoluo ~]# mount /dev/xiaoluo/mylv /mnt
[root@xiaoluo ~]# cd /mnt
[root@xiaoluo mnt]# vi xiaoluo.txt
[root@xiaoluo mnt]# cat xiaoluo.txt 
I am xiaoluo
[root@xiaoluo mnt]# ls
lost+found  xiaoluo.txt

複製代碼

 

①查看當前VG的信息,保證VG中有足夠的空閒空間  經過 vgdisplay 或者 vgs 命令

 

複製代碼

[root@xiaoluo mnt]# vgdisplay

  --- Volume group ---
  VG Name               xiaoluo
  System ID             
  Format                lvm2
  Metadata Areas        2
  Metadata Sequence No  2
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                1
  Open LV               0
  Max PV                0
  Cur PV                2
  Act PV                2
  VG Size               15.99 GiB
  PE Size               4.00 MiB
  Total PE              4094
  Alloc PE / Size       512 / 2.00 GiB
  Free  PE / Size       3582 / 13.99 GiB  // 咱們的VG當前還有14G,還有足夠的空閒空間
  VG UUID               Cn2iaV-gkf0-pg3M-5ZpY-Wqx9-C3r2-vmtnpM

複製代碼

 

在咱們的VG中還有足夠的空閒空間時,咱們就能夠動態的對邏輯捲進行拉伸操做了

②擴充邏輯卷  經過 lvextend 命令

 

好比我這裏要對 mylv 邏輯卷擴充1G的大小,此時咱們就可使用 lvextend -L +1G /dev/xiaoluo/mylv 命令來執行操做

 

複製代碼

[root@xiaoluo mnt]# lvs
  LV   VG      Attr      LSize Pool Origin Data%  Move Log Cpy%Sync Convert
  mylv xiaoluo -wi-a---- 2.00g   // 咱們以前建立的 mylv 邏輯卷的大小爲 2G

[root@xiaoluo mnt]# lvextend -L +1G /dev/xiaoluo/mylv 
  Extending logical volume mylv to 3.00 GiB  
  Logical volume mylv successfully resized

複製代碼

 

③查看完擴充後LV大小  擴充完後咱們可使用 lvdisplay 或者 lvs 命令來查看一下當前lv的信息

複製代碼

[root@xiaoluo mnt]# lvdisplay 
  --- Logical volume ---
  LV Path                /dev/xiaoluo/mylv
  LV Name                mylv
  VG Name                xiaoluo
  LV UUID                V8j32N-dTes-vADG-47gj-vSSk-LwdX-k3FPdd
  LV Write Access        read/write
  LV Creation host, time xiaoluo, 2013-05-24 20:42:46 +0800
  LV Status              available
  # open                 0
  LV Size                3.00 GiB  // 擴充之後咱們的 mylv 邏輯卷大小變成了3G了
  Current LE             768
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           253:0

複製代碼

這個時候咱們發現拉伸之後咱們的邏輯卷大小變成了3G了,此時咱們正在使用個人邏輯卷,並無卸載掉該邏輯卷,同時咱們查看邏輯卷裏面的內容,發現其裏面的文件還在,而且沒有受到一點損害

[root@xiaoluo mnt]# ls
lost+found  xiaoluo.txt
[root@xiaoluo mnt]# cat xiaoluo.txt 
I am xiaoluo

④更新文件系統  經過 resize2fs 命令

咱們在對邏輯捲進行拉伸之後,咱們經過 df -h 命令能夠查看一下當前的文件系統信息

[root@xiaoluo mnt]# df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/sda2              16G  3.8G   12G  25% /
tmpfs                 249M  560K  248M   1% /dev/shm
/dev/mapper/xiaoluo-mylv
                      2.0G   68M  1.9G   4% /mnt  

咱們發現咱們當前的掛載的邏輯卷的文件系統大小仍是2G,並無變成3G,其緣由就是咱們的文件系統是在建立完LV之後就立刻格式化的,此後咱們對邏輯捲進行拉伸之後,其並不會改變當前的文件系統,因此咱們這個時候必須更新咱們的文件系統,經過使用 resize2fs 命令

複製代碼

[root@xiaoluo mnt]# resize2fs /dev/xiaoluo/mylv 
resize2fs 1.41.12 (17-May-2010)
Filesystem at /dev/xiaoluo/mylv is mounted on /mnt; on-line resizing required
old desc_blocks = 1, new_desc_blocks = 1
Performing an on-line resize of /dev/xiaoluo/mylv to 786432 (4k) blocks.
The filesystem on /dev/xiaoluo/mylv is now 786432 blocks long.

[root@xiaoluo mnt]# df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/sda2              16G  3.8G   12G  25% /
tmpfs                 249M  560K  248M   1% /dev/shm
/dev/mapper/xiaoluo-mylv
                      3.0G   68M  2.8G   3% /mnt  // 這個時候咱們的文件系統已經更新了,大小也變成了3G

複製代碼

此時咱們發現,咱們這時的文件系統也已經更新了,大小變成了3G.

咱們經過上面的步驟能夠發現,拉伸一個邏輯卷的實際上是很是簡單的,首先就是保持VG中有足夠的空閒空間,其次就是對咱們的邏輯捲進行動態的拉伸,最後在拉伸完邏輯卷之後咱們還必需要更新咱們的文件系統。同時咱們能夠發現,在對邏輯捲進行拉伸時咱們並不須要先卸載掉邏輯卷,能夠在線進行,而且邏輯卷裏面的文件內容都不會發生變化。

2、拉伸一個卷組

上面介紹瞭如何拉伸一個邏輯卷,若是說此時咱們的VG中PE的數量已經不足了,此時咱們若是須要拉伸咱們的邏輯卷,發現卷組中的空間已經不夠用了,這個時候咱們就必須對咱們的卷組進行拉伸,使得卷組中有足夠的空閒空間,最後再來拉伸咱們的邏輯卷。咱們知道卷組其實就是將多塊PV加入到VG當中,因此卷組的拉伸也很是的簡單,咱們只須要增長一塊物理硬盤,將其格式化成PV,而後再將這個PV加入到該卷組中便可。

這裏咱們首先模擬一下將VG中的剩餘空間所有拉伸到咱們的邏輯卷當中,而後咱們經過增長一塊物理硬盤,來對咱們的卷組進行拉伸操做

複製代碼

[root@xiaoluo mnt]# vgs  // 查看當前vg的空閒空間大小
  VG      #PV #LV #SN Attr   VSize  VFree 
  xiaoluo   2   1   0 wz--n- 15.99g 12.99g
[root@xiaoluo mnt]# lvextend -L +11G /dev/xiaoluo/mylv   // 咱們將11G的空間拉伸給當前的邏輯卷
  Extending logical volume mylv to 14.00 GiB  
  Logical volume mylv successfully resized
[root@xiaoluo mnt]# resize2fs /dev/xiaoluo/mylv   // 更新文件系統
resize2fs 1.41.12 (17-May-2010)
Filesystem at /dev/xiaoluo/mylv is mounted on /mnt; on-line resizing required
old desc_blocks = 1, new_desc_blocks = 1
Performing an on-line resize of /dev/xiaoluo/mylv to 3670016 (4k) blocks.
The filesystem on /dev/xiaoluo/mylv is now 3670016 blocks long.

[root@xiaoluo mnt]# df -h  // 查看當前文件系統信息
Filesystem            Size  Used Avail Use% Mounted on
/dev/sda2              16G  3.8G   12G  25% /
tmpfs                 249M  560K  248M   1% /dev/shm
/dev/mapper/xiaoluo-mylv
                       14G   69M   14G   1% /mnt

複製代碼

這個時候咱們若是還要對邏輯捲進行擴充,可是此時咱們的VG中空閒空間的大小已經不太夠用了,咱們這個時候就須要對咱們的卷組進行動態的拉伸了

①將要添加到VG的硬盤格式化成PV  經過 pvcreate 命令

 

複製代碼

[root@xiaoluo mnt]# pvcreate /dev/sdd 
  Physical volume "/dev/sdd" successfully created

[root@xiaoluo mnt]# pvs
  PV         VG      Fmt  Attr PSize PFree
  /dev/sdb   xiaoluo lvm2 a--  8.00g    0 
  /dev/sdc   xiaoluo lvm2 a--  8.00g 1.99g
  /dev/sdd           lvm2 a--  8.00g 8.00g  // 此時咱們新加入的一塊硬盤尚未添加到VG當中

複製代碼

 

②將新的PV添加到指定的VG當中  經過 vgextend 命令

複製代碼

[root@xiaoluo mnt]# vgextend xiaoluo /dev/sdd 
  Volume group "xiaoluo" successfully extended

[root@xiaoluo mnt]# pvs
  PV         VG      Fmt  Attr PSize PFree
  /dev/sdb   xiaoluo lvm2 a--  8.00g    0 
  /dev/sdc   xiaoluo lvm2 a--  8.00g 1.99g
  /dev/sdd   xiaoluo lvm2 a--  8.00g 8.00g

複製代碼

③查看當前VG的信息  經過 vgdisplay 或者 vgs 命令

複製代碼

[root@xiaoluo mnt]# vgdisplay 
  --- Volume group ---
  VG Name               xiaoluo
  System ID             
  Format                lvm2
  Metadata Areas        3
  Metadata Sequence No  5
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                1
  Open LV               1
  Max PV                0
  Cur PV                3
  Act PV                3
  VG Size               23.99 GiB
  PE Size               4.00 MiB
  Total PE              6141
  Alloc PE / Size       3584 / 14.00 GiB
  Free  PE / Size       2557 / 9.99 GiB  // 此時咱們發現咱們VG的大小以及獲得拉伸了
  VG UUID               h5oPBH-24zo-hn4N-zevL-MQVw-4EiX-x9QAyb

複製代碼

3、縮小一個邏輯卷

上面講的都是如何對邏輯捲進行拉伸以及對卷組進行拉伸,其實邏輯卷還能夠動態的對其進行縮小,雖然在實際狀況中,咱們幾乎不會遇到縮小一個邏輯卷的這種狀況,不過仍是有必要學習一下如何縮小一個邏輯卷,首先咱們也是先來看看縮小邏輯卷的一個示意圖

咱們看到縮小邏輯卷其實就是從當前的LV中拿出指定的PE數量放回到VG當中。

【注意:】邏輯卷的縮小操做必須離線執行,要先卸載掉邏輯卷才能夠

上面在講的邏輯卷的拉伸操做時咱們能夠在線執行,不須要卸載掉邏輯卷,可是在進行邏輯卷的縮小操做時,咱們必需要先卸載掉邏輯卷才行,不然就可能形成邏輯卷裏的文件發生損害。接下來咱們來看一下對邏輯捲進行縮小操做的步驟

①卸載已經掛載的邏輯卷  經過 umount 命令

[root@xiaoluo mnt]# cd
[root@xiaoluo ~]# umount /mnt  // 先將咱們的邏輯卷卸載掉

②縮小文件系統(會提示須要運行fsck來檢查文件系統)  經過 resize2fs 命令

咱們在講到對邏輯捲進行拉伸的時候,其順序是先對邏輯捲進行拉伸操做,而後再更新咱們的文件系統,可是在對邏輯捲進行縮小操做時,咱們必須先執行縮小文件系統這個操做!!!這個順序必需要記清楚!!!

複製代碼

[root@xiaoluo ~]# lvs  // 首先咱們看下咱們當前的邏輯卷大小,此時爲14G,咱們這裏假設要將其縮減爲10G的大小
  LV   VG      Attr      LSize  Pool Origin Data%  Move Log Cpy%Sync Convert
  mylv xiaoluo -wi-a---- 14.00g                 
                            [root@xiaoluo ~]# resize2fs /dev/xiaoluo/mylv 10G  // 這條命令的做用就是縮小咱們的文件系統,將咱們的文件系統縮小到10Gresize2fs 1.41.12 (17-May-2010)
Please run 'e2fsck -f /dev/xiaoluo/mylv' first.  // 提示咱們首先須要運行 e2fsck 命令來對咱們的文件系統進行檢查

[root@xiaoluo ~]# e2fsck -f /dev/xiaoluo/mylv   // 使用 e2fsck 命令來檢查咱們的文件系統
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/xiaoluo/mylv: 12/917504 files (0.0% non-contiguous), 75249/3670016 blocks
[root@xiaoluo ~]# resize2fs /dev/xiaoluo/mylv 10G  // 此時再使用 resize2fs 命令來縮小咱們的文件系統,縮小爲10G
resize2fs 1.41.12 (17-May-2010)
Resizing the filesystem on /dev/xiaoluo/mylv to 2621440 (4k) blocks.
The filesystem on /dev/xiaoluo/mylv is now 2621440 blocks long.

複製代碼

這個時候咱們的邏輯卷的文件系統已經被縮小爲10G了,接下來咱們就能夠縮小咱們的邏輯卷的大小了

③縮小LV  經過 lvreduce 命令

由於咱們以前的LV大小爲14G,咱們經過縮小文件系統將其縮減爲10G,因此此時咱們須要縮小4G大小的邏輯卷

複製代碼

[root@xiaoluo ~]# lvreduce -L -4G /dev/xiaoluo/mylv   // 縮小4G大小的邏輯卷
  WARNING: Reducing active logical volume to 10.00 GiB
  THIS MAY DESTROY YOUR DATA (filesystem etc.)  // 這裏會提示一個警告可能會損壞咱們的文件,這種狀況會出如今 當咱們須要縮小的文件大小與實際操做時縮小的文件大小不一致時,好比這裏我若是多縮小了1個G大小的邏輯卷,這個時候就會出現文件損壞的狀況
Do you really want to reduce mylv? [y/n]: y  
  Reducing logical volume mylv to 10.00 GiB
  Logical volume mylv successfully resized
[root@xiaoluo ~]# lvs  // 此時咱們的邏輯卷已經被縮小爲10G了
  LV   VG      Attr      LSize  Pool Origin Data%  Move Log Cpy%Sync Convert
  mylv xiaoluo -wi-a---- 10.00g

複製代碼

縮小邏輯卷的操做是個危險的操做,稍不注意就可能損壞咱們的邏輯卷,形成文件的丟失或損害,因此咱們通常不要對邏輯捲進行縮減操做!!!

縮小完邏輯卷之後,咱們再將邏輯卷掛載到 /mnt 下,看看裏面的文件是否還在

[root@xiaoluo ~]# mount /dev/xiaoluo/mylv /mnt/
[root@xiaoluo ~]# cd /mnt/
[root@xiaoluo mnt]# ls
lost+found  xiaoluo.txt
[root@xiaoluo mnt]# cat xiaoluo.txt 
I am xiaoluo

咱們發現,咱們以前建立的文件,以及文件裏的內容都沒有發生改變。

最後再強調一點:縮小邏輯卷的操做必需要先卸載掉邏輯卷,而後先縮小文件系統,最後再來縮小咱們的邏輯卷才行!!

4、縮小卷組

咱們既然能夠動態的拉伸邏輯卷、拉伸卷組以及縮小邏輯卷,那麼咱們固然也能夠縮小咱們的卷組。何時咱們須要來縮小咱們的卷組呢?好比說我有一塊硬盤,這個時候咱們須要將這塊硬盤拆下來,或者說不想將這塊硬盤再做爲邏輯捲了,這個時候咱們就須要執行縮小卷組的操做了,縮小卷組的操做能夠經過下面這個示意圖來展現:

好比說咱們這裏須要將物理卷/sdd這塊硬盤拿走,那麼縮小卷組的步驟以下:

①首先必須也要卸載掉咱們的邏輯卷  經過 umount 命令

 

[root@xiaoluo mnt]# cd
[root@xiaoluo ~]# umount /dev/xiaoluo/mylv

 

②將一個PV從指定卷組中移除掉  經過 vgreduce 命令

複製代碼

[root@xiaoluo ~]# pvs  // 首先咱們須要看下咱們當前有哪些PV正在使用中,由於縮小一個卷組其實就是從卷組中移除一個PV,若是PV正在使用中,那麼PV就移除不了
  PV         VG      Fmt  Attr PSize PFree
  /dev/sdb   xiaoluo lvm2 a--  8.00g    0 
  /dev/sdc   xiaoluo lvm2 a--  8.00g 5.99g
  /dev/sdd   xiaoluo lvm2 a--  8.00g 8.00g  // 當前只有 sdd 這個PV能夠移除掉

[root@xiaoluo ~]# vgreduce xiaoluo /dev/sdd   // 咱們將 /dev/sdd 這個PV從指定卷組 xiaoluo 中移除掉
  Removed "/dev/sdd" from volume group "xiaoluo"

複製代碼

③查看當前卷組的信息  經過 vgdisplay 或者 vgs 命令

 

複製代碼

[root@xiaoluo ~]# vgdisplay 
  --- Volume group ---
  VG Name               xiaoluo
  System ID             
  Format                lvm2
  Metadata Areas        2
  Metadata Sequence No  7
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                1
  Open LV               0
  Max PV                0
  Cur PV                2  // 當前PV也變成了2塊了
  Act PV                2
  VG Size               15.99 GiB  // 咱們發現這時咱們的卷組大小隻有16G了
  PE Size               4.00 MiB
  Total PE              4094
  Alloc PE / Size       2560 / 10.00 GiB
  Free  PE / Size       1534 / 5.99 GiB
  VG UUID               h5oPBH-24zo-hn4N-zevL-MQVw-4EiX-x9QAyb

[root@xiaoluo ~]# pvs
  PV         VG      Fmt  Attr PSize PFree
  /dev/sdb   xiaoluo lvm2 a--  8.00g    0 
  /dev/sdc   xiaoluo lvm2 a--  8.00g 5.99g
  /dev/sdd           lvm2 a--  8.00g 8.00g  // dev/sdd 這個PV已經從卷組中移除掉了

複製代碼

 

④將PV刪除掉   經過 pvremove 命令

 

 

[root@xiaoluo ~]# pvremove /dev/sdd 
  Labels on physical volume "/dev/sdd" successfully wiped

 

至此,本篇隨筆就已經告一段落了,在本篇隨筆裏詳細講解了如何動態的對咱們的邏輯捲進行拉伸以及縮小操做,同時對LVM的基本概念、基本原理(Linux學習之CentOS(二十五)--Linux磁盤管理:LVM邏輯卷基本概念及LVM的工做原理)以及LVM的配置使用(Linux學習之CentOS(二十六)--Linux磁盤管理:LVM邏輯卷的建立及使用)等知識的總結也所有結束了!!!

在之後學習Linux當中,將繼續記錄本身學習Linux的心得、體會!!!

相關文章
相關標籤/搜索