系統:Centos7,磁盤只有一塊
1、環境描述:因一開始爲做好規劃導致磁盤分區不夠用,現需要進行擴容
數據盤/dev/vdb1 (非LVM卷)中存在數據並且隨生產需要的增長已經存不下了,需要進行擴容操作
① 這裏模擬需求,一些大文件,再創建一些小文件,添加一些數據
dd if=/dev/zero of=mysqllog.txt bs=1024M count=14
touch mysql-log{0001..5888}
echo qwert123456 > mysql-log3
② 使用hash算法得出文件的hash值,等擴容完成後進行比對
③ 將此目錄下的文件打一個包再hash
tar zcf mysql-bak.tar.gz /mysql/*
④ 把值輸出到一個文件中報存
2、因爲沒有多餘的數據盤可以拷貝數據,所以只能在現有磁盤/dev/vdb上,想辦法,並實現把原有空間15G擴容並保證數據的完好無損
思路: 可以先把vdb磁盤的剩餘空間35G分區並做成LVM邏輯卷,然後把原有數據從vdb1的分區中拷貝到新創建的邏輯卷中,最後再把vdb1分區也做成pv物理卷加入到LVM中,這樣既實現了擴容又保證了原有數據的安全性
3、把剩餘容量分區並做成LVM
① 硬盤分區
fdisk /dev/vdb
同步分區表
partprobe
② 製作pv,vg,lv
# pvcreate /dev/vdb5 創建物理卷
Physical volume "/dev/vdb5" successfully created.
# pvs 查看pv信息
PV VG Fmt Attr PSize PFree
/dev/vdb5 lvm2 --- <35.00g <35.00g
# vgcreate vg1 /dev/vdb5 創建卷組vg1
Volume group "vg1" successfully created
# vgs 查看vg信息
VG #PV #LV #SN Attr VSize VFree
vg1 1 1 0 wz--n- <35.00g 0
# lvcreate -n lv1 -l 100%FREE vg1 把vg1剩餘容量做成邏輯卷lv1
Logical volume "lv1" created.
# lvs 查看lv信息
lv1 vg1 -wi-a----- <35.00g
③ 給邏輯卷製作文件系統xfs
mkfs.xfs /dev/vg1/lv1
# blkid /dev/vg1/lv1
/dev/vg1/lv1: UUID="46e49f78-1073-463f-a55c-39ee28ba711e" TYPE="xfs"
④ 創建掛載點並掛載
4、拷貝數據到邏輯卷的掛載點中
cp -r /mysql/* /newdisk/
爲了安全起見,要使用hash算法驗證一下前後文件的hash值是否一樣,一樣的話就可以把原有的分區vdb1格式化並做成pv卷再加入到LVM中。
比對結果相同,確認數據無損後再執行格式化
md5sum /newdisk/mysql-log0001 /newdisk/mysqllog.txt /newdisk/mysql-bak.tar.gz > /hash2.txt
5、格式化/dev/vdb1分區並做成pv合併到LVM卷中
pvcreate /dev/vdb1
vgextend vg1 /dev/vdb1
lvextend -L +14G /dev/vg1/lv1
查看掛載容量,新擴容的14G容量並沒有生效
因爲剛剛添加的容量還沒有文件系統,使用以下命令同步文件系統即可
xfs_growfs + 邏輯卷 # xfs文件系統使用這個
resize2fs + 邏輯卷 # ext4的文件系統使用resize2fs
6、此時就實現了分區的擴容並保證了數據的不丟失
如果還有好的方法歡迎大神們評論指教