一個柱面是8M
1. 首先, 卸載/data. 使用e2fsadm擴展分區尺寸: e2fsadm -L+50M /dev/test0/data 必須先卸載/
否則報
# e2fsadm -L+50m /dev/test1/data
e2fsadm -- Sorry: 'ext2online' not found in any of /sbin /usr/sbin /usr/local/sbin /bin /usr/bin
e2fsadm -- ERROR: can't online resize
e2fsadm -- ERROR: /proc/mounts says /dev/test1/data is mounted on /data.
Please unmount it to resize.
Lab 8 邏輯卷和陣列
目標: 在安裝后創建邏輯卷和陣列的技巧
步驟一: 使用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 of=/data/bigfile bs=1024 count=20000
使用df檢查/data的磁盤使用情況和剩余空間. 確認能夠正常使用.可以編輯/etc/fstab來自動加載/data.重啟動測試
2005-05-14
上面實驗
出錯記錄:
[root@you etc]#
[root@you etc]# vgcreate test /dev/hdb5 (只有40M)
vgcreate -- ERROR: physical volume(s) too small for physical extent size of test
vgcreate -- minimum physical volume at this physical extent size is 160 MB
在修改/etc/fstab時候 如下:
/dev/test0/data/ /data ext3 defaults 0 0
總報錯,說/dev/test0/data/ 不是一個目錄,
是因為 /dev/test0/data 是一個文件。
小結:
2.1 卷組volume group (VG)
卷組是LVM中最高抽象層,是由一個或多個物理卷所組成的存儲器池。
2.2 物理卷physical volume (PV)
典型的物理卷是硬盤分區,但也可以是整個硬盤或已創建的Software RAID 卷。
2.3 邏輯卷logical volume (LV)
邏輯卷相當于非LVM系統中的分區,它在卷組上建立,是一個標準的塊設備,可以在其上建立文件系統。
2.4 物理塊physical extent (PE)
物理卷按大小相等的“塊”為單位存儲,塊的大小與卷組中邏輯卷塊的大小相同。
2.5 邏輯塊logical extent (LE)
邏輯卷按“塊”為單位存儲,在一卷組中的所有邏輯卷的塊大小是相同的。
創建 刪除 的基本步驟
1.創建分區 必須是 ,類型為Linux LVM (0x8e)
2。vgscan 會在/etc/下創立文件
3,pvcreate /dev/hda9 /dev/hda10…… 建立物理卷
4。vgcrate 卷名 /dev/hda9 包含的物理卷 vgchange -n y 卷組名 激活
5。lvcreate -L 1200m -n 邏輯卷名 卷組名
-l 指定LV的邏輯塊數
-i 交錯方式 采用交錯(striped)方式創建LV,其中Stripes指卷組中PV的數量
6。mke2fs
刪除邏輯卷
umount
lvremove 邏輯卷名
刪除卷組
vgchange -y n 卷組名
vgremove 卷組名
步驟二: 使用邏輯卷
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 > /data/; done 將在/data下創建十個文件,名稱從1到10. 這個命令不影響/snap, 可以用lvdisplay /dev/test0/snap檢查
12. 當快照邏輯卷不能容納改變的塊時,將被LVM自動刪除,即使當前在加載狀態.(避免這一情況的方法是尺寸和父卷一致,或者及時用lvextend擴展尺寸)可以通過以下方式看到這一現象:
rm /data/bigfile
for i in $(seq 1 10000); do echo > /data/; 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
注意2:
1。
在LVM發行包中有一個稱為e2fsadm的工具,它同時包含了lvextend與resize2fs的功能,如:
# e2fsadm -L+1G /dev/testvg/testlv
等價于下面兩條命令:
# lvextend -L+1G /dev/testvg/testlv
# resize2fs /dev/testvg/testlv
2。增加邏輯卷 大小 e2fsadm –L+50M /dev/test0/data
使用剩余擴展創建第二個邏輯分區. 運行vgdisplay查看PE /size,格式類似于166/644MB,這表示卷組包含166個擴展,664MB剩余空間. 創建一個占用166個擴展邏輯卷/dev/test0/scratch, 命令為:
lvcreate –l 166 –n scratch test0
這一步 需要觀察vgdisplay中
VG Name test0
VG Aclearcase/" target="_blank" >ccess read/write
VG Status available/resizable
VG # 0
MAX LV 256
Cur LV 2
Open LV 2
MAX LV Size 255.99 GB
Max PV 256
Cur PV 1
Act PV 1
VG Size 472 MB
PE Size 4 MB
Total PE 118
Alloc PE / Size 118 / 472 MB
Free PE / Size 0 / 0 這里是剩余的 PE
VG UUID r8m8Ds-680l-iAeH-ll5C-QlY3-dQBi-VFUPJZ
3。增加 卷組 大?。ò研碌奈锢砭砑拥骄斫M里)
加前
[root@student1 root]# vgdisplay test0
--- Volume group ---
VG Name test0
VG Access read/write
VG Status available/resizable
VG # 0
MAX LV 256
Cur LV 2
Open LV 2
MAX LV Size 255.99 GB
Max PV 256
Cur PV 1
Act PV 1
VG Size 472 MB
PE Size 4 MB
Total PE 118
Alloc PE / Size 118 / 472 MB
Free PE / Size 0 / 0
VG UUID r8m8Ds-680l-iAeH-ll5C-QlY3-dQBi-VFUPJZ
vgextend test0 /dev/hda10
加后
--- Volume group ---
VG Name test0
VG Access read/write
VG Status available/resizable
VG # 0
MAX LV 256
Cur LV 2
Open LV 2
MAX LV Size 255.99 GB
Max PV 256
Cur PV 2
Act PV 2
VG Size 944 MB
PE Size 4 MB
Total PE 236
Alloc PE / Size 118 / 472 MB
Free PE / Size 118 / 472 MB
VG UUID r8m8Ds-680l-iAeH-ll5C-QlY3-dQBi-VFUPJZ
再增加 邏輯卷大小
加前
-- Logical volume ---
LV Name /dev/test0/scratch
VG Name test0
LV Write Access read/write
LV Status available
LV # 2
# open 1
LV Size 380 MB
Current LE 95
Allocated LE 95
Allocation next free
Read ahead sectors 1024
Block device 58:1
e2fsadm –L+20M /dev/test0/scratch
LV Name /dev/test0/scratch
VG Name test0
LV Write Access read/write
LV Status available
LV # 2
# open 0
LV Size 400 MB
Current LE 100
Allocated LE 100
Allocation next free
Read ahead sectors 1024
Block device 58:1
3.snap 作用 就是備份,但是非??旖?,而且不影響在線超做,但是要注意,snap占用的 空間 和其他lv的使用是一樣的,但是實際上 在重新啟動后 就沒有了。而且 snap的大小要比較大,太小 只要操作的文件 稍微大,該snap 就沒有了。
創建:
lvcreate –s –L 5M –n snap /dev/test0/data
4??磛gdisplay 和lvdisplay可以用 -v選擇項
5。全部清除:
在進行陣列試驗以前清除LVM卷:
刪除所有/etc/fstab中增加的記錄
umount /dev/test0/data; umount /dev/test0/scratch
lvremove /dev/test0/data; lvremove /dev/test0/scratch
vgchange –an test0; vgremove test0
步驟三: 軟件陣列
1. 在實驗中我們將在同一磁盤創建多個分區來實現陣列,但是在實際工作中我們一般使用在不同磁盤上的分區來創建.使用fdisk將Linux LVM(0x8e)分區轉換為Linux raid auto(0xfd)分區.保存更改.
2. 重啟動系統.
3. 創建/etc/raidtab文件定義四個RAID-5陣列設備.根據以下示例,用實際的分區替換.chunk-size是一個重要的參數,決定了一次向陣列中每個磁盤寫入數據的量.RAID-5需要一個校驗算法行,一般設為left-symmetric來提高磁盤性能
raiddev /dev/md0
raid-level 5
nr-raid-disks 4
chunk-size 32
persistent-superblock 1
parity-algorithm left-symmetric
device /dev/hda9
raid-disk 0
device /dev/hda10
raid-disk 1
device /dev/hda11
raid-disk 2
device /dev/hda12
raid-disk 3
4. 初始化陣列: mkraid /dev/md0. 如果陣列沒有啟動,手動啟動 raidstart /dev/md0. 此時陣列會立即開始建立,但是已經可用了.可以在另一個虛擬控制臺用 watch cat /pro/mdstat 監控建立過程.
5. 使用4k的塊的ext3文件系統格式化. Stride選項應設為chunk size和陣列磁盤數的乘積, 可以加快格式化的速度
mke2fs –j –b 4096 –R stride=32 /dev/md0
6. 查看是否能 mount /dev/md0 /data. 即使仍在建立過程也可以加載. 使用df命令查看文件系統尺寸. 如果是四個同尺寸的分區組成的陣列,文件系統尺寸應該為三個分區之和.(其他空間用于儲存校驗信息)
7. 使用lsraid顯示陣列設備的相關信息. Lsraid –A –a /dev/md0
8. 試著在/data創建文件. 可以在/etc/fstab中加入記錄用來自動加載.
9. 檢查/proc/mdstat, 確認陣列已經建立. 可以看到類似輸出:
md0: active raid5 hda12[3] hda11[2] hda10[1] hda9[0]
2328064 blocks level 5, 32k chunk, algorithm 2[4/4] [UUUU]
10. 測試卷的破壞.用以下命令模擬: raidsetfaulty /dev/md0 /dev/hda11
在/var/log/messages中尋找出錯信息, 注意/proc/mdstat文件的改變
md0: active raid5 hda12[3] hda11[2] hda10[1] hda9[0]
2328064 blocks level 5, 32k chunk, algorithm 2[4/3] [UUUU]
重啟動系統, 查看啟動時dmesg和/var/log/messages的出錯信息
11. 模擬在重啟前更換了損壞的磁盤. 使用命令替換陣列分區:
raidhotadd /dev/md0 /dev/hda11
12. 這時將看到/proc/mdstat顯示陣列的重建
小結:
手動創建raid 步驟:
1。分區 建立類別為 fd
2。在/etc/raidtab下寫 關于raid的參數
樣式:
raiddev /dev/md0 新磁盤
raid-level 5 raid級別
nr-raid-disks 4 磁盤數(分區數)
chunk-size 32 決定了一次向每個磁盤 寫入的量
persistent-superblock 1
parity-algorithm left-symmetric 算法
device /dev/hda9
raid-disk 0
device /dev/hda10
raid-disk 1
device /dev/hda11
raid-disk 2
device /dev/hda12
raid-disk 3
2005-05-17補充:
關于其中raid需要注意的問題:
********
只支持三個級別
Only three levels of RAID are supported directly by RHEL 3: levels 0, 1, and 5.
*******
如果不會寫 /etc/raidtab文件不要緊
在There are several available in the following directory: /usr/share/doc/raidtools-1.00.3.
/usr/share/doc/raidtools-1.00.3下有 樣板,可以復制
*****
關于 spare disks 空閑盤 是當出錯時
you can assign additional disks for 'failover,' which sets up spare disks for the RAID array. When one disk fails, it is marked as bad. The data is almost immediately reconstructed on the first spare disk,
在/etc/raidtab中的設置
raiddev /dev/md0
raid-level 1
nr-raid-disks 2
nr-spare-disks 1 這里標識 spare-disk 個數
persistent-superblock 1
chunk-size 4
device /dev/hdb3
raid-disk 0
device /dev/hdc3
raid-disk 1
device /dev/hdd3
spare-disk 0 這里指定spare 是哪塊硬盤
注意:
raid-disks 2 都是從0開始算的,兩塊 就是0,和1
spare-disks 1 1塊就是0
3。初始化陣列 mkraid /dev/md0
注意: 這個時候 如果陣列還沒有啟動 可以手動用raidstart /dev/md0啟動
4。格式化
需要加 raid參數
mke2fs -j -b 4096 -R stride=32(最好為chunk-size的倍數) /dev/md0
5。成功后 會發現 做了raid5的分區 最后 的空間 是3個,少的一個用于做冗余
6。顯示 raid信息
cat /proc/mdstat
lsraid -A -a /dev/md0
7。損壞后 在更換磁盤 后,可以用
raidhotadd /dev/md0 /dev/hda11(壞的) 重新構件
進階實驗:在軟件陣列上創建LVM
以下實驗可選,需要創建一個在兩個磁盤上的物理卷建立的RAID1鏡像卷基礎上的RAID10. 使用同一磁盤的兩個分區模擬這一情況.
1. 撤銷前面的軟件陣列設置: umount /dev/md0, 刪除/et/fstab中的對應行.運行 raidstop /dev/md0. 從/etc/raidtab中刪除/dev/md0設備.
2. 編輯/etc/raidtab創建兩個RAID1鏡像/dev/md0和/dev/md1, 分別由兩個分區組成.示例如下:
raiddev /dev/md0
raid-level 1
nr-raid-disks 2
chunk-size 32
persistent-superblock 1
device /dev/hda9
raid-disk 0
device /dev/hda10
raid-disk 1
3. 注意: 運行命令時可能需要-f和-R重運行.因為系統會檢測到上次創建的相關superblock.
4. 格式化并啟動陣列設備: mkraid /dev/md0; mkraid /dev/md1
5. 設置陣列設備為物理卷: pvcreate /dev/md0 /dev/md1
6. 創建卷組: vgcreate test0 /dev/md0 /dev/md1
7. 使用vgdisplay查看有多少擴展可用
8. 設置條帶的邏輯卷. 使用-i 指定構成條帶邏輯卷的卷組中物理卷的數目. –I 設置條帶的尺寸. 當使用-i時作用等同于RAID0陣列的chunk-size.使用 –l指定vgdisplay報告的卷組中邏輯卷可用的擴展.假設有500可用.示例為:
lvcreate –i 2 –I 64 –l 500 –n data test0
9. 使用ext3格式化/dev/test0/data ,作為條帶的RAID陣列設置stride選項,
mke2fs –j –b 4096 –R stride=8 /dev/test0/data
10. 在/data加載/dev/md0/data. 把文件復制到/data,使用e2fsadm重設置尺寸.使用raidsetfaulty模擬磁盤損壞.(條帶的邏輯卷在創建后可以重定義尺寸,只要不在另一個物理卷上使用這些擴展.)這樣將得到RAID的冗余,條帶的性能和LVM的靈活性.
小結:
1。解釋
raid 0 條帶 式 disk striping raid
raid 1 鏡象 disk mirroring RAID
RAID 5 幾偶效驗 disk striping with parity
本實驗是 利用raid 0的速度快 和raid1 的安全 做 raid10
是 在兩塊硬盤上 各分兩個區,兩塊硬盤做raid 1,然后各個分區 做lvm,達到raid10 的效果
2。建立 raid
mkraid /dev/md0; mkraid /dev/md1
如果遇到 不成功 可以用 -f -R 完成
3.建立pv
pvcreate /dev/md0 /dev/md1
4。建立VG
vgcreate test0 /dev/md0 /dev/md1
5。建立LV
lvcreate –i 2 –I 64 –l 500 –n data test0 其中 2表示 有兩個磁盤被使用
6。格式化
mke2fs –j –b 4096 –R stride=8 /dev/test0/data
7。使用
關于
lscreate -i
"-i Stripes :采用交錯(striped)方式創建LV,其中Stripes指卷組中PV的數量。
"-I Stripe_size :采用交錯方式時采用的塊大小(單位為KB),Stripe_size必須為2的指數:2N ,N=2,3...9。
"-l LEs :指定LV的邏輯塊數。
"-L size :指定LV的大小,其后可以用K、M、G表示KB、MB、GB。
"-s :創建一已存在LV的snapshot卷。
"-n name :為LV指定名稱。