KVM 虚拟机增加硬盘

2015年11月14日 没有评论

采用模板的方式可能导致虚拟机的硬盘容量不够,可以通过单独增加一块硬盘来作为数据的存储。
1、首先使用dd命令在默认路径下创建一个大小为10G的映像文件:

dd bs=1M count=10240 if=/dev/zero of=/var/lib/libvirt/images/guest1_data.img

另外也可以使用 qemu-img 命令来创建,具体可以参考:centos 6.6 安装 KVM 虚拟机

2、使用virsh edit 命令来编辑 domain 的配置文件,在其中已有的disk 段后增加如下内容:

<disk type='file' device='disk'>
  <driver name='qemu' type='raw' cache='none'/>
  <source file='/var/lib/libvirt/images/guest1_data.img'/>
  <target dev='hdb' bus='ide'/>
  <address type='drive' controller='0' bus='0' target='0' unit='1'/>
</disk>

3、分区格式化以及自动挂载硬盘
使用fdisk -l 查看系统的硬盘,根据上次配置,应该可以看到设备 /dev/sdb,然后使用如下命令进行分区

fdisk /dev/sdb

然后进行格式化

mkfs.ext4	/dev/sdb1

假设把新的硬盘mount 到 /data 目录,可以采用命令

mount /dev/sdb1 /data 

这种方式如果机器重启后就需要重新mount,所以可以把他加入到fstab 中,这样系统启动时就能自动mount上去

/dev/sdb1   /data   ext4    defaults    0   0    
分类: Linux 标签:

KVM 克隆虚拟机

2015年11月9日 没有评论

安装一个guest系统后安装一些必要的软件包。然后把这个系统作为一个模板,采用克隆的方式可以十分快捷的创建另外的guest 系统。通过如下命令即可完成

virt-clone --connect=qemu:///system -o template_centos66  -n new_guest -f /var/lib/libvirt/images/new_guest.img

其中 o (字母o)参数是模板guest系统的domain名, n 参数 为新guest domain 名, f 参数为硬盘镜像的文件。

分类: Linux 标签: ,

virsh 无法重启和关闭KVM虚拟机

2015年11月9日 没有评论

virsh 可以通过 reboot、shutdown 来重启或关闭对应的虚拟机。由于其原理是host通过发送acpi指令来控制虚拟机的电源,如果guest 系统没有安装acpi服务器或该服务器没有启动,那么虚拟机将不会重启或关闭,那么只有使用destroy 来强制关闭。

安装 acpid 服务

centos 系统
yum install acpid

ubuntu 系统
apt-get install acpid

开机自动启动

chkconfig acpid on

启动服务

/etc/init.d/acpid start

如果启动acpid服务报错,那么需要重启guest 系统。

分类: Linux 标签: ,

centos 6.6 安装 KVM 虚拟机

2015年11月9日 没有评论

1、首先检查系统是否支持kvm,有两个先决条件

a、系统是x86的,通过命令

uname -a

b、CPU 支持虚拟化技术

egrep 'vmx|svm' /proc/cpuinfo

如果看到有输出结果,即证明cpu 支持虚拟化。同时特别注意需要检查 BIOS 中是否开启VT,如果没有启用,虚拟机将会十分慢

2、使用yum安装kvm

安装kvm内核
yum install -y qemu-kvm.x86_64 qemu-kvm-tools.x86_64

安装virt管理工具
yum install libvirt.x86_64 libvirt-cim.x86_64 libvirt-client.x86_64 libvirt-java.noarch libvirt-python.x86_64

加载kvm 内核

modprobe kvm
modprobe kvm-intel

查看内核是否开启

modprobe -ls | grep kvm

3、配置网络桥接,
进入目录 /etc/sysconfig/network-scripts,复制一份原有的ifcfg-eth0 为 ifcfg-br0

cp ifcfg-eth0 ifcfg-br0

修改ifcfg-br0,内容如下:

DEVICE="br0"
BOOTPROTO=static
ONBOOT="yes"
TYPE="Bridge"
IPADDR=192.168.31.60
GATEWAY=192.168.31.1
NETMASK=255.255.255.0
DEFROUTE=yes

IPADDR、GATEWAY、NETMASK根据自己的实际情况修改。

修改 ifcfg-eth0, 内容如下:

DEVICE="eth0"
BOOTPROTO=none
NM_CONTROLLED="no"
ONBOOT="yes"
TYPE="Ethernet"
BRIDGE="br0"
HWADDR=F8:DB:88:FF:99:E3
DEFROUTE=yes
IPV4_FAILURE_FATAL=yes
NAME="System eth0"

重启网络服务即可。

/etc/init.d/network restart

如果出现问题,关闭 NetworkManager 后重试。

chkconfig NetworkManager off

service NetworkManager stop

4、使用virt-install 工具安装 guest 系统。

a、创建硬盘映像文件

使用 qemu-img 命令创建
qemu-img create -f raw /var/lib/libvirt/images/test.img 8G

或使用 dd 命令创建
dd bs=1M count=8096 if=/dev/zero of=/var/lib/libvirt/images/test.img

qemu-img 是创建是文件格式是稀疏文件,优点是速度超快,由于是稀疏文件,性能可能会比第二种略差,通过如下命令查看详情

qemu-img info /var/lib/libvirt/images/test.img

输出为:注意其中 disk size 为 0

image: test.img
file format: raw
virtual size: 8.0G (8589934592 bytes)
disk size: 0

更多关于稀疏文件的信息,请自行搜索。

b、通过iso文件安装系统

virt-install --name=test --ram 1024 --vcpus=2 --disk path=/var/lib/libvirt/images/test.img,size=3 --accelerate --cdrom /home/CentOS-6.6-x86_64-minimal.iso --graphics vnc,listen=0.0.0.0 --network bridge=br0 --force --autostart --connect qemu:///system

使用 vnc 客户端连接,IP 用host的ip,如果是第一个虚拟机,端口为 5900, 如果出现连不上,确认host的iptables的状态,最好是先关闭iptables。连上后就像安装系统一样一步步来安装即可。

分类: Linux 标签: , ,

使用OpenVPN搭建VPN服务器

2015年11月6日 没有评论

环境公司内网一台 CentOS 6.6 服务器 A,网卡eth0 内网IP:192.168.8.60, 公司公网IP为 116.228.12.88, 使用路由器的 DMZ 功能把公网映射到内网服务器A(即内网IP:192.168.8.60)。

1、在服务器上安装OpenVPN。由于默认的Centos软件源里面没有OpenVPN的软件包,可以通过添加rpmforge的repo,从而实现yum安装openvpn。
针对CentOS 5

rpm -ivh http://apt.sw.be/redhat/el5/en/x86_64/rpmforge/RPMS/rpmforge-release-0.5.2-2.el5.rf.x86_64.rpm

针对CentOS 6

rpm -ivh http://apt.sw.be/redhat/el6/en/x86_64/rpmforge/RPMS/rpmforge-release-0.5.2-2.el6.rf.x86_64.rpm

注意:服务器是32位还是64位,由于我的服务器安装centos 是64位,所以上传安装的源是64位,如果是32位,可以通过浏览地址:http://apt.sw.be/redhat/el6/en 找到对应的版本的地址。

2、生成OpenVPN 所需的证书。

OpenVPN 自带了 easy-rsa 工具,可以通过它很方便的生成所需的证书。复制 工具目录到 /etc/openvpn 下并赋予执行权限。

cp -R /usr/share/doc/openvpn-*/easy-rsa /etc/openvpn 
cd /etc/openvpn/easy-rsa/2.0
chmod +x  *

执行下述命令创建证书。

ln -s openssl-1.0.0.cnf openssl.cnf
. vars
./clean-all
./build-ca server
./build-key-server server
./build-key client
./build-dh

3、创建 OpenVPN 的配置文件server.conf, 文件放在 /etc/openvpn

port        1194
proto       tcp
dev         tun
ca          /etc/openvpn/easy-rsa/2.0/keys/ca.crt
cert        /etc/openvpn/easy-rsa/2.0/keys/server.crt
key         /etc/openvpn/easy-rsa/2.0/keys/server.key
dh          /etc/openvpn/easy-rsa/2.0/keys/dh1024.pem
server      10.1.1.0 255.255.255.0

auth-user-pass-verify   /etc/openvpn/auth/checkpsw.sh via-env
script-security 3 system
client-cert-not-required
username-as-common-name

push        "redirect-gateway def1 bypass-dhcp"
push        "dhcp-option DNS 8.8.8.8"
push        "dhcp-option DNS 114.114.114.114"
log         /var/log/openvpn.log
keepalive   10 120
verb        3
client-to-client
comp-lzo
persist-key
persist-tun

其中server 后面对应的IP 是指VPN虚拟的网段,也就是客户端获取IP就是在这个段中,注意,不要和现有的局域网IP段有冲突。
auth-user-pass-verify 下面的四行是配置客户端可以使用用户名密码的方式认证,特别注意一定要加上 script-security 3 system, 后面的system 也不能少,我就是在这个上面浪费好多时间。

checkpsw.sh 脚本内容如下:

#!/bin/sh
PASSFILE="/etc/openvpn/auth/psw-file"
LOG_FILE="/etc/openvpn/auth/openvpn-password.log"
TIME_STAMP=`date "+%Y-%m-%d %T"`

if [ ! -r "${PASSFILE}" ]; then
  echo "${TIME_STAMP}: Could not open password file \"${PASSFILE}\" for reading." >> ${LOG_FILE}
  exit 1
fi

CORRECT_PASSWORD=`awk '!/^;/&&!/^#/&&$1=="'${username}'"{print $2;exit}' ${PASSFILE}`

if [ "${CORRECT_PASSWORD}" = "" ]; then
  echo "${TIME_STAMP}: User does not exist: username=\"${username}\", password=  \"${password}\"." >> ${LOG_FILE}
  exit 1
fi

if [ "${password}" = "${CORRECT_PASSWORD}" ]; then
  echo "${TIME_STAMP}: Successful authentication: username=\"${username}\"." >> ${LOG_FILE}
  exit 0
fi

echo "${TIME_STAMP}: Incorrect password: username=\"${username}\", password= \"${password}\"." >> ${LOG_FILE}
exit 1

其中 PASSFILE 是用户名密码的文件路径,LOG_FILE 输出的日志文件。 注意:checkpsw.sh 需要有执行权限。PASSFILE 的格式为:用户名+空格+密码, 例如:

netingcn mypassword

4、启动OpenVPN并将设置其为开机自动启动。

启动服务
/etc/init.d/openvpn start

加入开机自动启动
chkconfig openvpn on

OpenVPN 服务的日志位于 /var/log/openvpn.log, 如果启动异常,可以查看该日志,一般情况是由于生产证书那里出现问题,可以重新生成一次。

5、服务器其他设置。
关闭selinux

sed -i '/^SELINUX=/c\SELINUX=disabled' /etc/selinux/config

开启ip forward

sed -i '/net.ipv4.ip_forward/s/0/1/g' /etc/sysctl.conf 
sysctl -w net.ipv4.ip_forward=1

开启iptables NAT

iptables -t nat -A POSTROUTING -s 10.1.1.0/24 -j SNAT --to-source 192.168.8.60

特别注意:to source 的值,有些文章提到是公司的公网IP,这个说法有些不太准确,如果该服务器的网卡绑定是公网IP,也就是说作为路由服务器,那么就是用公网IP,由于我的这台服务器是局域网内的一台机器,只有局域网IP,所以这里用的是本机的IP。

如果没有添加iptables 规则,出现的结果是能连上vpn server,但是不能上网。另外可能还需要用到的规则如下:

iptables -A FORWARD -i tun0 -s 10.1.1.0/24 -j ACCEPT
iptables -A FORWARD -i eth0 -d 10.1.1.0/24 -j ACCEPT
iptables -I INPUT -p tcp --dport 1194 -m comment --comment "openvpn" -j ACCEPT
iptables -t nat -A POSTROUTING -s 10.1.1.0/24 -o eth0 -j MASQUERADE

客户端官网下载地址:https://openvpn.net/index.php/download/community-downloads.html

下面以Win 7 客户端为例,安装好客户端后,打开默认安装路径:C:\Program Files\OpenVPN\config, 在下面建立一个 client.ovpn 文件,
证书认证方式的内容如下:

client
dev tun
proto tcp
remote 116.228.12.88 1194
resolv-retry infinite
nobind
persist-key
persist-tun
ca ca.crt
cert client.crt
key client.key
comp-lzo
verb 3
redirect-gateway def1
route-method exe
route-delay 2

需要复制服务器的 ca.crt,client.crt 和 client.key 到当前目录, remote 用公司公网IP

用户名密码认证的方式如下:

client
dev tun
proto tcp
remote 116.228.208.10 2294
resolv-retry infinite
nobind
persist-key
persist-tun
ca ca.crt
;auth-user-pass
auth-user-pass pass.txt
comp-lzo
verb 3
redirect-gateway def1
route-method exe
route-delay 2

只需要复制服务器的 ca.crt 到当前目录即可,同时在当前目录建立一个名为 pass.txt,把用户名密码填入,注意格式为:

用户名
密码

至此配置完成,右键点击客户端然后选connect,应该就可以连上。

分类: Linux 标签: , ,

git之临时忽略文件

2015年7月9日 没有评论

git 中要在版本库中忽略某些文件,第一选择选择应该是使用 “.gitignore” 配置文件,该方式是永久忽略,如果要忽略某个已经在版本库中的文件,那么先要从版本库中移除,然后.gitignore中的配置才会生效。

git 还有一种临时忽略文件的方式,命令为:

git update-index --assume-unchanged

这种方式忽略可以让该文件还继续保留在版本库中,但是本地修改文件后,不会提示有修改,也就不需要提交。

既然是临时忽略,那么也可以解除临时忽略,命令为:

git update-index --no-assume-unchanged

如果时间久了,自己都不记得那些文件是临时忽略的该怎么办?可以使用命令:

git ls-files -v

这个命令将列出所有文件的状态,文件名前面符号含义如下:

   H
       cached

   h
       Assume Unchanged 

   S
       skip-worktree

   M
       unmerged

   R
       removed/deleted

   C
       modified/changed

   K
       to be killed

   ?
       other

当文件比较多时,还可以借助 grep 命令来筛选,例如:

git ls-files -v| grep '^h'

git 既然支持 alias,可以通过配置alias来简化操作,编辑 .gitconfig 文件,把下述配置加入到 alias 段即可

hide = update-index --assume-unchanged

unhide = update-index --no-assume-unchanged

ignored = !git ls-files -v | grep "^h"
分类: 其它 标签: ,

jquery on() 方法绑定动态元素

2015年7月8日 没有评论

jQuery on()方法是官方推荐的绑定事件的一个方法。使用 on() 方法可以给将来动态创建的动态元素绑定指定的事件,例如append等。

<div id="test">
    <div class="evt">evt1</div>
</div>

错误的用法,下面方法只为第一个class 为 evt 的div 绑定了click事件,使用append动态创建的div则没有绑定

<script>
    // 先绑定事件再添加div
    $('#test .evt').on('click', function() {alert($(this).text())});
    $('#test').append('<div class="evt">evt2</div>');
</script>

正确的用法如下:

<script>
    $('body').on('click', '#test .evt', function() {alert($(this).text())});
    $('#test').append('<div class="evt">evt2</div>');
</script>
分类: web前端 标签:

pk10开奖大小路珠uploadify 发送多余请求的问题

2015年7月8日 没有评论

使用 uploadify 上传控件上传图片时,发现当uploadify.swf加载完成后会再次发送一个请求,假设当前页的URL是/b7f/demo/upload-test.php, 那么可以在浏览器中发现这个地址/b7f/demo/的请求。想要让其不发送这个多余请求,解决办法是修改对应的js,在 js 中找到如下代码:

this.settings.button_image_url=SWFUpload.completeURL(this.settings.button_image_url);

将上面的代码修改为如下即可。注意可能某些版本中“=”前后会有空格,查找的时候可以只用 this.settings.button_image_url 这段作为关键词

this.settings.button_image_url = this.settings.button_image_url ?  SWFUpload.completeURL(this.settings.button_image_url) : this.settings.button_image_url;
分类: web前端 标签:

mysql 命令自动补齐

2015年7月6日 没有评论

mysql命令行工具自带这个功能,但是默认是禁用的。想启用其实很简单,打开配置文件找到no-auto-rehash,用符号 # 将其注释,另外增加auto-rehash即可。

[mysql]
#no-auto-rehash
auto-rehash
分类: 未分类 标签:

git 命令自动补全

2015年7月5日 没有评论

只需要完成下面两部,就可以实现在mac osx 下git 命令自动补齐

首先下载自动补齐脚本,使用curl命令如下:

curl https://raw.githubusercontent.com/git/git/master/contrib/completion/git-completion.bash -o ~/.git-completion.bash

编辑.profile 文件,在最后增加如下代码:

if [ -f ~/.git-completion.bash ]; then
    source ~/.git-completion.bash
fi

重启终端后应该就可以愉快的使用tab来自动补全了。

分类: 其它 标签:

pk10开奖大小路珠

pk10开奖大小路珠 pk10单双10期以上 pk10大小单双龙虎预测 pk10单双大小计划
pk10开奖记录可以吗 北京pk10 北京pk10开奖现场 北京赛车pk10在线投注
北京pk拾怎么玩 北京pk10免费软件 pk10大小倍投方案 pk10鎬庝箞璧屾墠浼氳耽
pk10有什么办法买单双 pk10有什么办法买单双 pk10单双10期以上 pk10冠军挂机模式
pk10五码连中7期以上 pk10单双10期以上 pk10期数挂机模式 pk10大小投注法稳
sitemap 北京pk10开奖结果 北京pk10走势图 北京赛车pk10在线投注
丰田中国 糯米TXT论坛txt论坛 建湖建阳眼科医院 北京pk10冠亚军和出11 山西快乐十分开奖视频
心得秘籍 北京赛车pk10高手群 北京赛车官网微彩官网巨资app 北京赛车pk10官网开奖 pk10预测
信誉博彩公司 博讯网 博彩全讯网