LVM邏輯卷操作

前言
每個Linux使用者在安裝Linux時都會遇到這樣的困境:在爲系統分區時,如何精確評估和分配各個硬盤分區的容量,因爲系統管理員不但要考慮到當前某個分區需要的容量,還要預見該分區以後可能需要的容量的最大值。因爲如果估 計不準確,當遇到某個分區不夠用時管理員可能甚至要備份整個系統、清除硬盤、重新對硬盤分區,然後恢復數據到新分區。
雖然有很多動態調整磁盤的工具可以使用,例如PartitionMagic等等,但是它並不能完全解決問題,因爲某個分區可能會再次被耗盡;另外一個方面這需要 重新引導系統才能實現,對於很多關鍵的服務器,停機是不可接受的,而且對於添加新硬盤,希望一個能跨越多個硬盤驅動器的文件系統時,分區調整程序就不能解 決問題。
因此完美的解決方法應該是在零停機前提下可以自如對文件系統的大小進行調整,可以方便實現文件系統跨越不同磁盤和分區。幸運的是Linux提供的邏輯盤卷管理(LVM,LogicalVolumeManager)機制就是一個完美的解決方案。


基本術語
物理卷(Physical Volume,PV)
指磁盤分區或從邏輯上與磁盤分區具有同樣功能的設備(如RAID),是LVM的基本存儲邏輯塊,但和基本的物理存儲介質(如分區、磁盤等)比較,卻包含有與LVM相關的管理參數。
卷組(Volume Group,VG)
類似於非LVM系統中的物理磁盤,其由一個或多個物理卷PV組成。可以在卷組上創建一個或多個LV(邏輯卷)。
邏輯卷(Logical Volume,LV)
類似於非LVM系統中的磁盤分區,邏輯卷建立在卷組VG之上。在邏輯卷LV之上可以建立文件系統(比如/home或者/usr等)。


物理塊(Physical Extent,PE)
每一個物理卷PV被劃分爲稱爲PE(Physical Extents)的基本單元,具有唯一編號的PE是可以被LVM尋址的最小單元。PE的大小是可配置的,默認爲4MB。所以物理卷(PV)由大小等同的基本單元PE組成。
邏輯塊(Logical Extent,LE)
邏輯卷LV也被劃分爲可被尋址的基本單位,稱爲LE。在同一個卷組中,LE的大小和PE是相同的,並且一一對應。


圖所示LVM抽象模型,展示了PV、VG、LV三者之間關係:LVM邏輯卷操作

和非LVM系統將包含分區信息的元數據保存在位於分區的起始位置的分區表中一樣,邏輯卷以及卷組相關的元數據也是保存在位於物理捲起始處的VGDA(卷組描述符區域)中。VGDA包括以下內容:PV描述符、VG描述符、LV描述符、和一些PE描述符。
系統啓動LVM時激活VG,並將VGDA加載至內存,來識別LV的實際物理存儲位置。當系統進行I/O操作時,就會根據VGDA建立的映射機制來訪問實際的物理位置。


安裝
首先確認系統有沒有安裝lvm工具和parted工具
[root@localhost ~]# rpm -qa |grep lvm
lvm2-libs-2.02.100-8.el6.x86_64
lvm2-2.02.100-8.el6.x86_64
[root@localhost ~]# rpm -qa |grep parted
parted-2.1-29.el6.x86_64


1、準備一塊磁盤,通過parted命令進行分區
[root@localhost ~]# lsblk //這裏查看到有一塊5G的sdb空盤
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sr0 11:0 1 1024M 0 rom
sda 8:0 0 10G 0 disk
├─sda1 8:1 0 500M 0 part /boot
└─sda2 8:2 0 9.5G 0 part
├─VolGroup-lv_root (dm-0) 253:0 0 8.5G 0 lvm /
└─VolGroup-lv_swap (dm-1) 253:1 0 1G 0 lvm [SWAP]
sdb 8:16 0 5G 0 disk


爲磁盤創建lvm卷組:
[root@localhost ~]# parted /dev/sdb
GNU Parted 2.1
Using /dev/sdb
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) print //打印分區表,沒創建分區表輸入此命令會報錯
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sdb: 5369MB
Sector size (logical/physical): 512B/512B
Partition Table: msdos

Number Start End Size Type File system Flags

(parted) mktable //劃分新分區表
New disk label type? gpt //輸入類型GPT
Warning: The existing disk label on /dev/sdb will be destroyed and all data on //提示銷燬sdb磁盤現有標籤和所有數據
this disk will be lost. Do you want to continue?
Yes/No? yes //選擇yes
(parted) p //在查看
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sdb: 5369MB
Sector size (logical/physical): 512B/512B
Partition Table: gpt

Number Start End Size File system Name Flags
(parted) mkpart //劃分分區
Partition name? []? primary //主分區名字隨意起
File system type? [ext2]? ext4 //類型ext4
Start? 0 //分區起始0
End? 2048 //結束2048
Warning: The resulting partition is not properly aligned for best performance.
Ignore/Cancel? Ignore
(parted) p //查看
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sdb: 5369MB
Sector size (logical/physical): 512B/512B
Partition Table: gpt

Number Start End Size File system Name Flags
1 17.4kB 2048MB 2048MB primary

(parted) set //修改分區標籤
Partition number? 1 //輸入編號
Flag to Invert? lvm //標籤lvm
New state? [on]/off? on //應用
(parted) p
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sdb: 5369MB
Sector size (logical/physical): 512B/512B
Partition Table: gpt

Number Start End Size File system Name Flags
1 17.4kB 2048MB 2048MB primary lvm

(parted)
#mkswap /dev/myvg/lvbox //可以將邏輯卷格式化swap分區
#swapon /dev/myvg/lvbox //執行使用
#swapoff /dev/myvg/lvbox //停止應用


2、創建lvm邏輯卷
首先查看一下剛纔劃分的LVM卷組
[root@localhost ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sr0 11:0 1 1024M 0 rom
sda 8:0 0 10G 0 disk
├─sda1 8:1 0 500M 0 part /boot
└─sda2 8:2 0 9.5G 0 part
├─VolGroup-lv_root (dm-0) 253:0 0 8.5G 0 lvm /
└─VolGroup-lv_swap (dm-1) 253:1 0 1G 0 lvm [SWAP]
sdb 8:16 0 5G 0 disk
└─sdb1 8:17 0 1.9G 0 part


[root@localhost ~]# pvcreate /dev/sdb1 //創建物理卷
Physical volume "/dev/sdb1" successfully created
[root@localhost ~]# vgcreate vg01 /dev/sdb1 //創建卷組
Volume group "vg01" successfully created
[root@localhost ~]# lvcreate -L 1024M -n lv01 vg01 //創建邏輯卷爲1G
Logical volume "lv01" created


[root@localhost ~]# lvscan //掃描邏輯卷,如下已看到創建成功
ACTIVE '/dev/vg01/lv01' [1.00 GiB] inherit
ACTIVE '/dev/VolGroup/lv_root' [8.51 GiB] inherit
ACTIVE '/dev/VolGroup/lv_swap' [1.00 GiB] inherit


[root@localhost ~]# lsblk //查看磁盤
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sr0 11:0 1 1024M 0 rom
sda 8:0 0 10G 0 disk
├─sda1 8:1 0 500M 0 part /boot
└─sda2 8:2 0 9.5G 0 part
├─VolGroup-lv_root (dm-0) 253:0 0 8.5G 0 lvm /
└─VolGroup-lv_swap (dm-1) 253:1 0 1G 0 lvm [SWAP]
sdb 8:16 0 5G 0 disk
└─sdb1 8:17 0 1.9G 0 part
└─vg01-lv01 (dm-2) 253:2 0 1G 0 lvm


[root@localhost ~]# mkfs.ext4 /dev/vg01/lv01 //格式化lv01邏輯卷
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
65536 inodes, 262144 blocks
13107 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=268435456
8 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks:
32768, 98304, 163840, 229376

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

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


[root@localhost ~]# mount /dev/vg01/lv01 /mnt/
[root@localhost ~]# cat /etc/fstabl //開機自動掛載
/dev/vg01/lv01 /mnt ext4 defaults,acl 0 0
[root@localhost ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/VolGroup-lv_root 8.4G 1.4G 6.7G 17% /
tmpfs 491M 0 491M 0% /dev/shm
/dev/sda1 485M 33M 427M 8% /boot
/dev/mapper/vg01-lv01 1008M 34M 924M 4% /mnt


3、擴展邏輯卷
[root@localhost ~]# lvextend -L +512M /dev/vg01/lv01 //擴展512M空間給lv01
Extending logical volume lv01 to 1.50 GiB
Logical volume lv01 successfully resized


[root@localhost ~]# resize2fs /dev/vg01/lv01 //加載擴展邏輯卷組
resize2fs 1.41.12 (17-May-2010)
Filesystem at /dev/vg01/lv01 is mounted on /mnt; on-line resizing required
old desc_blocks = 1, new_desc_blocks = 1
Performing an on-line resize of /dev/vg01/lv01 to 393216 (4k) blocks.
The filesystem on /dev/vg01/lv01 is now 393216 blocks long.


[root@localhost ~]# partx -a /dev/sdb1 //刷新新建的分區,提前取消掛載
last arg is not the whole disk
call: partx -opts device wholedisk


[root@localhost ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/VolGroup-lv_root 8.4G 1.4G 6.7G 17% /
tmpfs 491M 0 491M 0% /dev/shm
/dev/sda1 485M 33M 427M 8% /boot
/dev/mapper/vg01-lv01 1.5G 34M 1.4G 3% /mnt


4、縮減邏輯卷
縮減前先取消掛載
[root@localhost ~]# resize2fs /dev/vg01/lv01 1G //縮減爲1G
resize2fs 1.41.12 (17-May-2010)
Please run 'e2fsck -f /dev/vg01/lv01' first. //會提示你輸入此命令進行檢測

[root@localhost ~]# e2fsck -f /dev/vg01/lv01 //檢測如下沒有報錯信息,接下來可以進行縮減了
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/vg01/lv01: 11/382016 files (0.0% non-contiguous), 59184/1536000 blocks


[root@localhost ~]# lvreduce -L 1G /dev/vg01/lv01 //執行縮減成功
WARNING: Reducing active logical volume to 1.00 GiB
THIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really want to reduce lv01? [y/n]: y
Reducing logical volume lv01 to 1.00 GiB
Logical volume lv01 successfully resized


**LVM:缺點沒有容錯功能,卷組或邏輯卷壞了數據就讀不出來優點提高了磁盤整合性,和動態的伸縮功能。**
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章