LVM基礎操作步驟梳理


1. 理解LVM工作原理

什么是LVM?

LVM是邏輯盤卷管理(Logical Volume Manager)的簡稱,它是Linux環境下對磁盤分區進行管理的一種機制,LVM是建立在硬盤和分區之上的一個邏輯層,來提高磁盤分區管理的靈活性。

為什么要使用LVM?

在日常工作或者學習中,隨着電腦的不斷被使用,我們的磁盤空間可能會越來越小,這時候,我們不能直接更換大硬盤,因為硬盤有價,數據無價,這時候我們就可以使用LVM,LVM將存儲虛擬化,使用邏輯卷,你不會受限於物理磁盤的大小,另外,和硬件相關的存儲設置被其隱藏,你能不用停止應用或卸載文件系統來調整卷大小或數據遷移.這樣能減少操作成本,LVM最大的特點就是可以對磁盤進行動態管理。因為邏輯卷的大小是可以動態調整的,而且不會丟失現有的數據。如果我們新增加了硬盤,其也不會改變現有上層的邏輯卷。作為一個動態磁盤管理機制,邏輯卷技術大大提高了磁盤管理的靈活性。

LVM工作機制?

LVM就是通過將底層的物理硬盤抽象的封裝起來,然后以邏輯卷的方式呈現給上層應用。在傳統的磁盤管理機制中,我們的上層應用是直接訪問文件系統,從而對底層的物理硬盤進行讀取,而在LVM中,其通過對底層的硬盤進行封裝,當我們對底層的物理硬盤進行操作時,其不再是針對於分區進行操作,而是通過一個叫做邏輯卷的東西來對其進行底層的磁盤管理操作。

邏輯卷管理概念?

物理卷(PV, Physical Volume)
物理卷就是指磁盤,磁盤分區或從邏輯上和磁盤分區具有同樣功能的設備(如RAID),是LVM的基本存儲邏輯塊,但和基本的物理存儲介質(如分區、磁盤等)比較,卻包含有和LVM相關的管理參數。當前LVM允許你在每個物理卷上保存這個物理卷的0至2份元數據拷貝.默認為1,保存在設備的開始處.為2時,在設備結束處保存第二份備份.

卷組(VG, Volume Group)
LVM卷組類似於非LVM系統中的物理硬盤,其由物理卷組成。能在卷組上創建一個或多個“LVM分區”(邏輯卷),LVM卷組由一個或多個物理卷組成。

邏輯卷(LV, Logical Volume)
LVM的邏輯卷類似於非LVM系統中的硬盤分區,在邏輯卷之上能建立文件系統(比如/home或/usr等)。

LVM原理圖

2. LVM操作案例分析

 添加磁盤並創建一個分區


[root@localhost ~]# fdisk -l        //查看磁盤情況
[root@localhost ~]# fdisk /dev/sdb        //進入磁盤(可以依次按鍵n-->e-->回車-->回車-->w,即用此磁盤空閑空間創建分區)
Welcome to fdisk (util-linux 2.23.2).

Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.

Device does not contain a recognized partition table
Building a new DOS disklabel with disk identifier 0xeed8cf69.

Command (m for help): p         //查看分區列表

Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0xeed8cf69

   Device Boot      Start         End      Blocks   Id  System

Command (m for help): n        //添加一個分區
Partition type:
   p   primary (0 primary, 0 extended, 4 free)
   e   extended
Select (default p): 
Using default response p
Partition number (1-4, default 1): +20G
Partition number (1-4, default 1):    
First sector (2048-104857599, default 2048): 
Using default value 2048
Last sector, +sectors or +size{K,M,G} (2048-104857599, default 104857599): +20G
Partition 1 of type Linux and of size 20 GiB is set

Command (m for help): t            //更改分區類型
Selected partition 1
Hex code (type L to list all codes): l            //分區類型列表  
Hex code (type L to list all codes): 8e        //將新添加的分區標注成LVM,只要是‘8e’(LVM)類型的磁盤分區都可以用來擴展卷組。
Changed type of partition 'Linux' to 'Linux LVM'

Command (m for help): p    //查看分區表

Disk /dev/sdb: 53.7 GB, 53687091200 bytes, 104857600 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0xeed8cf69

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1            2048    41945087    20971520   8e  Linux LVM

Command (m for help): w        //保存
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.

 

創建邏輯卷lv01並掛載到/lvm01目錄上。

[root@localhost ~]# pvcreate /dev/sdb1      //創建物理卷
  Physical volume "/dev/sdb1" successfully created
[root@localhost ~]# mkfs.ext4 /dev/sdb1        //格式化新添加的分區
mke2fs 1.42.9 (28-Dec-2013)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
1310720 inodes, 5242880 blocks
262144 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=2153775104
160 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, 1605632, 2654208, 
    4096000

Allocating group tables: done                            
Writing inode tables: done                            
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done   


[root@localhost ~]# pvcreate /dev/sdb1        //創建pv
WARNING: ext4 signature detected on /dev/sdb1 at offset 1080. Wipe it? [y/n]: y
  Wiping ext4 signature on /dev/sdb1.
  Physical volume "/dev/sdb1" successfully created

[root@localhost ~]# pvdisplay /dev/sdb1        //查看pv信息
  "/dev/sdb1" is a new physical volume of "20.00 GiB"
  --- NEW Physical volume ---
  PV Name               /dev/sdb1
  VG Name               
  PV Size               20.00 GiB
  Allocatable           NO
  PE Size               0   
  Total PE              0
  Free PE               0
  Allocated PE          0
  PV UUID               cL1S1N-nUGj-DuYa-9RP0-ened-A4ZZ-FTlOWX

[root@localhost ~]# vgcreate vg01 /dev/sdb1
  Volume group "vg01" successfully created

[root@localhost ~]# vgdisplay vg01
  --- Volume group ---
  VG Name               vg01
  System ID             
  Format                lvm2
  Metadata Areas        1
  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                1
  Act PV                1
  VG Size               20.00 GiB
  PE Size               4.00 MiB
  Total PE              5119
  Alloc PE / Size       0 / 0   
  Free  PE / Size       5119 / 20.00 GiB
  VG UUID               lghbtI-4usq-GFEj-Zr26-7NrP-UUE3-0RHMF5


[root@localhost ~]# lvcreate -L 10M -n lv01 vg01    //從卷組vg01中創建一個大小為10M名字為lv01的邏輯卷, 如果要使用卷組剩下的所有空間創建邏輯卷 lvcreate -n lv-name -l 100%FREE vg-name
  Rounding up size to full physical extent 12.00 MiB
  Logical volume "lv01" created.

[root@localhost ~]# lvdisplay vg01     //查看在vg01組創建的邏輯卷
  --- Logical volume ---
  LV Path                /dev/vg01/lv01
  LV Name                lv01
  VG Name                vg01
  LV UUID                A1CBRX-wLOF-2d7D-SPvg-sBhD-3wzO-WtbmeH
  LV Write Access        read/write
  LV Creation host, time localhost.localdomain, 2020-01-14 17:08:48 +0800
  LV Status              available
  # open                 0
  LV Size                12.00 MiB
  Current LE             3
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     8192
  Block device           253:3

[root@localhost ~]# mkfs.ext4 /dev/vg01/lv01    //邏輯卷已經准備好了,我們可以格式化和掛載邏輯卷,就像其它ext2/3/4分區一樣!
mke2fs 1.42.9 (28-Dec-2013)
Filesystem label=
OS type: Linux
Block size=1024 (log=0)
Fragment size=1024 (log=0)
Stride=0 blocks, Stripe width=0 blocks
3072 inodes, 12288 blocks
614 blocks (5.00%) reserved for the super user
First data block=1
Maximum filesystem blocks=12582912
2 block groups
8192 blocks per group, 8192 fragments per group
1536 inodes per group
Superblock backups stored on blocks: 
    8193

Allocating group tables: done                            
Writing inode tables: done                            
Creating journal (1024 blocks): done
Writing superblocks and filesystem accounting information: done

[root@localhost ~]# mkdir /lvm01
[root@localhost ~]# mount /dev/vg01/lv01 /lvm01/
[root@localhost ~]# df -h
Filesystem               Size  Used Avail Use% Mounted on
/dev/mapper/centos-root   50G  845M   50G   2% /
devtmpfs                 3.9G     0  3.9G   0% /dev
tmpfs                    3.9G     0  3.9G   0% /dev/shm
tmpfs                    3.9G  8.6M  3.9G   1% /run
tmpfs                    3.9G     0  3.9G   0% /sys/fs/cgroup
/dev/mapper/centos-home   42G   33M   42G   1% /home
/dev/sda1                497M  123M  375M  25% /boot
tmpfs                    781M     0  781M   0% /run/user/0
/dev/mapper/vg01-lv01     11M  204K  9.6M   3% /lvm01

 

擴展LVM空間

邏輯卷lv01只有16MB的空間,我們需要對其進行擴展空間,擴展空間並不會影響到之前存儲的數據。

實際情景1:卷組vg01有空閑的空間,直接進行擴展就可以。

[root@localhost ~]# lvextend -L +200M /dev/vg01/lv01     //使用lvextend命令直接對邏輯卷進行擴展200M
  Size of logical volume vg01/lv01 changed from 52.00 MiB (13 extents) to 252.00 MiB (63 extents).
  Logical volume lv01 successfully resized.                                                 
[root@localhost ~]# df -Th    //發現分區大小並沒有改變
Filesystem              Type      Size  Used Avail Use% Mounted on
/dev/mapper/centos-root xfs        50G  845M   50G   2% /
devtmpfs                devtmpfs  3.9G     0  3.9G   0% /dev
tmpfs                   tmpfs     3.9G     0  3.9G   0% /dev/shm
tmpfs                   tmpfs     3.9G  8.6M  3.9G   1% /run
tmpfs                   tmpfs     3.9G     0  3.9G   0% /sys/fs/cgroup
/dev/mapper/centos-home xfs        42G   33M   42G   1% /home
/dev/sda1               xfs       497M  123M  375M  25% /boot
tmpfs                   tmpfs     781M     0  781M   0% /run/user/0
/dev/mapper/vg01-lv01   ext4       50M  396K   46M   1% /lvm01
[root@localhost ~]# resize2fs /dev/vg01/lv01     //激活
resize2fs 1.42.9 (28-Dec-2013)
Filesystem at /dev/vg01/lv01 is mounted on /lvm01; on-line resizing required
old_desc_blocks = 1, new_desc_blocks = 2
The filesystem on /dev/vg01/lv01 is now 258048 blocks long.

[root@localhost ~]# df -Th            //可以看到/lvm01正常了
Filesystem              Type      Size  Used Avail Use% Mounted on
/dev/mapper/centos-root xfs        50G  845M   50G   2% /
devtmpfs                devtmpfs  3.9G     0  3.9G   0% /dev
tmpfs                   tmpfs     3.9G     0  3.9G   0% /dev/shm
tmpfs                   tmpfs     3.9G  8.6M  3.9G   1% /run
tmpfs                   tmpfs     3.9G     0  3.9G   0% /sys/fs/cgroup
/dev/mapper/centos-home xfs        42G   33M   42G   1% /home
/dev/sda1               xfs       497M  123M  375M  25% /boot
tmpfs                   tmpfs     781M     0  781M   0% /run/user/0
/dev/mapper/vg01-lv01   ext4      245M  768K  233M   1% /lvm01

 

實際情景2:卷組vg01空間不足,先擴展vg,擴展vg就是往vg中加pv

使用fdisk命令創建一個分區

[root@localhost ~]# fdisk /dev/sdc
Command (m for help): n
Partition type:
   p   primary (0 primary, 0 extended, 4 free)
   e   extended
Select (default p): 

Hex code (type L to list all codes): 8e
Changed type of partition 'Linux' to 'Linux LVM'

Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.
[root@localhost ~]# fdisk /dev/sdc
Welcome to fdisk (util-linux 2.23.2).

Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.


Command (m for help): p

Disk /dev/sdc: 85.9 GB, 85899345920 bytes, 167772160 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0xeeb944e3

   Device Boot      Start         End      Blocks   Id  System
/dev/sdc1            2048   167772159    83885056   8e  Linux LVM

添加物理卷並添加到卷組vg01中,然后再進行邏輯卷擴容操作

[root@localhost ~]# pvcreate /dev/sdc1        //創建物理卷
  Physical volume "/dev/sdc1" successfully created
[root@localhost ~]# mkfs.ext4 /dev/sdc1
mke2fs 1.42.9 (28-Dec-2013)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
5242880 inodes, 20971264 blocks
1048563 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=2168455168
640 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, 1605632, 2654208, 
    4096000, 7962624, 11239424, 20480000

Allocating group tables: done                            
Writing inode tables: done                            
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done   

[root@localhost ~]# mkfs.ext4 /dev/sdc1
mke2fs 1.42.9 (28-Dec-2013)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
5242880 inodes, 20971264 blocks
1048563 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=2168455168
640 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, 1605632, 2654208, 
    4096000, 7962624, 11239424, 20480000

Allocating group tables: done                            
Writing inode tables: done                            
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done   

[root@localhost ~]# vgextend vg01 /dev/sdc1     //將物理卷/dev/sdc1添加到vg01卷組里面
WARNING: ext4 signature detected on /dev/sdc1 at offset 1080. Wipe it? [y/n]: y
  Wiping ext4 signature on /dev/sdc1.
  Physical volume "/dev/sdc1" successfully created
  Volume group "vg01" successfully extended
[root@localhost ~]# lvextend -L +15G /dev/vg01/lv02    //擴容
  Size of logical volume vg01/lv02 changed from 19.75 GiB (5056 extents) to 34.75 GiB (8896 extents).
  Logical volume lv02 successfully resized.
[root@localhost ~]# resize2fs /dev/vg01/lv02
resize2fs 1.42.9 (28-Dec-2013)
Filesystem at /dev/vg01/lv02 is mounted on /lvm02; on-line resizing required
old_desc_blocks = 3, new_desc_blocks = 5
The filesystem on /dev/vg01/lv02 is now 9109504 blocks long.

[root@localhost ~]# df -h
Filesystem               Size  Used Avail Use% Mounted on
/dev/mapper/centos-root   50G  845M   50G   2% /
devtmpfs                 3.9G     0  3.9G   0% /dev
tmpfs                    3.9G     0  3.9G   0% /dev/shm
tmpfs                    3.9G  8.6M  3.9G   1% /run
tmpfs                    3.9G     0  3.9G   0% /sys/fs/cgroup
/dev/mapper/centos-home   42G   33M   42G   1% /home
/dev/sda1                497M  123M  375M  25% /boot
tmpfs                    781M     0  781M   0% /run/user/0
/dev/mapper/vg01-lv01    245M  768K  233M   1% /lvm01
/dev/mapper/vg01-lv02     35G   48M   33G   1% /lvm0

 

縮小邏輯卷

相較於擴容邏輯卷,在對邏輯卷進行縮容操作時,其丟失數據的風險更大。所以在生產環境中執行相應操作時,一定要提前備份好數據。另外Linux系統規定,在對LVM邏輯卷進行縮容操作之前,要先檢查文件系統的完整性(當然這也是為了保證我們的數據安全)。在執行縮容操作前記得先把文件系統卸載掉。

第一步:卸載文件系統

[root@localhost ~]# df -Th
Filesystem Type Size Used Avail Use% Mounted on
devtmpfs devtmpfs 3.8G 0 3.8G 0% /dev
tmpfs tmpfs 3.9G 276K 3.9G 1% /dev/shm
tmpfs tmpfs 3.9G 12M 3.8G 1% /run
tmpfs tmpfs 3.9G 0 3.9G 0% /sys/fs/cgroup
/dev/mapper/centos-root xfs 19G 2.8G 16G 15% /
/dev/sda1 xfs 497M 168M 329M 34% /boot
tmpfs tmpfs 781M 0 781M 0% /run/user/0
/dev/mapper/vg1-lv1 ext4 93M 1.6M 85M 2% /data
[root@localhost ~]# umount /data

第二步:檢查文件系統的完整性。

[root@localhost ~]# e2fsck -f /dev/vg1/lv1 
e2fsck 1.42.9 (28-Dec-2013)
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/vg1/lv1: 11/25688 files (9.1% non-contiguous), 8896/102400 blocks

第三步:把邏輯卷縮小到50M

[root@localhost ~]# resize2fs /dev/vg1/lv1 50M
resize2fs 1.42.9 (28-Dec-2013)
Resizing the filesystem on /dev/vg1/lv1 to 51200 (1k) blocks.
The filesystem on /dev/vg1/lv1 is now 51200 blocks long.

[root@localhost ~]# lvreduce -L 50M /dev/vg1/lv1 
Rounding size to boundary between physical extents: 52.00 MiB.
WARNING: Reducing active logical volume to 52.00 MiB.
THIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really want to reduce vg1/lv1? [y/n]: y
Size of logical volume vg1/lv1 changed from 100.00 MiB (25 extents) to 52.00 MiB (13 extents).
Logical volume vg1/lv1 successfully resized.

第四步:重新掛載邏輯卷

[root@localhost ~]# mount /dev/vg1/lv1 /data
[root@localhost ~]# df -Th
Filesystem Type Size Used Avail Use% Mounted on
devtmpfs devtmpfs 3.8G 0 3.8G 0% /dev
tmpfs tmpfs 3.9G 300K 3.9G 1% /dev/shm
tmpfs tmpfs 3.9G 12M 3.8G 1% /run
tmpfs tmpfs 3.9G 0 3.9G 0% /sys/fs/cgroup
/dev/mapper/centos-root xfs 19G 2.8G 16G 15% /
/dev/sda1 xfs 497M 168M 329M 34% /boot
tmpfs tmpfs 781M 0 781M 0% /run/user/0
/dev/mapper/vg1-lv1 ext4 45M 1.1M 40M 3% /data

第五步:設置開啟自動掛載

[root@localhost ~]# blkid
/dev/sda1: UUID="d9692c2f-a923-4ad0-bec4-6dd857bd3605" TYPE="xfs" 
/dev/sda2: UUID="7ohdUl-beCh-ld4I-5aET-kpfI-36DU-H0Ocfv" TYPE="LVM2_member" 
/dev/sdb5: UUID="MrqzV2-0RWe-obBo-90XK-BuGX-p9og-CjNUPJ" TYPE="LVM2_member" 
/dev/mapper/centos-root: UUID="f8cc13e4-cab2-45a4-8405-a32f8d0954d0" TYPE="xfs" 
/dev/mapper/centos-swap: UUID="bbbe0095-76b6-4c3c-9f91-7592b3437b5a" TYPE="swap" 
/dev/mapper/vg1-lv1: UUID="37ccb234-3952-4935-94ca-9468c10ade26" TYPE="ext4" 
/dev/sdb1: PTTYPE="dos" 
[root@localhost ~]# echo "UUID=37ccb234-3952-4935-94ca-9468c10ade26 /data ext4 defaults 0 0" >> /etc/fstab

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM