本節大綱:node
20.1.什麼是邏輯卷
linux
20.2.邏輯卷的結構
ios
20.3.邏輯卷的管理
vim
20.4.遷移邏輯捲到新的系統
centos
20.5.刪除邏輯卷
服務器
20.6.邏輯卷快照
app
20.1.什麼是邏輯卷dom
1)爲何要使用邏輯卷ide
邏輯卷:工具
優勢:在於靈活管理
一、動態擴容
二、在線擴容
三、離線裁剪
四、數據條帶化
五、數據鏡像
2)什麼是邏輯卷
邏輯卷管理(LVM)(Logical VolumeManager)它是Linux環境下對磁盤分區進行管理的一種機制,它由Heinz Mauelshagen在Linux 2.4內核上實現。LVM將一個或多個硬盤的分區在邏輯上進行組合,作爲一個大的硬盤空間來使用,當硬盤的剩餘空間不夠的時候,能夠將其它的硬盤加入到分區當中,這樣能夠實現磁盤空間的動態管理。
3)lvm基本術語
物理卷(physical volume,pv):
物理卷就是指硬盤分區,也能夠是整個硬盤或已建立的RAID ,是LVM的基本存儲設備,與普通物理存儲介質的區別是該設備包含有LVM相關的管理參數。
卷組(volume group,vg):
卷組是創建在物理卷之上,它是由一個或者多個物理卷組成的存儲池。即將不少個物理卷融合在一塊兒來提供容量。在卷組上能建立一個或多個「LVM分區」(邏輯卷)
邏輯卷(logical volume,lv):邏輯卷是創建在卷組之上,相似於非LVM系統中的硬盤分區,它是從卷組中「切」出來一塊空間來讓用戶使用,是一個標準的塊設備,在邏輯卷之上能夠創建文件系統。
物理區域(physical extent,PE):物理卷以大小相等的物理塊爲存儲的基本單位,每個物理卷被劃分紅稱爲PE的最小單位。默認是4M,尋址的最小單元。
邏輯區域(logical extent,LE):邏輯卷以大小相等的邏輯塊爲存儲的基本單位,在同一個卷組中,LE的大小和PE是相等的,而且一一對應。
總結:
真實的物理設備——>邏輯上作成物理卷(pv)——>卷組(vg)——>邏輯卷(lv)
20.2.邏輯卷的結構
假若有物理磁盤三個,一個200g,一個100g,一個80g,怎麼作分出一個300g獨立文件系統的分區,這就要邏輯捲來解決了
物理磁盤到邏輯的映射
#採用文件夾的形式模式LVM
[root@localhost test]# tree
.
├── VG0
│ ├── LV0
│ ├── LV1
│ └── LV2
└── VG1
├── LV0
└── LV1
20.3.邏輯卷的管理
1)經過lvm分區方式安裝centos
選擇安裝類型,選擇最後一個複選框,即建立自定義佈局。
對應英文界面
首先劃分/boot分區,/boot分區建議使用物理分區
將剩餘空間劃分爲一個物理卷(PV)
建立一個卷組(VG)。默認卷組名爲VolGroup00,修改卷組名爲vg51cto_lv。
在VG上面建立邏輯卷(LV)。邏輯卷默認爲LogVol00,LogVol01……末兩位由00開始依次遞增。
LVM分區完成。
[root@localhost ~]# df -h #查看磁盤空間
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/vg51cto_lv-LogVol01
9.5G 915M 8.2G 10% /
tmpfs 491M 0 491M 0% /dev/shm
/dev/sda1 190M 27M 154M 15% /boot
/dev/mapper/vg51cto_lv-LogVol04
2.9G 4.5M 2.7G 1% /data
/dev/mapper/vg51cto_lv-LogVol02
4.0G 8.3M 3.8G 1% /home
/dev/mapper/vg51cto_lv-LogVol03
969M 1.4M 917M 1% /usr/local
20.3.邏輯卷的管理
經過實例來講明
dmoe1:建立一個普通的邏輯卷,大小是1G,掛載使用。
1)拿一塊硬盤
2)將硬盤分區(根據實際狀況)
sdb 8:16 0 20G 0 disk
├─sdb1 8:17 0 2G 0 part
├─sdb2 8:18 0 2G 0 part
├─sdb3 8:19 0 6G 0 part
└─sdb4 8:20 0 10G 0 part
3)將設備作成物理卷
# pvcreate /dev/sdb1
查看:
pvs 簡單查看
pvdisplay 詳細查看
4)建立卷組,將物理卷加入到卷組
# vgcreate vg01 /dev/sdb1
Volume group "vg01" successfully created
-l: 卷組上容許建立的最大邏輯卷數
-s:卷組上的物理卷的PE大小
-p:卷組中容許添加的最大物理卷數
查看:
vgscan #查看卷組名
vgs
vgdisplay
5)建立邏輯卷,大小1G
# lvcreate -n lv01 -L 1G vg01
-L:指定最終大小
-l:指定pe的個數或者卷組剩餘空間的百分比
# lvcreate -n lv02 -l 50 vg01
# lvcreate -n lv03 -l 50%free vg01
查看:
lvs
lvdisplay
6)將邏輯卷格式化
建立好的邏輯卷會映射到如下兩個地方:
# ll /dev/mapper/vg01-lv01
lrwxrwxrwx. 1 root root 7 Apr 8 10:42 /dev/mapper/vg01-lv01 -> ../dm-2
# ll /dev/vg01/lv01
lrwxrwxrwx. 1 root root 7 Apr 8 10:42 /dev/vg01/lv01 -> ../dm-2
mkfs -t ext4 /dev/mapper/vg01-lv01
或者
mkfs.ext4 /dev/vg01/lv01
7)掛載使用
mount /dev/vg01/lv01 /u01
8)修改卷組名
#把現有的卷組名更改
[root@localhost ~]# vgrename vg51cto_lv vg51cto
Volume group "vg51cto_lv" successfully renamed to "vg51cto"
#修改/etc/fstab配置文件,把vg51cto_lv修改爲vg51cto
[root@localhost ~]# vim /etc/fstab
# /etc/fstab
# Created by anaconda on Thu Sep 28 19:09:08 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/vg51cto-LogVol01 / ext4 defaults 1 1
UUID=cb3a3439-01cd-44f8-b435-81a072a03c28 /boot ext4 defaults 1 2
/dev/mapper/vg51cto-LogVol04 /data ext4 defaults 1 2
/dev/mapper/vg51cto-LogVol02 /home ext4 defaults 1 2
/dev/mapper/vg51cto-LogVol03 /usr/local ext4 defaults 1 2
/dev/mapper/vg51cto-LogVol00 swap swap defaults 0 0
tmpfs /dev/shm tmpfs defaults 0 0
devpts /dev/pts devpts gid=5,mode=620 0 0
sysfs /sys sysfs defaults 0 0
proc /proc proc defaults 0 0
#修改grub.conf配置文件,把vg51cto_lv修改爲vg51cto
[root@localhost ~]# vim /etc/grub.conf
default=0
timeout=5
splashimage=(hd0,0)/grub/splash.xpm.gz
hiddenmenu
title CentOS 6 (2.6.32-504.el6.x86_64)
root (hd0,0)
kernel /vmlinuz-2.6.32-504.el6.x86_64 ro root=/dev/mapper/vg51cto-LogVol01 rd_NO_LUKS rd_LVM_LV=vg51cto/LogVol01 rd_LVM_LV=vg51cto/LogVol00 rd_NO_MD crashkernel=auto LANG=zh_CN.UTF-8 KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM rhgb quiet
initrd /initramfs-2.6.32-504.el6.x86_64.img
#reboot重啓後用df -h查看
[root@localhost ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/vg51cto-LogVol01
9.5G 1.1G 8.0G 12% /
tmpfs 491M 0 491M 0% /dev/shm
/dev/sda1 190M 27M 154M 15% /boot
/dev/mapper/vg51cto-LogVol04
2.9G 4.5M 2.7G 1% /data
/dev/mapper/vg51cto-LogVol02
4.0G 8.3M 3.8G 1% /home
/dev/mapper/vg51cto-LogVol03
969M 1.4M 917M 1% /usr/local
demo2:在線擴容邏輯卷
狀況1:當卷組剩餘空間不夠
1)擴容卷組
# vgextend vg01 /dev/sdb3
No physical volume label read from /dev/sdb3
Physical volume /dev/sdb3 not found
Physical volume "/dev/sdb3" successfully created
Volume group "vg01" successfully extended
說明:
卷組是由物理卷組成的,若是直接將設備加入卷組,那麼系統會自動先將設備作成pv,而後在加入。
2)擴容邏輯卷
# lvextend -L +2G /dev/vg01/lv01 在原來的基礎上增長2G空間
3)同步文件系統
# resize2fs /dev/vg01/lv01
狀況2:當前卷組剩餘空間足夠
1)擴容邏輯卷
# lvextend -L 3G /dev/vg01/lv01 將原來的邏輯卷擴大到3G
2)同步文件系統
# resize2fs /dev/vg01/lv01
實例:動態擴容根文件系統
demo3:離線裁剪邏輯卷
1)卸載邏輯卷
umount /dev/vg01/lv01
2)裁剪文件系統
# e2fsck -f /dev/mapper/vg01-lv01
# resize2fs /dev/mapper/vg01-lv01 2G
3)裁剪邏輯卷
# lvreduce -L 2G /dev/mapper/vg01-lv01
# e2fsck -f /dev/mapper/vg01-lv01
4)掛載使用
# mount /dev/mapper/vg01-lv01 /u01
注意:
一、離線裁剪以前最好將數據備份
二、裁剪後的空間大小必定要大於數據大小
demo4:總結邏輯卷相關的命令
建立物理卷
pvcreate /dev/sdb /dev/sdc[1-3]
建立卷組
vgcreate vg01 /dev/sdb
建立邏輯卷
lvcreate -n lv01 -L 2G vg01
lvcreate -n lv02 -l 50 vg02
lvcreate -n lv03 -l 50%free vg03
擴容卷組
vgextend vg01 /dev/sdc[1-3]
擴容邏輯卷
lvextend -L +1G /dev/vg01/lv01
刪除邏輯卷
# lvremove /dev/mapper/vg01-lv03
刪除卷組
# vgremove vg01
刪除物理卷
# pvremove /dev/sdb /dev/sdc[1-3]
將一個物理卷從卷組裏移除
# vgreduce vg01 /dev/sdb2
注意:
該物理卷沒有被使用纔可以移除
demo5:邏輯卷實現條帶化
條帶化:
把保存在邏輯捲上的數據分紅n等分,分別同時寫入到不一樣的物理卷中,能夠提升數據的讀寫速率;若是任何一個涉及到物理卷損壞,數據都會沒法恢復。
建立前:
# pvs
PV VG Fmt Attr PSize PFree
/dev/sda2 vg_node1 lvm2 a-- 19.51g 0
/dev/sdb1 vg01 lvm2 a-- 2.00g 2.00g
/dev/sdb2 vg01 lvm2 a-- 2.00g 2.00g
建立條帶化的邏輯卷:
# lvcreate -n lv01 -L 1G -i 2 vg01 /dev/sdb[12]
-i:指定條帶化的個數
建立後:
# pvs
PV VG Fmt Attr PSize PFree
/dev/sda2 vg_node1 lvm2 a-- 19.51g 0
/dev/sdb1 vg01 lvm2 a-- 2.00g 1.50g
/dev/sdb2 vg01 lvm2 a-- 2.00g 1.50g
格式化文件系統:
mkfs.ext4 /dev/vg01/lv01
掛載使用
mount /dev/vg01/lv01 /u01
測試驗證:
# iostat -d -m /dev/sdb[12] 2
demo6:邏輯卷實現鏡像
鏡像:對某個邏輯卷作數據鏡像,實現數據備份做用。
建立前:
# pvs
PV VG Fmt Attr PSize PFree
/dev/sda2 vg_node1 lvm2 a-- 19.51g 0
/dev/sdb1 vg01 lvm2 a-- 2.00g 1.50g
/dev/sdb2 vg01 lvm2 a-- 2.00g 1.50g
/dev/sdb3 vg02 lvm2 a-- 2.00g 2.00g
/dev/sdb4 vg02 lvm2 a-- 2.00g 2.00g
建立一個互爲鏡像的邏輯卷:
# lvcreate -n lv02 -L 1G -m 1 vg02 /dev/sdb[34]
-m:指定鏡像的個數
# lvs
LV VG Attr LSize Pool Origin Data% Move Log Cpy%Sync Convert
lv01 vg01 -wi-ao---- 1.00g
lv02 vg02 mwi-a-m--- 1.00g lv02_mlog 100.00 數據同步100%完成
建立後:
# pvs
PV VG Fmt Attr PSize PFree
/dev/sda2 vg_node1 lvm2 a-- 19.51g 0
/dev/sdb1 vg01 lvm2 a-- 2.00g 1.50g
/dev/sdb2 vg01 lvm2 a-- 2.00g 1.50g
/dev/sdb3 vg02 lvm2 a-- 2.00g 1.00g
/dev/sdb4 vg02 lvm2 a-- 2.00g 1.00g
格式化文件系統而且掛載使用
# mkfs.ext4 /dev/vg02/lv02
# mkdir /u02
# mount /dev/mapper/vg02-lv02 /u02
測試驗證:
# dd if=/dev/zero of=/dev/sdb3 bs=1M count=300
# vgreduce --removemissing -f vg02 強制從卷組中移除損壞的盤
再次將邏輯卷掛載使用,咱們須要將壞的盤修好換成健康的盤讓其再次互爲鏡像:
# lvconvert -m 1 /dev/vg02/lv02 /dev/sdb[34]
demo7:修改邏輯卷名
#查看邏輯卷名
默認的卷組名爲VolGroup00,卷組內的邏輯卷爲LogVol00,LogVol01……末兩位由00開始依次遞增
[root@localhost ~]# lvscan
ACTIVE '/dev/vg51cto/LogVol04' [2.93 GiB] inherit
ACTIVE '/dev/vg51cto/LogVol01' [9.77 GiB] inherit
ACTIVE '/dev/vg51cto/LogVol00' [2.00 GiB] inherit
ACTIVE '/dev/vg51cto/LogVol03' [1000.00 MiB] inherit
ACTIVE '/dev/vg51cto/LogVol02' [4.13 GiB] inherit
#修改邏輯卷名
[root@localhost ~]# lvrename /dev/vg51cto/LogVol00 /dev/vg51cto/lv_swp
Renamed "LogVol00" to "lv_swp" in volume group "vg51cto"
[root@localhost ~]# lvrename /dev/vg51cto/LogVol01 /dev/vg51cto/lv_root
Renamed "LogVol01" to "lv_root" in volume group "vg51cto"
[root@localhost ~]# lvrename /dev/vg51cto/LogVol02 /dev/vg51cto/lv_home
Renamed "LogVol02" to "lv_home" in volume group "vg51cto"
[root@localhost ~]# lvrename /dev/vg51cto/LogVol03 /dev/vg51cto/lv_usr
Renamed "LogVol03" to "lv_usr" in volume group "vg51cto"
[root@localhost ~]# lvrename /dev/vg51cto/LogVol04 /dev/vg51cto/lv_data
Renamed "LogVol04" to "lv_data" in volume group "vg51cto"
#修改/etc/fstab配置文件
[root@localhost ~]# vim /etc/fstab
# /etc/fstab
# Created by anaconda on Thu Sep 28 19:09:08 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/vg51cto-lv_root / ext4 defaults 1 1
UUID=cb3a3439-01cd-44f8-b435-81a072a03c28 /boot ext4 defaults 1 2
/dev/mapper/vg51cto-lv_data /data ext4 defaults 1 2
/dev/mapper/vg51cto-lv_home /home ext4 defaults 1 2
/dev/mapper/vg51cto-lv_usr /usr/local ext4 defaults 1 2
/dev/mapper/vg51cto-lv_swap swap swap defaults 0 0
tmpfs /dev/shm tmpfs defaults 0 0
devpts /dev/pts devpts gid=5,mode=620 0 0
sysfs /sys sysfs defaults 0 0
proc /proc proc defaults 0 0
#修改grub.conf配置文件
root@localhost ~]# vim /etc/grub.conf
# grub.conf generated by anaconda
#
# Note that you do not have to rerun grub after making changes to this file
# NOTICE: You have a /boot partition. This means that
# all kernel and initrd paths are relative to /boot/, eg.
# root (hd0,0)
# kernel /vmlinuz-version ro root=/dev/mapper/vg51cto-LogVol01
# initrd /initrd-[generic-]version.img
#boot=/dev/sda
default=0
timeout=5
splashimage=(hd0,0)/grub/splash.xpm.gz
hiddenmenu
title CentOS 6 (2.6.32-504.el6.x86_64)
root (hd0,0)
kernel /vmlinuz-2.6.32-504.el6.x86_64 ro root=/dev/mapper/vg51cto-lv_root rd_NO_LUKS rd_LVM_LV=vg51cto/lv_root rd_LVM_LV=vg51cto/lv_swap rd_NO_MD crashkernel=auto LANG=zh_CN.UTF-8 KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM rhgb quiet
initrd /initramfs-2.6.32-504.el6.x86_64.img
20.4.遷移邏輯捲到新的系統
我首先在另一個虛擬機中建立一個邏輯卷,並在裏面存入相應的數據,而後來模擬咱們的遷移邏輯卷的實驗。在另一個虛擬機中建立LV0邏輯卷的操做,以下圖所示。
此時該系統中塊設備列表以下所示。 LV0。就是咱們剛剛建立的邏輯卷。
[root@centos6 lv0]#lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sr0 11:0 1 3.7G 0 rom /media/CentOS_6.9_Final
sda 8:0 0 200G 0 disk
├─sda1 8:1 0 1000M 0 part /boot
├─sda2 8:2 0 53.7G 0 part /
├─sda3 8:3 0 48.8G 0 part /app
├─sda4 8:4 0 1K 0 part
└─sda5 8:5 0 2G 0 part [SWAP]
sdb 8:16 0 20G 0 disk
└─VG0-LV0 (dm-0) 253:0 0 10G 0 lvm /mnt/lv0
如今咱們要將剛剛建立的這個邏輯卷遷移到一個新的系統中,並且咱們要保證,數據不能丟失。同時,咱們考慮一下,萬一咱們要遷移到的新的文件系統中有跟咱們新建立的邏輯卷同名的邏輯卷該如何處理,比方說像,下面這樣。 注意,兩個系統不同,可是邏輯卷的名字一致。
#CentOS6 中的邏輯卷,即將被遷移到CentOS7中
[root@centos6 ~]#lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
LV0 VG0 -wi-ao---- 10.00g
#CentOS 7 中的邏輯卷,即將遷移到這裏。
[root@localhost ~]#lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
LV0 VG0 -wi-ao---- 300.00g
LV1 VG0 -wi-ao---- 50.00g
總結一下遷移過程當中的重要步驟,一共有以下幾步。 在源主機上
將舊的邏輯卷解除掛載 umount /mnt/lv0
修改舊的卷組名稱 vgrename VG0 NEWVG0
修改舊的邏輯卷的名稱 lvrename /dev/NEWVG0/LV0 NEWLV0
將舊的卷組設置爲非活動狀態 vgchange -an NEWVG0
將舊的卷組導出 vgexport NEWVG0
將硬盤拆下 安裝到新的主機上
相關的操做以下所示,操做成功以後,將硬盤文件拆下,接到新的主機上。
[root@centos6 ~]#umount /mnt/lv0
[root@centos6 ~]#vgrename VG0 NEWVG0
Volume group "VG0" successfully renamed to "NEWVG0"
[root@centos6 ~]#lvrename /dev/NEWVG0/LV0 NEWLV0
Renamed "LV0" to "NEWLV0" in volume group "NEWVG0"
[root@centos6 ~]#vgchange -an NEWVG0
0 logical volume(s) in volume group "NEWVG0" now active
[root@centos6 ~]#vgexport NEWVG0
Volume group "NEWVG0" successfully exported
在目標主機上
在新的系統中安裝硬盤,並將其導入文件系統。 vgimport NEWVG0
激活新的卷組 vgchange -ay NEWVG0
從新掛載 mount /dev/NEWVG0/NEWLV0 /mnt/newlv0
在加裝了新的硬盤以後,咱們能夠看到系統中已經添加了一塊新的硬盤。
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 200G 0 disk
├─sda1 8:1 0 1G 0 part /boot
├─sda2 8:2 0 55G 0 part /
├─sda3 8:3 0 50G 0 part /app
├─sda4 8:4 0 1K 0 part
└─sda5 8:5 0 2G 0 part [SWAP]
sdb 8:16 0 200G 0 disk
├─sdb1 8:17 0 100G 0 part
│ └─VG0-LV0 253:0 0 300G 0 lvm /mnt/lv0
└─sdb2 8:18 0 100G 0 part
└─VG0-LV0 253:0 0 300G 0 lvm /mnt/lv0
sdc 8:32 0 100G 0 disk
└─VG0-LV0 253:0 0 300G 0 lvm /mnt/lv0
sdd 8:48 0 80G 0 disk
├─VG0-LV0 253:0 0 300G 0 lvm /mnt/lv0
└─VG0-LV1 253:1 0 50G 0 lvm /mnt/lv1
sde 8:64 0 20G 0 disk
└─NEWVG0-NEWLV0 253:2 0 10G 0 lvm
使用pvscan 命令能夠查看到系統中已經有一個處於 exported 狀態的 設備,及其詳細的信息。
[root@localhost ~]#pvscan
PV /dev/sdb1 VG VG0 lvm2 [100.00 GiB / 0 free]
PV /dev/sdb2 VG VG0 lvm2 [100.00 GiB / 0 free]
PV /dev/sdc VG VG0 lvm2 [100.00 GiB / 0 free]
PV /dev/sdd VG VG0 lvm2 [80.00 GiB / 29.98 GiB free]
PV /dev/sde is in exported VG NEWVG0 [20.00 GiB / 10.00 GiB free]
Total: 5 [399.98 GiB] / in use: 5 [399.98 GiB] / in no VG: 0 [0 ]
接下來咱們將新的NEWVG0 導入到系統中。
#導入新的卷組
[root@localhost ~]#vgimport NEWVG0
Volume group "NEWVG0" successfully imported
#將新的卷組激活
[root@localhost ~]#vgchange -ay NEWVG0
1 logical volume(s) in volume group "NEWVG0" now active
此時咱們再使用pvscan 來查看的話,狀態應該與以前已經不同了。
# 狀態已經發生了相應的變化
[root@localhost ~]#pvscan
PV /dev/sdb1 VG VG0 lvm2 [100.00 GiB / 0 free]
PV /dev/sdb2 VG VG0 lvm2 [100.00 GiB / 0 free]
PV /dev/sdc VG VG0 lvm2 [100.00 GiB / 0 free]
PV /dev/sdd VG VG0 lvm2 [80.00 GiB / 29.98 GiB free]
PV /dev/sde VG NEWVG0 lvm2 [20.00 GiB / 10.00 GiB free]
Total: 5 [399.98 GiB] / in use: 5 [399.98 GiB] / in no VG: 0 [0 ]
將已經添加好的邏輯卷從新掛載就能夠繼續使用了。
20.5.刪除邏輯卷
在完成了上面的大部分操做以後,咱們又有了一個新的想法,若是我想將某個分區,從卷組中去掉該怎樣作?
實際中,咱們可能面臨衆多的困難,比方說,該分區中已經存儲了不少的數據,這樣的話,咱們是不能直接刪除的。假設咱們有下面這樣的一組邏輯卷(只是假設,爲了用來佐證)
[root@localhost ~]#pvs
PV VG Fmt Attr PSize PFree
/dev/sdb1 VG0 lvm2 a-- 100.00g 0
/dev/sdb2 VG0 lvm2 a-- 100.00g 0
/dev/sdc VG0 lvm2 a-- 10.00g 89.98g
/dev/sdd VG0 lvm2 a-- 80.00g 29.98g
若是咱們要將/dev/sdd 這個分區刪除掉,那麼咱們首先就要在同一個卷組(VG0)中找到與/dev/sdd 已經使用掉的空間一樣大小的空間,來作遷移。而後將/dev/sdd 的空間 移動到 /dev/sdc中,此時就能夠進行刪除了。
這樣,咱們就詳細的介紹了邏輯卷的詳細使用,以及在使用過程當中須要注意的相關內容。實際上,邏輯卷還有快照,關於快照的內容在邏輯卷中也是很重要的一部份內容,實際使用中也是很是重要的,之後有機會會詳細地介紹。如若本片文章中有描述不合理的地方,敬請留言,我會及時改正。
[root@localhost ~]#mkdir /mnt/newlv0
[root@localhost ~]#mount /dev/NEWVG0/NEWLV0 /mnt/newlv0
[root@localhost ~]#cd /mnt/newlv0
[root@localhost newlv0]#ls
acpid iptables.old readahead
atd irqbalance readonly-root
auditd kdump rngd
authconfig kernel rsyslog
................
[root@localhost ~]#lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 200G 0 disk
├─sda1 8:1 0 1G 0 part /boot
├─sda2 8:2 0 55G 0 part /
├─sda3 8:3 0 50G 0 part /app
├─sda4 8:4 0 512B 0 part
└─sda5 8:5 0 2G 0 part [SWAP]
sdb 8:16 0 200G 0 disk
├─sdb1 8:17 0 100G 0 part
│ └─VG0-LV0 253:0 0 300G 0 lvm /mnt/lv0
└─sdb2 8:18 0 100G 0 part
└─VG0-LV0 253:0 0 300G 0 lvm /mnt/lv0
sdc 8:32 0 100G 0 disk
└─VG0-LV0 253:0 0 300G 0 lvm /mnt/lv0
sdd 8:48 0 80G 0 disk
├─VG0-LV0 253:0 0 300G 0 lvm /mnt/lv0
└─VG0-LV1 253:1 0 50G 0 lvm /mnt/lv1
在這一步中,一共有三個步驟。準備步驟:強制性檢查文件系統。而後:先縮減文件系統大小。接着:縮減邏輯卷。 這三步,缺一不可。
[root@localhost ~]#umount /mnt/lv1
卷組VG0的全部空間都被使用了。接下來咱們就能夠進行縮減邏輯卷的實驗。
從整個擴展的過程當中,咱們看出,只要LV0的空間不足,咱們就能夠很靈活的給LV0擴展存儲空間。若是VG0的空間不足夠使用了,那咱們就能夠從新加入一個物理磁盤,並按照此過程將物理卷添加到VG0中,只要使用vgextend命令就能夠。
建立了文件系統以後,將LV0掛載到 /app 目錄下,就能夠正常訪問 LV0了,固然掛載的方式有臨時掛載和永久掛載兩種方式,永久掛載就是將掛載選項寫到 /etc/fstab 文件中,咱們這裏再也不詳細介紹。
[root@localhost ~]#lvdisplay
--- Logical volume ---
LV Path /dev/VG0/LV0 #已經生成了設備名稱
LV Name LV0
VG Name VG0
LV UUID D3dpT9-EYFP-ieGm-DiYm-Ey4P-O5JM-EMtrOh
LV Write Access read/write
LV Creation host, time localhost.localdomain, 2017-08-15 21:51:32 +0800
LV Status available
# open 0
LV Size 250.00 GiB #邏輯卷的大小
Current LE 64000 #當前一共有多少LE 邏輯區塊
Segments 3
Allocation inherit
Read ahead sectors auto
- currently set to 8192
Block device 253:0
[root@localhost ~]#vgdisplay
--- Volume group ---
VG Name VG0 #卷組名稱
System ID
Format lvm2 #Format版本
Metadata Areas 4
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 4
Act PV 4
VG Size 379.98 GiB #卷組的大小
PE Size 4.00 MiB #默認區塊的大小
Total PE 97276
Alloc PE / Size 0 / 0
Free PE / Size 97276 / 379.98 GiB
VG UUID rrI0HJ-JPwB-CWtU-ddM0-kvJ5-7Beo-uV5qEy
從上面的詳細信息中能夠看到 VG Name 尚未值, PE Size 也沒有值, 那麼接下來,咱們就要建立卷組,建立了卷組以後,咱們再回過頭查看如下這些物理卷的詳細信息,就會發生很大的變化 。
[root@localhost ~]#lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 200G 0 disk
├─sda1 8:1 0 1G 0 part /boot
├─sda2 8:2 0 55G 0 part /
├─sda3 8:3 0 50G 0 part /app
├─sda4 8:4 0 512B 0 part
└─sda5 8:5 0 2G 0 part [SWAP]
sdb 8:16 0 200G 0 disk
├─sdb1 8:17 0 100G 0 part
└─sdb2 8:18 0 100G 0 part
sdc 8:32 0 100G 0 disk
sdd 8:48 0 80G 0 disk
注意名稱的格式標準:/dev/{vg_name}/{lv_name} -> /dev/mapper/{vg_name}{lv_name}
這裏有一點須要注意。物理區段的分配並不是是連續的,也就是說,屬於LV0的邏輯區段,他們所對應的物理區段有可能來自不一樣的物理設備。這也再一次證明了,卷組在對應物理捲到邏輯卷的映射上起到了關鍵性的做用。
LVM 的組成一共包含三種元素,卷(Volume,物理和邏輯卷,卷組),區段(物理和邏輯區段),設備映射器 。 接下來,咱們分別介紹這三種元素各表明什麼意思。
如圖所示,咱們從邏輯上實現了 建立了一個大於300G的文件系統,並且在用戶看來,根本不清楚底層一共有多少個硬盤,只知道有一個文件系統能夠用來存儲數據。固然,這對用戶來講就足夠了。具體的實驗將在稍後的內容中實現。
20.6.邏輯卷快照
#首先,使用‘vgs’命令檢查卷組中的空閒空間以建立新的快照
[root@localhost ~]# vgs
VG #PV #LV #SN Attr VSize VFree
vg51cto 2 5 0 wz--n- 39.80g 20.00g
[root@localhost ~]# lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
lv_data vg51cto -wi-ao---- 2.93g
lv_home vg51cto -wi-ao---- 4.13g
lv_root vg51cto -wi-ao---- 9.77g
lv_swp vg51cto -wi-ao---- 2.00g
lv_usr vg51cto -wi-ao---- 1000.00m
#建立1GB的快照卷
[root@localhost ~]# lvcreate -L 1GB -s -n home_bak /dev/mapper/vg51cto-lv_home
Logical volume "home_bak" created
#選項
-s – 建立快照
-n – 爲快照命名
此處,是對上面高亮要點的說明。
1.我在此建立的快照的大小。
2.建立快照。
3.建立快照名。
4.新的快照名。
5.要建立快照的卷
#若是你想要移除快照,可使用‘lvremove’命令
[root@localhost ~]# lvremove /dev/mapper/vg51cto-home_bak
#列出新建立的快照
[root@localhost ~]# lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
home_bak vg51cto swi-a-s--- 1.00g lv_home 0.00
lv_data vg51cto -wi-ao---- 2.93g
lv_home vg51cto owi-aos--- 4.13g
lv_root vg51cto -wi-ao---- 9.77g
lv_swp vg51cto -wi-ao---- 2.00g
lv_usr vg51cto -wi-ao---- 1000.00m
#往home裏寫500m的文件,看看快照有什麼變化
[root@localhost ~]# dd if=/dev/zero of=/home/123 bs=500M count=1
[root@localhost ~]# lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
home_bak vg51cto swi-a-s--- 1.00g lv_home 49.03
lv_data vg51cto -wi-ao---- 2.93g
lv_home vg51cto owi-aos--- 4.13g
lv_root vg51cto -wi-ao---- 9.77g
lv_swp vg51cto -wi-ao---- 2.00g
lv_usr vg51cto -wi-ao---- 1000.00m
數據已經佔用了49%
再來對上面圖片中高亮的要點做個清楚的說明。
快照邏輯卷名稱。
當前使用的卷組名。
讀寫模式下的快照卷,咱們甚至能夠掛載並使用該卷。
快照建立時間。這個很重要,由於快照將跟蹤此時間以後的每一個改變。
該快照屬於tecmint_datas邏輯卷。
邏輯卷在線並可用。
咱們錄製快照的源卷大小。
寫時複製表大小,Cow = copy on Write,這是說對tecmint_data卷所做的任何改變都會寫入此快照。
當前使用的快照大小,咱們的tecmintdata有10GB,而咱們的快照大小是1GB,這就意味着咱們的數據大概有650MB。因此,若是tecmintdatas中的文件增加到2GB,如今的51%中的內容將增長到超過所分配的快照的大小,固然,咱們在建立快照時會出現問題。這就意味着咱們須要擴展邏輯卷大小(快照邏輯卷)
給出快照組塊的大小。
若是該邏輯卷滿了,它就會自動丟失新的數據,咱們就不能再使用了,就算咱們去擴展快照卷的大小也不行。最好的方法就是在建立快照時,建立一個和源同樣大小的快照卷。tecmint_datas的大小是10GB,若是咱們建立一個10GB大小的快照,它就永遠都不會像上面那樣超載,由於它有足夠的空間來錄製你的邏輯卷的快照。
#擴展快照
[root@localhost ~]# lvextend -L +1G /dev/mapper/vg51cto-home_bak
Size of logical volume vg51cto/home_bak changed from 1.00 GiB (256 extents) to 2.00 GiB (512 extents).
Logical volume home_bak successfully resized
[root@localhost ~]# lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
home_bak vg51cto swi-a-s--- 2.00g lv_home 24.52
lv_data vg51cto -wi-ao---- 2.93g
如今空間大小總計2G
#恢復快照或合併
[root@localhost ~]# umount /dev/mapper/vg51cto-lv_home
#檢查是否卸載成功
df -h
#恢復快照
[root@localhost ~]# lvconvert --merge /dev/mapper/vg51cto-home_bak
在合併完成後,快照卷將被自動移除。如今咱們可使用df命令來查看分區大小。
重要:要自動擴展快照,咱們能夠經過修改配置文件來進行。對於手動擴展,咱們可使用lvextend。
#打開lvm的配置文件
[root@localhost ~]# vim /etc/lvm/lvm.conf
#搜索單詞autoextend
https://linux.die.net/man/8/lvm Linux LVM2工具手冊
修改此處的100爲75,這樣自動擴展的起始點就是75,而自動擴展百分比爲20,它將自動擴容百分之20。
若是快照卷達到75%,它會自動爲快照卷擴容20%。這樣,咱們能夠自動擴容了。使用wq!來保存並退出。
這將把快照從超載致使下線事故中拯救出來,這也會幫助你節省更多時間。
練習:
一、添加一塊新的10g硬盤到你的linux系統中,並將其分爲2個分區(大小本身決定),如sdb1和sdb2
[root@localhost ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sr0 11:0 1 1024M 0 rom
sda 8:0 0 20G 0 disk
├─sda1 8:1 0 500M 0 part /boot
└─sda2 8:2 0 19.5G 0 part
├─VolGroup-lv_root (dm-0) 253:0 0 17.6G 0 lvm /
└─VolGroup-lv_swap (dm-1) 253:1 0 2G 0 lvm [SWAP]
sdb 8:16 0 10G 0 disk
└─VolGroup-lv01 (dm-2) 253:2 0 5G 0 lvm /data
sdc 8:32 0 10G 0 disk
[root@localhost ~]# fdisk /dev/sdc
Device contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabel
Building a new DOS disklabel with disk identifier 0x989783d7.
Changes will remain in memory only, until you decide to write them.
After that, of course, the previous content won't be recoverable.
Warning: invalid flag 0x0000 of partition table 4 will be corrected by w(rite)
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): m
Command action
a toggle a bootable flag
b edit bsd disklabel
c toggle the dos compatibility flag
d delete a partition
l list known partition types
m print this menu
n add a new partition
o create a new empty DOS partition table
p print the partition table
q quit without saving changes
s create a new empty Sun disklabel
t change a partition's system id
u change display/entry units
v verify the partition table
w write table to disk and exit
x extra functionality (experts only)
Command (m for help): n
Command action
e extended
p primary partition (1-4)
p
Partition number (1-4): 1
First cylinder (1-1305, default 1):
Using default value 1
Last cylinder, +cylinders or +size{K,M,G} (1-1305, default 1305): +5G
Command (m for help): n
Command action
e extended
p primary partition (1-4)
p
Partition number (1-4): 2
First cylinder (655-1305, default 655):
Using default value 655
Last cylinder, +cylinders or +size{K,M,G} (655-1305, default 1305): 1305
Command (m for help): p
Disk /dev/sdc: 10.7 GB, 10737418240 bytes
255 heads, 63 sectors/track, 1305 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: 0x989783d7
Device Boot Start End Blocks Id System
/dev/sdc1 1 654 5253223+ 83 Linux
/dev/sdc2 655 1305 5229157+ 83 Linux
Command (m for help): w
The partition table has been altered!
Calling ioctl() to re-read partition table.
Syncing disks.
二、建立大小爲2G的邏輯卷lv01掛載到系統中的/u01目錄下面,而且在/u01目錄下面建立file1~file5 5個文件。
[root@localhost ~]# mkdir /u01
[root@localhost ~]# pvcreate /dev/sdc1
Physical volume "/dev/sdc1" successfully created
[root@localhost ~]# pvcreate /dev/sdc2
Physical volume "/dev/sdc2" successfully created
[root@localhost ~]# vgextend VolGroup /dev/sdc[1-2]
Volume group "VolGroup" successfully extended
[root@localhost ~]# lvcreate -n lv02 -L 2G VolGroup
Logical volume "lv02" created
[root@localhost ~]# mkfs -t ext4 /dev/mapper/VolGroup-lv02
[root@localhost ~]# mount /dev/mapper/VolGroup-lv02 /u01
[root@localhost ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/VolGroup-lv_root
18G 14G 3.0G 82% /
tmpfs 491M 0 491M 0% /dev/shm
/dev/sda1 477M 28M 425M 6% /boot
/dev/mapper/VolGroup-lv01
4.8G 19M 4.6G 1% /data
/dev/mapper/VolGroup-lv02
2.0G 3.0M 1.9G 1% /u01
[root@localhost ~]# touch /u01/file{1..5}
[root@localhost ~]# ls /u01
file1 file2 file3 file4 file5 lost+found
三、假設sdb1分區有壞塊,如今須要將sdb1分區上的數據快速移動到另外的硬盤sdb2上,怎麼作?
首先,先在sdb2新建一個邏輯卷,而後掛載,把sdb1分區上的數據拷貝到sdb2
四、因爲業務須要,/u01目錄須要擴大到9G,怎麼作?
[root@localhost ~]# lvextend -L +7G /dev/mapper/VolGroup-lv02
[root@localhost ~]# resize2fs /dev/mapper/VolGroup-lv02
五、新建一個卷組vg02,PEsize爲8M,在卷組中建立一個名爲lv02的邏輯卷,大小爲50個pe,格式化成ext3的文件系統掛載使用,要求開機自動掛載
vgcreate -s 8M vg02 /dev/sda3
lvcreate -n lv02 -l 50 vg02
mkfs.ext3 /dev/mapper/vg02-lv02
擴展:
一、測試驗證已有邏輯卷的硬盤,從一臺服務器換到另外一臺服務器上是否能夠正常讀取到原來的數據?須要怎麼作?
不能正常讀取原來數據,已經有分區表,能夠掛載讀到原來的數據,重要的是原服務器必須關機,要不加不了
正常的步驟是添加進去先要激活vg,而後才能夠掛載使用
vgchange -a y lvm_list激活卷組
二、測試驗證已有互爲鏡像的邏輯卷的硬盤,從一臺服務器換到另外一臺服務器上是否能夠正常讀取數據?怎麼作?
原來服務器關掉,現有服務器也關掉,而後把原服務器互爲鏡像的邏輯硬盤加到如今服務器,能夠讀取數據,須要正常掛載
lvmdiskcan掃描塊設備,看看那些是邏輯卷
邏輯卷遷移:
源端:
1)將源文件系統umount
umount /test
2)將lv和lv inactive
lvchange -an /dev/vg_test/lv_test
vgchange -an vg_test
3)導出vg
vgexport vg_test
目標端:
1)永kudzu檢測新的盤
2)導入vg
vgimport vg_test
3)激活vg
vgchange -ay vg_test
3)mount文件系統