LVM——邏輯卷管理器
邏輯卷管理器是一種把硬碟空間配置設定成邏輯卷的方法。相比硬碟分區,邏輯卷更容易改變容量
邏輯卷管理器是Linux系統用于對硬碟分區進行管理的一種機制,理論性較強,其建立初衷是為了解決硬碟裝置在建立分區後不易修改分區大小的缺陷。盡管對傳統的硬碟分區進行強制擴容或縮容從理論上來講是可行的,但是卻可能造成資料的丢失。而LVM技術是在硬碟分區和檔案系統之間添加了一個邏輯層,它提供了一個抽象的卷組,可以把多塊硬碟進行卷組合并。這樣一來,使用者不必關心實體硬碟裝置的底層架構和布局,就可以實作對硬碟分區的動态調整。
實體卷處于LVM中的最底層,可以将其了解為實體硬碟、硬碟分區或者RAID磁盤陣列,這都可以。卷組建立在實體卷之上,一個卷組可以包含多個實體卷,而且在卷組建立之後也可以繼續向其中添加新的實體卷。邏輯卷是用卷組中空閑的資源建立的,并且邏輯卷在建立後可以動态地擴充或縮小空間。這就是LVM的核心理念。
6.1部署邏輯卷
一般而言,在生産環境中無法精确地評估每個硬碟分區在日後的使用情況,是以會導緻原先配置設定的硬碟分區不夠用。比如,伴随着業務量的增加,用于存放交易記錄的資料庫目錄的體積也随之增加;因為分析并記錄使用者的行為進而導緻日志目錄的體積不斷變大,這些都會導緻原有的硬碟分區在使用上捉襟見肘。而且,還存在對較大的硬碟分區進行精簡縮容的情況
我們可以通過部署LVM來解決上述問題。部署LVM時,需要逐個配置實體卷、卷組和邏輯卷
功能/指令 | 實體卷管理 | 卷組管理 | 邏輯卷管理 |
---|---|---|---|
掃描 | pvscan | vgscan | lvscan |
建立 | pvcreate | vgcreate | lvcreate |
顯示 | pvdisplay | vgdisplay | lvdisplay |
删除 | pvremove | vgremove | lvremove |
擴充 | vgextend | lvextend | |
縮小 | vgreduce | lvreduce |
為了避免多個實驗之間互相發生沖突,請大家自行将虛拟機還原到初始狀态,并在虛拟機中添加兩塊新硬碟裝置,然後開機
第一步:先對這兩塊新硬碟進行建立實體卷的操作,可以将該操作簡單了解成讓硬碟裝置支援LVM技術,或者了解成是把硬碟裝置加入到LVM技術可用的硬體資源池中
[[email protected] ~]# pvcreate /dev/sdb /dev/sdc
Physical volume "/dev/sdb" successfully created
Physical volume "/dev/sdc" successfully created
第二步:把兩塊硬碟裝置加入到storage卷組中,然後檢視卷組的狀态。
[[email protected] ~]# vgcreate storage /dev/sdb /dev/sdc
Volume group "storage" successfully created
[[email protected] ~]# vgdisplay
--- Volume group ---
VG Name storage
System ID
Format lvm2
Metadata Areas 2
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 2
Act PV 2
VG Size 39.99 GiB
PE Size 4.00 MiB
Total PE 10238
Alloc PE / Size 0 / 0 Free PE / Size 10238 / 39.99 GiB
VG UUID KUeAMF-qMLh-XjQy-ArUo-LCQI-YF0o-pScxm1
………………省略部分輸出資訊………………
第3步:切割出一個約為150MB的邏輯卷裝置。
這裡需要注意切割機關的問題。在對邏輯卷進行切割時有兩種計量機關。第一種是以容量為機關,所使用的參數為-L。例如,使用-L 150M生成一個大小為150MB的邏輯卷。另外一種是以基本單元的個數為機關,所使用的參數為-l。每個基本單元的大小預設為4MB。例如,使用-l 37可以生成一個大小為37×4MB=148MB的邏輯卷
[[email protected] ~]# lvcreate -n vo -l 37 storage
Logical volume "vo" created
[[email protected] ~]# lvdisplay
--- Logical volume ---
LV Path /dev/storage/vo
LV Name vo
VG Name storage
LV UUID D09HYI-BHBl-iXGr-X2n4-HEzo-FAQH-HRcM2I
LV Write Access read/write
LV Creation host, time localhost.localdomain, 2017-02-01 01:22:54 -0500
LV Status available
# open 0
LV Size 148.00 MiB
Current LE 37
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 8192
Block device 253:2
………………省略部分輸出資訊………………
第4步:把生成好的邏輯卷進行格式化,然後挂載使用。
Linux系統會把LVM中的邏輯卷裝置存放在/dev裝置目錄中(實際上是做了一個符号連結),同時會以卷組的名稱來建立一個目錄,其中儲存了邏輯卷的裝置映射檔案(即/dev/卷組名稱/邏輯卷名稱)
[[email protected] ~]# mkfs.ext4 /dev/storage/vo
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
38000 inodes, 151552 blocks
7577 blocks (5.00%) reserved for the super user
First data block=1
Maximum filesystem blocks=33816576
19 block groups
8192 blocks per group, 8192 fragments per group
2000 inodes per group
Superblock backups stored on blocks:
8193, 24577, 40961, 57345, 73729
Allocating group tables: done
Writing inode tables: done
Creating journal (4096 blocks): done
Writing superblocks and filesystem accounting information: done
[[email protected] ~]# mkdir /linuxprobe
[[email protected] ~]# mount /dev/storage/vo /linuxprobe
第5步:檢視挂載狀态,并寫入到配置檔案,使其永久生效。
[[email protected] ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/rhel-root 18G 3.0G 15G 17% /
devtmpfs 905M 0 905M 0% /dev
tmpfs 914M 140K 914M 1% /dev/shm
tmpfs 914M 8.8M 905M 1% /run
tmpfs 914M 0 914M 0% /sys/fs/cgroup
/dev/sr0 3.5G 3.5G 0 100% /media/cdrom
/dev/sda1 497M 119M 379M 24% /boot
/dev/mapper/storage-vo 145M 7.6M 138M 6% /linuxprobe
[[email protected] ~]# echo "/dev/storage/vo /linuxprobe ext4 defaults 0 0" >> /etc/fstab
6.2擴容邏輯卷
卷組是由兩塊硬碟裝置共同組成的。使用者在使用儲存設備時感覺不到裝置底層的架構和布局,更不用關心底層是由多少塊硬碟組成的,隻要卷組中有足夠的資源,就可以一直為邏輯卷擴容。擴充前請一定要記得解除安裝裝置和挂載點的關聯
##此處移出挂載點
[[email protected] ]# umount /linuxprobe
第一步,把上一個實驗中的邏輯卷vo擴充至300M
[[email protected] ~]# lvextend -L 300M /dev/storage/vo
Rounding size to boundary between physical extents: 300.00 MiB
Extending logical volume vo to 292.00 MiB
Logical volume vo successfully resized
第2步:檢查硬碟完整性,并重置硬碟容量。
###e2fsck是檢查ext2、ext3、ext4等檔案系統的正确性。
[[email protected] ~]# e2fsck -f /dev/storage/vo
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/storage/vo: 11/38000 files (0.0% non-contiguous), 10453/151552 blocks
[[email protected] ~]# resize2fs /dev/storage/vo
resize2fs 1.42.9 (28-Dec-2013)
Resizing the filesystem on /dev/storage/vo to 299008 (1k) blocks.
The filesystem on /dev/storage/vo is now 299008 blocks long.
第3步:重新挂載硬碟裝置并檢視挂載狀态
###系統配置檔案中的檔案全部挂載
[[email protected] ~]# mount -a
###檢視目前所挂載的資訊
[[email protected] ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/rhel-root 18G 3.0G 15G 17% /
devtmpfs 985M 0 985M 0% /dev
tmpfs 994M 80K 994M 1% /dev/shm
tmpfs 994M 8.8M 986M 1% /run
tmpfs 994M 0 994M 0% /sys/fs/cgroup
/dev/sr0 3.5G 3.5G 0 100% /media/cdrom
/dev/sda1 497M 119M 379M 24% /boot
####可以觀察到 容量
> /dev/mapper/storage-vo 289M 2.1M 269M 1% /linuxprobe
6.3縮小邏輯卷
注:相較于擴容邏輯卷,在對邏輯卷進行縮容操作時,其丢失資料的風險更大。是以在生産環境中執行相應操作時,一定要提前備份好資料。
另外Linux系統規定,在對LVM邏輯卷進行縮容操作之前,要先檢查檔案系統的完整性(當然這也是為了保證我們的資料安全)。在執行縮容操作前記得先把檔案系統解除安裝掉。
第一步:檢查檔案的完整性
[[email protected] ~]# e2fsck -f /dev/storage/vo
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/storage/vo: 11/74000 files (0.0% non-contiguous), 15507/299008 blocks
第二步:把邏輯卷vo的容量減到120MB
[[email protected] ~]# resize2fs /dev/storage/vo 120M
resize2fs 1.42.9 (28-Dec-2013)
Resizing the filesystem on /dev/storage/vo to 122880 (1k) blocks.
The filesystem on /dev/storage/vo is now 122880 blocks long.
[[email protected] ~]# lvreduce -L 120M /dev/storage/vo
WARNING: Reducing active logical volume to 120.00 MiB
THIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really want to reduce vo? [y/n]: y
Reducing logical volume vo to 120.00 MiB
Logical volume vo successfully resized
第三步:重新挂載檔案系統并且檢視系統狀态
[[email protected] ~]# mount -a
[[email protected] ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/rhel-root 18G 3.0G 15G 17% /
devtmpfs 985M 0 985M 0% /dev
tmpfs 994M 80K 994M 1% /dev/shm
tmpfs 994M 8.8M 986M 1% /run
tmpfs 994M 0 994M 0% /sys/fs/cgroup
/dev/sr0 3.5G 3.5G 0 100% /media/cdrom
/dev/sda1 497M 119M 379M 24% /boot
/dev/mapper/storage-vo 113M 1.6M 103M 2% /linuxprobe
6.4邏輯卷快照
LVM還具備有“快照卷”功能,該功能類似于虛拟機軟體的還原時間點功能。例如,可以對某一個邏輯卷裝置做一次快照,如果日後發現資料被改錯了,就可以利用之前做好的快照卷進行覆寫還原
LVM的快照卷功能有兩個特點:
1.快照卷的容量必須等同于邏輯卷的容量;
2.快照卷僅一次有效,一旦執行還原操作後則會被立即自動删除。
檢視卷組資訊————可根據上表檢視
如下
[[email protected] ~]# vgdisplay
--- Volume group ---
VG Name storage
System ID
Format lvm2
Metadata Areas 2
Metadata Sequence No 4
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 1
Open LV 1
Max PV 0
Cur PV 2
Act PV 2
VG Size 39.99 GiB
PE Size 4.00 MiB
Total PE 10238
Alloc PE / Size 30 / 120.00 MiB Free PE / Size 10208 / 39.88 GiB
VG UUID CTaHAK-0TQv-Abdb-R83O-RU6V-YYkx-8o2R0e
………………省略部分輸出資訊………………
通過卷組的資訊可以的出來,卷組已經使用了120MB的容量,Free空閑容量較多,接下來我們嘗試往邏輯卷裝置所挂載的目錄中寫入一個檔案
[[email protected] ~]# echo "Welcome to Linuxprobe.com" > /linuxprobe/readme.txt
[[email protected] ~]# ls -l /linuxprobe
total 14
drwx------. 2 root root 12288 Feb 1 07:18 lost+found
-rw-r--r--. 1 root root 26 Feb 1 07:38 readme.txt
第1步:使用-s參數生成一個快照卷,使用-L參數指定切割的大小。另外,還需要在指令後面寫上是針對哪個邏輯卷執行的快照操作。
[[email protected] ~]# lvcreate -L 120M -s -n SNAP /dev/storage/vo
Logical volume "SNAP" created
[[email protected] ~]# lvdisplay
--- Logical volume ---
LV Path /dev/storage/SNAP
LV Name SNAP
VG Name storage
LV UUID BC7WKg-fHoK-Pc7J-yhSd-vD7d-lUnl-TihKlt
LV Write Access read/write
LV Creation host, time localhost.localdomain, 2017-02-01 07:42:31 -0500
LV snapshot status active destination for vo
LV Status available
# open 0
LV Size 120.00 MiB
Current LE 30
COW-table size 120.00 MiB
COW-table LE 30
Allocated to snapshot 0.01%
Snapshot chunk size 4.00 KiB
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 8192
Block device 253:3
………………省略部分輸出資訊………………
第2步:在邏輯卷所挂載的目錄中建立一個100MB的垃圾檔案,然後再檢視快照卷的狀态。可以發現存儲空間占的用量上升了。
[[email protected] ~]# dd if=/dev/zero of=/linuxprobe/files count=1 bs=100M
1+0 records in
1+0 records out
104857600 bytes (105 MB) copied, 3.35432 s, 31.3 MB/s
[[email protected] ~]# lvdisplay
--- Logical volume ---
LV Path /dev/storage/SNAP
LV Name SNAP
VG Name storage
LV UUID BC7WKg-fHoK-Pc7J-yhSd-vD7d-lUnl-TihKlt
LV Write Access read/write
LV Creation host, time localhost.localdomain, 2017-02-01 07:42:31 -0500
LV snapshot status active destination for vo
LV Status available
# open 0
LV Size 120.00 MiB
Current LE 30
COW-table size 120.00 MiB
COW-table LE 30
Allocated to snapshot 83.71%
Snapshot chunk size 4.00 KiB
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 8192
Block device 253:3
第3步:為了校驗SNAP快照卷的效果,需要對邏輯卷進行快照還原操作。在此之前記得先解除安裝掉邏輯卷裝置與目錄的挂載。
[[email protected] ~]# umount /linuxprobe
[[email protected] ~]# lvconvert --merge /dev/storage/SNAP
Merging of volume SNAP started.
vo: Merged: 21.4%
vo: Merged: 100.0%
Merge of snapshot into logical volume vo has finished.
Logical volume "SNAP" successfully removed
第4步:快照卷會被自動删除掉,并且剛剛在邏輯卷裝置被執行快照操作後再建立出來的100MB的垃圾檔案也被清除了
[[email protected] ~]# mount -a
[[email protected] ~]# ls /linuxprobe/
lost+found readme.txt
5.删除邏輯卷
當生産環境中想要重新部署LVM或者不再需要使用LVM時,則需要執行LVM的删除操作。為此,需要提前備份好重要的資料資訊,然後依次删除邏輯卷、卷組、實體卷裝置,這個順序不可颠倒。
第1步:取消邏輯卷與目錄的挂載關聯,删除配置檔案中永久生效的裝置參數
[[email protected] ~]# umount /linuxprobe
[[email protected] ~]# vim /etc/fstab
#
# /etc/fstab
# Created by anaconda on Fri Feb 19 22:08:59 2017
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
/dev/mapper/rhel-root / xfs defaults 1 1
UUID=50591e35-d47a-4aeb-a0ca-1b4e8336d9b1 /boot xfs defaults 1 2
/dev/mapper/rhel-swap swap swap defaults 0 0
/dev/cdrom /media/cdrom iso9660 defaults 0 0
/dev/storage/vo /linuxprobe ext4 defaults 0 0
第2步:删除邏輯卷裝置,需要輸入y來确認操作。
[[email protected] ~]# lvremove /dev/storage/vo
Do you really want to remove active logical volume vo? [y/n]: y
Logical volume "vo" successfully removed
第3步:删除卷組,此處隻寫卷組名稱即可,不需要裝置的絕對路徑。
[[email protected] ~]# vgremove storage
Volume group "storage" successfully removed
第4步:删除實體卷裝置。
[[email protected] ~]# pvremove /dev/sdb /dev/sdc
Labels on physical volume "/dev/sdb" successfully wiped
Labels on physical volume "/dev/sdc" successfully wiped
注: 在上述操作執行完畢之後,再執行lvdisplay、vgdisplay、pvdisplay指令來檢視LVM的資訊就會發現大有不同了