LVM邏輯卷管理
應用場景:想象一下,你通過傳統的硬盤分區方式為某些用戶提供了一塊磁盤,隨著用戶數據的不斷增加,分區的容量告急。這時要增加容量,只能選擇用另一塊容量更大的硬盤或分區來替換,在這個過程中,你需要將數據先拷貝至新設備,拷貝完成之后,再用新設備替換容量告罄的設備。假設你很有耐心并且整個數據的拷貝過程是順順利利的,你也需要考慮靠背后文件的權限變化、替換過程中用戶業務終止造成的損失;即便你搞定了所有的問題,當用戶業務迎來快速增長,或者你業務增長估計不足,或者出于節省開支的考慮,你需要縮減用戶的硬盤空間,這時,你要怎么做呢?
還是來看看LVM吧。
LVM(Logical Volume Manager)是內核提供的一種邏輯卷管理器。適用于管理大型存儲設備,允許用戶動態調整文件系統的大小。LVM提供邏輯上的存儲設備,用戶不用再關心底層的物理硬盤。
一、邏輯卷的創建過程:
將一個或多個硬盤創建為PV(物理卷,Physical Volume),由一個或多個物理硬盤組合成VG(卷組,Volume Group),卷組是邏輯概念上的設備,其最小構成單位被稱為PE(物理長度,Physical Extended),再將指定個數的PE組合成LV(邏輯卷Logic Volume)
二、創建邏輯卷
實驗:給系統新增3塊硬盤,容量分別為20G、20G、10G。在此基礎上,創建一個名為newbie的VG,PE大小為8M,容量為35G,在VG的基礎上創建一個名為newbie_lv的LV,容量為25G。將其掛載至/newbie目錄,文件系統要求為xfs。
2.1 創建PV
要達到容量為35G需求,需要對sdb或sdc進行分區,創建一個大小為5G的分區。以sdb為例。
注意:創建完成后,要將分區的類型轉換為LVM,類型選項8e。之后通知內核硬盤所做的改動:
CentOS6:partx
CentOS5、7:partxprobe
通過lsblk可查看到分區已創建完成。
之后,開始創建PV
使用:pvcreate device
pvcreate /dev/sdb1
因為之前sdd被使用過,并且創建了文件系統,系統詢問是否擦掉硬盤上的文件系統,測試用,刪之。
創建成功之后??梢酝ㄟ^pvs、pvdisplay??聪到y上的PV信息。pvdisplay能查看詳細信息。
/dev/sda2為安裝系統時的配置。通過pvdisplay可以查看到每個pv的PE大小,總的PE數,剩余PE數,已使用PE數等信息。
~]#pvdisplay
"/dev/sdc" is a new physical volume of "20.00 GiB"
--- NEW Physical volume ---
PV Name /dev/sdc
VG Name #屬于哪個卷組,因為還沒有將其加入到卷組中,所以無信息
PV Size 20.00 GiB #PV大小
Allocatable NO
PE Size 0 #PE大小
Total PE 0 #總PE數
Free PE 0 #剩余PE數
Allocated PE 0 #已使用PE數
PV UUID ClySli-njRv-u4Ot-AuNL-6qte-jCt3-2bqXOj
2.2 PV創建完成之后,將PV加入VG
根據實驗要求,大小為35G,名稱為newbie,PE大小為8M
使用vgcreate命令
vgcreate vg_name [option] devices
常用option:
-s:指定PE的大小。默認為4M
創建成功之后,通過vgs、vgdisplay(查看詳細信息)查看VG的相關信息
vgdisplay [vgname]
2.3 在vg的基礎上創建名為newbie_lv的邏輯卷,大小為25G
使用lvcreate命令創建lv
lvcreate [options] vgname
-n lvname :指定lv名稱
-L size:指定lv的大小,單位為{M|G|T}
-l pe_count:指定創建的lv包含的PE數量(一般情況下直接指定大小。)
創建之后,查看,lvs、lvdisplay(詳細信息)
lv在創建完成之后,其目錄存放于/dev目錄下,以dm-開頭。為了方便使用,創建了2個軟連接指向lv;分別為/dev/mapper/vgname-lvname、/dev/vgname/lvname,如圖:
2.4 使用創建完成的lv
lv創建完成之后,就可以格式化和掛載使用了。此過程不再贅述
三、邏輯卷的擴容和縮減
3.1 邏輯卷擴容
LV的大小不能超過VG的大小,LV可擴展的大小即為VG的剩余大小。
VG的大小由PV決定,若VG大小不足,增加新的PV至VG中即可。
在上文中,我們增加了一個大小為25G的LV,已知VG的大小為35G,怎樣將LV的大小擴容至45G。
在前文中,增加的硬盤容量共計為50G,我們只使用了35G,還有15G可用。將剩余的15G劃分為一個分區,創建為PV,加入到VG中。
PV創建之后,使用vgextend來將PV加入VG
用法:vgextend vgname pvname
VG容量擴展之后,就可以將LV的容量擴展至45G了。
使用lvcreate來擴展
用法:
lvcreate lvname [option]
常用option;
-L m{M|G|T}:直接指定LV的大小為m {M|G|T}
-L + m{M|G|T}:在原有大小之上,再增加m{M|G|T}
注:請注意兩者之間的區別,并且,新增后的LV大小不能小于原有的大小
這時,我們去查看/newbie是否相應的增加。注意在擴容的過程中沒有umount該LV
發現/newbie的容量并沒有增加,這是因為邏輯卷邊界擴展之后,對應的文件系統邊界并沒有相應的擴展。需要注意的是,擴展ext系列的文件系統與xfs文件系統的方式并不一致。
擴展ext系列文件系統的邊界:
resize2fs /dev/vg_name/lv_name
擴展xfs文件系統的邊界:
擴展文件系統的邊界之后,整個邏輯卷的擴展才算成功。
3.2 縮減LV
在生成環境中,縮減LV是一個比較危險的操作,為了避免數據被破壞,在操作前應將LV上的數據備份。建議慎用此操作。
將newbie_lv的大小縮減為40G。
邏輯卷的縮減順序:
1)、先卸載,umount /dev/vg_name-lv_name
2)、強制檢測修復文件系統:
ext系列:e2fsck -f /dev/vg_name-lv_name
xfs系列:xfs_repair /dev/vg_name-lv_name
3)、縮減文件系統(邏輯邊界):resize2fs /dev/vg_name/lv_name m[MGT]
4)、縮減lvm: lvreduce -L [-]#[MGT] /dev/vg_name/lv_name
5)、掛載使用:mount
google了下,發現xfs文件系統只能擴容,不能縮減,沒辦法,只好把LV的文件系統調整為ext4了。我擦!當然,有興趣的同志可以試試xfsdump和xfsrestore命令,前者用來備份,后者用來還原。
1)先卸載(注意:若將LV同時掛載到多個目錄上,應全部卸載之后再操作),再修改文件系統類型(ext文件系統忽略)
~]#mkfs.ext4 /dev/newbie/newbie_lv
2)強制檢測文件系統;縮減文件系統邏輯邊界,縮減LV
注意:在縮減時,是先縮減文件系統的邏輯邊界,再縮減LV
3)掛載使用。因為文件系統改變了,所以LV的UUID也發生了變化,在掛載時注意修改,
RAID管理
RAID:Redundent Arrays of Independent Disks 獨立磁盤冗余陣列,其 思想是:將多塊獨立的磁盤按不同的方式組合為一個邏輯磁盤,從而提高存儲容量,提升存儲性能或提供數據備份功能
注意:RAID只是為磁盤自身提供冗余,避免出現因為磁盤損壞導致數據丟失的現象,并不能替代數據備份。
RAID實現的方式:
硬件方式:生產環境中多采用此方式
外接式磁盤陣列,通過擴展卡提供適配能力
內接式磁盤陣列,主板集成RAID控制器
軟件方式:
Software RAID
一、RAID級別:
不同的級別表示多塊磁盤組織在一起的工作方式不同。級別之間并無高低、上下之分。
1、RAID-0:0,不含校驗和冗余的條帶卷(strip)
數據被分割為多個部分,分別寫入每塊硬盤,所以能極大地提升存儲性能和存儲空間,磁盤利用率為100%,但無容錯能力,一旦某塊磁盤被損壞,則數據將被破壞,數據安全得不到保障。最少需要2塊磁盤。
例:下圖中,數據被同步分別存放于A、B、C三塊磁盤中。若每塊磁盤的容量為100G,則可利用的總容量為300G。因為沒有備份和校驗,若其中一塊磁盤損壞,則會導致文件無法讀取。
2、RAID-1:不含校驗的鏡像卷(mirror)
使用磁盤鏡像技術,在一個磁盤上存放數據的同時也在另一個磁盤存放相同的數據。寫性能下降,讀取性能提升。具有冗余能力,數據安全得到保障,但最少需要2塊磁盤,磁盤利用率低,僅為50%
RAID2,3,4(不常用,不做介紹)
3、RAID-5:
數據以block為單位同步式分別寫入不同的磁盤上,并對數據作奇偶校驗,并將校驗碼存入磁盤,校驗碼交互存放在各個磁盤中,當某塊磁盤中的數據發送損壞時,可以通過其他2塊磁盤來計算出損壞盤的數據,從而保證了數據的安全,數據的讀寫性能也得到提升。校驗碼占用一個磁盤空間大小。可用空間:(n-1)/n。具有容錯能力:冗余1塊。最少需要3塊磁盤。還可以額外提供一塊磁盤用作spare,并不真正加入陣列中,但當陣列中的某塊磁盤損壞時,能自動替換損壞的磁盤。
4、RAID-6:
類似于RAID-5,但多用一塊磁盤做校驗。
磁盤利用率為(n-2)/n,
冗余2塊,
最少磁盤數為4
二、RAID組合模式:
1、RAID-10:RAID1和RAID0的組合,先做RAID1(優于RAID01)。繼承了RAID0的高效和RAID1的安全。磁盤利用率為50%,最少4塊磁盤。
先將磁盤A和B做出一個RAID1,再將磁盤C和D做出一個RAID1,之后再將兩個RAID1做成RAID0。當數據寫入時,首先會議條帶的方式分別寫入由兩個RAID1組合成的RAID0中,隨后,在RAID1中又會以鏡像的方式,寫入數據時,同時備份該數據并寫入到陣列中的另一塊磁盤上。
2、RAID-01:RAID0和RAID1的組合,先做RAID0
3、RAID-50
最少6塊磁盤
三、軟RAID的實現方式:
注:在生產環境中盡量不要使用這種方式。應該采用硬件的方式來實現RAID功能。
使用mdadm命令來實現軟raid
madam:模式化的工具
mdadm [mode] <RAIDdevice> [OPTIONS] <component-devices>
支持的RAID級別:RAID0、RAID1、RAID4、RAID5、RAID6
模式:
創建: -C
裝配: -A
監控: -F
管理: -f,-r,-a
<RAIDdevice>:/dev/md#
-C:創建模式
-n #:使用#個塊設備來創建此RAID
-l #:指明要創建的RAID的級別
-a {yes|no}:自動創建目標RAID設備的設備文件
-c CHUNK_SIZE:指明塊大小
-x #:指明空閑盤的個數
創建軟RAID的過程:
1)、創建磁盤分區。fdisk,并將分區格式修改為riad
2)、創建RAID5
mdadm -C /dev/md0 -a yes -n 3 -x 1 -l 5 /dev/sdb{5,6,7,8}
3)、給RAID5創建文件系統
4)、掛載該RAID。在/etc/fstab中掛載最好使用UUID來掛載
查看當前系統的磁盤陣列信息:cat /proc/mdstat
mdadm -D /dev/md0 查看指定磁盤陣列的詳細信息
mdadm /dev/md0 -f /dev/sdb5 將屬于某 磁盤陣列中的某塊磁盤指定為損壞
mdadm /dev/md0 -r /dev/sdb5 將陣列中損壞的磁盤移除
mdadm /dev/md0 -a /dev/sdb5 為陣列增加新的磁盤
mdadm -S /dev/md0 停止md設備
四、實戰演練:
例1:創建一個可用空間為1G的RAID1設備,文件系統為ext4,有一個空閑盤,開機可自動掛載至/backup目錄
步驟:
(1)新增一塊1G的硬盤
(2)將其分為2個分區,大小分別為500M
(3)創建raid1。
mdadm –C /dev/md100 –a yes –n2 –l 1 /dev/sdb{1,2}
(4)為raid1創建文件系統
mkfs.ext4 /dev/md100
(5)設置自動掛載
mkdir /backup
cat /etc/fstab
/dev/md100 /backup ext4 default 0 0
mount -a
例2:創建由三塊硬盤組成的可用空間為2G的RAID5設備,要求其chunk大小為256k,文件系統為ext4,開機可自動掛載至/mydata目錄
步驟:
(1)增加三塊硬盤,容量分別為500M、500M、1G
(2)創建RAID5,指定chunk大小為256k
mdadm –C /dev/md200 –c 256 –n 3 –l 5 /dev/sd{c,d,e}
(3)創建文件系統
mkfs.ext4 /dev/md100
(4)設置自動掛載
mkdir /mydata
cat /etc/fstab
/dev/md200 /mydata ext4 default 0 0
mount -a
五、磁盤配額
綜述:
配額在內核中執行,以文件系統為單位啟用。對不同組或者用戶的策略不同,可靈活應用。根據塊或者節點進行限制
如何實現磁盤配額限制:
配額限制只能對磁盤進行操作
要對某個目錄進行限額,需要將其掛載至獨立的磁盤上。
步驟:
1、掛載時啟用配額選項
vim /etc/fstab;在掛載選項增加usrquota,grpquota
2、創建配額數據庫
quotacheck -cug /home
-c:創建
-u:usrquota
-g:grpquota
注:若提示權限問題,關閉selinux,setenforce 0
3、啟用數據庫
quotaon /home
quotaon -p /home:查看數據庫是否啟用
4、配置配額:三種方式
1)、edquota hadoop
文件格式:
blocks soft hard inodes soft hard
已使用的大小 警告大小 限定大小 已創建文件數 警告文件數 限定文件數
2)、edquota -p hadoop gentoo:參考hadoop用戶的配額設置gentoo用戶的配額限制
3)、setquota hadoop 100000 150000 0 0 /home
5、測試
quota hadoop
repoquota /home
dd往目錄寫文件
注:如何判斷文件是否屬于該用戶:判斷文件的屬主,而不是文件的存放位置。
例:以給/home下每用戶限額1G為例。
1)、給系統新增一塊10G的硬盤。將硬盤掛載至/mnt/home。將/home的數據拷貝至/mnt/home
2)、卸載/mnt/home,將新增的磁盤設置自動掛載到/home目錄下,注意在掛載是,掛載特性應增加上usrquota,grpquota兩個選項。
3)、quotacheck -cug /home/;若報錯,執行:setenforce 0
4)、quotaon -p /home/
5)、edquota hadoop,為hadoop用戶配置限額
6)、edquota -p hadoop gentoo,參考hadoop用戶配置gentoo用戶的配額
原創文章,作者:M20-1鐘明波,如若轉載,請注明出處:http://www.www58058.com/42311