Linux下使用LVM(Logical Volume Manager)(二)

ForTechnology發表於2013-03-26

4.2 Sun disk labels
僅在SUN的SPARC系統中有此問題。
5 建立LVM用例
在本節中,將在3塊SCSI硬碟:/dev/sda,/dev/sdb,/dev/sdc上按步建立LVM。
5.1 準備分割槽
首先要做的是初始化硬碟,建立PV,這將會刪除硬碟上的原有資料。在此,用整個硬碟為PV:
# pvcreate /dev/sda
# pvcreate /dev/sdb
# pvcreate /dev/sdc
pvcreate在每個硬碟的起始端建立卷組描述區( volume group descriptor area, VGDA)。
5.2 建立卷組
利用上面三個PV建立卷組:
# vgcreate test_vg /dev/sda /dev/sdb /dev/sdc/
然後可用vgdisplay 檢視/驗證卷組的資訊:
# vgdisplay
--- Volume Group ---
VG Name               test_vg
VG Access             read/write
VG Status             available/resizable
VG #                  1
MAX LV                256
Cur LV                0
Open LV               0
MAX LV Size           255.99 GB
Max PV                256
Cur PV                3
Act PV                3
VG Size               1.45 GB
PE Size               4 MB
Total PE              372
Alloc PE / Size       0 / 0
Free  PE / Size       372/ 1.45 GB
VG UUID               nP2PY5-5TOS-hLx0-FDu0-2a6N-f37x-0BME0Y
其中最重要的前三條要正確,且VS size是以上三個硬碟容量之和。
5.3  建立LV
在確定卷組test_vg正確後,就可在其上建立LV。LV的大小可在VG大小範圍內任意選擇,如同在硬碟上分割槽。
5.3.1  建立線性方式LV
在test_vg上建立一個大小為1GB的線性方式LV:
# lvcreate -L1G -ntest_lv test_vg
lvcreate -- doing automatic backup of "test_vg"
lvcreate -- logical volume "/dev/test_vg/test_lv" successfully created
5.3.2  建立交錯方式LV
在test_vg上建立一個大小為1GB的交錯方式LV,交錯引數為4KB:
# lvcreate -i3 -I4 -L1G -ntest_lv test_vg
lvcreate -- rounding 1048576 KB to stripe boundary size 1056768 KB / 258 PE
lvcreate -- doing automatic backup of "test_vg"
lvcreate -- logical volume "/dev/test_vg/test_lv" successfully created
注意:如果使用 -i2引數,則LV將僅使用test_vg中的兩塊硬碟。
5.4 建立檔案系統
在LV test_lv建立後,就可在其上建立檔案系統,
如,ext2/ext3系統:
# mke2fs /dev/test_vg/test_lv
如,reiserfs:
# mkreiserfs /dev/test_vg/test_lv
5.5 測試檔案系統
安裝LV:
# mount /dev/test_vg/test_lv /mnt
# df
Filesystem           1k-blocks      Used Available Use% Mounted on
/dev/hda1              1311552    628824    616104  51% /
/dev/test_vg/test_lv   1040132        20    987276   0% /mnt
則可以通過/mnt訪問LV。
6 使用snapshot 做備份
例 如我們要對卷組"test_vg"每晚進行資料庫備份,就要採用snapshot型別的卷組。這種卷組是其它卷組的一個只讀拷貝,它含有在建立 snapshot卷組時原卷組的所有資料,這意味你可以備份這個卷組而不用擔心在備份過程中資料會改變,也不需要暫時關閉資料庫卷以備份。

目標: 在安裝後建立邏輯卷和陣列的技巧
步驟一: 使用LVM建立邏輯卷
1. 使用fdisk在未分割槽空間建立四個新分割槽,型別為Linux LVM (0x8e), 尺寸一樣,為了加快速度,不要大於1G. 退出時使用w儲存更改.不要重啟動.
2. 編輯/etc/modules.conf中包含以下行(RHEL 可以不用做以下修改):
alias block-major-58 lvm-mod
alias char-major-109 lvm-mod
使用當前核心建立initrd
mkinintrd –f –v /boot/initrd-$(uname –r).img $(uname –r)
這個命令將使系統在啟動時載入lvm-mod模組,啟用LVM
3. 重啟動系統
4. 用root登入, 執行vgscan初始化LVM配置檔案
5. 使用pvcreate將LVM分割槽初始化為物理卷.假設分割槽為
/dev/hda9
/dev/hda10
/dev/hda11
/dev/hda12
命令為: pvcreate /dev/hda9 /dev/hda10 /dev/hda11 /dev/hda12
可以使用pddisplay檢視分割槽資訊
6. 然後建立卷組test0. 使用預設4MB的擴充套件尺寸,只包含一個物理卷
vgcreate test0 /dev/hda9
可以使用pddisplay檢視資訊
7. 建立一個小邏輯卷,不要佔用所有空間. 使用vgdisplay的VG size和 PE/size資訊,比如建立一個40M的邏輯卷:
lvcreate –L 40M –n data test0
可以使用 lvdisplay /dev/test0/data 確認命令執行了.
8. 在邏輯捲上建立ext3檔案系統: mke2fs –j /dev/test0/data
9. 建立/data目錄. mount /dev/test0/data /data
10. 複製檔案到/data. 可以建立一個大檔案: dd if=/dev/zero f=/data/bigfile bs=1024 count=20000
使用df檢查/data的磁碟使用情況和剩餘空間. 確認能夠正常使用.可以編輯/etc/fstab來自動載入/data.重啟動測試
步驟二: 使用邏輯卷
1. 首先, 解除安裝/data. 使用e2fsadm擴充套件分割槽尺寸: e2fsadm –L+50M /dev/test0/data
2. 重載入/dev/test0/data到/data, 確認檔案. 執行df檢查/data的磁碟使用情況和剩餘空間.
3. 使用剩餘擴充套件建立第二個邏輯分割槽. 執行vgdisplay檢視PE /size,格式類似於166/644MB,這表示卷組包含166個擴充套件,664MB剩餘空間. 建立一個佔用166個擴充套件邏輯卷/dev/test0/scratch, 命令為:
lvcreate –l 166 –n scratch test0
4. 格式化新卷: mke2fs –j /dev/test0/scratch
5. 把未使用的物理卷加入卷組 vgextend test0 /dev/hda10
6. 如果再次執行vgdisplay, 可以看到增加的擴充套件.用20MB的擴充套件定義新邏輯卷.
e2fsadm –L+20M /dev/test0/scratch
使用lvdisplay和vgdisplay確認成功
7. 接下來用/data的只讀快照建立新的邏輯卷. 首先用只讀選項載入/data
mount –o remount,ro /data
8. 快照不需要和父捲尺寸一致,我們假設不需要儲存太多資料,可以設定為5M
lvcreate –s –L 5M –n snap /dev/test0/data
9. 現在重載入/data為讀寫狀態
mount –o remount,rw /data
10. 建立新載入點/snap, 使用 mount /dev/test0/snap /snap 比較/data和/snap,兩者內容應該一致
11. 執行命令 for I in$(seq 1 10); do echo $1 > /data/$1; done 將在/data下建立十個檔案,名稱從1到10. 這個命令不影響/snap, 可以用lvdisplay /dev/test0/snap檢查
12. 當快照邏輯卷不能容納改變的塊時,將被LVM自動刪除,即使當前在載入狀態.(避免這一情況的方法是尺寸和父卷一致,或者及時用lvextend擴充套件尺寸)可以通過以下方式看到這一現象:
rm /data/bigfile
for i in $(seq 1 10000); do echo $1 > /data/$1; done
13. 在/var/log/messages裡可以看到類似資訊:
Mar 19 16:30:02 station12 kernel: lvm --giving up to snapshot
/dev/test0/data on /dev/test0/snap: out of space
執行ls /snap. 快照已經不可用了,目錄是空的.執行 lvdisplay /dev/test0/snap,和11步的結果比較.
14. 做完快照之後,如果資料已經備份,或者快照已被刪除,都需要被解除安裝,否則會造成輕微的效能下降, 使用 umount /snap; lvremove /dev/test0/snap
在進行陣列試驗以前清除LVM卷:
刪除所有/etc/fstab中增加的記錄
umount /dev/test0/data; umount /dev/test0/scratch
lvremove /dev/test0/data; lvremove /dev/test0/scratch
vgchange –an test0; vgremove test0

 

相應排錯的文章收集:

同事打電話詢問LVM故障的處理辦法,其實我對LVM也是一知半解,只是恰好在使用者現場解決過幾次有關LVM的故障。
這次故障的發生是因為不小心,把grub的資訊寫入到了陣列裝置上,而陣列裝置是用來做LVM的,導致的結果是pvscan可以得到pv資訊,lvscan也能得到lv資訊,但是 vgscan卻不能。

使用vgcfgrestore命令恢復後,正常了。為了重現使用者的現象,我做了另外一個實驗,不是vg資訊找不到,而是找不到對應 uuid號的裝置,過程如下:
1)建立pv,vg,lv

[root@lancy ~]# pvcreate /dev/mdp0
Physical volume "/dev/mdp0" successfully created
[root@lancy ~]# vgcreate vg01 /dev/mdp0
Volume group "vg01" successfully created
[root@lancy ~]# lvcreate  -n lv01 -L+200M vg01
Logical volume "lv01" created
[root@lancy ~]# mkfs.ext3 /dev/mapper/vg01-lv01  -m 0
[root@lancy ~]# mount /dev/mapper/vg01-lv01 /misc
[root@lancy ~]# cp mdadm-2.5.2-1.i386.rpm /misc/
[root@lancy ~]# umount /misc

2)做一個破壞者

[root@lancy ~]# dd if=/dev/zero f=/dev/mdp0 bs=512 count=3
3+0 records in
3+0 records out
1536 bytes (1.5 kB) copied,7.6469e-05 秒,20.1 MB/秒
[root@lancy ~]# pvscan
No matching physical volumes found
[root@lancy ~]# vgscan
Reading all physical volumes.  This may take a while...
No volume groups found

pv,vg,lv都找不到了,但是vg01-lv01這個裝置還是存在的,而且也能mount。不過估計重啟後就找不到了。於是恢復。
3)嘗試老辦法

[root@lancy ~]# vgcfgrestore -f /etc/lvm/backup/vg01 -n vg01 -t /dev/mdp0
Test mode: Metadata will NOT be updated.
Couldn't find device with uuid 'fPsp4D-aaxu-YMGZ-gqGn-sbUq-fZE0-YnCbwz'.
Couldn't find all physical volumes for volume group vg01.
Restore failed.

看來vgcfgrestore不是萬能的,怎麼辦?
4)重寫uuid

[root@lancy bin]# pvcreate --uuid fPsp4D-aaxu-YMGZ-gqGn-sbUq-fZE0-YnCbwz --restorefile /etc/lvm/archive/vg01_00001.vg /dev/mdp0
Couldn't find device with uuid 'fPsp4D-aaxu-YMGZ-gqGn-sbUq-fZE0-YnCbwz'.
Physical volume "/dev/mdp1" successfully created
[root@lancy bin]# vgcfgrestore vg01
Restored volume group vg01
[root@lancy bin]# lvs
LV   VG   Attr   LSize   Origin Snap%  Move Log Copy%
lv01 vg01 -wi--- 100.00M
[root@lancy bin]# vgscan
Reading all physical volumes.  This may take a while...
Found volume group "vg01" using metadata type lvm2

哈哈,到此搞定!

 

相關文章2

不知道前因後果(大部分情況下,使用者都這麼描述),重啟機器後,發現邏輯卷有問題,執行pvscan的結果是這樣的:

# pvscan
pvscan -- reading all physical volumes (this may take a while...)
pvscan -- inactive PV "/dev/sdb1" of VG "ora_yz"     [49.94 GB / 17.81 GB free]
pvscan -- inactive PV "/dev/sdc1" of VG "ora_yz2"    [99.94 GB / 6 GB free]
pvscan -- inactive PV "/dev/sdd"   is associated to unknown VG "ora_yz2_02" (run vgscan)
pvscan -- ACTIVE   PV "/dev/sde1" of VG "ora_yz"     [49.94 GB / 17.81 GB free]
pvscan -- ACTIVE   PV "/dev/sdf1" of VG "ora_yz2"    [99.94 GB / 6 GB free]
pvscan -- inactive PV "/dev/sdg"   is associated to unknown VG "ora_yz2_02" (run vgscan)
pvscan -- total: 6 [580 GB] / in use: 6 [580 GB] / in no VG: 0 [0]


上面已經說名為ora_yz2_02的VG出現問題了,繼續vgscan,給出的結果如下:

# vgscan
vgscan -- reading all physical volumes (this may take a while...)
vgscan -- found active volume group "ora_yz"
vgscan -- found active volume group "ora_yz2"
vgscan -- found inactive volume group "ora_yz2_02"
vgscan -- volume group "ora_yz2_02" reuses an existing logical volume number;
please vgexport/vgimport that VG or use option -f
vgscan -- "/etc/lvmtab" and "/etc/lvmtab.d" successfully created
vgscan -- WARNING: This program does not do a VGDA backup of your volume groups

上面的描述資訊似乎是說ora_yz2_02這個VG重複使用了一個邏輯卷號(logical volume number),不太理解這個邏輯卷號是什麼意思,google一下,也沒有找到有價值的訊息。
當然解決辦法很簡單,按照螢幕的提示執行vgscan -f 就好了。
不過我我查詢了vgscan的聯機手冊,並沒有發現這個-f的引數,不知道這個-f,是不是--force的意思,從原始碼著手吧,結果原始碼裡vgscan命令中也沒有這個引數。
於 是打電話給去解決這個問題的同事,詢問是不是使用的vgscan -f 解決的,得到肯定的答覆後,我突然想起一件事情,馬上詢問,作業系統是什麼版本,結果是redflag dc4.1,原來是LVM,而不是LVM2,想當然的把它當作了LVM2,浪費了不少時間,LVM1中vgscan確實有-f這個引數,是 --forcenumbers的意思。其man手冊這麼描述的(vgscan(8))

引用

If used volume group and/or logical volume minor numbers are found during scan, replace them. This will potentially cause problems for NFS exported filesystems on logical volumes with changed numbers.
 

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/25897606/viewspace-757174/,如需轉載,請註明出處,否則將追究法律責任。

相關文章