linux之LVM詳解

LinuxLVM詳解

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名字,testlvtestvg上的一個lv,也是一個獨立文件系統。

命令詳解

pv:physical volume邏輯卷

查看pv有哪些可用命令:先敲出字母pv,再連敲兩下TAB

pvs:查看pv簡要信息

pvscanscan all disks forphysical volumes瀏覽pv簡要信息和使用情況

pvdisplay:查看所有pv的詳細信息。後可加設備名查看某個pv的詳細信息

pvdisplay  /dev/sda3

pvcreate:創建新的pv。可一次創建一個或多個

pvcreate  /dev/sda{5,6,7}-----注意,創建pv前事先用fdiskt命令把分區格式調爲8e

pvmove把pv上的pe數據移動到其他pv上去

           pvmove /dev/sda5,如果有數據就自動找pv移動了,如果數據很多會移動很長時間

pvremove:刪除物理卷

           pvremove /dev/sda3

pvck check physical volume metadata

           pvck /dev/sda5

 

 

vgvolume group卷組   vgTAB查看所有vg相關命令

vgsvgscan查看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 邏輯卷

lvTAB查看所有相關命令

lvslvscan:查看所有lv的簡要信息

lvdisplay:查看所有或某個lv的詳細信息

         lvdisplay/dev/myvg/mylv

         lvdisplay/dev/mapper/myvg-mylv    

lvcreate:創建lv

         -L指明空間大小

         -n指定lv的名字

         -l:指定pe數量

 

例:lvcreate -L 2G -nmylv 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 -pr  /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 -ntestlv 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 1823: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 2048Dec 18 23:28 pam.d
[archlinux@yph6 ~]$ pwd
/users/archlinux


3擴展testlv7G要求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) orfuser(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 2048Dec 18 23:28 pam.d  ------原來數據還在


5testlv創建快照基於快照備份數據驗證快照功能

[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 2048Dec 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 2048Dec 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 4096Dec 19 11:28 pam.d ----看來已經備份成功

[root@yph6 ~]# umount /mnt
[root@yph6 ~]# lvremove/dev/testvg/snaplv -----快照卷已經發揮了自己的人生價值,
按社會慣例我們該卸磨殺豬了。
Do you really want to remove activelogical volume snaplv? [y/n]: y
 Logical volume "snaplv" successfully removed



 

 

附加一個小命令 

dd命令

ifinputfile ofoutputfile

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:吞任何數據不吐骨頭的主

這樣可以,以子之矛,陷子之盾,看看效果

 


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章