分类 [ 系统 ] 下的全部文章

之前用蓝灯,免费版不稳定,收费版太贵;后来搭建shadowsocks梯子,不错,但是好景不长,在今年的5月35日之前,马上被和谐了,被几个中国学者攻破了,能识别85%的ss通道,它们为此发表了一篇论文,无耻学者;再后来采用shadowsocksr做梯子,大概用了半年,国家70大寿之际又被断了;现在干脆走ssh隧道,用ssh建立起来的隧道是加密的,很难再识别什么特征码了,只能针对ip统计流量了,当同一ip的ssh流量达到一个阈值时开始干扰:降低速度、不定期断开、彻底封死,所以即使使用ssh,也建议定期更换服务器的ip地址。

1、原理

原理很简单,见下图:

 

就是在墙内的客户机上采用ssh工具(如Linux的ssh,windows上的putty.exe、plink.exe等)与墙外的机器上的ssh服务器建立动态连接,形成一个加密的通道(或称隧道),这个通道可以通过长城防火墙(防火墙只看到存在一个ssh连接,但不知道通道里的内容,ssh连接一般会放行),防火墙会统计从墙内到达墙外某个ip地址的加密流量,当在一段时间内,流量到达一个阈值,就会强行封掉这个ip,所以良好的习惯是定期更换墙外机器的ip地址。

前提是你必须在墙外有一台开启了ssh服务的机器,比如租用一台vps,然后安装Linux操作系统,再安装openssh-server就可以了。

2、在windows 上采用plink.exe工具建立隧道

把plink.exe下载到本地硬盘的一个目录下,比如C:\ssh,然后用记事本编辑一个批处理文件plink.bat,此文件也放在c:\ssh目录下,文件内容就是下面一行:

C:\ssh\plink.exe  -batch  -C  -N   -pw  Pass87654321  sunshine@38.84.133.187  -D  127.0.0.1:8070

其中38.84.133.187为墙外机器的ip地址,sunshine为用户名,Pass87654321为密码,8070为本地监听的端口,参数-N指明本链接不是用于交互,-C指明吃药压缩传输,-batch完全杜绝交互,参数-D很关键,开启了动态转发功能,即只要本地到达127.0.0.1:8070的数据包都通过隧道转发到墙外的机器,墙外机器收到数据包再访问互联网,回来的数据按原路返回。为了便于启动,建议在桌面上建立快捷方式,指到c:\ssh\plink.bat。

隧道建立之后,墙内电脑上会监听127.0.0.1:8070,socket5格式,当然具体的端口8070可以随便修改,最好大于1024。电脑上的浏览器设置为socket5的代理,同时DNS查询也走隧道,比如windows 10上的firefox浏览器设置如下(点击右上角的“三”图标,然后点击“Options",滚到屏幕到最后,点击Network Setting下的“Settings...”):

现在你应该可以用火狐浏览器畅真正的游互联网了,比如www.google.com、twitter.com、www.youtube.com什么的。强烈建议你把firefox设置成无痕模式,这样就不会记录任何浏览历史了:点击“三”、“选项”、“隐私和安全”、在历史下面选择“不记录历史”,然后重启浏览器就可以。另外建议在安装chrome浏览器,设置成不用代理上网,专门上国内的网站。

整个通讯过程可以这样描述:你在火狐浏览器里输入网址www.google.com并回车,浏览器回向127.0.0.1:8070发送DNS请求解析网址,plink.exe程序收到从8070端口发来的数据包,经过加密后发向墙外的机器38.84.133.187:22,数据包到达长城防火墙时被检查,发现是ssh通信包,但是不知道里面是什么东西,放行通过,墙外机器收到数据包后经过解密发现是DNS请求,于是向墙外的DNS服务器请求解析,DNS服务器返回www.google.com对应的ip地址,墙外机器把解析到的Ip地址打包加密后发向墙内的电脑,中途到达长城防火墙时又被检查,发现不了问题,于是放行通过,墙内电脑上的plink.exe程序收到数据包后经解密,然后发给浏览器,浏览器拿到谷歌网址的ip后正式向谷歌网站服务器发浏览网页的请求,请求包到达127.0.0.1:8070后被plink.exe程序收到,plink.exe经过加密后发向墙外的机器38.84.133.187:22,中途被长城防火墙检查后放行,墙外电脑收到数据包后解密发现是请求谷歌网站,于是向谷歌网站服务器发起浏览网站的请求,谷歌服务器返回网站内容,墙外电脑收到谷歌返回的数据后加密并发回墙内电脑,中途再次被长城防火墙检查后放行,然后墙内电脑上的plink.exe程序收到数据包,经解密后发给浏览器,浏览器于是显示谷歌网站,哦耶,终于看到了谷歌网站了!

也许有同学问,长城防火墙为什么不能解密ssh协议的数据包呢?告诉你,要破解经ssh协议加密过的数据包,目前的电脑要经过上百年的计算才行,除非用量子计算机!

3、在墙内Linux机器上采用ssh命令建立隧道

Linux操作系统上不用额外安装任何软件,直接采用ssh命令就可以了,命令格式如下:

ssh  -C   -nNT  sunshine@38.84.133.187  -D  127.0.0.1:8070

-C参数开启压缩功能,可以节省流量,-n参数让ssh后台运行,-N参数不执行远程命令,只转发端口,-T参数指示服务器不分配伪tty。

4、通过密钥方式验证身份

上面都是采用用户名加密码的方式登录墙外电脑的,密码很容易泄密,下面讲讲采用对称密钥登录,这是非常安全的了。

首先要在墙外电脑上产生对称密钥,公钥就放在墙外电脑中,而私钥放在墙内电脑中。用sunshine用户登录墙外电脑并执行下面的命令:

ssh-keygen -t rsa -b 4096                                     -----产生密钥对。后面一路回车,直到本命令结束

cat .ssh/id_rsa.pub >>.ssh/authorized_keys                              ----把公钥附加在.ssh/authorized_keys文件的后面

chmod 600 ~/.ssh/authorized_keys

 

把私钥(即文件.ssh/id_rsa)下载到墙内电脑中的C:\ssh目录下(对于windows系统)或~/.ssh目录下并改名为sunshine.key(对于Linux系统),然后在windows上要运行程序puttygen.exe转换私钥格式(Linux系统不要转换),操作如下图所示:

假设转换后的私钥文件名为C:\ssh\plink.ppk,那么在windows上的批处理文件内容改为:

C:\ssh\plink.exe  -batch  -C  -N  -i   C:\ssh\plink.ppk  sunshine@38.84.133.187  -D  127.0.0.1:8070

在Linux操作系统上,先要把~/.ssh/sunshine.key的权限改为600,以后运行下面的命令免密码登录:

ssh  -f  -N  -i  ~/.ssh/sunshine.key  sunshine@38.84.133.187  -D  127.0.0.1:8070

 


注意:如果上面的地址127.0.0.1更换成电脑网卡的ip地址,那么就开启了局域网全代理,其他电脑可以直接使用本机的代理。如果你有一台openwrt路由器,就可以在路由器上运行下述命令(假设局域网的网关是192.168.0.1):

ssh  -qTfnN  sunshine@38.84.133.187 -D  192.168.0.1:8070

这样局域网内的其他设备代理地址采用192.168.0.1,对于苹果手机和平板电脑,可以这样设置:在openwrt路由器的/www目录下放置一个文件proxy.pac,文件内容如下:

function FindProxyForURL(url, host)
{
           return "SOCKS 192.168.0.1:8070";
}

然后在手机的wifi连接上点击右侧的圆圈中一个i的图标,然后滚到屏幕最下面,点击“http代理”下方的“自动”,再输入URL网址:

http://192.168.0.1/proxy.pac

保存即可。


 

 

5、在andriod手机上实现ssh隧道

How to Unlock and Root the Google Pixel 2

1、问题:

远端机安装了ubuntu server 14.04 x64,本地机器安装了windows 8.1,现在要实现从本地机器上登陆到远端机器的图形桌面,实现远程ide软件开发。

2、解决方法:

在远端机器上安装轻量级桌面xfce,如果是局域网内,也可以考虑安装其他重量级图形桌面软件,如gnome。具体操作如下:

如果没有设置机器名,那么先设置机器名:
echo "myPC" >/etc/hostname
hostname -F /etc/hostname

如果需要中文而之前没有安装的话,则安装中文:
apt-get -y install fonts-wqy-zenhei fonts-wqy-microhei apt-get install language-pack-zh-hans

修改~/.profile,把mesg用if语句包含起来(否则登陆时会报错:stdin: is not a tty):
if `tty -s`; then
mesg n
fi

可以采用下面两种方法之一,方法2好于方法1。

1)、采用X2Go登陆软件/

安装xfce:
apt-get install xfce4

安装x2goserver:
apt-get install python-software-properties software-properties-common
apt-add-repository -y ppa:x2go/stable
apt-get update
apt-get install x2goserver x2goserver-xsession

重启远端机器:
reboot

windows上安装x2goclient:
从这里http://code.x2go.org/releases/X2GoClient_latest_mswin32-setup.exe下载安装包,然后安装,在桌面上产生快捷方式 X2Go Client。

开始远程图形登陆:
双击桌面上的X2Go Client启动

确认后登陆提示输入账号和密码,登陆成功后显示如下画面:

X2Go走ssh协议,安全没问题,但是xfce有点简陋,同时x2go不稳定。建议采用下面的方法:

2)、采用nomachine登陆软件和lxde桌面

在远程机器上执行:

wget http://download.nomachine.com/download/5.1/Linux/nomachine_5.1.26_1_amd64.deb

dpkg -i nomachine_5.1.26_1_amd64.deb       <--如果报缺少依赖包,执行 apt-get -y -f install

apt-get -y install lxde

reboot

nomachine采用的端口比较多,如果开启了防火墙,强烈建议修改nomachine配置文件/usr/NX/etc/server.cfg中的参数:
EnableFirewallConfiguration 1

这样nxserver程序会自动设置防火墙。

windows机器上下载http://download.nomachine.com/download/5.1/Windows/nomachine_5.1.26_1.exe并安装它,在桌面上产生快捷启动方式NoMachine。双击它登陆:

客户有需求:一个C/S应用程序需要一台数据库服务器和几十台客户机,如果公司网络中断,并不影响应用,所以每台客户机本地单独有一个数据库,而服务器上的数据库中保存全部客户机的数据,并且能允许客户机和服务器两端的数据库单独修改,网络良好的情况下客户机本地数据库与保存在服务器上的数据一致,例如服务器保存A、B、C三份数据(分别是客户机A、B、C的数据),而A客户机本地数据库中只保存A份数据。

 

1、概览

一台数据库服务器与多台客户机数据库实现筛选表行双向数据库同步,即每台客户机只同步自己的数据记录,而服务器保全了所有客户机的数据记录,并且允许在两端做修改。要求有内部的DNS服务器做机器名的解析,如果没有就要通过本地的hosts文件做机器名的解析。数据库服务器上安装windows server 2008 R2 + SQL Server 2008 R2,客户机上安装windows 8 + SQL Server 2008 Express。

我们在每个同步的表里添加字符型的HostID字段,存放客户机名或者特有的机器识别信息,每台客户机上的应用程序在插入表记录时给HostID字段一个具体的值,在定义发布时指定筛选条件[HostID] = HOST_NAME()。假设服务器机器名为SQLServer。

本方案采用微软的合并复制同步机制。

 

 

 

2、客户机和服务器上都操作

 

1、开启数据库的远程tcp连接

进入SSMS管理工具,右击最上面的实例名,然后点击“属性”,“连接”,勾选“允许远程连接到此服务器”。再次右击实例名,然后点击“方面”,确保服务器配置下的参数RemoteAccessEnabled=True。

打开配置管理器,点击“SQL Server网络配置”,双击TCP/IP,然后启用,在“IP地址”页上,翻到最后,IPALL里面TCP动态端口为空,TCP端口为1433,然后重启SQL Server服务。

 

2、确保数据库实例名与机器名相同

使用SSMS登录到数据库,然后:

查询现有实例名:select srvname,srvnetname from master..sysservers    ------比如查询到的实例名是E305-PC,如果与机器名不同,那么先删除然后添加:

删除实例名:sp_dropserver 'E305-PC'

添加实例名:sp_addserver 'NO25','local'      -----假如机器名是NO25

重启数据库服务。

 

3、创建业务数据库

 

4、开启防火墙

开启防火墙:打开防火墙——高级设置——入站规则——新建规则——选择程序——位置:C:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\Binn\sqlserver.exe。 SQL Server的端口号是1433。

 

 

3、服务器上操作

 

1、创建本地windows用户sql2008,加入Administrators组。

2、创建快照保存目录:在非系统盘上创建目录SQLServerReplicate,并且共享为\\SQLServer\SQLServerReplicate,everyone具有读权限,sql2008具有读写权限。

3、把windows用户sql2008设为数据库的登录名,并且是业务数据库的db_owner,同时具备public、serveradmin和sysadmin的服务器角色。

4、在业务数据库中创建表,对于自增长的字段,设置其“不用于复制”为“否”。

5、创建发布

采用SSMS管理工具登陆发布数据服务器,展开“复制”,鼠标右击“本地发布”-->新建发布,然后选择发布的数据库,再选择“合并发布”,再选择SQL Server 2008兼容的发布,然后再选择需要发布的表,接下来会提示会在表里添加专门用于同步的列uniqueidentifier,在接下来的“筛选表行”界面上点击“添加”按钮下的“添加筛选器”,在这里为需要筛选数据的每个表定义筛选条件(即查询的结果就是需要同步的数据,例如:SELECT <published_columns> FROM [dbo].[QC] WHERE [HostID] = HOST_NAME(),黄色部分不能改动),下一步,在“快照代理”界面上定义执行计划为“在每周 星期一 的 4:00:00 执行。…..”,下一步,在“代理安全性”界面上点击“安全设置”,然后输入操作系统用户SQLServer \sql2008和密码(假如服务器的机器名是SQLServer),“通过模拟进程账户”连接到发布服务器(即发布数据库),这里的“模拟进程账户”就是上面设置的SQLServer \sql2008。最后不断地“下一步”直到输入发布名的界面,输入一个名字并点击完成。

6、把SQLServer\sql2008用户加入发布访问列表中:右击刚刚创建的发布à属性à发布访问列表,然后加入sql2008这个windows账户。

7、验证发布:右击发布名字à查看快照代理状态,或者进入目录\\SQLServer\ SQLServerReplicate检查有没快照数据。

 

8、创建推送订阅

继续在服务器上的数据库中操作。
展开“复制”、“本地发布”,右击其中的一个发布名称,“新建订阅”,下一步,确保选中的发布名字,点选“在发布服务器SQLServer\SQL2008SRV上运行所有代理(推送订阅)”,下一步,点击“添加SQL Server订阅服务器”按钮,然后输入登陆到客户数据库的信息,指定一个订阅数据库,下一步,进入“合并代理安全性”界面上点击“…”按钮定义:运行代理进程的windows账户SQLServer\sql2008和密码,“通过模拟进程账户”登陆到发布服务器,通过sa账户登陆到订阅数据库(客户机的数据库);确认后点击下一步,“代理计划”选择“连续运行”,下一步,在订阅类型界面上选择“服务器”,下一步,在“HOST_NAME值”界面上填写HOST_NAME的值,默认就是客户机器名(也可以定义其他的值,但是在本客户机上往数据库插入记录时,字段HostID的值与这里定义的HOST_NAME值相同),这个值就是用于筛选表行的,不要填写错误,下一步,下一步,直到完成。

为了以后方便创建更多的订阅,设计的如下的存储过程:
CREATE PROCEDURE pro_CreateSubscriber
@Subscriber nvarchar(20) --订阅客户机的机器名,如N'NO33'
AS
BEGIN
exec sp_addmergesubscription @publication = N'pub1', @subscriber = @Subscriber, @subscriber_db = N'ProduceManager', @subscription_type = N'Push', @sync_type = N'Automatic', @subscriber_type = N'Global', @subscription_priority = 75, @description = null, @use_interactive_resolver = N'False', @hostname = @Subscriber
exec sp_addmergepushsubscription_agent @publication = N'pub1', @subscriber = @Subscriber, @subscriber_db = N'ProduceManager', @job_login = N'NO41\sql2008', @job_password = N'123456', @subscriber_security_mode = 0, @subscriber_login = N'sa', @subscriber_password = N'123456', @publisher_security_mode = 1, @frequency_type = 4, @frequency_interval = 1, @frequency_relative_interval = 1, @frequency_recurrence_factor = 1, @frequency_subday = 2, @frequency_subday_interval = 30, @active_start_time_of_day = 0, @active_end_time_of_day = 235959, @active_start_date = 20150913, @active_end_date = 99991231, @enabled_for_syncmgr = N'False'
END
GO

此后在服务器上的数据库中创建订阅见简单了,只需执行这个存储过程即可,即:exec pro_CreateSubscriber N'MyCOmputer',就是给客户机MyComputer创建订阅。

 

9、验证订阅:右击刚刚创建的订阅名à查看同步状态,或者直接在客户机数据库中查看库表。

 

附录:脚本

本实例脚本假定:服务器机器名SQLServer,服务器数据库实例名SQL2008SRV,客户机器名WYQ,客户机数据库实例名EXPRESS,业务数据库ProduceManager,同步两个表xinxi_tb和kecheng_tb。sql2008和客户机数据库sa的密码都是Passwd123。

创建发布的脚本

use [ProduceManager]

exec sp_replicationdboption @dbname = N'ProduceManager', @optname = N'merge publish', @value = N'true'

GO

 

-- 添加合并发布

use [ProduceManager]

exec sp_addmergepublication @publication = N'pub1', @description = N'来自发布服务器“SQLServer\SQL2008SRV”的数据库“ProduceManager”的合并发布。', @sync_mode = N'native', @retention = 14, @allow_push = N'true', @allow_pull = N'true', @allow_anonymous = N'true', @enabled_for_internet = N'false', @snapshot_in_defaultfolder = N'true', @compress_snapshot = N'false', @ftp_port = 21, @ftp_subdirectory = N'ftp', @ftp_login = N'anonymous', @allow_subscription_copy = N'false', @add_to_active_directory = N'false', @dynamic_filters = N'true', @conflict_retention = 14, @keep_partition_changes = N'false', @allow_synctoalternate = N'false', @max_concurrent_merge = 0, @max_concurrent_dynamic_snapshots = 0, @use_partition_groups = null, @publication_compatibility_level = N'100RTM', @replicate_ddl = 1, @allow_subscriber_initiated_snapshot = N'false', @allow_web_synchronization = N'false', @allow_partition_realignment = N'true', @retention_period_unit = N'days', @conflict_logging = N'both', @automatic_reinitialization_policy = 0

GO 

 

exec sp_addpublication_snapshot @publication = N'pub1', @frequency_type = 8, @frequency_interval = 2, @frequency_relative_interval = 1, @frequency_recurrence_factor = 1, @frequency_subday = 1, @frequency_subday_interval = 5, @active_start_time_of_day = 40000, @active_end_time_of_day = 235959, @active_start_date = 0, @active_end_date = 0, @job_login = N'SQLServer\sql2008', @job_password = N'Passwd123', @publisher_security_mode = 1

 GO

 

-- 配置表kecheng_tb

use [ProduceManager]

exec sp_addmergearticle @publication = N'pub1', @article = N'kecheng_tb', @source_owner = N'dbo', @source_object = N'kecheng_tb', @type = N'table', @description = null, @creation_script = null, @pre_creation_cmd = N'drop', @schema_option = 0x000000010C034FD1, @identityrangemanagementoption = N'manual', @destination_owner = N'dbo', @force_reinit_subscription = 1, @column_tracking = N'false', @subset_filterclause = N'[HostID] = HOST_NAME()', @vertical_partition = N'false', @verify_resolver_signature = 1, @allow_interactive_resolver = N'false', @fast_multicol_updateproc = N'true', @check_permissions = 0, @subscriber_upload_options = 0, @delete_tracking = N'true', @compensate_for_errors = N'false', @stream_blob_columns = N'false', @partition_options = 0

GO 

 

-- 配置表xinxi_tb

use [ProduceManager]

exec sp_addmergearticle @publication = N'pub1', @article = N'xinxi_tb', @source_owner = N'dbo', @source_object = N'xinxi_tb', @type = N'table', @description = null, @creation_script = null, @pre_creation_cmd = N'drop', @schema_option = 0x000000010C034FD1, @identityrangemanagementoption = N'auto', @pub_identity_range = 10000, @identity_range = 1000, @threshold = 80, @destination_owner = N'dbo', @force_reinit_subscription = 1, @column_tracking = N'false', @subset_filterclause = N'[HostID] = HOST_NAME()', @vertical_partition = N'false', @verify_resolver_signature = 1, @allow_interactive_resolver = N'false', @fast_multicol_updateproc = N'true', @check_permissions = 0, @subscriber_upload_options = 0, @delete_tracking = N'true', @compensate_for_errors = N'false', @stream_blob_columns = N'false', @partition_options = 0

GO

  

 

创建定于的脚本

-----------------开始: 要在发布服务器“SQLServer\SQL2008SRV”上运行的脚本-----------------

use [ProduceManager]

exec sp_addmergesubscription @publication = N'pub1', @subscriber = N'WYQ\EXPRESS', @subscriber_db = N'ProduceManager', @subscription_type = N'Push', @sync_type = N'Automatic', @subscriber_type = N'Global', @subscription_priority = 75, @description = null, @use_interactive_resolver = N'False', @hostname = N'WYQ'

 

exec sp_addmergepushsubscription_agent @publication = N'pub1', @subscriber = N'WYQ\EXPRESS', @subscriber_db = N'ProduceManager', @job_login = N'SQLServer\sql2008', @job_password = N'Passwd123', @subscriber_security_mode = 0, @subscriber_login = N'sa', @subscriber_password = N'Passwd123', @publisher_security_mode = 1, @frequency_type = 64, @frequency_interval = 0, @frequency_relative_interval = 0, @frequency_recurrence_factor = 0, @frequency_subday = 0, @frequency_subday_interval = 0, @active_start_time_of_day = 0, @active_end_time_of_day = 235959, @active_start_date = 20150815, @active_end_date = 99991231, @enabled_for_syncmgr = N'False'

GO

-----------------结束: 要在发布服务器“SQLServer\SQL2008SRV”上运行的脚本-----------------

 

 

 

 

适合于windows 8、Windows Server 2012、Windows Multipoint Server 2012操作系统,打上补丁之后就支持多个用户同时登陆,同时登陆的用户数没有限制,而且还支持统一账户同时登陆多次。另外还有win7、WinXP、Windows Server 2008、Windows Server 2003等操作系统的多用户补丁。需要的朋友请邮件联系:liangming.wang@gmail.com

I have concurrent RDP patchers for windows series Operating System, such as Windows Server 2012, Windows Multipoint Server 2012, Windows Server 2008, Windows Server 2003, Windows 8, Windows 7, Window XP.  And the users is unlimited. Please contact me by Email to get it: liangming.wang@gmail.com

 

Linux命令使用技巧 2012年10月23日

1、把一个目录包括其子目录中的所有文件file1改名为file4:
find .  -name  file1 -exec rename file1 file4 {}  \;
引申用法:
find . -name foo? -exec rename foo foo0 {} \;
find . -name foo?? -exec rename foo foo00 {}  \;
----即把目录的下所有foo1,foo2,foo3,foo4,....,foo278改为foo001,foo002,foo003,....,foo278

2、采用vim非交互编辑文件:
首先把vim的编辑命令保存到一个文件中,比如cmds.txt,然后采用如下方式运行vim非交互编辑文件file.txt:
vim  -s  cmds.txt   file.txt

比如我要在SHELL程序中替换文件abc.c中全部的open为fopen,那么cmds.txt的内容如下:

:g/open/s//fopen/g
😡

然后把下面的语句加到SHELL程序中即可:

vim  -s  cmds.txt   abc.c

 

 

在教育培训机构的Linux教学过程中,学生往往要做安装软件的实验,如果直接把DVD安装光盘的文件拷贝到每一台学生机的硬盘里并做成本地安装源,势必会浪费大量的硬盘空间,如果在局域网的一台电脑上搭建安装源,那么学生同样能达到快捷安装软件的目的。

Windows Server 2008 R2 Server Core 安装完成后,没有图形界面,只显示一个命令窗口供我们输入命令,这一点微软借鉴了Linux的字符界面模式,通过输入命令来管理计算机可以达到非常高的效率,但前提是我们必须熟悉这些命令。

阅读全文

一、简介

VMware网络配置详解一:三种网络模式简介安装好虚拟机以后,在网络连接里面可以看到多了两块网卡

阅读全文

在大小数据中心转变成服务器虚拟化似乎是不可阻挡的趋势,但对于虚拟化浪潮不断地上升,之前只有一个供应商能够提供必要的功能,互操作性和稳定性,能够把服务器虚拟化从科研重地投入到日常生产中。但现在情况已不再是如此

阅读全文

内核映像zImage是由一个压缩后的内核piggy.o,连接一段初始化及解压功能的代码(head.o misc.o)组成的。

一、文件linux/arch/arm/boot/compressed/head.S是linux内核启动过程执行的第一个文件——主要是解压内核、重定位代码并且跳转到真正的内核。