1. 程式人生 > 實用技巧 >LVM卷管理

LVM卷管理

LVM邏輯卷管理

LVM 利用 Linux 核心的 device-mapper 來實現儲存系統的虛擬化(系統分割槽獨立於底層硬體)。 通過 LVM,你可以實現儲存空間的抽象化並在上面建立虛擬分割槽(virtual partitions),可以更簡便地擴大和縮小分割槽,可以增刪分割槽時無需擔心某個硬碟上沒有足夠的連續空間

LVM術語:

物理卷:pv

卷組:vg

邏輯卷:lv

物理區域:pe

1、檢視核心

LVM1版本需要2.4(包括)以後的核心支援;LVM2需要2.6(包括)以後的核心版本支援

[root@vm11 ~]# cat /etc/redhat-release
CentOS Linux release 7.6.1810 (Core)

一、LVM(邏輯卷管理)

1.1 磁碟分割槽

# 新建
fdisk /dev/sdb

Command (m for help): n
Command action
   e   extended
   p   primary partition (1-4)
# 主分割槽
p
# 分割槽號
Partition number (1-4): 1
# 回車用預設的 1
First cylinder (1-1044, default 1): 
# 大小
Last cylinder, +cylinders or +size{K,M,G} (1-1044, default 1044):
# 改變型別
Command (m for help): t
Selected partition 1
#LVM 的分割槽程式碼
Hex code (type L to list codes): 8e
Changed system type of partition 1 to 8e (Linux LVM)
# 儲存
w
# 退出
q

# 檢視建立完後的分割槽
fdisk -l

Disk /dev/sda: 96.6 GB, 96636764160 bytes
255 heads, 63 sectors/track, 11748 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: 0x0008cbaf

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *           1          64      512000   83  Linux
Partition 1 does not end on cylinder boundary.
/dev/sda2              64       11749    93858816   8e  Linux LVM

Disk /dev/sdb: 214.7 GB, 214748364800 bytes
255 heads, 63 sectors/track, 26108 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: 0x16396101

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1               1       26108   209712478+  8e  Linux LVM


1.2 物理卷管理

# 建立物理卷(PV)
pvcreate /dev/sdb1
pvscan

  PV /dev/sdb1   VG vg_data   lvm2 [200.00 GiB / 30.00 GiB free]
  PV /dev/sda2   VG VolGroup   lvm2 [89.51 GiB / 1.51 GiB free]
  Total: 2 [289.50 GiB] / in use: 2 [289.50 GiB] / in no VG: 0 [0   ]

pvdisplay

  --- Physical volume ---
  PV Name               /dev/sdb1
  VG Name               vg_data
  PV Size               200.00 GiB / not usable 1.34 MiB
  Allocatable           yes
  PE Size               4.00 MiB
  Total PE              51199
  Free PE               7679
  Allocated PE          43520
  PV UUID               c9js6G-WP93-ug9b-9aXe-unnZ-doWQ-AkzOKf

  --- Physical volume ---
  PV Name               /dev/sda2
  VG Name               VolGroup
  PV Size               89.51 GiB / not usable 3.00 MiB
  Allocatable           yes
  PE Size               4.00 MiB
  Total PE              22914
  Free PE               386
  Allocated PE          22528
  PV UUID               bFne0f-RnL8-vut2-AcKr-fr9k-VfeG-C8OHSR

# 刪除物理卷
pvremove /dev/sdb1

1.3 卷組管理

# 建立卷組(VG)
vgcreate vg_data /dev/sdb1
vgcreate vg_data /dev/hda{6,7,8}
# 擴充套件 VG
vgextend vg_data /dev/hda9

# 檢視 VG 資訊
vgscan

  Reading all physical volumes.  This may take a while...
  Found volume group "vg_data" using metadata type lvm2
  Found volume group "VolGroup" using metadata type lvm2

vgdisplay

  --- Volume group ---
  VG Name               vg_data
  System ID             
  Format                lvm2
  Metadata Areas        1
  Metadata Sequence No  4
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                3
  Open LV               3
  Max PV                0
  Cur PV                1
  Act PV                1
  VG Size               200.00 GiB
  PE Size               4.00 MiB
  Total PE              51199
  Alloc PE / Size       43520 / 170.00 GiB
  Free  PE / Size       7679 / 30.00 GiB
  VG UUID               EQhiUt-Waj1-F3V2-cwej-2joz-oC3P-JMSFui

  --- Volume group ---
  VG Name               VolGroup
  System ID             
  Format                lvm2
  Metadata Areas        1
  Metadata Sequence No  6
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                5
  Open LV               5
  Max PV                0
  Cur PV                1
  Act PV                1
  VG Size               89.51 GiB
  PE Size               4.00 MiB
  Total PE              22914
  Alloc PE / Size       22528 / 88.00 GiB
  Free  PE / Size       386 / 1.51 GiB
  VG UUID               i0qDld-uOz4-P1BS-2gN8-2vhj-5gdc-DnHfa4

# 刪除 VG
vgremove vg_data


1.4 邏輯卷管理

# 建立邏輯卷(LV)
lvcreate -L 20g -n lv_oracle vg_data
lvcreate -l 100%FREE -n lv_oracle vg_data

# 檢視 LV
lvscan

  ACTIVE            '/dev/vg_data/lv_oracle' [20.00 GiB] inherit
  ACTIVE            '/dev/VolGroup/lv_root' [50.00 GiB] inherit
  ACTIVE            '/dev/VolGroup/lv_home' [10.00 GiB] inherit

lvdisplay

  --- Logical volume ---
  LV Path                /dev/vg_data/lv_oracle
  LV Name                lv_oracle
  VG Name                vg_data
  LV UUID                P3jVXt-92Lp-QElD-ddl8-lW4r-okz7-n8fdXD
  LV Write Access        read/write
  LV Creation host, time capdb, 2016-03-17 17:12:43 +0800
  LV Status              available
  # open                 1
  LV Size                20.00 GiB
  Current LE             5120
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           253:5

# 格式化邏輯卷
mkfs -t ext4 /dev/vg_data/lv_oracle
mkfs.ext4 /dev/vg_data/lv_oracle

# 掛載邏輯卷
mkdir /oracle
# 修改 fstab
vi /etc/fstab
/dev/vg_data/lv_oracle /oracle ext4 dafualts 0 0
# 測試 lv 是否可以掛載
mount -a
mount /dev/vg_data/lv_oracle /oracle
df -h

# 刪除邏輯卷
fuser -m /oracle
umount /oracle
lvremove /dev/vg_data/lv_oracle

總結:

新建20G邏輯卷

pvcreate /dev/sdb1
vgcreate vg_data /dev/sdb1
vgcreate vg_data /dev/hda9  #擴展卷組
lvcreate -L 20g -n lv_job vg_data
mkfs -t ext4 /dev/vg_data/lv_job
mkdir /oracle
mount /dev/vg_data/lv_job /oracle

二、LVM伸縮管理

2.1 LVM擴充套件

LVM 特點就是支援線上動態擴容,如果為了穩妥也可以先 umount

# 檢視 Free  PE / Size 可用空間
vgdisplay

  --- Volume group ---
  VG Name               vg_data
  System ID             
  Format                lvm2
  Metadata Areas        1
  Metadata Sequence No  4
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                3
  Open LV               3
  Max PV                0
  Cur PV                1
  Act PV                1
  VG Size               200.00 GiB
  PE Size               4.00 MiB
  Total PE              51199
  Alloc PE / Size       43520 / 170.00 GiB
  Free  PE / Size       7679 / 30.00 GiB
  VG UUID               EQhiUt-Waj1-F3V2-cwej-2joz-oC3P-JMSFui

# 設定邏輯卷的大小
lvresize -L 40g /dev/vg_data/lv_oracle
lvresize -L +20g /dev/vg_data/lv_oracle

# 檢查磁碟錯誤,等待時間較長可以考慮跳過
e2fsck -f /dev/vg_data/lv_oracle

# 更新檔案系統資訊
resize2fs /dev/vg_data/lv_oracle

# 檢查邏輯卷狀態
lvdisplay vg_data

2.2 LVM縮減

# 解除安裝 LV
umout /oracle

# 檢查磁碟錯誤
e2fsck -f /dev/vg_data/lv_oracle

# 縮小檔案系統,更新檔案系統資訊
resize2fs /dev/vg_data/lv_oracle 10g

# 減少 LV 大小
lvresize -L 10g /dev/vg_data/lv_oracle
lvresize -L -30g /dev/vg_data/lv_oracle

# 檢查邏輯卷大小
lvdisplay
df -h

2.3 擴展卷組

# 建立一個 2GB 分割槽 sdc1,型別為 LVM(8e)
fdisk /dev/sdc

Command (m for help): n
Command action
   e   extended
   p   primary partition (1-4)
p
Partition number (1-4): 1
First cylinder (1-1044, default 1):
Using default value 1
Last cylinder, +cylinders or +size{K,M,G} (1-1044, default 1044): +2G

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): w
The partition table has been altered!

# 建立一個物理卷 /dev/sdc1
pvcreate /dev/sdc1

# 增加到已存在的卷組
vgextend vg_data /dev/sdc1

# 驗證卷組大小
vgdisplay

2.4 刪除卷組

# 解除安裝邏輯卷
umount /oracle
# 刪除邏輯卷
lvremove /dev/vg_data/lv_oracle
# 取消啟用卷組
vgchange -a n vg_data
# 刪除卷組
vgremove vg_data
# 刪除物理卷
pvremove /dev/sdb1
pvremove /dev/hda{6,7,8}
# 普通磁碟型別是 83
fdisk /dev/sdb
t 83

lvm卷在重啟後消失問題處理過程

故障:

系統重啟後,發現LVM中/dev/sdb1丟失,如下

/dev/vg01/lvm01 完全消失,只剩下/dev/sdb盤

原因分析:

一般LVM的VG丟失都是由於突然斷電或者更換了作業系統等原因引起。嘗試執行vgscan命令掃描卷組

初步判斷是因為系統重啟後,/dev/sdb1消失導致VG無法找到物理卷

解決方法:

1、備份資料

為了防止資料丟失或破壞,首先對/dev/emcpowera裝置的資料進行備份

dd if=/dev/sdb of=/data/sdb  #我的資料11T資料盤,太大,所以沒有做資料備份這個動作

2、修正UUID號

pvcreate -u p6LgHa-UfMC-oAD1-1kSw-zSlM-dlya-CZf9iF /dev/sdb  --restorefile /etc/lvm/backup/vg01

報錯:原因是沒有對/dev/sdb進行分割槽

分割槽操作

注意:需問清楚之前sdb1分割槽大小,這次採取預設分割槽操作即可即

fdisk /dev/sdb

分割槽成功後重新執行修正uuid號

3、恢復卷組資訊

vgcfgrestore -f /etc/lvm/backup/vg01 vg01

4、檢視相關資訊

相關資訊都已恢復

pvs
vgs
lvs

4、啟用邏輯卷

lvchange -ay /dev/vg01/lvm01

5、重新掛載

mount /dev/vg01/lvm01 /work

6、檢視檔案是否都在