一个柱面是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。增加 卷组 大小(把新的物理卷加到卷组里)
加前
[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。看vgdisplay 和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指定名称。