在 Linux 平臺中,第三方的軟件安裝位置通常是:/usr/local/ 和 /srv ,隨着咱們的應用漸漸增多。萬一這些目錄所在的分區使用完了。可是,這時候咱們又須要安裝新的應用軟件,怎麼辦呢?node
Linux 系統中 /usr/share目錄是存放幫助手冊的,一般該目錄所佔用的磁盤空間比較大,使用rpm包安裝的應用,幫助手冊通常會安裝到 /usr/share 目錄中。分區操做那時沒有作到充分全面地考慮,隨着咱們的應用的增多,該目錄全部的分區日漸用盡的狀況是有可能的。咱們想到最簡單的方法就是擴大該目錄所在的分區。可是磁盤的分區是不能擴展的。在對磁盤進行分區那一刻分區大小就固定下來了。之後不再能改變的了。數據庫
數據是企業的命脈,數據安全由爲重要。RAID保證不會由於磁盤故障而致使業務中斷;備份保證了,因誤操做或******致使數據的損壞丟失。可以從備份中把數據恢復還原回來。安全
咱們的應用服務不少使用到數據庫服務器(如MySQL),爲了避免影響業務的正常運行,咱們都要在線備份數據的,也就是熱備份。商業的熱備工具都很貴。有沒有一種廉價的解決方案呢?bash
這時 LVM(邏輯卷),帶來了福音。它能夠動態地縮減邊界的大小;它還有「快照snapshot」的功能,該功能作數據的全備份且是熱備(實際上是類熱備),速度很快。 服務器
LVM (LogicalVolumn Manage)邏輯卷。有兩個版本:LVM和LVM2。它有三部分組成:app
1、PV層ide
PV由塊設備組成,能夠是分區、raid.工具
對空間大小無要求,只要求是塊設備。大數據
2、VG層ui
做用是把多個PV組合成一體。
PV加入VG的時候,PV被劃分紅一個個邏輯單元(PE)PageExtend。由於PE的大小是在在建立VG的時候指定的。因此剛建立PV的時候,查看PV的信息的時候顯示PE總數爲0、PE大小也爲零。PE的大小默認是4MB。PE也就是咱們存儲數據的最小單元,相似於磁盤的block塊,因此設置PE大小的時候,也要根據實際應用:是存儲大數據文件呢仍是存儲小文件數據呢。咱們能夠這樣理解:VG就一塊磁盤。
3、LV層
VG能夠理解成整個磁盤,那麼建立LV的過程,能夠理解爲建立分區的過程。建立分區之後要在分區上建立文件系統,並把它掛載纔可使用的。LV也同樣要建立文件系統,且使用的命令都同樣,還要掛載纔可使用。只是在/dev目錄下的設備文件不同。
LVM的邏輯組成結構以下圖:
建立邏輯卷的過程是從下到上一層層建立的:PV ---> VG ----à LV
1、建立邏輯卷並掛載使用
一、 先建立PV
操做pv使用到的命令
PV: pvcreate 建立 pvdisplay 顯示 pvmove 移動數據。在刪除PV的時候,把存放在該PV的數據移動到其它的PV上。 pvremove 移(刪)除卷 pvscan 掃描當前系統全部的PV並顯示。
準備了三個分區用來建立PV。
[root@Node1 07.11_job]# fdisk -l /dev/sdb Device Boot Start End Blocks Id System /dev/sdb1 1 66 530113+ 8e Linux LVM /dev/sdb2 67 198 1060290 8e Linux LVM /dev/sdb3 199 460 2104515 8e Linux LVM
把分區 /dev/sdb1和/dev/sdb3建立成pv
[root@Node1 ~]# pvcreate /dev/sdb1 /dev/sdb3 Physical volume "/dev/sdb1" successfully created Physical volume "/dev/sdb3" successfully created [root@Node1 07.11_job]# pvdisplay /dev/sdb3 "/dev/sdb3" is a new physical volume of "2.01 GiB" ---NEW Physical volume --- PVName /dev/sdb3 VGName PVSize 2.01 GiB Allocatable NO PESize 0 Total PE 0 Free PE 0 Allocated PE 0 PVUUID cIL2HD-TqAV-6ICp-iCkX-BJrW-JYZd-AoKhJV
說明:
在PV沒有加入VG以前,PE的各項參數都顯示爲0的。PE的大小,在建立VG的時候設置的。默認是:4M.其實PE就是數據的存儲最小單元。相似於block.
一、 建立VG
命令格式:
Vgcreate [option] 卷組名稱 指定加入到卷組的pv
建立卷組的時候只把 /dev/sdb3 加入該卷組
[root@Node1 07.11_job]# vgcreate –s 8M myvg /dev/sdb3 Volume group "myvg" successfully created [root@Node1 07.11_job]# vgdisplay myvg ---Volume group --- VGName myvg System ID Format lvm2 Metadata Areas 1 Metadata Sequence No 1 VGAccess read/write VGStatus resizable MAXLV 0 CurLV 0 Open LV 0 MaxPV 0 CurPV 1 ActPV 1 VGSize 2.00 GiB PESize 8.00 MiB Total PE 256 Alloc PE / Size 0 / 0 Free PE / Size 256 / 2.00 GiB VGUUID fG0uMm-ipew-DrQu-oXGI-ssGq-tYZq-0YxNbH [root@Node1 07.11_job]# pvdisplay /dev/sdb3 ---Physical volume --- PVName /dev/sdb3 VGName myvg PVSize 2.01 GiB / not usable7.19 MiB Allocatable yes PESize 8.00 MiB Total PE 256 Free PE 256 Allocated PE 0 PVUUID cIL2HD-TqAV-6ICp-iCkX-BJrW-JYZd-AoKhJV
操做VG使用到的命令:
vgcreate vg的建立 vgdisplay 顯示VG相關的信息 vgextend vg的擴展。 vgreduce vg的縮減 vgscan 掃描當前系統上有什麼卷組
第3步:建立邏輯卷LV
格式: Lvcreate -L 邏輯卷的大小 -n 邏輯卷名稱 在哪一個卷中建立邏輯卷
建立大小爲2G的邏輯卷 mylv
[root@Node1 ~]# lvcreate -L 2G -n mylv myvg Logical volume "mylv" created
看看建立的邏輯卷的大小是否是2GB?
[root@Node1 ~]# lvscan | grep"mylv\>" ACTIVE '/dev/myvg/mylv' [2.00 GiB] inherit
操做LV 使用的命令:
lvcreate 建立邏輯卷 lvdisplay 顯出邏輯卷的信息,若是想顯示指定的邏輯卷的信息,要指定邏輯卷的設備名稱 # lvdisplay /dev/myvg/mylv lvextend 擴展邏輯卷 lvreduce 縮減邏輯卷 lvscan 列出當前系統上全部的邏輯卷
第4步:格式化並掛載
一、 格式化邏輯卷 mylv
[root@Node1~]# mke2fs -t ext4 /dev/myvg/mylv mke2fs1.41.12 (17-May-2010) Filesystemlabel= OS type:Linux Blocksize=4096 (log=2) Fragmentsize=4096 (log=2) Stride=0blocks, Stripe width=0 blocks 131072inodes, 524288 blocks 26214blocks (5.00%) reserved for the super user Firstdata block=0 Maximumfilesystem blocks=536870912 16 blockgroups 32768blocks per group, 32768 fragments per group 8192inodes per group Superblockbackups stored on blocks: 32768, 98304, 163840, 229376, 294912 Writinginode tables: done Creatingjournal (16384 blocks): done Writingsuperblocks and filesystem accounting information: done Thisfilesystem will be automatically checked every 39 mounts or 180 days,whichever comes first. Use tune2fs -c or-i to override.
[root@Node1~]# echo $? 0
二、 掛載
Linux 的哲學思想之一是:一切皆文件。掛載設備要指定被掛載的設備,而設備在Linux系統中表現爲文件(它是咱們訪問設備的入口)。設備文件存放在 /dev 目錄上。先要找到設備文件而後纔可使用【mount】命令掛載之。
邏輯卷的設備名稱通常是:
[root@Node1 ~]# ll /dev/dm- dm-0 dm-1 dm-2 dm-6 dm-7
而表示邏輯卷的設備文件有兩個,因此掛載的時候使用那個設備名稱均可以的
[root@Node1 ~]# ll /dev/myvg/mylv lrwxrwxrwx. 1 root root 7 Jul 16 13:04 /dev/myvg/mylv ->../dm-2 [root@Node1 ~]# ll /dev/mapper/myvg-mylv lrwxrwxrwx. 1 root root 7 Jul 16 13:04 /dev/mapper/myvg-mylv-> ../dm-2
掛載邏輯卷 mylv
[root@Node1 ~]# mount -t ext4 /dev/myvg/mylv /mydata/ [root@Node1 ~]# mount | grep "mylv\>" /dev/mapper/myvg-mylv on /mydata type ext4 (rw)
或
[root@Node1 ~]# mount -t ext4 /dev/mapper/myvg-mylv /mydata/ [root@Node1 ~]# mount | grep "mylv\>" /dev/mapper/myvg-mylv on /mydata type ext4 (rw)
2、假如,邏輯卷 mylv 沒有多少剩餘空間了,怎麼擴展它的大小呢?
擴展條件:
卷組myvg必需有足夠大的剩餘空間提供給擴展使用 不然的話就要擴展卷組的大小了。 作邏輯卷擴展時,要先擴展物理邊界,再擴展邏輯邊界。
擴展邏輯卷的步驟以下圖如示:
一、 先查看卷組myvg的使用狀況?
root@Node1 ~]# vgdisplay myvg | grep "VG[[:space:]]Size" VG Size 2.00 GiB [root@Node1 ~]# lvdisplay /dev/myvg/mylv | grep"LV[[:space:]]Size" LV Size 2.00 GiB
二、 假如,咱們要把邏輯卷mylv擴展爲 4GB 大小。
從上面能夠看得出卷組myvg已經使用完了,咱們必需先擴展卷組myvg,再擴展邏輯卷 mylv.
先往該卷組中加入PV
[root@Node1 ~]# pvcreate /dev/sdb4 Physical volume "/dev/sdb4" successfully created
把剛建立的pv加入到卷組myvg中來:
未加入前,myvg的大小
[root@Node1 ~]# vgdisplay myvg | grep "VG[[:space:]]Size" VG Size 2.00 GiB
把/dev/sdb4加入卷組myvg
[root@Node1 ~]# vgextend myvg /dev/sdb4 Volume group"myvg" successfully extended
加入用戶的PV後,卷組的大小
[root@Node1 ~]# vgdisplay myvg | grep "VG[[:space:]]Size" VGSize 18.47 GiB
三、 卷組myvg已經有足夠的剩餘空間了。接下來進行邏輯卷的擴展
(1)、首先擴展邏輯卷 mylv的物理邊界
[root@Node1 ~]# lvextend -L 4G/dev/myvg/mylv Extending logical volume mylv to 4.00 GiB Logical volume mylv successfully resized [root@Node1 ~]# lvdisplay/dev/myvg/mylv | grep"LV[[:space:]]Size" LVSize 4.00 GiB
可是查看實際可用的磁盤空間仍是2GB.
[root@Node1 ~]# df -h | grep -A 1"mylv\>" /dev/mapper/myvg-mylv 2.0G 67M 1.9G 4% /mydata
(2)、物理邊界擴展成功之後才能夠擴展邏輯卷mylv的邏輯邊界
[root@Node1 ~]# resize2fs -p /dev/myvg/mylv resize2fs 1.41.12 (17-May-2010) Filesystem at /dev/myvg/mylv is mounted on/mydata; on-line resizing required old desc_blocks = 1, new_desc_blocks = 1 Performing an on-line resize of/dev/myvg/mylv to 1048576 (4k) blocks. The filesystem on /dev/myvg/mylv is now1048576 blocks long. [root@Node1 ~]# echo $? 0
擴展邏輯邊界之後,看看是否擴展成功
[root@Node1 ~]# df -h | grep -A 1"mylv\>" /dev/mapper/myvg-mylv 4.0G 771M 3.0G 21% /mydata
3、使用邏輯卷的「快照」功能進行在線備份
其實,建立快照的過程就是備份數據的過程。
假如,咱們建立快照耗時 10S, 而咱們的應用每秒鐘會增長100M的數據量。
那麼,咱們的快照卷大小至少須要:原卷的數據大小 + 10*100M
建立快照卷的條件:
快照卷必須要和原卷在同一個卷組當中。 卷組有足夠的剩餘空間使用 快照卷是隻讀的,爲了保證數據的一致性,在建立快照卷時指定是隻讀的 掛載快照卷以只讀方式掛載
建立快照卷的方法:
lvcreate -L 快照卷的大小 -s -p r -n 快照卷名稱 對哪一個邏輯捲進行快照 -p 指定權限。讀寫 -n 快照卷的名字 -s 表示建立的是快照卷
[root@Node1 ~]# mount -o remount,ro /dev/myvg/mylv /mydata/ \ lvcreate -L 4G -n back-snap -p r -s/dev/myvg/mylv \ mount -oremount,rw /dev/myvg/mylv /mydata Logical volume"back-snap" created
說明:
建立快照卷要先對原卷施加讀鎖,而後再建立快照卷。等到快照卷建立完成之後再對原卷施加讀寫鎖。建立快照卷的時間很短,對在線業務幾乎沒有影響。咱們稱這種備份數據的方法爲:溫備。
掛載並查看,快照卷的數據大小和原卷是否是同樣?
[root@Node1 ~]# mount -r/dev/mapper/myvg-back--snap /backup/ [root@Node1 ~]# df -h | grep -A 1"myvg" /dev/mapper/myvg-mylv 4.0G 1.8G 2.1G 47% /mydata /dev/mapper/myvg-back--snap 4.0G 1.8G 2.1G 47% /backup