天天看點

認識Linux中的LVM PV VG LV

 LVM是邏輯盤卷管理(Logical Volume Manager)的簡稱,他是磁盤管理的一種工具,就目前基本上所有作業系統均支援,LVM是建立在硬碟和分區之上的一個邏輯層,來提高磁盤分區管理的靈活性。通過LVM系統管理者可以輕松管理磁盤分區,如:将若幹個磁盤分區連接配接為一個整塊的卷組(volume group),形成一個存儲池。管理者可以在卷組上随意建立邏輯卷組(logical volumes),并進一步在邏輯卷組上建立檔案系統。管理者通過LVM可以友善的調整存儲卷組的大小,并且可以對磁盤存儲按照組的方式進行命名、管理和配置設定,例如按照使用用途進行定義:“DBdata”和“DBSoft”,而不是使用實體磁盤名“sda”和“sdb”或”hda”和”hdb”。而且當系統添加了新的磁盤,通過LVM管理者就不必将磁盤的檔案移動到新的磁盤上以充分利用新的存儲空間,而是直接擴充檔案系統跨越磁盤即可,架構可以參考如下圖:

<a href="https://s1.51cto.com/wyfs02/M00/95/76/wKiom1kVYH2BoTpXAACMblYojJA055.png" target="_blank"></a>

1、基本概念介紹

實體存儲媒體(The physical media)

這裡指系統的儲存設備:硬碟,如:/dev/hda、/dev/sda等等,是存儲系統最低層的存儲單元。

實體卷(PV physical volume)

實體卷就是指硬碟分區或從邏輯上與磁盤分區具有同樣功能的裝置(如RAID),是LVM的基本存儲邏輯塊,但和基本的實體存儲媒體(如分區、磁盤等)比較,卻包含有與LVM相關的管理參數。

卷組(VG Volume Group)

LVM卷組類似于非LVM系統中的實體硬碟,其由實體卷組成。可以在卷組上建立一個或多個“LVM分區”(邏輯卷),LVM卷組由一個或多個實體卷組成。

邏輯卷(LV 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)被由大小等同的基本單元PE組成。

      一個卷組由一個或多個實體卷組成:

 從上圖可以看到,PE和LE有着一一對應的關系。邏輯卷建立在卷組上。邏輯卷就相當于非LVM系統的磁盤分區,可以在其上建立檔案系統。

      下圖是磁盤分區、卷組、邏輯卷和檔案系統之間的邏輯關系的示意圖:

        和非LVM系統将包含分區資訊的中繼資料儲存在位于分區的起始位置的分區表中一樣,邏輯卷以及卷組相關的中繼資料也是儲存在位于實體卷起始處的VGDA(卷組描述符區域)中。VGDA包括以下内容: PV描述符、VG描述符、LV描述符、和一些PE描述符 。

       系統啟動LVM時激活VG,并将VGDA加載至記憶體,來識别LV的實際實體存儲位置。當系統進行I/O操作時,就會根據VGDA建立的映射機制來通路實際的實體位置。

2、LVM建立和管理

1)虛拟機添加兩塊磁盤,并識别為sdb和sdc

<a href="https://s2.51cto.com/wyfs02/M01/95/76/wKiom1kVY8_BOBySAACeNYzuqv8009.png" target="_blank"></a>

<a href="https://s5.51cto.com/wyfs02/M01/95/77/wKiom1kVZP6xYHQiAABTHWh703o985.png" target="_blank"></a>

2)建立PV,使用sdb和sdc

<code>[root@localhost ~]</code><code># pvcreate /dev/sdb</code>

<code>  </code><code>Physical volume </code><code>"/dev/sdb"</code> <code>successfully created</code>

<code>[root@localhost ~]</code><code># pvcreate /dev/sdc</code>

<code>  </code><code>Physical volume </code><code>"/dev/sdc"</code> <code>successfully created</code>

<code>[root@localhost ~]</code><code># pvs</code>

<code>  </code><code>PV         VG   Fmt  Attr PSize PFree</code>

<code>  </code><code>/dev/sda2</code>  <code>vg00 lvm2 a--  7.80g    0 </code>

<code>  </code><code>/dev/sdb</code>   <code>vgzx lvm2 a--  8.00g 8.00g</code>

<code>  </code><code>/dev/sdc</code>   <code>vgzx lvm2 a--  8.00g 8.00g</code>

3)建立VG,使用剛建立的兩個PV

<code>[root@localhost ~]</code><code># vgcreate vgzx /dev/sdb /dev/sdc</code>

<code>  </code><code>Volume group </code><code>"vgzx"</code> <code>successfully created</code>

<code>[root@localhost ~]</code><code># vgs</code>

<code>  </code><code>VG   </code><code>#PV #LV #SN Attr   VSize  VFree </code>

<code>  </code><code>vg00   1   2   0 wz--n-  7.80g     0 </code>

<code>  </code><code>vgzx   2   0   0 wz--n- 15.99g 15.99g</code>

4)建立LV,在剛建立的VG上建立兩個LV

<code>[root@localhost ~]</code><code># lvcreate -L 2G -n lvzx01 vgzx</code>

<code>  </code><code>Logical volume </code><code>"lvzx01"</code> <code>created.</code>

<code>[root@localhost ~]</code><code># lvcreate -L 2G -n lvzx02 vgzx</code>

<code>  </code><code>Logical volume </code><code>"lvzx02"</code> <code>created.</code>

<code>[root@localhost ~]</code><code># lvs</code>

<code>  </code><code>LV     VG   Attr       LSize Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert</code>

<code>  </code><code>data   vg00 -wi-ao---- 5.85g                                                    </code>

<code>  </code><code>swap   vg00 -wi-ao---- 1.95g                                                    </code>

<code>  </code><code>lvzx01 vgzx -wi-a----- 2.00g                                                    </code>

<code>  </code><code>lvzx02 vgzx -wi-a----- 2.00g</code>

5)使用剛建立的LV建立檔案系統并挂載到作業系統

<code>[root@localhost ~]# mkfs.ext4 /dev/vgzx/lvzx01 </code>

<code>mke2fs 1.41.12 (17-May-2010)</code>

<code>Filesystem label=</code>

<code>OS type: Linux</code>

<code>Block </code><code>size</code><code>=4096 (log=2)</code>

<code>Fragment </code><code>size</code><code>=4096 (log=2)</code>

<code>Stride=0 blocks, Stripe width=0 blocks</code>

<code>131072 inodes, 524288 blocks</code>

<code>26214 blocks (5.00%) reserved </code><code>for</code> <code>the super </code><code>user</code>

<code>First</code> <code>data block=0</code>

<code>Maximum filesystem blocks=536870912</code>

<code>16 block groups</code>

<code>32768 blocks per </code><code>group</code><code>, 32768 fragments per </code><code>group</code>

<code>8192 inodes per </code><code>group</code>

<code>Superblock backups stored </code><code>on</code> <code>blocks: </code>

<code>    </code><code>32768, 98304, 163840, 229376, 294912</code>

<code>Writing inode tables: done                            </code>

<code>Creating journal (16384 blocks): done</code>

<code>Writing superblocks </code><code>and</code> <code>filesystem accounting information: done</code>

<code>This filesystem will be automatically checked every 35 mounts </code><code>or</code>

<code>180 days, whichever comes </code><code>first</code><code>.  Use tune2fs -c </code><code>or</code> <code>-i </code><code>to</code> <code>override.</code>

<code>[root@localhost ~]# mkfs.ext4 /dev/vgzx/lvzx02 </code>

<code>This filesystem will be automatically checked every 20 mounts </code><code>or</code>

<code>[root@localhost ~]# mkdir /orasoft</code>

<code>[root@localhost ~]# mkdir /oradata</code>

<code>[root@localhost ~]# mount /dev/mapper/vgzx-lvzx01 </code>

<code>mount: can't find /dev/mapper/vgzx-lvzx01 </code><code>in</code> <code>/etc/fstab </code><code>or</code> <code>/etc/mtab</code>

<code>[root@localhost ~]# mount /dev/mapper/vgzx-lvzx01 /oradata/</code>

<code>[root@localhost ~]# mount /dev/mapper/vgzx-lvzx02 /orasoft/</code>

<code>[root@localhost ~]# df -h</code>

<code>Filesystem            </code><code>Size</code>  <code>Used Avail Use% Mounted </code><code>on</code>

<code>/dev/mapper/vg00-data</code>

<code>                      </code><code>5.7G  1.9G  3.6G  34% /</code>

<code>tmpfs                 499M     0  499M   0% /dev/shm</code>

<code>/dev/sda1             190M   36M  145M  20% /boot</code>

<code>/dev/mapper/vgzx-lvzx01</code>

<code>                      </code><code>2.0G  3.0M  1.9G   1% /oradata</code>

<code>/dev/mapper/vgzx-lvzx02</code>

<code>                      </code><code>2.0G  3.0M  1.9G   1% /orasoft</code>

如果想挂載随機啟動需要修改/etc/fastab檔案。

6)擴充LV

<code>[root@localhost ~]# lvextend -L +2G /dev/mapper/vgzx-lvzx01 </code>

<code>  </code><code>Size</code> <code>of</code> <code>logical volume vgzx/lvzx01 changed </code><code>from</code> <code>2.00 GiB (512 extents) </code><code>to</code> <code>4.00 GiB (1024 extents).</code>

<code>  </code><code>Logical volume lvzx01 successfully resized</code>

<code>[root@localhost ~]# lvextend -L +3G /dev/mapper/vgzx-lvzx02</code>

<code>  </code><code>Size</code> <code>of</code> <code>logical volume vgzx/lvzx02 changed </code><code>from</code> <code>2.00 GiB (512 extents) </code><code>to</code> <code>5.00 GiB (1280 extents).</code>

<code>  </code><code>Logical volume lvzx02 successfully resized</code>

<code>[root@localhost ~]# lvs</code>

<code>  </code><code>LV     VG   Attr       LSize Pool Origin Data%  Meta%  </code><code>Move</code> <code>Log Cpy%Sync </code><code>Convert</code>

<code>  </code><code>data   vg00 -wi-ao</code><code>---- 5.85g                                                    </code>

<code>  </code><code>swap   vg00 -wi-ao</code><code>---- 1.95g                                                    </code>

<code>  </code><code>lvzx01 vgzx -wi-ao</code><code>---- 4.00g                                                    </code>

<code>  </code><code>lvzx02 vgzx -wi-ao</code><code>---- 5.00g                                                    </code>

7)擴充檔案系統resize2fs

從上面可以看出,LV分别做了擴充,但在作業系統上還沒有顯示為擴充

<code>[root@localhost ~]# resize2fs /dev/mapper/vgzx-lvzx01 </code>

<code>resize2fs 1.41.12 (17-May-2010)</code>

<code>Filesystem </code><code>at</code> <code>/dev/mapper/vgzx-lvzx01 </code><code>is</code> <code>mounted </code><code>on</code> <code>/oradata; </code><code>on</code><code>-line resizing required</code>

<code>old desc_blocks = 1, new_desc_blocks = 1</code>

<code>Performing an </code><code>on</code><code>-line resize </code><code>of</code> <code>/dev/mapper/vgzx-lvzx01 </code><code>to</code> <code>1048576 (4k) blocks.</code>

<code>The filesystem </code><code>on</code> <code>/dev/mapper/vgzx-lvzx01 </code><code>is</code> <code>now 1048576 blocks long.</code>

<code>[root@localhost ~]# resize2fs /dev/mapper/vgzx-lvzx02</code>

<code>Filesystem </code><code>at</code> <code>/dev/mapper/vgzx-lvzx02 </code><code>is</code> <code>mounted </code><code>on</code> <code>/orasoft; </code><code>on</code><code>-line resizing required</code>

<code>Performing an </code><code>on</code><code>-line resize </code><code>of</code> <code>/dev/mapper/vgzx-lvzx02 </code><code>to</code> <code>1310720 (4k) blocks.</code>

<code>The filesystem </code><code>on</code> <code>/dev/mapper/vgzx-lvzx02 </code><code>is</code> <code>now 1310720 blocks long.</code>

<code>                      </code><code>3.9G  4.0M  3.7G   1% /oradata</code>

<code>                      </code><code>4.9G  4.0M  4.7G   1% /orasoft</code>

如果是檔案系統是xfs格式的,需要使用xfs_growfs指令執行擴充檔案系統。

      本文轉自hbxztc 51CTO部落格,原文連結:http://blog.51cto.com/hbxztc/1925107,如需轉載請自行聯系原作者

繼續閱讀