Submitted by admin on 2010, December 26, 1:41 PM
select-repository: Searching `.:..' for linux-2.6.18-xen.hg
select-repository: Ignoring `.'
buildconfigs/select-repository: line 35: hg: command not found
select-repository: Unable to determine Xen repository parent.
make[3]: *** [linux-2.6.18-xen.hg/.valid-src] Error 1
make[3]: Leaving directory `/xen-3.2.0'
make[2]: *** [linux-2.6-xen-install] Error 2
make[2]: Leaving directory `/xen-3.2.0'
make[1]: *** [install-kernels] Error 1
make[1]: Leaving directory `/xen-3.2.0'
make: *** [world] Error 2
yum install mercurial
虚拟化 | 评论:0
| Trackbacks:0
| 阅读:1357
Submitted by admin on 2010, December 24, 12:13 PM
本文只涉及到如何实现xen的全虚拟化与半虚拟化,也就是linux下安装linux,与linux下安装windows。
原理性的东西,以及优化,本人还在研究中。
环境centos 5.2 64bit
安装时候已经包含虚拟化,所以启动系统后已经是带xen的内核,已经安装好xen相关软件。
xen虚拟机的存储有多种方式,根据官方手册上说的有files,lvm,nfs等。我选择了files作为xen虚拟机的存储,因为这样比较简单,当然会有弱点,后面会说到。
先说如何实现半虚拟化:
检查cpu的指令集是否包含pae,这个应该不成问题,我小黑的cpu是T2370都支持。
1.先dd出一个img文件作为虚拟机的安装空间
dd if=/dev/zero of=/xen/image/xen1.img bs=1M count=30720 数值大小可以根据自己需要调整。
2.接着就是安装虚拟机了,安装方式跟宿主机安装一样,可以采取光驱,网络,由于我已经建好了ks的源,方便
期间我就采用ks来安装虚拟机的系统。
执行如下命令:
virt-install -n xen1 -r 256 -p --nographic -f /xen/images/xen1.img -l http://192.168.32.132/centos32bit -x "ip=192.168.32.31 netmask=255.255.255.0 gateway=192.168.32.1 ks=http://192.168.32.132/centos32bit/ksxen.cfg"
成功的话就会自动安装完系统,直到重启进入系统。ks文件就不贴了,和宿主机的配置文件基本一样需要做调整的是分区的名字,宿主机是类似sda的形式,而虚拟机是类似xvda的形式。
那些控制xen的基本命令也不说了,网上一大堆,建议看下官方的xen+man.pdf这本书,很详细。
接着说全虚拟化:
linux安装windows前,我有个误区,想windows是图形的,linux不装图形界面怎么装啊,后来才明白过来,是通过vnc连接,即可以看到图形界面。安装vnc配置vnc也不再叙述,配置下很简单,客户端通过vnc连接到linux的时候一定要输入ip:number(number=1,2...)只输入ip就只能看到一片白的屏幕,什么都没有。
然后先传个iso到宿主机上去,这里要说明下了,网上关于全虚拟化有各种说法,说什么要修改配置文件,修改启动项目,我照着做试了好几遍都不行,后来突然之间找到了个方法解决。
照样dd出img文件,
执行 virt-install -n win2003 -r 512 --vcpus=2 --file=/xen/image/win2003.img --vnc -v -c /root/windows2003_sp2.iso --vnc --vncport=5902 --os-type='windows'
然后会自动生成win2003的配置文件。
接着通过vnc可以安装系统,(说明下,当时看到蓝底白字的图像时候,很兴奋啊)
当windows复制完需要的文件时候,重启,这时候会出问题了。屏幕是会提示一个错误,安装程序不会继续下去了,这时候删除那个在/etc/xen目录下关于win2003的配置文件,再执行上述命令,再自动生成win2003的配置文件,通过vnc查看,安装程序顺利进行。直到重新启动系统,顺利进去win2003系统,这时候安全起见注意开启win2003的远程桌面,关闭宿主机的vnc服务。
以后通过远程桌面管理win2003.
上述简单的说明了下如何实现半虚拟化与全虚拟化的步骤,行文不是很好,希望大家可以看懂。
补充下,采用files作为xen虚拟机的存储,io速度会很慢,基本是宿主机的一半,所以用在生产机器上会有严重问题。听说采取lvm的虚拟分区效果不错,正打算有时间去测试下。
虚拟化 | 评论:0
| Trackbacks:0
| 阅读:951
Submitted by admin on 2010, December 23, 2:03 PM
XEN 的强大管理工具 XEN-SHELL,用他来管理XEN的虚拟机,简直是太方便了。太强大了,支持系统重装,VPS 启动、重启、关机、暂停,连接控制台。
wget http://xen-tools.org/software/xen-shell/xen-shell-1.9.tar.gz
tar zxvf xen-shell-1.9.tar.gz
cd xen-shell
make
make install
1.建立连接VPS的用户与密码
useradd eric
passwd eric
useradd yangzi
passwd yangzi
2.给用户 sudo 的命令权限,和登录shell
User_Alias XENUSERS = eric,yangzi
Cmnd_Alias XEN = /usr/sbin/xm
Cmnd_Alias XENIMG = /usr/bin/xen-create-image
XENUSERS ALL = NOPASSWD: XEN,XENIMG
chsh -s /usr/local/bin/xen-login-shell eric
chsh -s /usr/local/bin/xen-login-shell yangzi
3.修改xen 虚拟机的配置文件,加入
例如:
kernel = "/boot/vmlinuz-2.6.24-28-xen"
ramdisk = "/boot/initrd.img-2.6.24-28-xen"
memory = "64"
name = "xenyang"
xen_shell = "eric"
disk = ['phy:/dev/md0,sda1,w']
root = "/dev/sda1 ro"
on_poweroff = 'destroy'
on_reboot = 'restart'
on_crash = 'restart'
vcpus = '2'
extra = 'xencons=tty1'
vif = [ '' ]
4.(可选)如果你需要用xen-shell 来重装系统的话,就做这步
在eric 的home 目录下新建image.sh
#!/bin/sh
/usr/bin/sudo /usr/bin/xen-create-image --hostname=yang \
--size=1.5Gb \
--ide \
--ip=192.168.6.36 \
--netmask=255.255.255.0 \
--gateway=192.168.6.1 \
--force \
--kernel=/boot/vmlinuz-2.6.24-28-xen \
--dist=hardy \
--mirror=http://mirrors.163.com/ubuntu/ \
--arch=i386 \
--passwd \
--dir=/home/yangzi
虚拟化 | 评论:0
| Trackbacks:0
| 阅读:1098
Submitted by admin on 2010, December 23, 2:02 PM
什么是Xen-shell?
Xen shell 是Xen虚拟机的一部分,它是Xen的一个外部的虚拟操作平台,能够更好的帮助你管理你的虚拟机。当你的虚拟机出现问题无法登陆时,我们可以通过它来执行启动,暂停,停止,重启等命令。如果你还不明白,在参考了我们的教程后,你就明白那有多简单了。
Xen-Shell命令详解:
boot:启动VPS。此命令仅在系统处于关闭状态时有效。
console:连接到VPS控制台,相当于登录到VPS上的系统。按下“ctrl + ]”可以退出VPS控制台并返回到Xen-Shell。
exit:退出Xen-Shell。
help:显示帮助。可以用命令名称做为help的参数,显示此命令的详细使用方法。如果不附带任何参数,刚列出所有命令以及简单的说明。
passwd:修改登录到Xen-Shell所使用的密码。
pause:停止VPS。注意停止并不是关闭,停止后可以使用unpause使VPS立即处于运行状态,而不需要启动过程。
quit:同exit,退出Xen-Shell。
reboot:重新启动VPS。
serial:同console ,连接到VPS控制台。
shutdown:关闭VPS。
status:显示VPS的当前状态。
sysreq:向VPS发送sysreq命令。
top:显示服务器当前资源的使用情况。因为会显示其他的客户信息,我们已经屏蔽此命令。
unpause:启动VPS。此命令仅当VPS处于pause状态时有效。
uptime:显示母服务器系统以及VPS系统的uptime(已经运行的时间)。
version:显示Xen-Shell的版本。
whoami:当前登录到Xen-Shell所使用的帐号。
虚拟化 | 评论:0
| Trackbacks:0
| 阅读:893
Submitted by admin on 2010, December 14, 1:24 AM
OpenVZ是基于Linux内核和系统的操作系统级虚拟化技术,OpenVZ允许物理服务器运行多个操作系统,被称虚拟专用服务器(VPS,Virtual Private Server)或虚拟环境(VE, Virtual Environment),更详细的信息可以参照:http://zh.wikipedia.org/zh/OpenVZ;下面来简要的介绍下openvz的安装和虚拟机的部署:
[root@localhost ~]# cd /etc/yum.repos.d/
[root@localhost yum.repos.d]# wget http://download.openvz.org/openvz.repo
[root@localhost yum.repos.d]# yum -y install ovzkernel.x86_64 ovzkernel-devel.x86_64 vzctl.x86_64 vzquota.x86_64 //安装openvz内核和客户端工具
[root@localhost ~]# grep -v '^#' /etc/grub.conf //确认下次启动时以openvz核启动
default=0
timeout=5
splashimage=(hd0,0)/grub/splash.xpm.gz
hiddenmenu
title Red Hat Enterprise Linux Server (2.6.18-194.3.1.el5.028stab069.5)
root (hd0,0)
kernel /vmlinuz-2.6.18-194.3.1.el5.028stab069.5 ro root=LABEL=/1 rhgb quiet
initrd /initrd-2.6.18-194.3.1.el5.028stab069.5.img
title Red Hat Enterprise Linux Server (2.6.18-164.el5)
root (hd0,0)
kernel /vmlinuz-2.6.18-164.el5 ro root=LABEL=/1 rhgb quiet
initrd /initrd-2.6.18-164.el5.img
[root@localhost ~]# uname -r //重启并确定当前内核为openvz内核
2.6.18-194.3.1.el5.028stab069.5
[root@localhost ~]# service vz status //启动vz服务
OpenVZ is running...
[root@localhost ~]# ls /vz/
dump lock private root template
openvz默认的工作目录为/vz,如何修改这个目录还有待研究,dump目录应该是存放虚拟机备份文件的位置,private和root都是存放当前虚拟机系统文件的目录,template是存放虚拟机模板的目录,lock目录何用,也需要继续研究…
openvz支持的guest操作系统版本模板下载地址:
http://download.openvz.org/template/precreated/
[root@localhost ~]# ls /vz/template/cache/*.gz //下载相应的模板并移动的这个目录
/vz/template/cache/centos-5-i386-afull.tar.gz
/vz/template/cache/centos-5-i386-hostinabox576.tar.gz
[root@localhost ~]# vzctl create 101 --ostemplate centos-5-i386-afull //创建虚拟机,101为ID号,从100开始,需要注意的是只能写模板文件的名称去掉后缀(.tar.gz)的部分,否则会报错
Creating container private area (centos-5-i386-afull)
Performing postcreate actions
Container private area was created
[root@localhost ~]# vzctl set 101 --ipadd 192.168.50.249 --save //设定虚拟机的ip参数,并保存
Adding IP address(es): 192.168.50.249
Saved parameters for CT 101
[root@localhost ~]# vzctl start 101 //启动虚拟机101
Starting container ...
Container is mounted
Adding IP address(es): 192.168.50.249
Setting CPU units: 1000
Configure meminfo: 49152
Container start in progress...
[root@localhost ~]# vzctl enter 101 //进入虚拟机
entered into CT 101
[root@localhost /]# ifconfig |grep 'inet addr' //查看虚拟机网卡信息
inet addr:127.0.0.1 Mask:255.0.0.0
inet addr:127.0.0.1 P-t-P:127.0.0.1 Bcast:0.0.0.0 Mask:255.255.255.255
inet addr:192.168.50.249 P-t-P:192.168.50.249 Bcast:192.168.50.249 Mask:255.255.255.255
[root@localhost /]# df -h //查看虚拟机磁盘信息,可以看到,其实所有的虚拟机都是共享/vz目录,因而在生产环境中使用openvz的时候,最好要独立划出/vz分区,并做lvm
Filesystem Size Used Avail Use% Mounted on
/dev/simfs 23G 501M 21G 3% /
none 96M 4.0K 96M 1% /dev
[root@localhost /]# free //同样,共享系统内存和cpu
total used free shared buffers cached
Mem: 196608 15568 181040 0 0 0
-/+ buffers/cache: 15568 181040
Swap: 0 0 0
[root@localhost /]# cat /proc/cpuinfo |less
processor : 0
vendor_id : GenuineIntel
cpu family : 6
model : 15
model name : Intel(R) Xeon(R) CPU 5110 @ 1.60GHz
stepping : 6
………………………………………………………………………………………
[root@localhost /]# exit //退出虚拟机101
exited from CT 101
[root@localhost ~]# cat /vz/root/101/etc/sysconfig/network-scripts/ifcfg-venet0:1 //也可以直接编辑/vz/root下的文件修改虚拟机相关参数
DEVICE=venet0:1
ONBOOT=yes
IPADDR=192.168.50.249
NETMASK=255.255.255.255
[root@localhost ~]# ls /vz/root/
101 102 103 104 105 106
[root@localhost ~]# ls /vz/private/
101 102 103 104 105 106
总结:
1:openvz是一款独树一帜的虚拟机,同传统的虚拟机,例如xen,kvm,MS hypev-v,VMWARE等相比,安装虚拟机操作系统变的相当的容易,且快速,这些传统的虚拟机安装都需要和真实机安装操作系统的方式一样(这里排除了使用克隆和dd的方式),openvz则使用模板这种方式,从安装上变的高效;
2:默认openvz有一张venet0网卡,虚拟机的网段和物理机的网段通过这个网卡桥接在一起,并没有提供其他的虚拟网卡,这个也有待进一步研究;
3:另外,openvz支持多种方式的管理,例如:hypervm,vtonf等...
4:对硬件没有特殊的要求,kvm需要cpu vt技术的支持,xen装windows也需要vt支持
虚拟化 | 评论:0
| Trackbacks:0
| 阅读:927
Submitted by admin on 2010, December 14, 1:21 AM
系统环境:ubuntu server 9.04
1、openvz简介
OpenVZ是基于Linux内核和作业系统的操作系统级虚拟化技术。OpenVZ允许物理服务器运行多个操作系统,被称虚拟专用服务器(VPS,Virtual Private Server)或虚拟环境(VE, Virtual Environment)。
与VMware这种虚拟机和Xen这种半虚拟化技术相比,OpenVZ的host OS和guest OS都必需是Linux(虽然在不同的虚拟环境里可以用不同的Linux发行版)。但是,OpenVZ声称这样做有性能上的优势。根据OpenVZ网站的说法,使用OpenVZ与使用独立的服务器相比,性能只会有1-3%的损失。
OpenVZ是SWsoft, Inc.公司开发的专有软件Virtuozzo的基础。OpenVZ的授权为GPLv2。
2、安装前准备
删除apparmor(apparmor是一个安全软件,但是与openvz内核配合不太好)
Java代码
sudo /etc/init.d/apparmor stop
sudo update-rc.d -f apparmor remove
sudo apt-get remove apparmor apparmor-utils
sudo /etc/init.d/apparmor stop
sudo update-rc.d -f apparmor remove
sudo apt-get remove apparmor apparmor-utils
更新源列表sources.list,找到有linux-openvz的源。可以用命令查看是否有linux-openvz:
Java代码
sudo apt-get update
sudo apt-cache search openvz
sudo apt-get update
sudo apt-cache search openvz
3、安装openvz及基本配置
linux-openvz:有openvz的linux内核补丁
vztcl:openvz管理工具
vzquota:openvz限额管理工具
Java代码
sudo apt-get install linux-openvz vzctl vzquota
sudo apt-get install linux-openvz vzctl vzquota
内核参数调整:
Java代码
sudo vi /etc/sysctl.conf
#确认有如下几项
net.ipv4.conf.all.rp_filter=1
net.ipv4.icmp_echo_ignore_broadcasts=1
net.ipv4.conf.default.forwarding=1
net.ipv4.conf.default.proxy_arp = 0
net.ipv4.ip_forward=1
kernel.sysrq = 1
net.ipv4.conf.default.send_redirects = 1
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.eth0.proxy_arp=1
#保存退出
sudo sysctl -p
sudo vi /etc/sysctl.conf
#确认有如下几项
net.ipv4.conf.all.rp_filter=1
net.ipv4.icmp_echo_ignore_broadcasts=1
net.ipv4.conf.default.forwarding=1
net.ipv4.conf.default.proxy_arp = 0
net.ipv4.ip_forward=1
kernel.sysrq = 1
net.ipv4.conf.default.send_redirects = 1
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.eth0.proxy_arp=1
#保存退出
sudo sysctl -p
修改openvz全局配置文件/etc/vz/vz.conf。选项NEIGHBOUR_DEVS定义VE使用的网卡。
Java代码
sudo vi /etc/vz/vz.conf
NEIGHBOUR_DEVS=all
sudo vi /etc/vz/vz.conf
NEIGHBOUR_DEVS=all
修改vps.basic配置文件,默认OpenVz创建VE时会复制/etc/vz/conf/ve-vps.basic.conf-sample的内容为新VE配置文件。修改此文件可以避免每次创建VE时重复修改配置文件。大部分是限额调整,可以根据实际情况调整。这里在末尾加一行打开部分功能。
Java代码
sudo vi /etc/vz/conf/ve-vps.basic.conf-sample
#加入以下
CAPABILITY="CHOWN:on DAC_READ_SEARCH:on SETGID:on SETUID:on NET_BIND_SERVICE:on NET_ADMIN:on SYS_CHROOT:on SYS_NICE:on"
sudo vi /etc/vz/conf/ve-vps.basic.conf-sample
#加入以下
CAPABILITY="CHOWN:on DAC_READ_SEARCH:on SETGID:on SETUID:on NET_BIND_SERVICE:on NET_ADMIN:on SYS_CHROOT:on SYS_NICE:on"
修改引导文件,默认启动进入openvz内核。然后重启,用 uname -a 查看是否进入openvz的内核。
Java代码
sudo vi /boot/grub/menu.lst
#修改default
sudo vi /boot/grub/menu.lst
#修改default
4、openvz基本操作
openvz创建ve十分简单,只需下载官方的模板放到/var/lib/vz/template/cache里,用vzctl工具创建后稍加修改即可。
模板下载地址:http://download.openvz.org/template/precreated/
Java代码
wget http://download.openvz.org/template/precreated/old/ubuntu-8.04-i386-minimal.tar.gz
sudo mv ubuntu-8.04-i386-minimal.tar.gz /var/lib/vz/template/cache/
sudo vzctl create 101 --ostemplate ubuntu-8.04-i386-minimal
wget http://download.openvz.org/template/precreated/old/ubuntu-8.04-i386-minimal.tar.gz
sudo mv ubuntu-8.04-i386-minimal.tar.gz /var/lib/vz/template/cache/
sudo vzctl create 101 --ostemplate ubuntu-8.04-i386-minimal
运行vzctl creat命令后会生成101(VE的ID,简称VEID,必须设置成100以上)VE的配置文件/etc/vz/conf/101.conf。101VE的根目录被默认放到/var/lib/vz/private/101。
5、VE管理与vzctl的使用
常用命令:
Java代码
#启动VE
sudo vzctl start 101
#关闭VE
sudo vzctl stop 101
#进入VE与退出VE
sudo vzctl enter 101
exit
#删除VE
sudo vzctl destroy 101
#设置主机名
sudo vzctl set 101 --hostname test --save
#在VE中执行命令
sudo vzctl exec 101 ps -aux
#启动VE
sudo vzctl start 101
#关闭VE
sudo vzctl stop 101
#进入VE与退出VE
sudo vzctl enter 101
exit
#删除VE
sudo vzctl destroy 101
#设置主机名
sudo vzctl set 101 --hostname test --save
#在VE中执行命令
sudo vzctl exec 101 ps -aux
更多关于vzctl的配置命令可以参考官方的openvvz文档。
6、其他
VE的限制资源使用情况可以在VE里运行命令查看:more /proc/user_beancounters
其中held是正在使用的资源数,maxheld是做大使用资源数。failcnt是超过限制的资源数。可以根据failcnt和maxheld调整VE的资源限制(UBC)。
虚拟化 | 评论:0
| Trackbacks:0
| 阅读:856
Submitted by admin on 2010, December 14, 12:51 AM
现在多数的主机虚拟系统是基于管理程序的(hypervisor-based),而基于容器的虚拟化(container-based)技术提供了另外一种虚拟化的途径。通过在一台物理机上创建并运行多个独立的容器,所有的容器都运行在预先安装的主操作系统之上,管理员可以在容器中创建虚拟机 (VM)。每个虚拟机的运行都是独立于其他容器中的虚拟机,通过这样的方式保障虚拟机的安全性。开源程序OpenVZ使用的就是这种虚拟机技术。下面我就来给大家讲一讲使用openvz构建linux虚拟化的解决方案。
OpenVZ实现虚拟化的方式完全不同于其他的开源虚拟化产品(如Xen和KVM)。跟其他虚拟化技术相比而言,OpenVZ有一点限制要求: 宿主机(host)和子系统(guest)都必须运行Linux,子系统可以支持不同版本的Linux。基于容器虚拟化技术的商业化产品 Parallels Virtuozzo Containers就是在OpenVZ的原理基础上实现的。
这种实现方式最大的优势就是它的性能。在OpenVZ中,所有通讯都是在Linux系统之间完成的,因此不需要复杂的翻译和转化过程。同时,它的安装方式也从根本上保证了高安全性,因为在不同的容器之间实现了完全的独立性。
安装
OpenVZ可以运行在Red Hat 和 Debian等主流Linux操作系统之上,目前还不支持Ubuntu。如下的安装过程是OpenVZ在Red Hat Linux系统下实现的。在64位操作系统中,安装过程支持通过Yum或RPM安装包的方式来完成。
1. 下载OpenVZ安装包:在开始安装前,下载库源文件(repository file),并把下载的文件放在”/etc/yum.repos.d”目录下。您可以使用如下的wget命令来下载库源文件。
wget http://download.openvz.org/openvz.repo
使用下面这条命令,您可以加载库源文件中的GPG key 校验码:
rpm –import http://download.openvz.org/RPM-GPG-Key-OpenVZ
2. 安装OpenVZ内核。OpneVZ提供了不同的内核方式供选择,选择哪种内核取决于您的硬件条件及您将要创建的容器数量。首先是SMP内核,用于对称式 多处理器环境。支持高达到4GB的RAM及10到20个容器。第二种是”entnosplit” 内核,这种内核支持PAE (Physical Address Extension)技术,可以支持到高达64GB的RAM及10到30个容器。最后一种是Enterprise内核,这种方式同时支持SMP和PAE, 是多容器环境的最佳配置,最多可以同时运行20到30个容器。当在32位操作系统中安装OpenVZ时,选择合适内核形式对您而言是非常重要的。
如果您是在64位操作系统环境中安装,选择SMP内核就可以满足所有的需求。因为在64位的系统中不存在操作系统只能支持4GB缓存的限制(PAE技术本身就是为了解决缓存限制的问题)。如果您使用的64位操作系统,通过如下命令来安装内核:
yum install ovzkernel-smp
现在,OpenVZ内核已经安装并被自动加载到GRUB配置中。重启之后,OpenVZ内核会自动加载运行。
3. 在重启之前,您需要设置几个sysctl参数。请确保在列表1中设计涉及的所有参数设置都已经保存在”/etc/sysctl.conf”文件中
列表1 :. 在 /etc/sysctl.conf文件中需要设置的参数:
net.ipv4.ip_forward = 1
net.ipv6.conf.default.forwarding = 1
net.ipv6.conf.all.forwarding = 1
net.ipv4.conf.default.proxy_arp = 0
net.ipv4.conf.all.rp_filter = 1
kernel.sysrq = 1
net.ipv4.conf.default.send_redirects = 1
net.ipv4.conf.all.send_redirects = 0
4. 确保SELinux选项是关闭的。您可以通过在”/etc/sysconfig/selinux”文件中设置如下的值来关闭该选项:
SELINUX=disabled
5. 安装OpenVZ工具。用如下命令来实现:
yum install vzctl vzquota
6. 编辑”/etc/vz.conf”文件。如果您计划在虚拟机中使用的IP地址和宿主机的IP地址不在一个地址段中,就需要确保该文件包含如下参数:
NEIGHBOUR_DEVS=all
7. 重启系统,OpenVZ内核将激活。
虚拟化 | 评论:0
| Trackbacks:0
| 阅读:792
Submitted by admin on 2010, December 14, 12:51 AM
缩主机与VPS的IP不同段时
#NEIGHBOUR_DEVS=detect
NEIGHBOUR_DEVS=all
虚拟化 | 评论:0
| Trackbacks:0
| 阅读:781