分区:
第一个分区都是/boot
尽可能把经常读写的数据放在越靠前的分区
选择适当的文件系统:
ext4 --> ext3
rhel5 : 安装e4fsprogs软件包 ---> mkfs.ext4
块大小
# mkfs.ext4 -b 4096 /dev/sda8
块越大,适合存放大文件,容易浪费空间
块越小,适合存放小文件,节省空间
挂载:
noatime <---不会去更新文件的访问时间。
对于一些访问时间并不敏感的应用,干脆就关闭。
# mount -o noatime /dev/sda8 /web
noacl <---取消访问控制列表
IO算法
内核如何执行IO指令才高效
查看当某个块设备采用哪种IO算法执行IO指令
# cat /sys/block/sda/queue/scheduler
noop anticipatory deadline [cfq]
anticipatory 预判断算法。适合读写速度特别慢的设备。每执行一个IO指令后,都会浪费2ms时间去思考下一个IO可能会读取哪里的数据,先读取了,加载到内存。
deadline 尽可能在更短的时间内完成更多的IO指令。可能会出现不公平的现象。
cfq 默认采用的算法。完全公平算。
noop 啥算法都没有,哪个程序的IO指令先产生就先执行的。
调整前,使用vmstat,iostat记录硬盘的读写性能数据。修改IO算法,
采集几天的性能数据,作对比,才能判断出哪种算法具体的应用。
如何调整?
临时调整
# echo "deadline" > /sys/block/sda/queue/scheduler
# cat /sys/block/sda/queue/scheduler
noop anticipatory [deadline] cfq
开机就生效:
# vim grub.conf
....
....
kernel /vmlinuz-2.6.32-220.el6.x86_64 ro ... elevator=deadline
磁盘阵列:
raid1 ,raid0 , raid5 ,raid1+0 , raid0+1
把多个块设备按照某种算法组合起来,读写数据的时候,是多个块设备一起工作。不同的组合有不同的功能。
raid0
至少两个块设备。
读写效率提升N倍(N就是代表硬盘的个数)
缺点:坏掉任意一个设备,整个组合就不能使用,数据就会丢失。
raid1
一般需要两个块设备,但也至少两个。
读写效率并没有提供,有些芯片能够提高读效率
提供数据的访问冗余。
raid5
至少3个设备,设备越多,数据读写性能越好。
有数据冗余的功能。
只允许坏掉任意一个设备。
支持热插拔
raid10 先用四个设备分别做两组raid1设备,然后把两个raid1设备再做raid0
做实验的时候,仅仅使用不同的分区来模拟不同的块设备。事实上完全实现不了任何的调优的功能。
要求:硬盘的容量、型号应该是一致。
分3-4个容量一样的分区,模拟原始设备。
类型可以修改为fd
例子:分别实现raid0和raid1
创建一个raid0设备组合md0,由sda7和sda8来完成,这个过程叫组装:
# mdadm --create /dev/md0 --level=0 --raid-devices=2 /dev/sda7 /dev/sda8
# cat /proc/mdstat
Personalities : [raid0]
md0 : active raid0 sda8[1] sda7[0]
4206592 blocks super 1.2 512k chunks
建议把该软raid设备当成分区来处理,直接就对它进行格式化使用
# mkfs.ext4 /dev/md0
# mount /dev/md0 /mnt/raid0
创建一个raid1设备组合md1,由sda9和sda10来完成,这个过程叫组装:
# mdadm --create /dev/md1 --level=1 --raid-devices=2 /dev/sda{9,10}
查看创建的过程:
# watch "cat /proc/mdstat"
Every 2.0s: cat /proc/mdstat Sat Dec 8 15:05:13 2012
Personalities : [raid0] [raid1]
md1 : active raid1 sda10[1] sda9[0]
2103447 blocks super 1.2 [2/2] [UU]
[========>............] resync = 42.4% (894400/2103447) finish=0
.6min speed=29813K/sec
验证:raid0和raid1的原理
# mount -o remount,sync /dev/md0
一个终端在不断的监控
# iostat -m -d sda7 sda8 2
...
Device: tps MB_read/s MB_wrtn/s MB_read MB_wrtn
sda7 37.00 0.00 10.40 0 20
sda8 46.00 0.00 10.50 0 21
...
另外一个终端测试
# dd if=/dev/zero of=/mnt/raid0/500M bs=1M count=512
数据冗余验证:
取消挂载
破坏一个分区的数据
# dd if=/dev/zero of=/dev/sda8
再也无法挂载了。
无法挂载
# mount /dev/md0 /mnt/raid0
mount: you must specify the filesystem type
# mdadm /dev/md1 --fail /dev/sda9
mdadm: set /dev/sda9 faulty in /dev/md1 <---把md1组合中的sda9设定为故障设备。
# dd if=/dev/zero of=/dev/sda9 <---才去破坏数据
# cat /proc/mdstat
Personalities : [raid0] [raid1]
md1 : active raid1 sda9[0](F) sda10[1] <---软件raid驱动就认为sda9是失效,不以它为标准
2103447 blocks super 1.2 [2/1] [_U]
vim /etc/mdadm.conf
mdadm -detail --scan >>/etc/mdadm.conf
DEVICE /dev/sda7 /dev/sda8 /dev/sda9 /dev/sda10
相关的管理命令:
把组合的组装的信息保存到配置文件中,便于下次自动的重新组装。
# vim /etc/mdadm.conf
DEVICE /dev/sda7 /dev/sda8 /dev/sda9 /dev/sda10
# mdadm --detail --scan >> /etc/mdadm.conf
最后配置文件应该是类似这样的:
# cat /etc/mdadm.conf
DEVICE /dev/sda7 /dev/sda8 /dev/sda9 /dev/sda10
ARRAY /dev/md0 metadata=1.2 name=www.upl.com:0 UUID=de9a3204:1f2dfd23:618d96fa:f5bf6639
ARRAY /dev/md1 metadata=1.2 name=www.upl.com:1 UUID=e668730e:7c05436e:1217fe71:033499db
停止组合
# umount /dev/md0
# umount /dev/md1
# mdadm --stop /dev/md0
mdadm: stopped /dev/md0
# mdadm --stop /dev/md1
mdadm: stopped /dev/md1
# cat /proc/mdstat
Personalities : [raid0] [raid1]
unused devices: <none>
# mdadm -As /dev/md0 《--如果mdadm.conf存在md0的组装信息,就能自动的组装
mdadm: /dev/md0 has been started with 2 drives.
# mdadm -As /dev/md1
如果当初的组装信息并没有保存在/etc/mdadm.conf配置文件中,那该如何重新组装:
方法1:重启,操作系统帮我们自动识别并且组装
方法2:手工用命令识别,然后组装。
# mdadm -E /dev/sda7
/dev/sda7:
Magic : a92b4efc
Version : 1.2
Feature Map : 0x0
Array UUID : de9a3204:1f2dfd23:618d96fa:f5bf6639 《---
Name : www.upl.com:0 (local to host www.upl.com)
Creation Time : Sat Dec 8 15:00:44 2012
Raid Level : raid0 《---
Raid Devices : 2
....
# mdadm -E /dev/sda8
/dev/sda8:
Magic : a92b4efc
Version : 1.2
Feature Map : 0x0
Array UUID : de9a3204:1f2dfd23:618d96fa:f5bf6639 <---
Name : www.upl.com:0 (local to host www.upl.com)
Creation Time : Sat Dec 8 15:00:44 2012
Raid Level : raid0
Raid Devices : 2
查找本机所有的块设备,主要他们曾经组装过一个uuid="xxxx",就会把他们找到,重新组装成md0
# mdadm -A --uuid="de9a3204:1f2dfd23:618d96fa:f5bf6639" /dev/md0
mdadm: /dev/md0 has been started with 2 drives.
之后把这些信息按照上面教的方法保存到配置文件
例子: 创建raid5设备
把原来的块设备上所有旧的组装信息都删除掉:
# mdadm -S /dev/md0
# mdadm -S /dev/md1
# mdadm --zero-superblock /dev/sda{7,8,9,10}
mdadm --zero-superblock /dev/sda{7,8,9,10}
再去创建raid5设备
mdadm --create /dev/md0 --level=5 --raid-devices=3 /dev/sda{7,8,9} --spare-devices=1 /dev/sda10
# mdadm --create /dev/md0 --level=5 --raid-devices=3 /dev/sda{7,8,9} --spare-devices=1 /dev/sda10
查看动态创建的过程:
# watch "cat /proc/mdstat"
Every 2.0s: cat /proc/mdstat Sat Dec 8 16:21:15 2012
Personalities : [raid0] [raid1] [raid6] [raid5] [raid4]
md0 : active raid5 sda9[4] sda10[3](S) sda8[1] sda7[0]
4206592 blocks super 1.2 level 5, 512k chunk, algorithm 2 [3/2] [
UU_]
[==>..................] recovery = 11.0% (232780/2103296) finish
=1.7min speed=17906K/sec
unused devices: <none>
创建完毕:
# cat /proc/mdstat
Personalities : [raid0] [raid1] [raid6] [raid5] [raid4]
md0 : active raid5 sda9[4] sda10[3](S) sda8[1] sda7[0]
4206592 blocks super 1.2 level 5, 512k chunk, algorithm 2 [3/3] [UUU]
格式化,挂载,测试
# mkfs.ext4 /dev/md0
# mount /dev/md0 /mnt/raid5
思考:如何验证raid5的原理?
# mdadm /dev/md0 --fail /dev/sda9 <---通过命令告诉raid驱动,sda9已经被损坏了
mdadm: set /dev/sda9 faulty in /dev/md0
# cat /proc/mdstat <---后台在自动使用sda10后备设备自动恢复。
Personalities : [raid0] [raid1] [raid6] [raid5] [raid4]
md0 : active raid5 sda9[4](F) sda10[3] sda8[1] sda7[0]
4206592 blocks super 1.2 level 5, 512k chunk, algorithm 2 [3/2] [UU_]
[>....................] recovery = 2.4% (50964/2103296) finish=1.3min speed=25482K/sec
unused devices: <none>
在算的过程中,raid组合继续可以使用。