linux磁盤管理之LVM

                    LVM

 LVM是 Logical Volume Manager(邏輯卷管理)的簡寫,它是Linux環境下對磁盤分區進行管理的一種機制,Linux用戶安裝Linux操作系統時遇到的一個常見的難以決定的問題就是如何正確地評估各分區大小,以分配合適的硬盤空間。普通的磁盤分區管理方式在邏輯分區劃分好之后就無法改變其大小,當一個邏輯分區存放不下某個文件時,這個文件因為受上層文件系統的限制,也不能跨越多個分區來存放,所以也不能同時放到別的磁盤上。而遇到出現某個分區空間耗盡時,解決的方法通常是使用符號鏈接,或者使用調整分區大小的工具,但這只是暫時解決辦法,沒有從根本上解決問題。隨著Linux的邏輯卷管理功能的出現,這些問題都迎刃而解,LVM的重點在于可以彈性調整文件系統的容量!LVM可以整合多個物理分區在一起,讓這些分區看起來就想是一個磁盤一樣,而且,還可以在將來其他的物理分區或將其從這個LVM管理的磁盤當中刪除。

LVM的特性

   

    ?允許對卷進行方便操作的抽象層,包括重新設定文件系統的大小

    ?允許在多個物理設備間重新組織文件系統

    ?將設備指定為物理卷

    ?用一個或者多個物理卷來創建一個卷組

    ?物理卷是用固定大小的物理區域(Physical Extent,PE)來定義的

    ?在物理卷上創建的邏輯卷是由物理區域(PE)組成

    ?可以在邏輯卷上創建文件系統

    


LVM的組成結構

dm:device mapper :強一個或多個底層塊設備組織成一個邏輯的模塊

    注意:內核必須支持此模塊,否則無法使用lvm功能

Physical Volume,PV,物理卷

    PV卷時LVM機制的基本存儲設備,通常對應一個普通分區或整個硬盤,創建物理卷時,會在分區的頭部創建一個保留區塊,用于記錄LVM屬性,并把存儲空間分割成默認大小為4MB的基本單元PE,從而構成物理卷。

    

pv管理工具:     

pvs [PhysicalVolume [PhysicalVolume…]]    簡要pv信息顯示

pvdisplay [PhysicalVolumePath…]         詳細顯示pv信息

pvcreate [PhysicalVolume…]            創建pv卷

pvscan DevicePath                    掃描所有磁盤上的物理卷

pvremove [PhysicalVolume] [PhysicalVolume…] 移除pv卷

    例如: pvremove /dev/DEVICE[N]  pvremove /dev/sdb1..


Volume,Group,VG,卷用戶組

    所謂的LVM大磁盤就是將許多PV整合成這個VG,所以VG就是LVM組合起來的大磁盤。

     

vg管理工具:

  vgs [VolumeGroupName [VolumeGroupName…]]:簡要的vg信息顯示

  vgdisplay [VolumeGroupName…]:顯示vg的詳細信息

  vgcreate  [-s #[kKmMgGtTpPeE]] VolumeGroupName PhysicalDevicePath [PhysicalDevicePath…] :創建vg組

   -s 指定PE大小

  vgreduce vgreduce VolumeGroupName [PhysicalVolumePath…] 從卷組中刪除物理卷   

  vgextend VolumeGroupName  PhysicalDevicePath  [Physi-calDevicePath…] 向卷組中添加物理卷

  vgremove [VolumeGroup‐Name…]刪除卷組

    vgremove VGNAME


Logic Volume ,LV,邏輯卷

    最終的VG還會被且成LV,這個LV就是最后可以被格式化使用的類似分區。

邏輯塊(Logical Extent,LE)

邏輯卷LV也被劃分為可被尋址的基本單位,稱為LE。在同一個卷組中,LE的大小和PE是相同的,并且一一對應。

lv管理工具:

    lvs [VolumeGroupName]    簡要lv信息

    lvdisplay [VolumeGroupName|LogicalVolume{Name|Path} …] 查看邏輯卷詳細信息

    lvcreate -L #[mMgGtT] -n NAME VolumeGroup 創建邏輯卷

   lvextend -L [+]#[mMgGtT] /dev/VG_NAME/LV_NAME :擴展邏輯卷

    lvremove Logicname :刪除邏輯卷

    例如:lvremove LVNAME    lvremove testlv 

   lvreduce -L [-]#[mMgGtT] /dev/VG_NAME/LV_NAME  : [-]:減少多少,和減至多少

    resize2fs /dev/myvg/mylv

  縮減邏輯卷:

   umount /dev/VG_NAME/LV_NAME 必須先縮減

   e2fsck -f /dev/VG_NAME/LV_NAME 

   resize2fs /dev/VG_NAME/LV_NAME #[mMgGtT]

  


  示例

[root@Cloud ~]#lsblk #查看磁盤分區
NAME                MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda                   8:0    0  200G  0 disk 
├─sda1                8:1    0  200M  0 part /boot
├─sda2                8:2    0   60G  0 part 
│ ├─vg0-root (dm-0) 253:0    0   20G  0 lvm  /
│ ├─vg0-swap (dm-1) 253:1    0    2G  0 lvm  [SWAP]
│ ├─vg0-usr (dm-2)  253:2    0   10G  0 lvm  /usr
│ └─vg0-var (dm-3)  253:3    0   20G  0 lvm  /var
└─sda3                8:3    0    1G  0 part 
sdb                   8:16   0   15G  0 disk 
sdc                   8:32   0   20G  0 disk 
sr0                  11:0    1  3.7G  0 rom

[root@Cloud ~]#fdisk /dev/sdb #給/dev/sdb分區
WARNING: DOS-compatible mode is deprecated. It's strongly recommended to
         switch off the mode (command 'c') and change display units to
         sectors (command 'u').
Command (m for help): n
Command action
   e   extended
   p   primary partition (1-4)
p
Partition number (1-4): 1
First cylinder (1-1958, default 1): 
Using default value 1
Last cylinder, +cylinders or +size{K,M,G} (1-1958, default 1958): +2G
Command (m for help): t
Selected partition 1
Hex code (type L to list codes): 8e#必須改成8e格式(LVM的標識符)
Changed system type of partition 1 to 8e (Linux LVM)

[root@Cloud ~]#fdisk -l |grep '/dev/[sh]d[a-z]' #創建的LVM卷分區
Disk /dev/sda: 214.7 GB, 214748364800 bytes
/dev/sda1   *           1          26      204800   83  Linux
/dev/sda2              26        7859    62914560   8e  Linux LVM
/dev/sda3            7859        7990     1059291   83  Linux
Disk /dev/sdb: 16.1 GB, 16106127360 bytes
/dev/sdb1               1         262     2104483+  8e  Linux LVM
/dev/sdb2             263         524     2104515   8e  Linux LVM
/dev/sdb3             525         786     2104515   8e  Linux LVM
Disk /dev/sdc: 21.5 GB, 21474836480 bytes
/dev/sdc1               1         262     2104483+  8e  Linux LVM
/dev/sdc2             263         524     2104515   8e  Linux LVM
/dev/sdc3             525         786     2104515   8e  Linux LVM

 

[root@Cloud ~]#pvcreate /dev/sdb{1,2,3} /dev/sdc{1,2,3} #創建pv卷
  Physical volume "/dev/sdb1" successfully created
  Physical volume "/dev/sdb2" successfully created
  Physical volume "/dev/sdb3" successfully created
  Physical volume "/dev/sdc1" successfully created
  Physical volume "/dev/sdc2" successfully created
  Physical volume "/dev/sdc3" successfully created
[root@Cloud ~]#pvs #簡要顯示
  PV         VG   Fmt  Attr PSize  PFree
  /dev/sda2  vg0  lvm2 a--u 59.99g 7.99g
  /dev/sdb1       lvm2 ----  2.01g 2.01g
  /dev/sdb2       lvm2 ----  2.01g 2.01g
  /dev/sdb3       lvm2 ----  2.01g 2.01g
  /dev/sdc1       lvm2 ----  2.01g 2.01g
  /dev/sdc2       lvm2 ----  2.01g 2.01g
  /dev/sdc3       lvm2 ----  2.01g 2.01g
[root@Cloud ~]#pvscan  #掃描pv卷
  PV /dev/sda2   VG vg0             lvm2 [59.99 GiB / 7.99 GiB free]
  PV /dev/sdb1                      lvm2 [2.01 GiB]
  PV /dev/sdb2                      lvm2 [2.01 GiB]
  PV /dev/sdb3                      lvm2 [2.01 GiB]
  PV /dev/sdc1                      lvm2 [2.01 GiB]
  PV /dev/sdc2                      lvm2 [2.01 GiB]
  PV /dev/sdc3                      lvm2 [2.01 GiB]
  Total: 7 [72.03 GiB] / in use: 1 [59.99 GiB] / in no VG: 6 [12.04 GiB]
[root@Cloud ~]#pvdisplay /dev/sdb1 #顯示pv詳細信息 ,,也可以選擇多個pv卷
  "/dev/sdb1" is a new physical volume of "2.01 GiB"
  --- NEW Physical volume ---
  PV Name               /dev/sdb1 #卷名
  VG Name               
  PV Size               2.01 GiB #pv卷大小
  Allocatable           NO
  PE Size               0   #尚未分配PE大小
  Total PE              0
  Free PE               0 
  Allocated PE          0
  PV UUID               Oa62B4-4jmr-CZ34-Xx9t-aXeE-2Xwr-2uaQ0o
由于PE是在創建VG時才給予的參數,因此在這里看的pv里面的PE都會時0

[root@Cloud ~]#vgcreate -s 16M VGone /dev/sdb{1,2,3} #創建VG組為VGone PE為16M
  Volume group "VGone" successfully created
[root@Cloud ~]#vgs #簡要顯示
  VG    #PV #LV #SN Attr   VSize  VFree
  VGone   3   0   0 wz--n-  6.00g 6.00g
  vg0     1   4   0 wz--n- 59.99g 7.99g
[root@Cloud ~]#vgscan #掃描查看
  Reading all physical volumes.  This may take a while...
  Found volume group "VGone" using metadata type lvm2
  Found volume group "vg0" using metadata type lvm2
[root@Cloud ~]#vgdisplay VGone #詳細顯示vg組VGone信息
  --- Volume group ---
  VG Name               VGone #VG名
  System ID             
  Format                lvm2 
  Metadata Areas        3
  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                3
  Act PV                3
  VG Size               6.00 GiB #VG整體大小
  PE Size               16.00 MiB #PE大小
  Total PE              384
  Alloc PE / Size       0 / 0   
  Free  PE / Size       384 / 6.00 GiB
  VG UUID               Iv022h-Gayu-nOBU-HTZg-dXjm-MPCW-2ytSLe

[root@Cloud ~]#vgreduce VGone /dev/sdb1 #刪除VGone中的/dev/sdb1
  Removed "/dev/sdb1" from volume group "VGone"
[root@Cloud ~]#vgdisplay VGone #顯示VGone信息
  --- Volume group ---
  VG Name               VGone
  System ID             
  Format                lvm2
  Metadata Areas        2
  Metadata Sequence No  2
  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               4.00 GiB #少了2G了 
  PE Size               16.00 MiB
  Total PE              256
  Alloc PE / Size       0 / 0   
  Free  PE / Size       256 / 4.00 GiB
  VG UUID               ZJzg4M-W3OM-MDFc-ldww-Xgku-13Jj-GPse8n
注:縮減時注意,如果組中有數據,空間必須要比VG中的文件要大,不然容易導出數據丟失或不完整!??!


[root@Cloud ~]#vgextend VGone /dev/sdb1 #拓展VGone大小
  Volume group "VGone" successfully extended
[root@Cloud ~]#vgdisplay VGone |grep ' VG Size'
  VG Size               6.00 GiB #顯示增加為6G

[root@Cloud ~]#lvcreate -L 4G -n log1  /dev/VGone 創建/dev/VGone下為log1的邏輯卷
  Logical volume "log1" created.
[root@Cloud ~]#lvs #簡要顯示lv卷
  LV   VG    Attr       LSize  Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  log1 VGone -wi-a-----  4.00g                                                    
  root vg0   -wi-ao---- 20.00g                                                    
  swap vg0   -wi-ao----  2.00g                                                    
  usr  vg0   -wi-ao---- 10.00g                                                    
  var  vg0   -wi-ao---- 20.00g                                                    
[root@Cloud ~]#lvscan #掃描lv卷
  ACTIVE            '/dev/VGone/log1' [4.00 GiB] inherit
  ACTIVE            '/dev/vg0/root' [20.00 GiB] inherit
  ACTIVE            '/dev/vg0/swap' [2.00 GiB] inherit
  ACTIVE            '/dev/vg0/usr' [10.00 GiB] inherit
  ACTIVE            '/dev/vg0/var' [20.00 GiB] inherit
[root@Cloud ~]#lvdisplay /dev/VGone/log1 #詳細顯示lv卷
  --- Logical volume ---
  LV Path                /dev/VGone/log1
  LV Name                log1
  VG Name                VGone
  LV UUID                ACCmAR-Iu9k-IWk4-CGPS-rk7V-BwU7-otfOD0
  LV Write Access        read/write
  LV Creation host, time Cloud.GO, 2016-09-08 22:40:28 +0800
  LV Status              available
  # open                 0
  LV Size                4.00 GiB #lv總大小
  Current LE             256
  Segments               2
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           253:4

  

[root@Cloud ~]#lvextend -L +1G /dev/VGone/log1  #加1G的lv卷
  Size of logical volume VGone/log1 changed from 4.00 GiB (256 extents) to 5.00 GiB (320 extents).
  Logical volume log1 successfully resized.
[root@Cloud ~]#lvdisplay /dev/VGone/log1 |grep 'LV Size'
  LV Size                5.00 GiB #增加了1G 
[root@Cloud ~]#resize2fs /dev/VGone/log1 #重設lv大小
resize2fs 1.41.12 (17-May-2010)
resize2fs: Bad magic number in super-block while trying to open /dev/VGone/log1
Couldn't find valid filesystem superblock.

注意:如果lv卷已經掛載,那么必須先卸載再檢查才能縮減。有數據必須指定為比存儲的數據空間大!

縮減邏輯卷:

umount /dev/VG_NAME/LV_NAME 必須先縮減

e2fsck -f /dev/VG_NAME/LV_NAME 

resize2fs /dev/VG_NAME/LV_NAME #[mMgGtT]

lvreduce -L [-]#[mMgGtT] /dev/VG_NAME/LV_NAME  : [-]:減少多少,和減至多少

[root@Cloud ~]#lvreduce -L 2G /dev/VGone/log1 #壓縮lv卷至2G
  WARNING: Reducing active logical volume to 2.00 GiB.
  THIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really want to reduce VGone/log1? [y/n]: y #交互式
  Size of logical volume VGone/log1 changed from 5.00 GiB (320 extents) to 2.00 GiB (128 extents).
  Logical volume log1 successfully resized.
[root@Cloud ~]#lvdisplay /dev/VGone/log1 |grep 'LV Size' #顯示大小
  LV Size                2.00 GiB


  

快照:snapshot

    就是將當時的系統信息記錄下來,就好像照相機記錄一般。將來若有任何數據改動了,則原始數據會被移到快照去,沒有被改動的區域則由快照區與文件系統共享。

  lvcreate -L # [mMgGtT] -p -r -s -n snapshot_lv_name original_lv_name  創建快照

    

-s 指定是快照卷

-n 指定卷名字

-p r 指定只讀

  lvcreate -s -L 512M -n mylv-snap -p r /dev/myvg/mylv

    創建快照

  mount /dev/myvg/mylv-snap /mnt

    掛載快照

  umount /mnt 

    卸載快照

[root@Cloud /snap]#mount /dev/VGone/log1 /media/ #掛載LV卷
[root@Cloud /media]#cp /etc/fstab /etc/issue ./ #復制文件到lv卷中
[root@Cloud /media]#ls
fstab  issue  lost+found
[root@Cloud /]#lvcreate -s -L 512M -n my-lv-snap  -p r /dev/VGone/log1 #創建快照
  Logical volume "my-lv-snap" created.
[root@Cloud /]#mount /dev/VGone/my-lv-snap /mnt/ #掛載快照
mount: block device /dev/mapper/VGone-my--lv--snap is write-protected, mounting read-only
[root@Cloud /]#ll /mnt/ #查看快照的內容
total 24
-rw-r--r-- 1 root root   921 Sep  8 23:21 fstab
-rw-r--r-- 1 root root   103 Sep  8 23:21 issue
drwx------ 2 root root 16384 Sep  8 23:12 lost+found
[root@Cloud /]#umount /mnt  #卸載
[root@Cloud /]#lvremove /dev/VGone/ #卸載快照
/dev/VGone/log1        /dev/VGone/my-lv-snap  
[root@Cloud /]#lvremove /dev/VGone/my-lv-snap 
Do you really want to remove active logical volume my-lv-snap? [y/n]: yes
  Logical volume "my-lv-snap" successfully removed

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

(0)
ladsdmladsdm
上一篇 2016-09-09
下一篇 2016-09-09

相關推薦

  • 數據庫

    數據庫系統理論概述(一) –本文主要講述: – 1.數據庫和數據庫管理系統 – 2.使用傳統的文件系統對大量數據管理存在的問題 – 3.常見的數據庫系統模型 – 4.數據庫視圖 – 5.數…

    Linux干貨 2016-10-30
  • linux根下的文件

    /boot:系統啟動時要加載引導的靜態文件,內核和ramdisk及grub等 /bin:系統自身啟動和運行時可能用到的核心二進制程序,不能關聯至獨立分區。 /sbin:管理類基本命令,不能關聯至獨立分區,系統啟動便會用到的程序。 /lib:基本共享庫文件,以及內核模塊文件 /lib64:專用于x86_64系統上的輔助共享庫文件存放位置 /etc:大多數應用程…

    Linux干貨 2017-03-30
  • 用戶創建過程&grep練習

    1、復制/etc/skel目錄為/home/tuser1,要求/home/tuser1及其內部文件的屬組和其它用戶均沒有任何訪問權限。     ~]# cp -r /etc/skel /home/tuser1     ~]# ls -la /home/tuser1  &…

    Linux干貨 2016-10-17
  • linux 文件管理類命令及功能用法

    第一題:Linux上的文件管理類命令都有哪些,其常用的使用方法及相關示例演示。 文件管理類的命令有: cd,ls,touch,mldir,cp,mv,rm,rmdir,pwd,tree 使用方法 (1),cd命令用來切換工作目錄至dirname。其中dirName表示法可為絕對路徑或相對路徑。 常用格式: cd #進入用戶家目錄 cd~ #進入用戶家目錄 c…

    Linux干貨 2017-07-09
  • 0801課堂練習與作業

    1、將/etc/issue文件中的內容轉換為大寫后保存至/tmp/issue.out文件中      cat /etc/issue | tr 'a-z' 'A-Z' > /tmp/issue.out 2、將當前系統登錄用戶的信息轉換為大寫后保存至/tmp/who.out文…

    Linux干貨 2016-08-02
  • N22-第四周作業

    1、復制/etc/skel目錄為/home/tuser1,要求/home/tuser1及其內部文件的屬組和其它用戶均沒有任何訪問權限。 # cp -r /etc/skel /home/tuser1 # chmod 700 /home/tuser1 2、編輯/etc/group文件,添加組h…

    Linux干貨 2016-09-06
欧美性久久久久