分类目录归档:技术文献

Qemu命令行参数解析

1.介绍
1.1特征
qemu是一个快速的动态译指的虚拟机。他支持多种处理器指令集的模拟。他有两种运行模式:
(1)全系统仿真,这种模式下,他就像一个PC,有独立CPU和外设,可支持多种操作系统。
(2)用户模式仿真,在这种模式下,他就像Wine一样,成为一个windows api模拟器
2.安装
支持linux、windows、mac os
3.QEMU PC系统仿真
3.1介绍
qemu系统仿真外设:(PCI,)
- i440FX host PCI bridge and PIIX3 PCI to ISA bridge (PCI桥和PCI到ISA桥)
- Cirrus CLGD 5446 PCI VGA card or dummy VGA card with Bochs VESA extensions (hardware level, including all non standard modes).

(VGA设备)
- PS/2 mouse and keyboard (PS2鼠标键盘)
- 2 PCI IDE interfaces with hard disk and CD-ROM support (两个PCI上的IDE借口,用于接硬盘和光驱)
- Floppy disk (软盘)
- NE2000 PCI network adapters (PCI网卡)
- Serial ports (串口)
- Creative SoundBlaster 16 sound card (声卡)
- ENSONIQ AudioPCI ES1370 sound card (声卡)
- Adlib(OPL2) - Yamaha YM3812 compatible chip (音频兼容芯片)
- PCI UHCI USB controller and a virtual USB hub. (PCI UHCI USB控制器和一个虚拟usb hub)
3.2快速启动
qemu linux.img
3.3调用
usage:qemu [options] [disk_image]
一般使用:
-h:帮助

-version:查看版本

-M machine:选择虚拟机

-fda file:
-fdb file:使用文件作为软盘,可以使用主机的“/dev/fd0”

-hda file:硬盘选项
-hdb file:硬盘选项
-hdc file:硬盘选项
-hdd file:硬盘选项

-cdrom file:光驱选项

-drive option[,option[,option[,...]]]:定义一个新的驱动器,有效选项如下:
file=file:定义镜像文件
if=interface:该选项定义驱动被连接的类型,ide, scsi, sd, mtd, floppy, pflash, virtio.
bus=bus,unit=unit:这些选项定义连接的驱动器定义总线数字和单位ID。
index=index:此选项定义驱动器连接在一个给定的接口类型列表中可用的连接器使用索引。(可能为盘符)
media=media:cdrom还是disk
cyls=c,heads=h,secs=s[,trans=t]:选项同‘-hdachs’
snapshot=snapshot:值为"on" or "off",允许被给的驱动器使能snapshot
cache=cache:值为"none", "writeback", or "writethrough" ,控制主机缓存用于访问数据块
aio=aio:值为"threads", or "native" ,选择线程基于磁盘IO还是本地linux IO
format=format:指定磁盘格式,建议使用raw
serial=serial:给设备指定序列号(可能是串口,也可能和串口无关)
addr=addr:指定PCI地址(仅仅:if=virtio)
默认情况下,连续写入缓存被用于所有的块设备,这意味着主机页缓存将被用于读和写数据,但是仅仅当数据被报知被写入存储子系统,写通

知将被发送到客户机。
Instead of ‘-cdrom’ you can use:qemu -drive file=file,index=2,media=cdrom
Instead of ‘-hda’, ‘-hdb’, ‘-hdc’, ‘-hdd’, you can use:
qemu -drive file=file,index=0,media=disk
qemu -drive file=file,index=1,media=disk
qemu -drive file=file,index=2,media=disk
qemu -drive file=file,index=3,media=disk

-boot:启动选项,软盘(a)、硬盘(c)、光驱(D)、网卡(n),默认是从硬盘启动

-snapshot:快照功能

-no-fd-bootchk:禁止启动检测软盘

-m megs:内存大小

-cpu model:选择cpu模式

-smp n:cpu个数

-numar opts:模拟一个多节点的非统一内存访问,如果cpu内存都被忽略,资源平分

-nographic:通常,QEMU使用SDL显示VGA输出,使用这个选项,使qemu成为简单的命令行应用程序

-k language:键盘布局,默认是en-us

-audio-help:声音子系统帮助显示,驱动列表,可调参数等

-soundhw card1,card2,... or -soundhw all:使能音频并选择声卡

-localtime:设置真实时钟为本地时钟,默认是UTC时间

-full-screen:全屏

-pidfile file:存储qemu进程PID到文件,用于脚本启动

-daemonize:初始化后QEMU进程长期驻留,qemu将不从标准IO分离,除非他准备连接到他的设备中的起其中一个。这个选项用于外部程序启动qemu

而不用去初始化静态条件。

-option-rom file:加载一个可选ROM文件内容,用于加载像EtherBoot这样的东西。

-mtdblock file:

USB选项:
-usb:使能usb驱动,默认项

-usbdevice devname:添加usb设备名称,有效的设备如下:
mouse:虚拟鼠标,会覆盖ps/2鼠标仿真
tablet:使用绝对坐标的指针设备(如:触摸屏),也会覆盖ps/2鼠标
disk:file:基于文件的大容量存储设备
host:bus.addr:通过总线地址传递主机设备(仅仅linux平台有效)
host:vendor_id:product_id:通过pid、vid传递主机设备(仅仅linux平台有效)

Network options: (网络这里先不做重点)
-net nic[,vlan=n][,macaddr=addr][,model=type]:

-net user[,vlan=n][,hostname=name]:

-net tap[,vlan=n][,fd=h][,ifname=name][,script=file]:

-net socket[,vlan=n][,fd=h][,listen=[host]:port][,connect=host:port]:

-net socket[,vlan=n][,fd=h][,mcast=maddr:port]:

-net none:

-tftp prefix:

-smb dir:

-redir [tcp|udp]:host-port:[guest-host]:guest-port:重定向网络

-kernel bzImage: 内核镜像

-append cmdline:内核命令行

-initrd file:使用文件作为ram盘

Debug/Expert options:
-serial dev:重定向虚拟串口到主机设备。默认设备是vc在图形模式下,是stdio在非图形界面。这个选项可被使用多次,可模拟4个串口。使用-

serial none会屏蔽所有串口。有效的字符设备是:
vc:虚拟控制台
pty:仅仅linux有效,虚拟tty(一个虚拟伪终端会被立刻分配)
none:没有设备被分配
null:无效设备
/dev/XXX:仅仅linux有效,使用主机tty,e.g. `/dev/ttyS0'.
/dev/parportN:仅仅linux有效,使用主机并口N,当前仅仅SPP(串行式)特征能被使用。
file:filename:写输出到filename,没有字符被读
stdio:仅仅unix可用
pipe:filename:命名管道
COMn:仅仅windows可用,使用主机串口n
udp:[remote_host]:remote_port[@[src_ip]:src_port]:这实现了UDP网络控制台,当远程主机(remote_host)或源ip(src_ip)未指定

,则会被默认设置为0.0.0.0。当未使用源端口(src_port)

tcp:[host]:port[,server][,nowait][,nodelay]:TCP网络控制方式有两种模式。可以发送串口I/O到一个位置或等待一个连接。默认情况下,TCP

网络控制台通过port发送主机。
Example to send tcp console to 192.168.0.2 port 4444
-serial tcp:192.168.0.2:4444
Example to listen and wait on port 4444 for connection
-serial tcp::4444,server
Example to not wait and listen on ip 192.168.0.100 port 4444
-serial tcp:192.168.0.100:4444,server,nowait

telnet:host:port[,server][,nowait][,nodelay]:telnet协议是用来代替原始的tcp协议,这个选项工作类似于-serial tcp。

unix:path[,server][,nowait]:使用unix域套接字代替tcp套接字,这个选项工作类似于-serial tcp。

-parallel dev:重定向虚拟并口到主机设备。最多可虚拟3个并口。

Ubuntu Server + kvm + qemu 搭建虚拟机

查看cpu是否支持。
$ grep vmx /proc/cpuinfo
flags标记中存在vmx即可
安装kvm+qemu
$ sudo apt-get install kvm qemu libvirt-bin virtinst virt-manager virt-viewer
查看kvm是否安装成功
$ sudo virsh -c qemu:///system list
创建 kvm文件夹
$ sudo mkdir /home/kvm
用qemu-img命令创建一个虚拟磁盘
$ qemu-img create -f qcow2 /home/kvm/ubuntu1204.img 10G
NOTE:create意思是创建一个新的磁盘,-f指定该磁盘的类型,可以创建raw的,也可以创建vmware兼容的,这里选择qcow2,qemu自己的类型来安装ubuntu,接下里的参数就是虚拟磁盘的文件名,可以放在你喜欢的任何地方,然后就是磁盘初始大小,一般5G,10G都可以,qemu的磁盘大小是随着需要可以自动的增大的,所以初始可以选择小点。
下载镜像包并且安装虚拟机操作系统
上传iso镜像
$ sudo qemu-system-x86_64 -hda /home/kvm/ubuntu1204.img -cdrom /home/kvm/ubuntu-12.04-server-amd64.iso -boot d -m 1024 -no-acpi -vga std -k en-us -vnc :1

 

VNC Viewer 连接成功后闪退的解决方法

依次点Option-->Advanced-->Expert找到ColourLevel,默认值是pal8,修改为rgb222或full。

Linux n2n 服务

#svn co https://svn.ntop.org/svn/ntop/trunk/n2n
#cd # cd n2n/n2n_v2
#make
#make install

启动supernode
# supernode -l <listening port>              //可以放到rc.local中开机自动运行;并且还要设置防火墙,以免造成无法使用;

 

Windows连接:N2N Edge GUI;

Linux连接:edge命令;   edge -a 10.10.0.33 -c <组名> -k <密码> -l <服务器地址>:<端口>

Windows 10 与 Office 2016 KMS激活

Windows:
slmgr /upk 卸载SN
slmgr /ipk W269N-WFGWX-YVC9B-4J6C9-T83GX 更换KMS SN
slmgr /skms *** 更改KMS服务器地址
slmgr /ato 激活
slmgr /dlv 查看激活状态
Office:
cscript ospp.vbs /inpkey:XQNVK-8JYDB-WJ9W3-YJ8YR-WFG99 更换KMS SN
cscript ospp.vbs /sethst:*** 更改KMS服务器地址
cscript ospp.vbs /act 激活
cscript ospp.vbs /dstatus 查看激活状态

 

KMS服务器地址自己寻找

Ubuntu Server搭建svn服务以及迁移方法

采用apache+svn,http访问方式。

先确定安装了apache,没有安装则用以下命令:

sudo apt-get install apache2
然后安装subversion及svn-apache连接库:

sudo apt-get install subversion
sudo apt-get install libapache2-svn
增加svn用户组,用于管理svn,并加入到www-data的apache组:

sudo addgroup subversion
sudo usermod -G subversion -a www-data
然后可以创建svn项目仓库了:

# 一般可以将项目仓库建立到/home/svn目录
# 假设项目名为myproject,先建立空目录
$ sudo mkdir /home/svn
$ cd /home/svn
$ sudo mkdir myproject
$ sudo chown -R root:subversion myproject
#创建为svn项目,使用以下命令
$ sudo svnadmin create /home/svn/myproject
# 然后才赋予组成员对所有新加入文件仓库的文件拥有相应的权限:
# 如果命令顺序搞错,可能会报错,请参照官方wiki
$ sudo chmod -R g+rws myproject
最后是配置apache,用http协议访问svn服务:

# 在安装了libapache2-svn时会自动生成该文件
$ sudo vim /etc/apache2/mods-available/dav_svn.conf
编辑dav_svn.conf配置文件,内有注释,可以去掉前面的#使语句生效,最后内容大概如下即可:

<Location/svn> #/svn表示http://hostname/svn/myproject
DAV svn
SVNParentPath /home/svn #配置仓库父目录
AuthType Basic
AuthName "ToFishes Project Svn"
AuthUserFile /etc/apache2/dav_svn.passwd #svn用户文件
AuthzSVNAccessFile /etc/apache2/dav_svn.authz #授权访问文件
Require valid-user
</Location>
svn用户文件/etc/apache2/dav_svn.passwd 和 授权访问文件/etc/apache2/dav_svn.authz是不存在的,需要手动创建。

svn用户文件可以通过命令创建:

#首次创建需要加-c选项,同时可以增加一个svn用户
#执行该命令会提示为新用户user_name设置密码
sudo htpasswd -c /etc/subversion/passwd user_name
#以后添加新用户,需要去掉-c选项,否则以前的用户就被覆灭了
sudo htpasswd /etc/subversion/passwd new_name
用户是可以添加了,同时需要管理授权,用于多个svn项目,划分不同的用户组:

用vim /etc/apache2/dav_svn.authz编辑授权文件,无文件则编辑并保存后会自动创建,无需担心。

授权文件内容格式如下:

#用户组指令
[groups]
#格式为 组名 = 用户名1,用户名2
group1 = user1, user2
group2 = user1, user3
#other groups...
#格式为 svn项目的仓库名:对应目录
[svn_repository_name:/]
#设置组的权限,r=read, w=write
@group1= rw
[svn_repository_name2:/web/css]
@group2= rw
改完最后重启apache : sudo /etc/init.d/apache2 restart。这样工作就全部完成了。

其中访问地址是什么呢,只要当前服务器已经绑定了一个域名,并且在apache中启用了此域名的虚拟主机。

比如能正常访问 http://www.linuxidc.com/, 那么svn项目的访问地址就是 http://www.linuxidc.com/svn/项目名。

 

迁移SVN仓库

用以上同样的方法在新服务搭建好SVN,接着导出原svn仓库资料,再导入到新svn仓库即可。

1. 在老服务器进行导出操作:
$ svnadmin dump 原先的repos的目录路径(/repository/directory) > dumpfile.svndump

2. 在新服务器将dumpfile.svndump导入到新的repository 目录中。
$ svnadmin load 新建的repos的目录路径(/repository/directory) < dumpfile.svndump

如果项目仓库比较多,附上一个批处理导出命令,导入的改改就行了:

#!/bin/bash
cd /home/svn
filelist=ls#符号·不是单引号,而是位于键盘感叹号左侧
for fname in $filelist
do
svnadmin dump $fname >/home/svndump/${fname}.svndump
#echo $fname
#最好是root用户执行,否则要sudo了
done
那么本地项目svn的检出及更新地址就需要变更了, 使用TortoiseSVN工具的右键找到Relocate菜单就可以了,而使用命令的话如下:

#在项目目录查看下仓库地址
$ svn info
#回显中的URL项就是旧版地址oldpath
#然后切换到新版地址newpath即可
$ svn switch--relocate http://oldpath http://newpath
#查看信息确认下
$ svn info

 

设置备份

目录结构:
root@HomeServer:/home/svn# ll
total 16
drwxrwxrwx 4 root root 4096 Aug 23 10:10 ./
drwxr-xr-x 14 root root 4096 Aug 23 09:05 ../
drwxrwsrwx 7 root subversion 4096 Aug 23 09:10 MyProject/
drwxrwsrwx 7 root subversion 4096 Aug 23 10:13 Public/
root@HomeServer:/home/svn#

配置文件:
[groups]
g_admin = hbn
g_public = Public
[MyProject:/]
@g_admin = rw
[Public:/]
@g_public = rw