Linux的LVM詳解
LVM組成;
LVM:logic volume manager .LVM即邏輯卷管理,現在使用版本為第二版,即version2
邏輯卷:pv,physical volume,即計算機上的磁盤設備,例如我的計算機上的/dev/sda3,/dev/sda5.
卷組:vg,volume group。一般由多個pv組成。
邏輯卷:lv,logical volume是在vg上是劃分好可以直接使用分區
pe:physical extend,是在pv加入vg后vg把所有pv劃分成的很多的小塊,是LVM最小的分區單位,我的計算機上pe大小為4M,這個大小可以在創建vg時根據需要制定。
LVM原理
vg可以由多個pv在組成,如果隨著時間的推移vg不夠用了,就可增加一些pv到vg里面。如果vg太大,感覺用不完浪費掉了,就可以減少一些pv,并保證里面數據不會受到影響。
Vg和lv:vg可以近似看成計算機上的一個完整的硬盤,把vg劃分成多個lv的過程類似于把計算機的一個硬盤劃分成多個分區的過程,同樣lv也像硬盤分區那樣格式化后才能使用。
如果非要拿硬盤和LVM作比較的話,拿我的計算機來說,vg相當于硬盤/dev/sda,lv相當于/dev/sda1,/dev/sda2,/dev/sda3等,lv一般也要格式化后才能使用。
Lv:如果lv里的數據增多,lv的空間不夠用了,vg就可以增加一些空間給lv,如果空間太多就給lv縮減空間。前面提到的pe,就是lv的基本組成單元,假如一個pe大小為4M,如果要創建一個4G的lv,vg就會分1000個pe給lv。如果后來lv的空間最多使用量不足2G,為了節省磁盤,vg就從lv取下500個pe,這樣就可以節省2G空間了,并且不會損壞原有數據。
優點:調整分區十分快捷方便,隨意增減分區大小而對數據幾乎不產生影響.
缺點:如果碰上百年不遇的霉運,數據損壞,想要找回數據卻極為困難.
dm:device mapper將底層塊設備組織成一個邏輯設備模塊
像擴展分區,不能直接格式化使用,必須化分成lv才能格式化使用pe默認4M,一個lv是一個文件系統
Lv設備路徑:
Lv設備路徑有兩種表達方式
/dev/mapper/VG_NAME-LV__NAME和 /dev/VG_ANME/LV_NAME
以我的電腦舉例就分別是:/dev/mapper/testvg-testlv和/dev/testvg/testlv
testvg是我的電腦的一個vg名字,testlv是testvg上的一個lv,也是一個獨立文件系統。
命令詳解:
pv: physicalvolume物理卷
查看pv有哪些可用命令:先敲出字母pv,再連敲兩下TAB
pvs:查看pv簡要信息
pvscan:scan all disks for physical volumes瀏覽pv簡要信息和使用情況
pvdisplay:查看所有pv的詳細信息。后可加設備名查看某個pv的詳細信息
pvdisplay /dev/sda3
pvcreate:創建新的pv。可一次創建一個或多個
pvcreate /dev/sda{5,6,7}—–注意,創建pv前事先用fdisk用t命令把分區格式調為8e
pvmove把pv上的pe數據移動到其他pv上去
pvmove /dev/sda5,如果有數據就自動找pv移動了,如果數據很多會移動很長時間
pvremove:刪除物理卷
pvremove /dev/sda3
pvck :check physical volume metadata
pvck /dev/sda5
vg:volume group 卷組 vg按TAB查看所有vg相關命令
vgs 和vgscan:查看vg簡要信息
vgdisplay:查看vg詳所有細信息,后跟設備可查看某個vg信息
vgcreate:創建vg,-s指定PE大小
[root@yph6 ~]# vgcreate testvg -s 16M /dev/sda{5,6,8}
vgextend:擴展vg,給vg增加pv。 vgextend myvg /dev/sda5
vgreduce:縮減vg,從vg去掉某個pv。
例:myvg /dev/sda5
vgreduce –removemissing VG_NAME 移除未識別的pv
-a 移除vg內所有pv
vgremove:刪除vg
lv: logical volume 邏輯卷
lv敲TAB查看所有相關命令
lvs和lvscan:查看所有lv的簡要信息
lvdisplay:查看所有或某個lv的詳細信息
lvdisplay /dev/myvg/mylv
lvdisplay /dev/mapper/myvg-mylv
lvcreate :創建lv
-L 指明空間大小
-n指定lv的名字
-l :指定pe數量
例:lvcreate -L 2G -n mylv myvg ——在myvg上創建名為mylv的lv
ls /dev/mapper ————查看lv是否創建成功
mke2fs -t ext4 -b 1024 -L mylv /dev/myvg/mylv —–格式化lv
lvremove:刪除lv
擴展邏輯卷:注意,要先擴展物理邊界再擴展邏輯邊界
lvextend -L 5G /dev/myvg/mylv
擴展lv物理邊界為5G(給lv增加pe數量),+3G表示在原來基礎上增加3G
df –lh ————查看所有磁盤設備大小,可查看lv是否變大
resize2fs /dev/myvg/mylv 擴展邏輯邊界到物理邊界,不需要卸載
df -lh
縮減邏輯卷lvreduce 注意,要先縮減邏輯邊界再縮減物理邊界
umount /dev/vg-name/lv-name ——先卸載lv
e2fsck -f /dev/vgname/lvname ——-強制檢測lv
resize2fs /dev/vg/lv -3G —————把lv的邏輯邊界在原來的基礎上減少3G
lvreduce -L -3G /dev/vg/lv ————-把lv的物理邊界減少3G,即減去一些pe塊
mount ——–重新掛載
df –lh ———–查看lv大小是否變化
snapshot:快照卷
原理:
正常備份數據的時候數據不能發生變化,否則備份出來的數據的是不完整的。但對于1T的數據做備份需要半個小時以上,這期間數據很難保持不變,為了解決這個問題,快照卷應運而生。
快照是在一瞬間記錄下要備份的內容的元數據,然后監控這些元數據,如果元數據即將發生變化,就把將要變化的內容備份到快照里面,這樣,快照里就存儲著變化前的數據的備份。
快照和原文件應該屬于同一個卷組vg,通過快照訪問未變化的數據時,就像通過一個硬鏈接直接進入原文件訪問。所以創建快照卷時不用格式化。
lvcreate -s -L 512M -n mysnap -p r /dev/myvg/mylv ———-創建快照卷
-s指明創建的是快照卷,-L指明快照卷大小,-n指明快照卷的名字,-p權限 最后面指定是誰的快照
mount /dev/myvg/mylv-snap /mnt ——掛載快照卷
cp –a /mnt/* ~/ ————-然后把快照卷里的東西備份出來,就可卸磨殺豬了
umount /mnt
lvremove /dev/myvg/mylv-snap刪除
練習:
1、創建一個至少有兩個pv組成的大小為20G的名為testvg,要求PE大小為16M
然后在卷組中創建大小為5G的邏輯卷testlv掛在至/users下
[root@yph6 ~]# pvcreate /dev/sda{5,6,8}
[root@yph6 ~]# vgcreate testvg -s 16M /dev/sda{5,6,8}
[root@yph6 ~]# lvcreate -L 2G -n testlv testvg ——–創建名為testlv的lv
[root@yph6 ~]# mke2fs -t ext4 -b 2048 -L testlv /dev/testvg/testlv —卷標為testlv
[root@yph6 ~]# mount /dev/testvg/testlv /users
[root@yph6 ~]# cd /users
[root@yph6 users]# ll
total 16
drwx—— 2 root root 16384 Dec 18 23:22 lost+found ——出現lost+found說明掛載成功
2、新建用戶archlinux,要求家目錄為/users/archlinux,然后用archlinux用戶,復制/etc/pam.d至自己家目錄
[root@yph6 users]# useradd -d /users/archlinux archlinux -d制定家目錄
[root@yph6 users]# su – archlinux
[archlinux@yph6 ~]$ cp -R /etc/pam.d ~/
[archlinux@yph6 ~]$ ll
total 2
drwxr-xr-x 2 archlinux archlinux 2048 Dec 18 23:28 pam.d
[archlinux@yph6 ~]$ pwd
/users/archlinux
3、擴展testlv至7G,要求archlinux用戶文件不能丟失
[root@yph6 ~]# pvcreate /dev/sda9
Physical volume "/dev/sda9" successfully created
[root@yph6 ~]# vgextend testvg /dev/sda9
Volume group "testvg" successfully extended
lvextend -L 7G /dev/testvg/testlv
Size of logical volume testvg/testlv changed from 2.00 GiB (128 extents) to 7.00 GiB (448 extents).
Logical volume testlv successfully resized
[root@yph6 ~]# resize2fs /dev/testvg/testlv ——–lv的邏輯邊界與物理邊界一樣大
4、收縮至3G,文件不能丟失
[root@yph6 ~]# umount /dev/testvg/testlv
umount: /users: device is busy.
(In some cases useful info about processes that use
the device is found by lsof(8) or fuser(1))
[root@yph6 ~]# fuser -km /dev/testvg/testlv ——把占用的程序殺死
/dev/testvg/testlv: 4081c 5441c 5442c
[root@yph6 ~]# umount /dev/testvg/testlv
[root@yph6 ~]# e2fsck -f /dev/testvg/testlv —-強制檢測
[root@yph6 ~]# resize2fs /dev/testvg/testlv 3G ———-收縮邏輯邊界至3G
[root@yph6 ~]# lvreduce -L 3G /dev/testvg/testlv ———–收縮物理邊界至3G
[root@yph6 ~]# mount /dev/testvg/testlv /users
[root@yph6 ~]# su – archlinux
[archlinux@yph6 ~]$ ll
total 2
drwxr-xr-x 2 archlinux archlinux 2048 Dec 18 23:28 pam.d ——原來數據還在
5、對testlv創建快照,基于快照備份數據,驗證快照功能
[root@yph6 mnt]# umount /mnt
umount: /mnt: device is busy.
[root@yph6 mnt]# fuser -km /mnt ——–殺死占用的進程
[root@yph6 ~]# umount /mnt
[root@yph6 ~]# lvcreate -s -L 100M -n snaplv -p r /dev/testvg/testlv —-對testlv做個快照卷
Rounding up size to full physical extent 112.00 MiB
Logical volume "snaplv" created.
~]# mount /dev/testvg/snaplv /mnt ——-快照卷不用格式化,直接掛載
mount: block device /dev/mapper/testvg-snaplv is write-protected, mounting read-only
[root@yph6 ~]# ll /mnt
total 13
drwx—— 5 archlinux archlinux 1024 Dec 19 11:30 archlinux -快照不負眾望,備份了數據
drwx—— 2 root root 12288 Dec 19 11:10 lost+found
[archlinux@yph6 ~]$ touch text ——archlinux在家目錄新建個文件
[archlinux@yph6 ~]$ ll
total 2
drwxr-xr-x 2 archlinux archlinux 2048 Dec 19 11:28 pam.d
-rw-rw-r– 1 archlinux archlinux 0 Dec 19 11:46 text
[archlinux@yph6 ~]$ cd /mnt/archlinux —–進入快照卷
[archlinux@yph6 archlinux]$ ll —-快照里面沒有快照創建后新增文件
total 2
drwxr-xr-x 2 archlinux archlinux 2048 Dec 19 11:28 pam.d
[archlinux@yph6 archlinux]$ cp -aR /mnt/archlinux /tmp —-把快照里的數據備份出來
[archlinux@yph6 archlinux]$ cd /tmp/archlinux
[archlinux@yph6 archlinux]$ ll
total 4
drwxr-xr-x 2 archlinux archlinux 4096 Dec 19 11:28 pam.d —-看來已經備份成功
[root@yph6 ~]# umount /mnt
[root@yph6 ~]# lvremove /dev/testvg/snaplv —–快照卷已經發揮了自己的人生價值,
按社會慣例我們該卸磨殺豬了。
Do you really want to remove active logical volume snaplv? [y/n]: y
Logical volume "snaplv" successfully removed
附加一個小命令
dd命令:
if,input file ;of,outputfile
dd if=/etc/fstab of=/tmp/fstab.2 bs=1 count=100
bs,block size 字節; count,復制次數
dd命令比較底層,比cp效率更高
用于磁盤拷貝:
dd if=/dev/sda of=/dev/sdb
備份MBR:
dd if=/dev/sda of=/tmp/mbr.bar bs=512 count=1
破壞MBR中的bootloader:
dd if=/dev/zero of=/dev/sda bs=256 count=1
閑著無聊的話可以測計算機的性能,讓它不停的復制,看能堅持多久,跑壞了別找我
dd if=/dev/zero of=/dev/null
/dev/zero:無限吐零的設備
/dev/null:吞任何數據不吐骨頭的主
這樣可以,以子之矛,陷子之盾,看看效果
原創文章,作者:flivfox,如若轉載,請注明出處:http://www.www58058.com/10277