Linux下使用LVM(Logical Volume Manager)(二)
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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Linux下使用LVM(Logical Volume Manager)(一)LinuxLVM
- 聊聊Linux的LVM(Logical Volume Manager)(下)LinuxLVM
- Logical Volume Manager(LVM)[zt]LVM
- Logical Volume Manager(LVM) 筆記LVM筆記
- Linux 系統 LVM(Logical Volume Manager)邏輯卷管理LinuxLVM
- Linux 建立LVM(Logical Volume)LinuxLVM
- LVM(logical volume manager) 邏輯卷管理器LVM
- LVM(logical volume manager) 邏輯卷管理器(轉帖)LVM
- Linux LVM Logical Volume Management 邏輯卷的管理LinuxLVM
- 使用Smitty進行AIX上Logical Volume建立擴充MITAI
- vertas volume manager(VxVM)命令整理
- vertas volume manager命令手冊
- 使用Linux lvmLinuxLVM
- android 系統下載 Download Manager(二)Download Manager使用詳情Android
- Linux LVM的使用LinuxLVM
- linux下 lvm 磁碟擴容LinuxLVM
- Linux下使用LVM管理(擴充套件/縮小/刪除)LinuxLVM套件
- ERROR: The LVM time stamp for shared volume group: datavg is inconsistentErrorLVM
- Linux下LVM邏輯卷管理LinuxLVM
- linux下lvm的簡單操作LinuxLVM
- 邏輯卷管理-LVM(LOGIC VOLUMN MANAGER)LVM
- Linux LVMLinuxLVM
- VM下LINUX完美增加硬碟空間(LVM)薦Linux硬碟LVM
- linux之lvmLinuxLVM
- linux 之LVMLinuxLVM
- Linux下新新增磁碟啟用未使用的硬碟空間擴容LVMLinux硬碟LVM
- 使用LVM擴充Linux邏輯卷大小LVMLinux
- Docker儲存Volume使用Docker
- linux下raw與基於lvm的raw的用法LinuxLVM
- lvm的使用LVM
- LVM日常使用LVM
- 使用ISCSI & Linux LVM2 搭建Report DBLinuxLVM
- 在Linux中,如何使用LVM管理邏輯卷?LinuxLVM
- linux LVM詳解LinuxLVM
- Linux(06):LVM 案例LinuxLVM
- LVM 管理linux磁碟LVMLinux
- Linux_lvm管理LinuxLVM
- AIX上增加邏輯卷時報錯誤0516-787 extendlv: Maximum allocation for logical volumeAI