Submitted by admin on 2010, September 14, 4:38 PM
简单来说,RAID(磁盘阵列)把多个硬盘组合成为一个逻辑扇区,因此,操作系统只会把它当作一个硬盘。RAID常被用在服务器电脑上,并且常使用完全相同的硬盘作为组合。最初的RAID分成了不同的等级,每种等级都有其理论上的优缺点。更多内容参考:RAID
阵列可以有阵列卡实现的硬阵列,也可以由操作系统提供支持的软阵列。linux下的软阵列用mdadm来管理。以下是针对CentOS的基本操作:
一、建立软阵列一般分为3个步骤
1、产生组成单元
linux中软阵列的组成单元是分区,且这个分区的系统识别码必须设置成“fd linux raid autodetect”。可以用fdisk或pareted分区工具分区。
Device Boot Start End Blocks Id System
/dev/hdb1 1 195 98248+ fd Linux raid autodetect
/dev/hdb2 196 390 98280 fd Linux raid autodetect2、建立磁盘阵列
mdadm -C /dev/md0 -l 1 -n 4 /dev/hd[bd][12]
#-C /dev/md0 创建名为md0的磁盘阵列设备
#-l 1 阵列等级是raid1,可以建立0,5等其他磁盘阵列
#-n 4 组成单元有4个分区
#/dev/hd[bd][12] 组成单元是/dev/hdb1、/dev/hdb2、/dev/hdd1、/dev/hdd2
#格式化该磁盘阵列
mkfs -t ext3 /dev/md0
#挂载并设置/etc/fstab
mount /dev/md0 /data
echo "/dev/md0 /data ext3 defaults 1 2" >> /etc/fstab3、mdadm.conf配置
/etc/mdadm.conf是centos下mdadm的默认配置文件,系统启动时会根据此配置文件激活磁盘阵列及启动阵列监控服务。此配置文件可以参考/usr/share/doc/mdadm-2.6.9/mdadm.conf-example。配置很简单,可以根据已经建立的磁盘阵列使用以下命令建立此文件。
mdadm -Ds >> /etc/mdadm.conf
echo "MAILADDR saplingidea@gmail.com" >> /etc/mdadm.conf
#MAILADDR是管理员email,磁盘阵列出问题时会发邮件通知管理员。
cat /etc/mdadm.conf
#内容如下
ARRAY /dev/md0 level=raid1 num-devices=4 metadata=0.90 UUID=40d32084:7be6bc73:071b21a9:4d8afc12
MAILADDR saplingidea@gmail.com二、管理磁盘阵列
1、查看磁盘阵列信息
#直接查看/proc/mdstat
cat /proc/mdstat
Personalities : [raid1]
md0 : active raid1 hdd2[3] hdd1[2] hdb2[1] hdb1[0]
98176 blocks [4/4] [UUUU]
#使用mdadm查看
mdadm -D /dev/md02、处理硬盘故障
对于raid1,raid5这样有容灾能力的磁盘阵列来说,硬盘的故障不用太担心。以下是处理硬盘故障一般步骤:
a.使用mdadm /dev/md0 -r /dev/hdb1 在线卸载故障硬盘的组成单元
b.物理拆除故障硬盘
c.安装正常的硬盘并分区产生新的组成单元
d.使用mdadm /dev/md0 -a /dev/hdd3 在线加入新组成单元
#-f参数可以模拟磁盘故障
mdadm /dev/md0 -f /dev/hdb1
mdadm -D /dev/md0 |tail
UUID : 40d32084:7be6bc73:071b21a9:4d8afc12
Events : 0.4
Number Major Minor RaidDevice State
0 0 0 0 removed
1 3 66 1 active sync /dev/hdb2
2 22 65 2 active sync /dev/hdd1
3 22 66 3 active sync /dev/hdd2
4 3 65 - faulty spare /dev/hdb1
#在线卸载故障硬盘的组成单元
mdadm /dev/md0 -r /dev/hdb1
#在线加入新组成单元
mdadm /dev/md0 -a /dev/hdd3
mdadm -D /dev/md0 |tail
Spare Devices : 0
UUID : 40d32084:7be6bc73:071b21a9:4d8afc12
Events : 0.26
Number Major Minor RaidDevice State
0 22 67 0 active sync /dev/hdd3
1 3 66 1 active sync /dev/hdb2
2 22 65 2 active sync /dev/hdd1
3 22 66 3 active sync /dev/hdd23、启用、停用磁盘阵列
#启用
mdadm -A -s [MD_DEVICE]
#停用
mdadm --stop -s [MD_DEVICE]4、监控磁盘阵列
启动mdmonitor服务监控磁盘阵列,当磁盘阵列出现故障时会发邮件通知管理员,邮件保存在/etc/mdadm.conf里。
/etc/init.d/mdmonitor start
chkconfig mdmonitor on
#报警内容示例
This is an automatically generated mail message from mdadm
running on localhost.localdomain
A Fail event had been detected on md device /dev/md0.
It could be related to component device /dev/hdb1.
Faithfully yours, etc.
P.S. The /proc/mdstat file currently contains the following:
Personalities : [raid1]
md0 : active raid1 hdd2[3] hdd1[2] hdb2[1] hdb1[4](F)
98176 blocks [4/3] [_UUU]
unused devices:5、删除磁盘阵列
删除磁盘阵列前必需做好备份。
umount /dev/md0
mdadm --stop -s /dev/md0
mdadm --zero-superblock /dev/hd[bd][123]
rm /etc/mdadm.conf
#删除磁盘阵列后必须修改/etc/fstab,以免开机无法挂载分区而无法启动。
---------------------linux as4中创建软阵列-
通常情况下人们在服务器端采用各种冗余磁盘阵列(RAID)技术来保护数据,中高档的服务器一般都提供了昂贵的硬件RAID控制器。对于资金实力有限的中小企业来讲,在Linux下通过软件来实现硬件的RAID功能,这样既节省了投资,又能达到很好的效果。何乐而不为呢?
作为一个面向服务器的网络型操作系统,Linux对数据的安全和存取速度给予了高度重视,从2.4版内核开始Linux就实现了对软件RAID的支持(关于RAID的背景知识请见附文),这让我们可以不必购买昂贵的硬件RAID设备,就能享受到增强的磁盘I/O性能和可靠性,进一步降低了系统的总体拥有成本。下面就让我们看一个Redhat Linux AS 4下的软件RAID配置实例吧。
系统配置情况
假设某单位新上了一套使用Oracle数据库的能量采集系统,该系统数据量极大并且读写非常频繁,实时性要求高,高峰时有近40名用户在线,对数据库服务器的磁盘子系统提出了很高的要求。由于预算比较紧张,经过多方比较,最终选择了采用Linux系统做软件RAID5的方案。
其配置情况如下:
● 操作系统为RedHat Linux AS 4;
● 内核版本为2.6.9-5.EL;
● 支持RAID0、RAID1、RAID4、RAID5、RAID6;
● 五块36GB SCSI接口的磁盘,其中RedHat AS 4安装在第一块磁盘,其它四块组成RAID 5用来存放Oracle数据库。
在RedHat AS 4下实现软件RAID是通过mdadm工具实现的,其版本为1.6.0,它是一个单一的程序,创建、管理RAID都非常方便,而且也很稳定。而在早期Linux下使用的raidtools,由于维护起来很困难,而且其性能有限,在RedHat AS 4下已经不支持了。
实现过程
1.创建分区
五块SCSI磁盘分别对应/dev/sda、/dev/sdb、/dev/sdc、/dev/sdd、/dev/sde。其中第一块磁盘/dev/sda分两个区,用于安装RedHat AS 4和做交换分区,其他四块磁盘每块只分一个主分区,分别为/dev/sdb1、/dev/sdc1、/dev/sdd1、/dev/sde1,并且将分区类型指定为“fd”,这将使Linux内核能将它们识别为RAID分区,且在每次引导时自动被检测并启动。创建分区使用fdisk命令。
# fdisk /dev/sdb
进入fdisk命令行后,使用命令n创建分区,命令t改变分区类型,命令w保存分区表并退出,命令m为帮助。
2.创建RAID 5
这里使用了/dev/sdb1、/dev/sdc1、/dev/sdd1、/dev/sde1四个设备创建RAID 5,其中/dev/sde1作为备份设备,其他为活动设备。备份设备主要起备用作用,一旦某一设备损坏可以立即用备份设备替换,当然也可以不使用备份设备。命令格式如下:
# mdadm -Cv /dev/md0 -l5 -n3 -x1 -c128 /dev/sd[b,c,d,e]1
命令中各参数分别表示如下作用:“-C”指创建一个新的阵列;“/dev/md0”表示阵列设备名称;“-l5”表示设置阵列模式,可以选择0、1、4、5、6,它们分别对应于RAID0、RAID1、RAID4、RAID5、RAID6,这里设为RAID5模式;“-n3”指设置阵列中活动设备的数目,该数目加上备用设备的数目应等于阵列中的总设备数; “-x1”设置阵列中备份设备的数目,当前阵列中含有1个备份设备;“-c128”指设置块的尺寸为128KB,缺省为64KB;“/dev/sd[b,c,d,e]1”指当前阵列中包含的所有设备标识符,也可以分开来写,中间用空格分开,其中最后一个为备份设备。
3.查看阵列状态
当创建一个新阵列或者阵列重构时,设备需要进行同步操作,这一过程需要一定时间,可以通过查看/proc/mdstat文件,来显示阵列的当前状态以及同步进度、所需时间等。
# more /proc/mdstat
Personalities : [raid5]
md0 : active raid5 sdd1[3] sde1[4] sdc1[1] sdb1[0]
75469842 blocks level 5, 128k chunk, algorithm 2 [3/2] [UU_]
[>....................] recovery = 4.3% (1622601/37734912) finish=1.0min speed=15146K/sec
unused devices:
当新建或重构完成后,再次查看/proc/mdstat文件:
# more /proc/mdstat
Personalities : [raid5]
md0 : active raid5 sdd1[2] sde1[3] sdc1[1] sdb1[0]
75469842 blocks level 5, 128k chunk, algorithm 2 [3/3] [UUU]
unused devices:
通过以上内容,可以很清楚地看出当前阵列的状态,各部分所代表的意思如下:“[3/3]”中的第一位数表示阵列所包含的设备数,第二位数表示活动的设备数,如果有一个设备损坏,则第二位数将减1;“[UUU]”标记当前阵列可以正常使用的设备情况,现假设/dev/sdb1出现故障,则该标记将变成[_UU],这时的阵列以降级模式运行,即该阵列仍然可用,但是不再具有任何冗余;“sdd1[2]”指阵列所包含的设备数为n,若方括号内的数值小于n,则表示该设备为活动设备,若数值大于等于n,则该设备为备份设备,当一个设备出现故障的时候,相应设备的方括号后将被标以(F)。
4.生成配置文件
mdadm的缺省配置文件为/etc/mdadm.conf,它主要是为了方便阵列的日常管理而设置的,对于阵列而言不是必须的,但是为了减少日后管理中不必要的麻烦,还是应该坚持把这一步做完。
在mdadm.conf文件中要包含两种类型的行:一种是以DEVICE开头的行,它指明在阵列中的设备列表;另一种是以ARRAY开头的行,它详细地说明了阵列的名称、模式、阵列中活动设备的数目以及设备的UUID号。格式如下:
DEVICE /dev/sdb1 /dev/sdc1 /dev/sdd1 /dev/sde1
ARRAY /dev/md0 level=raid5 num-devices=3 UUID=8f128343:715a42df: baece2a8: a5b878e0
以上的这些信息可以通过扫描系统的阵列来获取,命令为:
# mdadm -Ds
ARRAY /dev/md0 level=raid5 num-devices=3 UUID=8f128343:715a42df: baece2a8: a5b878e0
devices=/dev/sdb1,/dev/sdc1,/dev/sdd1,/dev/sde1
使用vi命令,按照规定的格式编辑修改/etc/mdadm.conf文件
# vi /etc/mdadm.conf
5.创建文件系统并挂接(mount)使用
RAID5已经启动并处于运行状态,现在要做的就是在其上创建一个文件系统,这里使用mkfs命令,文件系统类型为ext3。命令如下:
# mkfs -t ext3 /dev/md0
当新的文件系统生成之后,就可以将/dev/md0挂接到指定的目录了。命令如下:
# mount /dev/md0 /mnt/raid
为了让系统在启动时自动将/dev/md0挂接到/mnt/raid,还需要修改/etc/fstab文件,添加如下内容:
/dev/md0 /mnt/raid ext3 defaults 0 0
故障模拟
上面的实例,让我们对Redhat Linux AS 4的软件RAID功能有了一定的认识,并且通过详细的步骤说明了如何创建RAID5。有了RAID做保障,电脑里的数据看起来似乎已经很安全了,然而现有的情况还是不能让我们高枕无忧,想一想,万一磁盘出现故障怎么办?下面我们模拟一个更换RAID5故障磁盘的完整过程,希望以此丰富大家处理RAID5故障的经验,提高管理和维护水平。
我们仍然沿用上面的RAID5配置,首先往阵列中拷贝一些数据,接下来开始模拟/dev/sdb1设备故障。不过,对于无备份设备的RAID5的模拟过程也要经过如下三步,只是阵列重构和数据恢复是发生在新设备添加到阵列中之后,而不是设备损坏时。
1.将/dev/sdb1标记为已损坏的设备
# mdadm /dev/md0 -f /dev/sdb1
查看当前阵列状态
# more /proc/mdstat
Personalities : [raid5]
md0 : active raid5 sdd1[2] sde1[3] sdc1[1] sdb1[4](F)
75469842 blocks level 5, 128k chunk, algorithm 2 [3/2] [_UU]
[=>...................] recovery = 8.9% (3358407/37734912) finish=1.6min speed=9382K/sec
unused devices:
因为有备份设备,所以当阵列中出现设备损坏时,阵列能够在短时间内实现重构和数据的恢复。从当前的状态可以看出,阵列正在重构,且运行在降级模式,sdb1[4]的后面已经标上了(F),活动设备数也降为2个。
经过几分钟后,再次查看当前阵列状态。
# more /proc/mdstat
Personalities : [raid5]
md0 : active raid5 sdd1[2] sde1[0] sdc1[1] sdb1[3](F)
75469842 blocks level 5, 128k chunk, algorithm 2 [3/3] [UUU]
unused devices:
此时阵列重构已经完成,数据恢复完毕,原有的备份设备sde1成为了活动设备。
2.移除损坏的设备
# mdadm /dev/md0 -r /dev/sdb1
查看当前阵列的状态:
# more /proc/mdstat
Personalities : [raid5]
md0 : active raid5 sdd1[2] sde1[0] sdc1[1]
75469842 blocks level 5, 128k chunk, algorithm 2 [3/3] [UUU]
unused devices:
损坏的sdb1已经从阵列中移掉。
3.将新设备添加到阵列中
因为是模拟操作,可以通过下面的命令再次将/dev/sdb1添加到阵列中。如果是实际操作则要注意两点:一是在添加之前要对新磁盘进行正确的分区;二是添加时要用所添加设备的设备名替换/dev/sdb1。
# mdadm /dev/md0 -a /dev/sdb1
查看当前阵列的状态:
# more /proc/mdstat
Personalities : [raid5]
md0 : active raid5 sdb1[3] sdd1[2] sde1[0] sdc1[1]
75469842 blocks level 5, 128k chunk, algorithm 2 [3/3] [UUU]
unused devices:
这时sdb1作为备份设备再次出现在阵列中
常用阵列维护命令
1.启动阵列
# mdadm -As /dev/md0
该命令指启动/dev/md0阵列,其中“-A”指装载一个已存在的阵列;“-s”指查找mdadm.conf文件中的配置信息,并以此为依据启动阵列。
#mdadm -As
该命令指启动mdadm.conf文件中的所有阵列。
#mdadm -A /dev/md0 /dev/sd[b,c,d,e]1
如果没有创建mdadm.conf文件则可以采用上面这种启动方式。
2.停止阵列
# mdadm -S /dev/md0
3.显示指定阵列的详细信息
# mdadm -D /dev/md0
链接
RAID简介
RAID是冗余磁盘阵列(Redundant Array of Inexpensive Disk)的简称。它是把多个磁盘组成一个阵列,当作单一磁盘使用。它将数据以分段(striping)的方式分散存储在不同的磁盘中,通过多个磁盘的同时读写,来减少数据的存取时间,并且可以利用不同的技术实现数据的冗余,即使有一个磁盘损坏,也可以从其他的磁盘中恢复所有的数据。简单地说,其好处就是:安全性高、速度快、数据容量大。
磁盘阵列根据其使用的技术不同而划分了等级,称为RAID level,目前公认的标准是RAID 0~RAID 5。其中的level并不代表技术的高低,RAID 5并不高于RAID 4 ,RAID 0并不低于RAID 2 ,至于选择哪一种RAID需视用户的需求而定。下面分别对常用的RAID 0、RAID 1、RAID 5进行简单的介绍。
1.RAID 0
特点:它是将多个磁盘并列起来,成为一个大硬盘。在存取数据时,将数据按磁盘的个数来进行分段,然后同时将这些数据写进这些盘中。在所有的级别中,RAID 0的速度是最快的。但没有数据冗余,阵列中任何一个磁盘坏掉,意味着所有数据丢失。
磁盘利用数:n(假设有n个磁盘)。
配置条件:最低两块磁盘,且分区大小尽量相同。
应用领域:对高磁盘容量及高速磁盘存取有特殊需求,而又不计较其高故障率的工作。当然,如果你正在使用集群,RAID 0 无疑是提高磁盘I/O性能的最好方法,因为在这种情况下,你就不用担心冗余的问题了。
2.RAID 1
特点:使用磁盘镜像(disk mirroring)的技术,在一个磁盘上存放数据的同时也在另一个磁盘上写一样的数据。因为有了备份磁盘,所以RAID 1的数据安全性在所有的RAID级别上来说是最好的。尽管其写入数据的速度比较慢,但因其数据是以分段的方式作储存,因而在读取时,它几乎和RAID 0有同样的性能。
磁盘利用数:n/2。
配置条件:最低两块磁盘,且分区大小尽量相同。
应用领域:数据库、金融系统等一些对数据有着高可靠性要求的领域。再者就是系统中写数据量比较少,而读数据量又比较多的情况下可以采用这一模式。
3.RAID 5
特点:以数据的校验位来保证数据的安全,但它不是以单独硬盘来存放数据的校验位,而是将数据段的校验位交互存放于各个磁盘上。这样,任何一个磁盘损坏,都可以根据其他磁盘上的校验位来重建损坏的数据。并行读写数据,性能也很高。
磁盘利用数:n-1。
配置条件:最低三块硬盘,且分区大小尽量相同。
测试通过
Red Hat Enterprise Linux 4中,raid磁盘阵列的管理仅通过一条/sbin/mdadm 命令来完成的。在通过mdadm -C 建立/dev/mdXRAID 设备后,每次电脑重新启动后,都能正确加载RAID 设备,这是为什么呢?
本人一开始也感到很疑惑,后来通过分析,初步掌握了linux起动时加载和管理RAID 设备的过程,写出来与大家分享和探讨。
1.与mdadm相关配置文件文件:
/etc/mdadm.conf
/proc/partitions
/proc/mdstat
/dev/mdX
2.linux起动时是如何加载和管理RAID 设备
主要是通过/etc/rc.d/rc.initsys来做到的。
首先查找/etc/mdadm.conf,如果找到则用/sbin/mdadm -A -s命令加载
。。。。。
if [ -f /etc/mdadm.conf ]; then
/sbin/mdadm -A -s
fi
。。。。。
可用以下命令测试:
/sbin/mdadm -S /dev/mdX
/sbin/mdadm -A -s
如果没有找到有效的/etc/mdadm.config文件,则通过/proc/partitions来加载
。。。。
if [ $RESULT -gt 0 -a -x /sbin/mdadm ]; then
/sbin/mdadm -Ac partitions $i -m dev
RESULT=$?
fi
。。。。。
显然/etc/mdadm.conf不是必须的
可用以下命令测试:
/sbin/mdadm -S /dev/mdX
/sbin/mdadm -Ac partitions /dev/md0 -m dev
or
mdadm -Ac partitions /dev/md0 -m 0
linux | 评论:0
| Trackbacks:0
| 阅读:1972
Submitted by admin on 2010, September 14, 1:49 AM
大概原理就是对最新日志里面的客户端访问IP进行采样统计分析,然后对超出正常访问次数的IP进行屏蔽,如下面统计分析后的结果:
对最新1000条日志的客户端访问IP进行排序统计访问次数。比如第一个IP 219.128.20.68 1000条日志就有295条,访问肯定不正常
root@ubuntu134:# tail access.log -n 1000 |grep vote.php |awk {'print $2'} |sort |uniq -c |sort -nr
295 219.128.20.68
175 113.250.97.209
164 218.87.140.39
153 59.61.215.42
98 222.240.182.234
83 220.181.110.65
73 120.38.1.255
62 221.3.99.106
21 220.249.83.74
12 218.22.10.114
1 123.52.158.16
1 114.81.115.201
然后就是自动处理,如果1000条日志单IP超过50条就屏蔽掉
*/2 * * * * /usr/local/nginx/var/log/drop.sh
#!/bin/sh
cd /usr/local/nginx/var/log
tail access.log -n 1000 |grep vote.php |awk {'print $2'} |sort |uniq -c |sort -nr |awk '{if ($2!=null && $1>50) {print $2}}' > drop_ip.txt
for i in `cat drop_ip.txt`
do
/sbin/iptables -I INPUT -s $i -j DROP;
done
这shell 每几分钟执行一次,就可自动屏蔽那些不正常IP,相信大家都看的懂,下面是针对连接数屏蔽代码
#!/bin/sh
/bin/netstat -ant |grep 80 |awk '{print $5}' |awk -F : '{print $1}' |sort |uniq -c |sort -rn |grep -v -E '192.168|127.0' |awk '{if ($2!=null && $1>50) {print $2}}' > drop_ip.txt
for i in `cat drop_ip.txt`
do
/sbin/iptables -I INPUT -s $i -j DROP;
done
说下,grep -v -E '192.168|127.0' 也就是排除内网IP,免得把自己给屏蔽了,当然还可以加些自己的IP。
linux | 评论:0
| Trackbacks:0
| 阅读:1361
Submitted by admin on 2010, September 13, 1:23 AM
加快回收time_wait的连接
sysctl -w net.ipv4.tcp_tw_reuse=1
sysctl -w net.ipv4.tcp_tw_recycle=1
net.ipv4.tcp_fin_timeout=30
#当KEEPALIVE起作用时,发送keepalive消息的频率,默认2小时,改为20分钟
net.ipv4.tcp_keepalive_time=1200
#开启SYN Cookies,当SYN等待列队溢出,启用cookies来处理,默认关闭,改为开启
net.ipv4.tcp_syncookies=1
#开启重用,允许将TIME-WAIT状态sockets重新用于新的TCP连接,默认关闭,改为开启
net.ipv4.tcp_tw_reuse=1
#启用TCP连接中TIME-WAIT sockets的快速回收,默认关闭,改为开启
net.ipv4.tcp_tw_recycle=1
#用户向外连接的端口范围,默认32768~61000,改为1024~65000
net.ipv4.ip_local_port_range=1024 65000
#表示SYN列队的长度,默认1024,改为8192,可容纳更多处于等待状态的连接
net.ipv4.tcp_max_syn_backlog=8192
#表示系统同时保持TIME-WAIT套接字的最大数量,如果超过将立即清除,默认180000,改为5000
net.ipv4.tcp_max_tw_buckets=5000
linux | 评论:0
| Trackbacks:0
| 阅读:1319
Submitted by admin on 2010, September 3, 5:19 PM
Procs
-r: 运行的和等待(CPU时间片)运行的进程数,这个值也可以判断是否需要增加CPU(长期大于1)
-b: 处于不可中断状态的进程数,常见的情况是由I/O引起的。
MEMORY
-swap:切换到交换内存上的内存(默认以KB为单位) 如果SWAP的值不为0,或者还比较大,比如超过100M了,但是SI,SO的值长期为0,这种情况我们可以不用担心,不会影响系统性能。
-free:p空闲的物理内存
- buff:作为buffer cache的内存,对块设备的读写进行缓冲
-cache:作为page cache的内存,文件系统的cache 如果cache的值大的时候,说明cache处的文件数多,如果频繁访问到的文件都能被cache处,那么磁盘的读IO bi会非常小。
SWAP
-si:交换内存使用,由磁盘调入内存
-so:交换内存使用,由内存调入磁盘 内存够用的时候,这2个值都是0,如果这2个值长期大于0时,系统性能会受到影响,磁盘IO和CPU资源都会被消耗。
我发现有些朋友看到空闲内存(FREE)很少的或接近于0时,就认为内存不够用了,实际上不能光看这一点,还要结合si,so,如果free很少,但是si,so也很少(大多时候是0),那么不用担心,系统性能这时不会受到影响的。
IO
-bi:从块设备读入的数据总量(读磁盘)(KB/S)
-bo:写入到块设备的数据总量(写磁盘)(KB/S) 随机磁盘读写的时候,这2个值越大(如超出1M),能看到CPU在IO等待的值也会越大
SYSTEM
--in:每秒产生的中断次数 --cs:每秒产生的上下文切换次数 上面2个值越大,会看到由内核消耗的CPU时间会越大
CPU
-us:用户进程消耗的CPU时间百分 us的值比较高时,说明用户进程消耗的CPU时间多,但是如果长期超50%的使用,那么我们就该考虑优化程序算法或者进行加速(比如PHP/PERL)
-sy:内核进程消耗的CPU时间百分比(sy的值高时,说明系统内核消耗的CPU资源多,这并不是良性表现,我们应该检查原因)
-wa:IO等待消耗的CPU时间百分比 wa的值高时,说明IO等待比较严重,这可能由于磁盘大量作随机访问造成,也有可能磁盘出现瓶颈(块操作)。
-id:CPU处于空闲状态时间百分比
情景分析: vmstat的输出哪些信息值得关注?
--proc r:运行的进程比较多,系统很繁忙
--IO bo:磁盘写的数据量稍大,如果大文件的写,10以内基本不用担心,如果是小文件2M以前基本正常,
--CPU us:持续大于50,服务高峰期可以接受
--CPU wa:稍微有些同 --CPU id:持续小于50,服务高峰期可以接受
TOP命令:
这个命令可以查看系统中运行的进程的状况,CPU使用状况,系统负载,内存使用等。它是检查系统进程运行状况最方便的工具了。它默认显示部分活动的进程,并按照进程使用CPU的多少排序,
top参数:
-D 不可中断休眠,通常是IO操作处的状态
-R 正在执行的或者处在等街待的进程队列中
-S 休眠中
-T 暂停刮起的
-Z 僵尸进程,进程执行完成,但由于其父进程没有销毁该进程,而被INIT进程接管进行销毁。
-W 没有使用物理内存,所占用的物理内存被切换到交换内存
linux | 评论:0
| Trackbacks:0
| 阅读:1290
Submitted by admin on 2010, August 23, 9:41 PM
----------------------
举例:安装一个半虚拟化客户机,512MB 内存,5G 磁盘,通过使用http提供的安装树,要求使用 text-only 模式。
# virt-install --paravirt --name rhel5u4 --ram 512 --file /var/lib/xen/images\/rhel5u4.img -file-size 6 --nographics --location http://192.168.0.254/rhel5u4
以下是一些安装命令的举例:
#virt-install --name rhel5u4 --ram 512 --file=/var/lib/libvirt/images/rhel5u4 \
.img --file-size=3 --vnc --cdrom=/var/lib/libvirt/images/rhel5u4.iso --network\ \network=default
#virt-install -p -n rhel5u4 -r 512 -f /var/lib/libvirt/images/rhel5u4.img -s 3 \ –vnc --cdrom=/var/lib/libvirt/images/rhel5u4 .iso -w network=default
#virt-install -p -n rhel5u4 -r 512 -f /var/lib/libvirt/images/rhel5u4.img -s 3\
–vnc -l http://192.168.0.254/rhel5u4 -w network=default
#virt-install -p -n rhel5u4 -r 512 -f /var/lib/libvirt/images/rhel5u4.img -s 3 \
–vnc --location=http://192.168.0.2/rhel5u4 -x ks=http://192.168.122.1/ks.cfg -w \
network=default
#virt-install -p -n rhel5u4 -r 512 -f /var/lib/libvirt/images/rhel5u4 .img -s 3 \
--vnc -l http://192.168.0.254/rhel5u4 ---extra-args='ks=http://192.168.122.1 \
ks.cfg' -w network=default
常用参数介绍:
-n NAME, --name=NAME 指定 Guest 名字
-r MEMORY, --ram=MEMORY 指定内存大小
-u UUID, --uuid=UUID 指定 uuid 号
可以使用 uuidgen 命令来产生 uuid:
# uuidgen
a89a3751-3555-4be5-8157-5e205ddba5bb
或者使用如下命令:
# echo 'import virtinst.util ; print\
virtinst.util.uuidToString(virtinst.util.randomUUID())' | python
4217ef56-b0d9-071d-6157-c98d0e6d240a
--vcpus=VCPUS 指定虚拟机的 CPU 数量
-p, --paravirt 指定客户机为半虚拟化 Guest
-f DISKFILE, --file=DISKFILE 虚拟机的虚拟磁盘,磁盘可以是文件、磁盘分区或者是
lvm。此选项用来指定虚拟磁盘的路径
-s DISKSIZE, --file-size=DISKSIZE 指定虚拟磁盘的大小,单位是 G;如果—file 指定
的文件路径不存在,并且—nonsparse 选项没有指
定,对这个文件不会预先分配存储空间。
-w NETWORK, --network=NETWORK NETWORK 有三种选择,bridge:BRIDGE ,
network:NAME 和 user
-c CDROM, --cdrom=CDROM 指定用于全虚拟化 Guest 的虚拟 CD,可以是一个 ISO 镜
像文件,也可以是一个 CDROM 设备,也可以是一个通
过 URL 可以访问和获取到的 boot.iso 镜像。如果将其忽
略,那么在—location 选项中必须指定 kernel 和 initrd
的位置,也可以使用—pxe 参数通过网络进行安装。
--pxe 使用 PXE boot 协议来加载初始化的 ramdisk 和 kernel,
以便于启动 Guset 段的安装进进程。如果没有指定—pxe,那么
就必须指定—cdrom 和--location 其中一个。
-l LOCATION, --location=LOCATION 指定 kernel 和 initrd 的安装源,这对于半虚拟化是
必须的。对于全虚拟化,要么使用--location 要么使用
--cdrom 来指定 ISO 或 CDROM 镜像。其必须符合下面的
四种格式:
DIRECTORY
nfs:host:/path
http://host/path
ftp://host/path
-x EXTRA, --extra-args=EXTRA 用来给加载的 kernel 和 initrd 提供额外的内核命令行参
数。
(跟详细的参数及使用方法详见 man virt-install)
XEN是目前Linux上的最佳的虚拟化解决方案,特别适合于服务器应用,如用于将多个服务器合并到一台物理服务器上,以节省运营成本(机房空间、电力消耗);或者是出于安全角度的考虑,需要将不同的应用进行分区,以便降低安全风险等。
名词:
完全虚拟化(Full Virtualization):full virtualized
半虚拟化(Para Virtualization):paravirtualized
查看CPU对虚拟化的支持程度:
Intel和AMD的半虚拟化支持标识 - PAE
# cat /proc/cpuinfo | grep flags
flags : fpu tsc msr pae mce cx8 apic mtrr mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss nx constant_tsc pni ssse3
Intel全虚拟化支持标识 - VMX
# cat /proc/cpuinfo | grep flags
flags : fpu tsc msr pae mce cx8 apic mtrr mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe nx lm constant_tsc up pni monitor ds_cpl vmx est tm2 cx16 xtpr lahf_lm
AMD全虚拟化支持标识 - SVM
# cat /proc/cpuinfo | grep flags
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ht syscall nx mmxext fxsr_opt rdtscp lm 3dnowext 3dnow pni cx16 lahf_lm cmp_legacy svm extapic cr8legacy 3dnowprefetch ts fid vid ttp tm stc 100mhzsteps
XEN的运行环境:Domain-0与Domain-U
Domain-0即虚拟母机或称为宿主机,与Linux主机为同一系统,以XEN的Linux内核启动的主机,负责管理和控制客户机。
Domain-U即虚拟客户机或称VPS,在Domain-0上可以建立多个虚拟客户机。
Domain-0与Domain-U的区别就是Domain-0是虚拟机,Domain-U是虚拟机上的操作系统。用过Windows上VMWare的可以把Domain-0理解为VMWare软件,Domain-U则是运行在VMWare上的操作系统。
XEN的运行方式:
XEN分成多个层级 (layer) 执行。它将Linux的核心修改后,再使用修改过的核心开机,而开机后先载入XEN的监控器 (Hypervisor) , 并且启动第一个操作系统,称为domain-0。在Xen上面所谓的一个domain就是指一个虚拟机。
Domain-0之所以要先被载入是因为Domain-0含有其他虚拟机启动所必须的控制指令,并且domain-0也是控制虚拟装置的重要主控系统。在domain-0上最重要的就是一个xend的常住进程,其他的domain都是由这个xend来管理的。至於命名方面,除了domain-0之外的其他虚拟机就依序被称为domain-1, domain-2等等, 我们统称为domain-U。
Domain-0是很重要的,因为它直接控制Xen的监控器(Hypervisor),而且掌握了真实的Linux驱动程序 (drivers)。而其他的虚拟机(domain-U)则是透过Xen监控器来与真实的硬件以及domain-0进行交互。为了让domain-0能够与Xen结合,我们必须要修改domain-0的核心才能顺利运行。并且需要使用domain-0的核心来开机才可以。domain-0是所有虚拟机的基础,所以它可以尽量简洁,其他的个别服务则可以放置到不同的domain中。
xend可以管理domain-0与其他domain之间的启动与交互,提供一个终端控制 (console) 界面来让 domain-0 登入其他的 domain。
XEN的安装:
在CentOS(5.4)上安装XEN
首先确认XEN是否已经安装
# yum grouplist
如果Virtualization位于Available Groups而非Installed Groups里则说明XEN并未安装在系统中
安装命令有两种,任选其一,效果是一样的
安装方式一
# yum -y install xen <开始安装XEN>
安装方式二
# yum groupinstall Virtualization -y <开始安装XEN>
安装完成后编辑/etc/grub.conf修改开机启动顺序,将default=1修改为改default=0,以XEN的Linux核心为默认启动系统
安装完成,重启。
运行
# xm list
Name ID Mem(MiB) VCPUs State Time(s)
Domain-0 0 491 2 r----- 7797.5
显示以上内容表示安装无误,Domain-0正常启动运行。
安装客户机 - Domain-U:
半虚拟化安装客户机操作系统CentOS(5.4)
首先为虚拟机创建磁盘并进行格式化
创建磁盘:
# dd if=/dev/zero of=/home/vm01 bs=4096 seek=1024k count=0
参数说明:
if 文件输入位置
of 创建磁盘文件
bs 设置磁盘大小
seek 描述 bs 每一块的单位
count 复制的块数
将磁盘文件格式化为ext3文件格式:
# mkfs -t ext3 /home/vm01
关闭防火墙使用NFS作为安装源:
一般防火墙是默认打开的,如果防火墙已经打开且开放了NFS服务则不需要关闭防火墙
# /etc/init.d/iptables stop <关闭防火墙>
挂载操作系统:
# mkdir /tmp/os
# mount /dev/cdrom /tmp/os
启动NFS服务:
# service nfs start
开放NFS服务的目录:
编辑 /etc/exports 添加一行 /tmp/os 192.168.1.*(ro) ,注意根据个人情况修改IP
激活
# exportfs -rv
开始安装:
#virt-install -n domain01 -r 512 --vcpus=2 -p -f /home/vm01 --nographics -l /tmp/os
进入安装选项->选择语言->选择NFS方式安装->选择IPV4 DHCP ->输入主机ip[192.168.1.1]->输入目录[/tmp/os]
选择TEXT安装模式,以后的安装过程和正常安装CentOS没有区别
安装程序参数列表:
-n 设置虚拟主机名
-r 设置虚拟主机内存 这里设置的是512M
--vcpus 设置cpu个数
-f 设置虚拟主机的磁盘位置
--nographics 不使用图形界面安装
-l 设置系统安装源的位置
-p 半虚拟化客户机
-c 用于全虚拟化的虚拟CD,可以是一个ISO镜像文件或CDROM设备或URL可以访问的boot.iso镜像
将虚拟主机加入开机自动启动:
# chkconfig --add xendomains
# ln -s /etc/xen/domain01 /etc/xen/auto/domain01 <放在auto目录中的虚拟主机会开机自启动>
xendomains服务器的启动/停止/重启/状态查询命令:
一般的情况下,xend服务器启动了,xendomains也会自动启动。
# /etc/init.d/xend start 启动xend
# /etc/init.d/xend stop 停止xend
# /etc/init.d/xend restart 重启xend
# /etc/init.d/xend status 查看xend状态
# /etc/init.d/xendomains start 启动xendomains
# /etc/init.d/xendomains stop 停止xendomains
# /etc/init.d/xendomains restart 重启xendomains
# /etc/init.d/xendomains status 查看xendomains状态
XEN控制虚拟主机的常用命令:
虚拟主机列表
# xm list
关闭虚拟主机,domain01为虚拟主机名,也可用id代替
# xm shutdown domain01
启动一个虚拟主机,domain01为虚拟主机名
# xm create domain01
通过-c 参数调用 console 启动并跟踪虚拟主机状态
# xm create domain01 -c
显示虚拟机的控制台
# xm console domain01
重起虚拟机
# xm reboot domain01
销毁并立即停止虚拟机,类似关掉电源一样关机
# xm destroy domain01
存储正在运行的虚拟操作系统的状态
# xm save domain01 <File>
唤醒虚拟操作系统
# xm restore <File>
暂停正在运行的虚拟操作系统
# xm pause domain01
激活停止的虚拟操作系统
# xm unpause domain01
调整虚拟平台/虚拟操作系统的占用内存
# xm mem-set domain01 128
调整虚拟平台及虚拟操作系统的虚拟CPU个数
# xm vcpu-set domain01 2
查看虚拟系统运行的状态
# xm top
或
# xentop
常见错误描述及解决办法
通过http或NFS安装客户机操作系统出现 Unable to retrieve 错误:....
多数原因是防火墙造成的,如果使用http安装方式时可以先停止防火墙,也可以采用以下方式解决
通过/etc/init.d/iptables status命令查询是否有打开80端口
或通过 sudo netstat -antup 命令查看网络端口状态
修改vi /etc/sysconfig/iptables添加以下代码开放80端口:
-A RH-Firewall-1-INPUT -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT
执行 /etc/init.d/iptables restart 激活操作
出现类似下面的错误:
POST operation failed: xend_post: error from xen daemon: (xend.err 'Error creating domain: I need 262144 KiB, but dom0_min_mem is 262144 and shrinking to 262144 KiB would leave only 244672 KiB free.')
说明新增的虚拟主机内存设置过高了,需要调小些
linux | 评论:0
| Trackbacks:0
| 阅读:1526
Submitted by admin on 2010, August 22, 3:29 AM
CentOS5.5下挂载ntfs文件系统
----------------------------------
之前有记录过centos挂载ntfs的过程,不过现在CentOS已经更新到5.4了
回头看了一下之前写的仍然停留在5.2 且是没更新内核的版本上
装完5.3 2.6.18-128.el5PAE 昨晚花了一个晚上的时间更新到5.4 2.6.18-164.6.1.el5PAE
经过一番整理 安装了ntfs-3g 来挂载ntfs文件系统,记录过程如下
首先安装Priorities 插件:
yum install yum-priorities
编辑/etc/yum/pluginconf.d/priorities.conf 档 确认下列行存在,以确定yum-priorities插件被启用:
[main]
enabled=1
编辑/etc/yum.repos.d/ 内的CentOS-Base.repo 档 并加入 下列行:
priority=N
建议设定:
[base], [addons], [updates], [extras] ... priority=1
[centosplus],[contrib] ... priority=2
第二步 下载并安装RPMforge 套件
建议使用下列链接
#i386 http://apt.sw.be/redhat/el5/en/i386/RPMS.dag/rpmforge-release-0.3.6-1.el5.rf.i386.rpm
#x86_64 http://apt.sw.be/redhat/el5/en/x86_64/RPMS.dag/rpmforge-release-0.3.6-1.el5.rf.x86_64.rpm
安装DAG的GPG-KEY
rpm --import http://dag.wieers.com/rpm/packages/RPM-GPG-KEY.dag.txt
审核下载的套件:
rpm -K rpmforge-release-0.3.6-1.el5.rf.*.rpm
安装套件:
rpm -i rpmforge-release-0.3.6-1.el5.rf.*.rpm
(
测试:
yum check-update(这个出现的内容不定)
也可以通过安装一个软件来测试:
yum install mplayer
)
第三步 安装NTFS-3G 软件
先确定正确安装了rpmforge 套件,然后安装下列套件:
yum install fuse fuse-ntfs-3g
若rpmforge的设置为停用,则使用如下命令:
yum --enablerepo=rpmforge install fuse fuse-ntfs-3g
最后 就开始挂载ntfs 档案系统了
1)建立挂载点,进入 /mnt 目录 建立 新目录 win
2)普通挂载:
#mount -t ntfs-3g /dev/sda5 /mnt/win
3)也可以编辑 /etc/fstab 后挂载:
a)只读:/dev/sda5 /mnt/win ntfs-3g ro,umask=0222,defaults 0 0
b)读写:/dev/sda5 /mnt/win ntfs-3g rw,umask=0000,defaults 0 0
然后进行挂载:
mount /mnt/win
即可。
4)通过 umount /mnt/win 卸载文件系统
参考文档:
http://wiki.centos.org/zh-tw/TipsAndTricks/NTFS
--------------------------------
安装CENTOS NTFS支持
1. 查看自己系统的内核版本
#uname -a
#uname -r
2. 找合适自己系统内核和CPU的NTFS模块下载:
比如我的:kernel-module-ntfs-2.6.18-53.el5
google搜索,找到后下载.
我在http://sourceforge.net/project/showfiles.php?group_id=13956页面找到
http://jaist.dl.sourceforge.net/ … 0.rr.10.11.i686.rpm
3. 安装
运行rpm -ihv kernel-module-ntfs-2.6.18-53.el5-2.1.27-0.rr.10.11.i686.rpm,安装此RPM包。
运行/sbin/modprobe ntfs加载内核模块。
运行dmesg | grep NTFS,可以查看NTFS驱动版本。显示
[root@localhost src]# dmesg | grep NTFS
NTFS driver 2.1.27 [Flags: R/W MODULE].
可以运行cat /proc/filesystems看到已经支持ntfs文件系统了。
出现
nodev autofs
ntfs
表示已经支持ntfs了!
4. 挂载分区
(1).fdisk -l查看分区信息
Disk /dev/hda: 80.0 GB, 80000000000 bytes
255 heads, 63 sectors/track, 9726 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Device Boot Start End Blocks Id System
/dev/hda1 * 1 1912 15358108+ 7 HPFS/NTFS
/dev/hda2 1913 9725 62757922+ f W95 Ext’d (LBA)
/dev/hda5 1913 4462 20482843+ b W95 FAT32
/dev/hda6 4463 7012 20482843+ 7 HPFS/NTFS
/dev/hda7 7013 7025 104391 83 Linux
/dev/hda8 7026 9725 21687718+ 8e Linux LVM
(2).建立挂载目录
mkdir /mnt/c
mkdir /mnt/d
mkdir /mnt/e
(3).Mount windwos下的所有分区
ntfs 用 mount -t ntfs /dev/hda6 /mnt/c
vfat 用 mount -t vfat /dev/hda5 /mnt/d
使用df -h查看是否被mount上来
(4).设置启动自动挂载分区
修改/etc/fstab
添加如下信息:
/dev/hda1 /mnt/c ntfs umask=000,nls=utf8
/dev/hda5 /mnt/d vfat umask=000,nls=utf8
/dev/hda6 /mnt/e ntfs umask=000,nls=utf8
重启下试下吧!
5.卸载NTFS模块
rpm -qa|grep -i ntfs 查看所安装的版本
rpm -e kernel-module-ntfs-2.6.18-53.el5-2.1.27-0.rr.10.11.i686
即可卸载。
-------------------------
下载内核源码:
http://downloads.lustre.org/public/kernels/rhel5/
解压并移动到/usr/src/
tar -jxvf linux-2.6.18-164.el5.tar.bz2
mv linux-2.6.18-164 /usr/src/
cd /usr/src
备份出当前的.config
make oldconfig
使用vi, 把所有 =y 和 =m 的项修改为 is not set
1,$s/=y/ is not set/g
1,$s/=m/ is not set/g
设置修改CONFIG_NTFS_FS
CONFIG_NTFS_FS=m
修改fs/ntfs/aops.c
@@ -415,7 +415,7 @@ retry_readpage:
/* Is the page fully outside i_size? (truncate in progress) */
if (unlikely(page->index >= (i_size + PAGE_CACHE_SIZE – 1) >>
PAGE_CACHE_SHIFT)) {
- zero_user_page(page, 0, PAGE_CACHE_SIZE, KM_USER0);
+ zero_user(page, 0, PAGE_CACHE_SIZE);
ntfs_debug(“Read outside i_size – truncated?”);
goto done;
}
修改fs/ntfs/compress.c
@@ -565,7 +565,7 @@ int ntfs_read_compressed_block(struct pa
if (xpage >= max_page) {
kfree(bhs);
kfree(pages);
- zero_user_page(page, 0, PAGE_CACHE_SIZE, KM_USER0);
+ zero_user(page, 0, PAGE_CACHE_SIZE);
ntfs_debug(“Compressed read outside i_size – truncated?”);
SetPageUptodate(page);
unlock_page(page);
然后可以在/usr/src/linux-2.6.18-164/目录下编译了
make modules SUBDIRS=/usr/src/linux-2.6.18-164/fs/ntfs/ (make modules,再cp)
把编译好的模块加入到内核中去
insmod /usr/src/linux-2.6.18-164/fs/ntfs/ntfs.ko
modprobe ntfs [或者是这个?]
使用命令载入NTFS分区的硬盘
mount -t ntfs /dev/sdb4 /mnt/hdd
Finished
使用以下命令查看状态
dmesg | grep NTFS
cat /proc/filesystems
但是这种方法在我的FreeAgentGo上面老是只能mount为只读状态, 会有很多error, 所以还是使用ntfs-3g最好..虽然速度慢了点
http://wiki.centos.org/zh/TipsAndTricks/NTFS
----------------------------------------
早上发现我的macbook pro从深度休眠恢复的死机了,用disk utils验证了一下,报了几个卷错误,大师、彤彤都说很可能是硬盘有坏扇区了。估计又悲剧了。赶快作time machine。手头的300G的移动硬盘满了,需要转移一下数据到测试服务器上。
测试服务器是centos5.4 ,执行uname -pr 看了一下内核是 2.6.18-164.el5 x86_64。
到 http://www.linux-ntfs.org/doku.php
和http://sourceforge.net/projects/linux-ntfs/files/Kernel%20NTFS%20Module
都没找到对应的内核版本的文件系统,估计是还没出来吧。
想起来还可以用ntfs-3g或者fuse。
到http://www.tuxera.com/community/ntfs-3g-download/下在最新版本的,
一路
#./configure
#make
#make install
然后
fdisk -l
找到ntfs的移动硬盘
mkdir -p /mnt/myusb
mount -t ntfs-3g /dev/sdb1 /mnt/myusb
-----------------
默认RHEL5.4、CentOS5.4是不支持NTFS的,即使读取也不行,不过Fedora 11默认已经支持读写操作ntfs文件系统了,今天来分享下让RHEL、CentOS5。4支持NTFS 读取一记.
此次让Linux支持ntfs的原理是给内核增加支持ntfs的模块驱动,于是我先下载模块.
一.支持NTFS模块安装
为了正常安装,建议还是先用uname -r 查询下内核版本是2.6.18-164.el5,找了一下,没有找到完全匹配的,只能是选一个最近的kernel-module-ntfs-2.6.18-128.1.1.el5-2.1.27-0.rr.10.11.i686.rpm,注意哦,这里还要注意32位和64位的区分.
rpm -ivh kernel-module-ntfs-2.6.18-128.1.1.el5-2.1.27-0.rr.10.11.i686.rpm
用find / -name ntfs 找到了ntfs模块的安装目录/lib/modules/2.6.18-128.1.1.el5/kernel/fs/ntfs,进入该目录,执行insmod ntfs.ko.
注:1.此法是给内核安装了个支持ntfs的驱动
二.此法对ntfs分区仅有只读的权限,如需支持读写需要安装ntfs-3g
实质:安装ntfs-3g
1.下载ntfs-3g
注意不是越新越好,我提供的这个版本就行
2.编译安装
[root@blinux ~]#./configure
[root@blinux ~]#make
[root@blinux ~]#make install
3.挂载ntfs分区,以ntfs-3g格式
先卸载ntfs挂上的分区
[root@blinux ~]#umount /dev/sdb1
再以ntfs-3g格式挂载
[root@blinux ~]#mount -t ntfs-3g /dev/sda1 /mnt/c
同理,挂载D,E也一样。
三,让其开机自动挂载
#vi /etc/fstab
在最后添加:
/dev/sda1 /mnt/c ntfs umask=000,nls=utf8
/dev/sda5 /mnt/d ntfs umask=000,nls=utf8
/dev/sda6 /mnt/e ntfs umask=000,nls=utf8
建议编辑完/etc/fstab文件后,执行mount -a 命令,检测挂载是否成功,否则有可能你开不了机。
至此,就可以通过查看 /mnt/c /mnt/d /mnt/e
来访问C D E了!
-------------
URL
http://www.linux-ntfs.org/doku.php?id=downloads
linux | 评论:0
| Trackbacks:0
| 阅读:3364
Submitted by admin on 2010, August 19, 2:13 PM
sed -n '5,10{/pattern/p}' file
sed是一个非交互性性文本编辑器,它编辑文件或标准输入 导出的文件拷贝。标准输入可能是来自键盘、文件重定向、字符串或变量,或者是一个管道文件。sed可以随意编辑小或大的文件,有许多sed命令用来编辑、 删除,并允许做这项工作时不在现场。sed一次性处理所有改变,因而变得很有效,对用户来说,最重要的是节 省了时间。sed必须通过行号和正则表达式指定要改变的文本行
sed怎样读取数据:
sed从文件的一个文本行或从标准输入的几种格式中读取数据,将之拷贝到一个编辑缓冲区,然后读命令行或脚本的第一条命令,并使用这些命令查找模式或定位 行号编辑它,重复过程直到命令结束
sed命令的调用:
在命令行键入命令;将sed命令插入脚本文件,然后调用sed;将sed命令插入脚本文件,并使sed脚本可执行
sed [option] sed命令 输入文件 在命令行使用sed命令,实际命令要加单引号
sed [option] -f sed脚本文件 输入文件 使用sed脚本文件
sed脚本文件 [option] 输入文件 第一行具有sed命令解释器的sed脚本文件
option如下:
n 不打印; sed不写编辑行到标准输出,缺省为打印所有行(编辑和未编辑),p命令可以用来打印编辑行
c 下一命令是编辑命令,使用多项编辑时加入此选项
f 如果正在调用sed脚本文件,使用此选项,此选项通知sed一个脚本文件支持所用的sed命令,如
sed -f myscript.sed input_file 这里myscript.sed即为支持sed命令的文件
使用重定向文件即可保存sed的输出
使用sed在文本中定位文本的方式:
x x为一行号,比如1
x,y 表示行号范围从x到y,如2,5表示从第2行到第5行
/pattern/ 查询包含模式的行,如/disk/或/[a-z]/
/pattern/pattern/ 查询包含两个模式的行,如/disk/disks/
/pattern/,x 在给定行号上查询包含模式的行,如/disk/,3
x,/pattern/ 通过行号和模式查询匹配行,如 3,/disk/
x,y! 查询不包含指定行号x和y的行
基本sed编辑命令:
p 打印匹配行 c\ 用新文本替换定位文本
= 显示文件行号 s 使用替换模式替换相应模式
a\ 在定位行号后附加新文本信息 r 从另一个文本中读文本
i\ 在定位行号后插入新文本信息 w 写文本到一个文件
d 删除定位行 q 第一个模式匹配完成后退出或立即退出
l 显示与八进制ASCII代码等价的控制字符 y 传送字符
n 从另一个文本中读文本下一行,并附加在下一行 {} 在定位行执行的命令组
g 将模式2粘贴到/pattern n/
基本sed编程举例:
使用p(rint)显示行: sed -n '2p' temp.txt 只显示第2行,使用选项n
打印范围: sed -n '1,3p' temp.txt 打印第1行到第3行
打印模式: sed -n '/movie/'p temp.txt 打印含movie的行
使 用模式和行号查询: sed -n '3,/movie/'p temp.txt 只在第3行查找movie并打印
显示整个文件: sed -n '1,$'p temp.txt $为最后一行
任意字符: sed -n '/.*ing/'p temp.txt 注意是.*ing,而不是*ing
打印行号: sed -e '/music/=' temp.txt
附加文本:(创建sed脚本文件)chmod u+x script.sed,运行时./script.sed temp.txt
#!/bin/sed -f
/name1/ a\ #a\表示此处换行添加文本
HERE ADD NEW LINE. #添加的文本内容
插入文本: /name1/ a\ 改成 4 i\ 4表示行号,i插入
修改文本: /name1/ a\ 改 成 /name1/ c\ 将修改整行,c修改
删除文本: sed '1d' temp.txt 或者 sed '1,4d' temp.txt
替 换文本: sed 's/source/OKSTR/' temp.txt 将source替换成OKSTR
sed 's/\$//g' temp.txt 将文本中所有的$符号全部删除
sed 's/source/OKSTR/w temp2.txt' temp.txt 将替换后的记录写入文件temp2.txt
替换修改字符串: sed 's/source/"ADD BEFORE" &/p' temp.txt
结果将在source字符串前面加上"ADD BEFORE",这里的&表示找到的source字符并保存
sed结果写入到文件: sed '1,2 w temp2.txt' temp.txt
sed '/name/ w temp2.txt' temp.txt
从文件中读文本: sed '/name/r temp2.txt' temp.txt
在每列最后加文本: sed 's/[0-9]*/& Pass/g' temp.txt
从 shell向sed传值: echo $NAME | sed "s/go/$REP/g" 注意需要使用双引号
快速一行命令:
's/\.$//g' 删除以句点结尾行
'-e /abcd/d' 删除包含abcd的行
's/[][][]*/[]/g' 删除一个以上空格,用一个空格代替
's/^[][]*//g' 删除行首空格
's/\.[][]*/[]/g' 删除句号后跟两个或更多的空格,用一个空格代替
'/^$/d' 删除空行
's/^.//g' 删除第一个字符,区别 's/\.//g'删除所有的句点
's/COL/(...\)//g' 删除紧跟COL的后三个字母
's/^\///g' 删除路径中第一个\
sed '1{:a;N;6!ba};N;${P;Q};D'
awk '{a[NR%7]=$0}END{print a[(NR-6)%7]}'
从性能上来讲,倒数几行的问题,还是用tail的好
tail -7 | head -1
http://fbirdzp.blogbus.com/logs/62624803.html
http://sed.sourceforge.net/sed1line_zh-CN.html
linux | 评论:0
| Trackbacks:0
| 阅读:1322
Submitted by admin on 2010, August 13, 6:40 PM
awstats做日志分析里,如果apache的日志文件按天生成,在用awstats处理时,是处理当天的,所以必需在12点前处理,但要想在零晨处理,需要改动下,如
YD=`date --date='yesterday' "+%Y%m%d"`
LogFile="/www/servers/apache/logs/access_log.$YD"
下面转
我们需要给awstats指定一个标识昨天的日志文件,awstats可以通过-LogFile参数来指定,可以写一个脚本来完成这个功能,然后定期的执行该脚本,脚本的代码如下:
yesterday=`date –date=’yesterday’ "+%y%m%d"`
LogFile="/home/iislog/www.szshequ.com/W3SVC87257621/ex$yesterday.log"
/usr/lib/cgi-bin/awstats.pl -update -LogFile=$logfile -config=www.szshequ.com
首先获取昨天的日期(格式为:090114),然后组合成日志文件名传递给awstats。最后将定期执行的命令修改成这个脚本的路径即可,如下:
00 03 * * * root /home/awstats/脚本.sh
对于大量日志文件需要分析,可以这样做,譬如日志文件从07年2月7号到现在:
先算出中间天数为708天,
#!/bin/bash
for((i=708;i>0;i–))
do
echo `date -d ‘-’$i’ day’ "+%y%m%d"`
done
for11.sh (END)
sh fo11r.sh >>/home/for
生成文件for,
root@ubuntu8110:/home# less for
070207
070208
090113
090114
(END)
root@ubuntu8110:/home# less for.sh
for i in `cat for`
do
LogFile="/home/iislog/www.qmediatech.com/W3SVC1137541015/ex$i.log"
/usr/lib/cgi-bin/awstats.pl -update -LogFile=$LogFile -config=www.qmediatech.com
done
for.sh (END)
运行脚本即可自动把708天日志自动分析完毕。
注意需要在配置文件awstats.www.qmediatech.com.conf 注释掉日志路径
00 03 * * * root /usr/share/doc/awstats/examples/awstats_updateall.pl -awstatsprog=/usr/lib/cgi-bin/awstats.pl now 使用awstats_updateall.pl把所有CONF配置的域名一次性更新
root@ubuntu8110:/etc/awstats# pwd
/etc/awstats
root@ubuntu8110:/etc/awstats# ls
awstats.admin.szshequ.com.conf awstats.images.szshequ.com.conf
awstats.agent.szshequ.com.conf awstats.my.szshequ.com.conf
awstats.all.pp.szshequ.com.conf awstats.pp.szshequ.com.conf
awstats.bbs.szshequ.com.conf awstats.shop.szshequ.com.conf
awstats.club.szshequ.com.conf awstats.wap.szshequ.com.conf
awstats.conf.111 awstats.www.szshequ.com.conf
awstats.conf.local awstats.yh.szshequ.com.conf
awstats.cost.szshequ.com.conf common.cof.111
awstats.files.szshequ.com.conf conf
awstats-icon
另外一种方法,就是直接在awstats的配置文件指定参数
# Example: "C:/WINNT/system32/LogFiles/W3SVC1/ex%YY-24%MM-24%DD-24.log"
配置文件为:
LogFile="/home/iislog/admin.szshequ.com/W3SVC1061345589/ex%YY-24%MM-24%DD-24.log"
LogFile="/home/iislog/agent.szshequ.com/W3SVC239483299/ex%YY-24%MM-24%DD-24.log"
linux | 评论:0
| Trackbacks:0
| 阅读:1480