自从了解到Windows2012支持块去重和存储池以后,文件共享服务器装2012R2成了首选
有台N36L跑Windows2012R2,3Tx4做的存储池,里面虚拟磁盘做的mirror方式,所以允许损坏单侧的一半硬盘
刚好发现在拷贝数据的时候忽然变慢,用HDTune查看了一下,发现有坏道,于是换了块硬盘
由于之前在虚拟机下测试过,也在Win8.1下实际应用过更换硬盘,所以就想当然的关机,换硬盘,开机
在进入系统之后,手工添加新增的硬盘到存储池后,发现并没有自动恢复存储池
于是乎搜索了一番(如果是Win8.1它在添加完磁盘后会自动开始重组的)
经过若干个小时的数据备份(因为怕误操作导致数据丢失)
以下就是命令行的恢复方法
输入如下命令列出所有物理磁盘

Get-PhysicalDisk |? { $_.ObjectId.Contains( $PhysicalDiskGUID ) }
 FriendlyName CanPool OperationalStatus HealthStatus Usage
 ------------ ------- ----------------- ------------ -----
 PhysicalDisk3 False OK Healthy Auto-Select
 PhysicalDisk1 False OK Healthy Auto-Select
 PhysicalDisk0 False OK Healthy Auto-Select
 PhysicalDisk4 False OK Healthy Auto-Select
 PhysicalDisk2 False OK Healthy Auto-Select
 PhysicalDisk-1 False Lost Communication Warning Retired

PhysicalDisk-1就是系统记录的更换下去的旧硬盘,显示状态为Lost Communication,我们需要输入以下命令让它“退休”

Set-PhysicalDisk -FriendlyName "PhysicalDisk-1" -Usage Retired

接着输入命令重组和坏硬盘相关的虚拟磁盘,我的虚拟磁盘命为vd1,你需要替换为你自己的虚拟磁盘名

Repair-VirtualDisk -FriendlyName vd1

之后得到如下恢复进度

Repair-VirtualDisk -FriendlyName vd1
已完成 1/2
[oooooooooooooooooooooooooooooooooooooooooooooooooooooo
剩余 00:00:02。
Repairing virtual disk
Running
[ooooooo

如果不小心这个窗口关闭了,则输入如下命令是查看存储池任务进度

Get-StorageJob

得到如下进度

Get-StorageJob

 Name ElapsedTime JobState PercentComplete IsBackgroundTask
 ---- ----------- -------- --------------- ----------------
 Repair 02:51:18 Running 66 False
 Regeneration 00:00:00 Running 66 True

最后输入以下命令彻底删除损坏的硬盘

Remove-PhysicalDisk -FriendlyName "PhysicalDisk-1"

在后续的使用过程中,发现修复完的虚拟磁盘在重新启动计算机之后没有自动挂载,另外如果是从其他计算机导入过来的存储池也不会自动挂载,需要自动挂载需要输入以下命令
查看虚拟磁盘状态

Get-VirtualDisk

 FriendlyName ResiliencySettingNa OperationalStatus HealthStatus IsManualAttach Size
me
 ------------ ------------------- ----------------- ------------ -------------- ----
 vd1 Mirror OK Healthy True 5.0 TB

可以看到,此时vd1这块虚拟磁盘的IsManualAttach参数为True,将虚拟磁盘vd1变更为自动挂载,输入以下命令
注:必须以管理员身份运行PowerShell

Set-VirtualDisk -FriendlyName vd1 -IsManualAttach $False

如果有多个虚拟磁盘想同时开启自动挂载,则可以输入以下命令

Get-VirtualDisk | Where-Object {$_.IsManualAttach –eq $True} | Set-VirtualDisk –IsManualAttach $False

GLPI是非常优秀开源IT管理系统,包括资产统计、helpdesk等等功能,配合OCSNG还可以实现自动采集客户端软硬件信息。
虽然这套软件也有Windows版的,但Linux下的更加稳定,推荐在Linux上安装,本人之前写过一篇安装文章,那个时候为了收集中日文的计算机信息,还需要第三方的程序和修改glpi代码才能实现,现在这两个软件官方原生已经支持UTF8,不需要我们折腾了,不过安装过程依然不那么简单,呵呵
好了,先安装基本的Linux系统,本例使用的是CentOS6.0,GLPI版本0.84.5,OCSNG版本是2.1.1。

这里说一下默认光盘安装的CentOS6,有几个需要注意的地方,第一建议关闭防火墙和selinux,第二,配制好网卡,默认情况下,网卡开机是不启用的,需要修改配置文件

vi /etc/sysconfig/network-scripts/ifcfg-eth0
把
ONBOOT=no
改为
ONBOOT=yes

然后开始安装基础软件httpd,php,mysql,还需要下载一些软件

 glpi-0.84.6.tar.gz
 json-1.2.1.tar
 OCSNG_UNIX_SERVER-2.1.1.tar.gz
 OCSNG-Windows-Agent-2.1.1.zip
 OCSNG-Windows-Packager-2.1RC1.zip

安装OCSNG服务端

tar zxvf OCSNG_UNIX_SERVER-2.1.1.tar.gz
 cd OCSNG_UNIX_SERVER-2.1.1
 ./setup.sh

接下来一路回车,你会依次看到如下的选择提示

Do you wish to continue ([y]/n)?
 Which host is running database server [localhost] ?
 On which port is running database server [3306] ?
 Where is Apache daemon binary [/usr/sbin/httpd] ?
 Where is Apache main configuration file [/etc/httpd/conf/httpd.conf] ?
 Which user account is running Apache web server [apache] ?
 Which user group is running Apache web server [apache] ?
 Where is Apache Include configuration directory [/etc/httpd/conf.d/] ?
 Where is PERL Intrepreter binary [/usr/bin/perl] ?
 Do you wish to setup Communication server on this computer ([y]/n)?
 Where to put Communication server log directory [/var/log/ocsinventory-server] ?
 Communication server need a directory for plugins configuration files.
 Where to put Communication server plugins configuration files [/etc/ocsinventory-server/plugins] ?
 Communication server need a directory for plugins Perl modules files.
 Where to put Communication server plugins Perl modules files [/etc/ocsinventory-server/perl] ?

然后我这里会出现如下错误提示,根据提示安装对应的软件

+----------------------------------------------------------+
 | Checking for required Perl Modules... |
 +----------------------------------------------------------+

 Checking for DBI PERL module...
 Found that PERL module DBI is available.
 Checking for Apache::DBI PERL module...
 *** ERROR: PERL module Apache::DBI is not installed !
 Checking for DBD::mysql PERL module...
 Found that PERL module DBD::mysql is available.
 Checking for Compress::Zlib PERL module...
 Found that PERL module Compress::Zlib is available.
 Checking for XML::Simple PERL module...
 *** ERROR: PERL module XML::Simple is not installed !
 Checking for Net::IP PERL module...
 *** ERROR: PERL module Net::IP is not installed !
 *** ERROR: There is one or more required PERL modules missing on your computer !
 Please, install missing PERL modules first.

 OCS setup.sh can install perl module from packages for you
 The script will use the native package from your operating system like apt or rpm
 Do you wish to continue (y/[n])?

下载perl-Apache-DBI-1.09-1.el6.noarch.rpm,并安装
我这里提示

rpm -i perl-Apache-DBI-1.09-1.el6.noarch.rpm
 warning: perl-Apache-DBI-1.09-1.el6.noarch.rpm: Header V3 RSA/SHA256 Signature, key ID 0608b895: NOKEY
 error: Failed dependencies:
perl(Digest::SHA1) is needed by perl-Apache-DBI-1.09-1.el6.noarch

还需要安装依赖perl-Digest-SHA1

yum install perl-Digest-SHA1
rpm -i perl-Apache-DBI-1.09-1.el6.noarch.rpm

继续安装依赖包

yum install perl-XML-Simple perl-Net-IP

重新运行OCSNG安装程序
之后有提示还缺一些SOAP相关的包,直接忽略就行了,不需要这个功能

配置数据库安全
mysql_secure_installation
设置root密码,关闭root远程访问,移出不必要的数据库
/etc/my.cnf中找到[client]和[mysqld],然后在它们下面均加上default-character-set=utf8就可以了。别忘了重启下mysql服务
创建ocsng和glpi的数据库和用户

 mysql -u root -p
 create database glpi;
 create database ocsweb;
 grant all privileges on glpi.* to glpi@localhost identified by 'password';
 grant all privileges on ocsweb.* to ocs@localhost identified by 'password';
 set global max_allowed_packet = 2*1024*1024*10
 exit

配置ocsng的web界面(以下地址请将192.168.1.11替换为你自己的服务器IP)
进入http://192.168.1.11/ocsreports
输入上面设置的password密码,提交即可
再删掉安装文件 /usr/share/ocsinventory-reports/ocsreports/install.php
用admin/admin登陆进ocsng的web界面后更改下默认密码即可

下面安装glpi,由于glpi需要json,新版本的php如果要编译json必须修改代码

tar xvf json-1.2.1.tar
 cd json-1.2.1
 vi JSON_parser.c
添加#define ZVAL_DELREF Z_DELREF_P 
 phpize
 ./configure
 make 
 make install 
 echo "; Enable json extension module" > /etc/php.d/json.ini 
 echo "extension=json.so" >> /etc/php.d/json.ini 
 /etc/init.d/httpd restart
 tar zxvf glpi-0.84.6.tar.gz
 mv glpi /var/www/html/
 chown apache.apache /var/www/html/glpi/ -R

输入http://192.168.5.11/glpi 直接跳转到安装界面
选择语言,提交,一路下一步即可
删除/var/www/html/glpi/install/install.php
修改密码后完成glpi的安装

配置glpi的插件ocsng
之前的老版本,glpi中直接集成了ocsng的连接组件,新版本中变为了插件方式,到glpi网站下载插件glpi-ocsinventoryng-1.0.2.tar.gz

tar zxvf glpi-ocsinventoryng-1.0.2.tar.gz
mv ocsinventoryng /var/www/html/glpi/plugins/

去插件中启用就可以了

配置域整合

 名称
yourdc.local
 Server
 192.168.1.200
 Basedn
 DC=yourdc,DC=LOCAL
 rootdn (非匿名)
ldapconnect@yourdc.local
 Login Field
 samaccountname
连接过滤器
(&(objectClass=user)(objectCategory=person)(!(userAccountControl:1.2.840.113556.1.4.803:=2)))
然后配置导入信息即可

这里发现一个bug,以前在0.7x版本上是没问题的,现在升级到0.8x以后ldap连接测试可以通过,但是无法导入用户,打开调试模式得到如下错误

PHP Warning: ldap_search(): Search: Operations error in /var/www/html/glpi/inc/authldap.class.php at line 1400

经过研究代码和数据库发现,rootdn_passwd这个密码并没有真正写入数据库,而直接在数据库中修改此项也没生效,只好改ldap连接代码了,本人非php专家,所以改成可以满足自己应用就好了,修复bug没那个精力。。。

vi /var/www/html/glpi/inc/authldap.class.php

找到

static function connectToServer($host, $port, $login="", $password="", $use_tls=false,
$deref_options) {

这个函数,在下面添加即可

$password="yourdnpasswd";

最后重新进入导入用户界面就可以看到亲切的域帐号了。。。

以前写过,这次做个记录

需求是这样的,首先网站文件和数据库需要每天自动备份,然后备份目录超过一定时间的删除,比如保留最近14天地备份

刚好vps是redhat,里面默认居然没有装crond的服务,输入以下命令安装

yum install cronie

创建备份脚本

vi /root/bakweb.sh

编辑并输入以下内容

#!/bin/bash

 find /home/bak/ -name '*' -type f -mtime +14 -exec rm {} \;
 tar zcvf /home/bak/www.penglei.name_$(date +%F).tar.gz /var/www/html
 mysqldump -u root --password=PASSWORD DBNAME > /home/bak/sql.penglei.name_$(date +%F).sql

 exit 0

输入:wq保存退出。
该脚本的意思是首先选择/home/bak作为网站备份目录。
第一步,先删除/home/bak下超过14天的文件;
第二步,按www.penglei.name_+日期为文件名备份网站目录/var/www/html;
第三步,按sql.penglei.name_+日期为文件名导出数据库,PASSWORD和DBNAME替换为你自己的root密码和数据库名。
最后创建crond脚本,每天早上5点自动运行该脚本即可
创建crond文件

vi /etc/cron.d/bakweb

编辑并输入以下内容

0 5 * * * root /root/bakweb.sh

一直用nagios做网络监控报警,最近才知道还有个SmokePing,一看作者是RRD的作者,于是决定下来试用一下。
首先系统安装环境,虚拟机下安装CentOS6.3,32位的,SmokePing从官网下载的2.6.8,旧版本拷贝就能用,新版本已经变成需要安装的了,不过也更简单容易了。
安装系统的时候直接把apache和编译工具都装了,省得再装了,如果没装的需要再装一下,反正也就一条命令。
首先先安装一些依赖包,输入以下命令

yum -y install httpd-devel libxml2-devel libpng-devel glib pango pango-devel freetype freetype-devel fontconfig cairo cairo-devel libart_lgpl libart_lgpl-devel

安装rrdtool 1.4.7

 wget http://oss.oetiker.ch/rrdtool/pub/rrdtool-1.4.7.tar.gz
 tar zxvf rrdtool-1.4.7.tar.gz
 cd rrdtool-1.4.7
 ./configure --prefix=/usr/local/rrdtool
 make && make install

安装cgilib

 wget http://down1.chinaunix.net/distfiles/cgilib-0.5.tar.gz
 tar zxvf cgilib-0.5.tar.gz
 cd cgilib-0.5
 make
 cp libcgi.a /usr/local/lib
 cp cgi.h /usr/include

安装fping-2.4b2_to

 wget http://fping.sourceforge.net/download/fping.tar.gz
 tar zxvf fping.tar.gz
 cd fping-2.4b2_to
 ./configure
 make
 make check
 make install

安装echoping

wget http://jaist.dl.sourceforge.net/project/echoping/echoping/6.0.0/echoping-6.0.0.tar.gz
tar zxvf echoping-6.0.0.tar.gz
cd echoping-6.0.0
./configure --without-libidn
make
make test #遇到测试不成功等信息也没关系,直接ctrl+c回到命令行
make install

安装FCGI

 wget http://cpan.communilink.net/authors/id/F/FL/FLORA/FCGI-0.74.tar.gz
 tar zxvf FCGI-0.74.tar.gz
 cd FCGI-0.74
 perl Makefile.PL
 make && make install

安装mod_fastcgi,dso方式

 wget http://www.fastcgi.com/dist/mod_fastcgi-2.4.6.tar.gz
 tar zxvf mod_fastcgi-2.4.6.tar.gz
 cd mod_fastcgi-2.4.6
 apxs -o mod_fastcgi.so -c *.c
 apxs -i -a -n fastcgi .libs/mod_fastcgi.so

修改apache配置文件,确认有如下一行,没有则添加

LoadModule fastcgi_module modules/mod_fastcgi.so

安装SMokePing

wget http://oss.oetiker.ch/smokeping/pub/smokeping-2.6.8.tar.gz
tar zxvf smokeping-2.6.8.tar.gz
./configure --prefix=/usr/local/smokeping

在这里会得到类似如下错误提示,需要安装perl一些依赖包

 checking checking for perl module 'RRDs'... Failed
 checking checking for perl module 'FCGI'... Ok
 checking checking for perl module 'CGI'... Ok
 checking checking for perl module 'CGI::Fast'... Ok
 checking checking for perl module 'Config::Grammar'... Failed
 checking checking for perl module 'Digest::HMAC_MD5'... Failed
 checking checking for perl module 'LWP'... Ok

 ** Aborting Configure ******************************

 If you know where perl can find the missing modules, set
 the PERL5LIB environment variable accordingly.

 FIRST though, make sure that 'perl' starts the perl
 binary you want to use for SmokePing.

 Now you can install local copies of the missing modules
 by running

 ./setup/build-perl-modules.sh /usr/local/smokeping/thirdparty

 The RRDs perl module is part of RRDtool. Either use the rrdtool
 package provided by your OS or install rrdtool from source.
 If you install from source, the RRDs module is located
 PREFIX/lib/perl

先解决”checking checking for perl module ‘RRDs’… Failed”的问题,由于我们是编译安装的rrdtool,所以perl没找到默认路径下它的模块,需要手工拷贝过去

cp /usr/local/rrdtool/lib/perl/5.10.1/i386-linux-thread-multi/RRDs.pm /usr/lib/perl5/
cp /usr/local/rrdtool/lib/perl/5.10.1/i386-linux-thread-multi/auto/RRDs/RRDs.so /usr/lib/perl5/

如果你是CentOS5.9,就是下面的命令,perl版本不同

cp /usr/local/rrdtool/lib/perl/5.8.8/i386-linux-thread-multi/RRDs.pm /usr/lib/perl5/5.8.8/i386-linux-thread-multi/
cp /usr/local/rrdtool/lib/perl/5.8.8/i386-linux-thread-multi/auto/RRDs/RRDs.so /usr/lib/perl5/5.8.8/i386-linux-thread-multi/

下面的几个模块在错误提示中已经提到解决办法,运行以下指令就会自动下载安装了

./setup/build-perl-modules.sh /usr/local/smokeping/thirdparty

装完之后,重新运行下面指令

./configure --prefix=/usr/local/smokeping
gmake install

配置smokeping

 cd /usr/local/smokeping/
 mkdir cache data var
 chown apache.apache cache data var
 cd /usr/local/smokeping/htdocs/
 cp smokeping.fcgi.dist smokeping.fcgi
 cd /usr/local/smokeping/etc/
 cp config.dist config
 chmod 400 /usr/local/smokeping/etc/smokeping_secrets.dist
 ln -s /usr/local/smokeping/cache /usr/local/smokeping/htdocs/cache

修改/usr/local/smokeping/etc/config

vi /usr/local/smokeping/etc/config
找到binary = /usr/sbin/fping
修改为binary = /usr/local/sbin/fping
 /usr/local/sbin/fping

修改/usr/local/smokeping/bin/smokeping

vi /usr/local/smokeping/bin/smokeping
找到:use lib qw(); # PERL5LIB
修改为:use lib qw(/usr/local/rrdtool/lib/perl); # PERL5LIB

修改主机配置文件,增加自己的主机,如果只想测试就把host改成自己要检测的IP就行了

+ Test
 menu= Targets
 #parents = owner:/Test/James location:/

 ++ James

 menu = James
 title =James
 alerts = someloss
 slaves = boomer slave2
 host = james.address

 ++ MultiHost

 menu = Multihost
 title = James and James as seen from Boomer
 host = /Test/James /Test/James~boomer

创建开机自动运行脚本
vi /etc/rc.local
写入如下内容

nohup /usr/local/smokeping/bin/smokeping --logfile=/var/log/smokeping.log 2>&1 &

修改apache配置文件

Alias /smokeping/ "/usr/local/smokeping/htdocs/"
AllowOverride None Options All AddHandler cgi-script .fcgi .cgi Order allow,deny Allow from all DirectoryIndex smokeping.fcgi 

最后重器apache服务,运行

nohup /usr/local/smokeping/bin/smokeping –logfile=/var/log/smokeping.log 2>&1 &

打开浏览器输入http://smokeping-ip/smokeping/即可访问

squid用了好多年,但是总的来说也不算精通,都是需要什么去查什么,然后照着做。。。

今天偶然发现还有wpad这东西,全名为Web Proxy Auto Discovery。顾名思义,就是让IE浏览器自动检测设置,而无需设置代理服务器及端口或者设置代理脚本。

当然前提是在域环境下,否则你需要更改的东西可就多了,也不能保证好用。本例是在域环境下测试并部署成功的。

英语好的可以去看参考文章http://www.wlug.org.nz/WPAD

默认情况下,域用户登录计算机后,IE会按以下地址自动检测代理设置

http://wpad.xxx.domain.local/wpad.dat
http://wpad.domain.local/wpad.dat
http://wpad.local/wpad.dat
http://wpad/wpad.dat

xxx.domain.local是你域的地址,所以最简单的办法就是在域里设置wpad.xxx.domain.local这个域名,指向你的代理脚本所在的地址(注意这个地址是代理脚本所在的地址,可以不是代理服务器的地址)

然后再代理脚本所在的服务器网站根目录创建一个名为wpad.dat的文件,文件内容其实就是你原有的代理脚本设置

在设置的时候有个小插曲,那就是wpad这个域名被windows当作黑名单处理了,我们需要去掉或关闭这个特性。

由于我使用的是squid作为代理服务器,才有这个问题,如果你使用的是ISA2006或者TMG2010那就没这个问题,因为都是微软自家的东西,不会做限制的。

关闭这个特性需要安装soppurt tools,命令行下运行如下命令即可

dnscmd [servername] /config /enableglobalqueryblocklist 0

把[servername]替换为你服务器的名称,这里我是偷了个懒,直接关闭了,其实可以修改这个blacklist的,有需要的可以自己google

更改完这些以后,可以找一台域用户登录的计算机测试了,我这里的环境使用xp/2003/win7都没问题。

后续测试发现,不用域环境也是可以的,但是需要开启dhcp,让dhcp推送一个域后缀,然后把推送到这个域后缀增加个wpad的子域名就可以了。

另外,再说一下之前做的各种尝试,包括dhcp选项,dns修改,都罗列如下

dhcp修改/etc/dhcpd.conf

option option-252 "http://wpad.xxx.domain.local/proxy.pac";
option wpad-url code 252 = text;
option wpad-url "http://wpad.xxx.domain.local/proxy.pac\n";

第一行可能不好用,由于dhcp版本问题,出错注释掉

dns配置需要增加如下设置

wpad IN A 192.168.0.100
IN TXT "service: wpad:!http://wpad.xxx.domain.local:80/proxy.pac"
wpad.tcp IN SRV 0 0 80 wpad.xxx.domain.local.