配置WordPress使用LS-Cache缓存数据

未分类

前言

米饭之所以中意 OpenLiteSpeed 还是因为其 LS-CACHE 用于加速 WordPress 更方便也更稳定,缓存方案由 LiteSpeed 官方维护而不是第三方开发者。这里就介绍一下,WP 如何快速使用 LS Cache。

LS Cache 简单高效,据 LiteSpeedTech 公司宣称效果优于 Varnish,并且能够及时的兼容服务器软件上的最新技术。

安装

虚拟主机

如果虚拟主机厂商使用 LiteSpeed Server 作为服务器软件代替 Apache,那么很可能也会购买 LS Cache 扩展。一些大牌的如 HawkHost、A2Hosting 等,牌子越大越有可能。

服务器

服务器环境建议使用 ols1clk 来一键安装 OpenLiteSpeed 和 WordPress,默认就会开启 LS Cache 并下载 WP 插件。

设置

在插件中搜索 LiteSpeed Cache 并下载安装并启用。

然后额,对,什么都不用设置自动就安装好了也开启了缓存功能。如果有更加进一步的设置可以进入选项卡进行设置。值得一提的是,LS-Cache 是一个高效的 PageCache(页面缓存) 方案,如果网站本来有使用 W3tc、WP Super Cache 等缓存插件的可以停用或者关闭页面缓存的功能。其他的对象缓存、前端压缩等功能可以继续保留。

如果同意服务器下有多个网站需要使用 LS-Cache

需要在 wp-config.php 中加入:

define( "LSWCP_TAG_PREFIX", "该网站唯一的字符串比如说域名" ) ;

例如:

define( "LSWCP_TAG_PREFIX", "mf8biz" ) ;
define( "LSWCP_TAG_PREFIX", "mifar" ) ;

可以区分不用的网站,避免网站建缓存出现混乱。

效果

退出登陆状态,进入一篇文章先刷新一下以避免是第一次访问还没被缓存的尴尬,然后打开浏览器开发者工具,可以在 Header 中看到:

x-litespeed-cache:hit

如果出现 hit 了,那么也就是命中缓存了,说明该页面已经被缓存了。

未分类

WordPress解决百度分享不支持https的方法

最近越来越多的朋友用上了HTTPS,但是不知为何,百度分享迟迟没有支持HTTPS,导致使用了百度分享的网站被浏览器显示警告。

本文就为大家介绍下WordPress解决百度分享不支持HTTPS的方法,同时也介绍下等英博客出品的主题中,对与此事的处理方法。

一、开启HTTPS开关

一般在waitig出品的主题中,都有一个是否开启https的选项,如果你开启了https,则将这个选项打钩。

比如,在wait主题中,是在【高级设置】里:

未分类

二、下载开源代码

waitig 采用的解决方案是github上@hrwhisper提供的,地址是在:https://github.com/hrwhisper/baiduShare 。

在开启了主题配置中的HTTPS开关后,再下载其中的static文件夹,上传到网站根目录,网站即可正常支持HTTPS协议。

配置定时清理优化wordpress数据库

WordPress易操作、易扩展(插件机制),但不如意之处也有,所以我会趁闲暇之余进行优化,我戏称之“Wordpress归真计划”。自动运维系列其实没有太多可写,无非是自动更新升级、自动清理垃圾(文件+数据)、自动提交代码(版本管理)等几个方面。本次分享wp数据库自动清理优化——删除过期无效数据并优化数据表。该想法源于归真计划中的“Kill Plugins”【注1】,要告别的插件是WP Clean Up,先感谢插件作者@BoLiQuan。

  • 指导思想:将插件做的交给系统自动进行,解放人力。
  • 技术核心:SQL+LinuxCrontab

一、数据清理SQL语句

先说三处需要谨慎清理的:

1、草稿数据

发布体【注2】的草稿数据。注意如果你的习惯不是离线写文章,这一条语句请谨慎考虑使用。

$sql.=“DELETE FROM {$table_prefix}posts WHERE post_status = ‘draft’;”;

2、待审评论

这条语句处理的是待审评论数据,如果wordpress设置了评论审核,那么这一条也要谨慎使用,待审评论不一定是垃圾评论。

$sql.=“DELETE FROM {$table_prefix}comments WHERE comment_approved = ‘0’;”;

3、配置表配置项

options表存储着wp和站长的配置数据,请按照自己的情况书写清理语句,清理之前自己做好表备份,通常这种工作处理一次就够了,不必每次都执行。

比如下面的代码是适合我网站的:清除非当前模板主题的配置项;删除无用插件配置项,比如我已经不用了的LoginLockDown(详见:WordPress扫二维码登录后台功能实现案例—WpQrLogin)、BaiduSubmit(已重写自动推送,并融入主题)、WP Backup。

//query current theme name
$themes = $pdo->query(“select option_value from {$table_prefix}options where option_name=’current_theme’ “)->fetch();
//$theme_name = strtolower($themes[0]);
//clear other themes’ options
$sql.=“DELETE FROM {$table_prefix}options WHERE option_name like ‘%theme_mod_%’ AND option_name<>’theme_mod_{$theme_name}’;”;
//unused plugins option
$sql.=“DELETE FROM {$table_prefix}options WHERE option_name like ‘%loginlockdown%’ ;”;
$sql.=“DELETE FROM {$table_prefix}options WHERE option_name like ‘%baidusubmit%’ ;”;
$sql.=“DELETE FROM {$table_prefix}options WHERE option_name like ‘%backwpup%’; “;

—–分割线—–

4、发布体版本

有多少人写文章是多人协作的?你写文章的时候需要对比上一个版本查看自己做了哪些修改?如果都不是,可以使用下面的语句清理发布版本。

$sql.=“DELETE FROM {$table_prefix}posts WHERE post_type = ‘revision’;”;

5、自动草稿

不多解释,请按需使用。我个人习惯离线撰写文章,在线写的时候倾向于自己手动保存,而且我已经移除了wp自动草稿的功能,所以数据库中所有自动草稿数据都是我不需要的。

$sql.=“DELETE FROM {$table_prefix}posts WHERE post_status = ‘auto-draft’;”;

6、回收站

删除的发布体,以后不用自己手动去后台回收站清空了。

$sql.=“DELETE FROM {$table_prefix}comments WHERE comment_approved = ‘trash’;”;

7、无用的发布体元数据(附加数据)

postmeta表中因发布体删除而遗留下来的数据。比如文章的自定义字段,有些人在设计自定义字段面板的时候没有设计delete,就会产生这样的情况。

$sql.=“DELETE pm FROM {$table_prefix}postmeta pm LEFT JOIN {$table_prefix}posts wp ON wp.ID = pm.post_id WHERE wp.ID IS NULL;”;

8、垃圾评论

$sql.=“DELETE FROM {$table_prefix}comments WHERE comment_approved = ‘spam’;”;

9、无用的评论元数据(附加数据)

删除评论遗留的附加数据或者做过评论优化残留的数据况。大多数wp使用者会有Askimet的数据,这些数据记录有助于插件过滤垃圾评论,可去可留。

$sql.=“DELETE FROM {$table_prefix}commentmeta WHERE comment_id NOT IN (SELECT comment_id FROM {$table_prefix}comments);”;
$sql.=“DELETE FROM {$table_prefix}commentmeta WHERE meta_key IN (‘akismet_history’,’akismet_result’,’akismet_user_result’,’akismet_user’);”;

10、无效的关系数据

删除发布体或者分类(待确定)以后残留的数据。

$sql.=“DELETE FROM {$table_prefix}term_relationships WHERE object_id NOT IN (SELECT ID FROM {$table_prefix}posts);”;

11、无用的用户元数据(附加数据)

$sql.=“DELETE FROM {$table_prefix}usermeta WHERE user_id NOT IN (SELECT ID FROM {$table_prefix}users);”;

12、订阅消息

$sql.=“DELETE FROM {$table_prefix}options WHERE option_name LIKE ‘_site_transient_browser_%’ OR option_name LIKE ‘_site_transient_timeout_browser_%’ OR option_name LIKE ‘_transient_feed_%’ OR option_name LIKE ‘_transient_timeout_feed_%’;”;

二、数据表优化SQL

原插件中优化工作很简单,仅使用了OPTIMIZE,但对大多数人而言足够了。它对MyISAM/INNODB引擎的数据表还是很有用的,能够删除冗余数据(包括字段和索引),提高表的查询效率。

$result = $pdo->query(‘SHOW TABLE STATUS FROM `’.DB_NAME.’`’)->fetchAll();
foreach($result as $row){
    $sql.= “OPTIMIZE TABLE {$row[‘Name’]};”;
}

注意:所有语句最终会综合到一起依次执行,所以必须有分隔符,即:每一句SQL语句必须要用分号结尾。

三、自动化的实现

小节标题挺高大上,其实就是个定时计划任务+执行脚本。

1、执行脚本PHP

执行脚本的核心就是文章一二节提到的部分,我们再补充一下数据库操作,略做完善后命名(如gznotes.php);

将文件放到wordpress根目录,然后可以利用php命令直接执行,进行首测(注意:非HTTP访问),命令如下:

[/gznotes.com]# php /YourPath/gznotes.php

/**
* Copyright (c) DingLipeng
* Author       : DingLipeng(Daniel Ting)
* Author URI   : http://www.gznotes.com/
* Created Time : 2017-08-12 16:09
*/
//read db config from wp-config.php
$config_str = file_get_contents(dirname(__FILE__).DIRECTORY_SEPARATOR.’wp-config.php’);
preg_match_all(“!define(s*’DB_.*);|\$table_prefix.*;!”,$config_str,$res);
foreach ( $res[0] as $re ) {
    eval($re);
}
$pdo = null;
try{
    $pdo = new PDO(“mysql:host=”.DB_HOST.“;dbname=”.DB_NAME,DB_USER,DB_PASSWORD);
} catch (PDOException $exception){
    echo “Connect Failed:”.$exception->getMessage();
    exit();
}
$sql = “”;
//============start sql str=====
    //……
//============sql str end=====
$pdo->exec($sql);
//log completed or affected number of rows
exit(“Succn”);

2、定时计划任务Crontab

大多数人用Linux系统的服务器,所以一般都有crontab神器。如果没有请安装(我的是 CentOS 6.8):

[/gznotes.com]# yum –y install vixie-cron

安装完成,记得加入开机启动项

[/gznotes.com]# chkconfig –level 345 crond on

关于crontab使用,引用@蚂蚁快跑 【参考链接1】博文中的几张图片:

未分类

未分类

未分类

未分类

未分类

未分类

WordPress自动运维教程—如何自动清理优化数据库-crontab1

图:Linux Crontab定时计划任务讲解

老规矩,运维放到夜深人静,访客稀少的时候进行,频率方面不用太高,一个周一次就可以,任务形式可以有多种表现,比如可以在/etc/crontab直接书写:

#每周日的凌晨3点

0 3  *  * 0 root /usr/bin/php  /YourPath/gznotes.php >>/YourPath/clean.log

#每隔七天凌晨3点

0 3 */7 * * root /usr/bin/php  /YourPath/gznotes.php >>/YourPath/clean.log

也可以在/etc/cron.weekly中添加执行脚本clean.sh,并赋予执行权限chmod +x  /etc/cron.weekly/wp-cleaner.sh,文件命令如下:

#!/bin/sh

php /YourPath/gznotes.php>>/YourPath/clean.log

#把命令执行的结果追加输出到指定目录下的clean.log文件中

注意:写完后手动执行看下有没有错误,如果像上面命令那样指定了结果输出,那么打开clean.log文件查看执行的结果。

然后,启动crond,查看状态,查看当前用户所有任务列表:

[/gznotes.com]# service crond start

[/gznotes.com]# service crond status

[/gznotes.com]# crontab -l

CentOS 7.2安装LAMP(apache mariadb php)搭建WordPress

导语

WordPress是一个以PHP和MySQL为平台的自由开源的博客软件和内容管理系统。WordPress具有插件架构和模板系统。Alexa排行前100万的网站中有超过16.7%的网站使用WordPress。

一.LAMP环境搭建

LAMP即Linux+Apache+MySQL(MariaDB)+PHP,由于其开源免费,所以是目前非常受欢迎的一组网站解决方案,本文也将采用此方案。

1. Linux选择

笔者选用的是CentOS 7.2这个版本,CentOS实质为无支持版的RHEl,稳定性还是比较高的,当然也可以选择其它发行版,只是后续的操作略有不同,本文将只介绍在CentOS下的操作(系统的安装和本文关系不大,故不再赘述)。

2. 安装Apache

直接yum安装

# yum -y install httpd

安装完成后,启动服务

# systemctl start httpd.service

设置为开机启动

# systemctl enable httpd.service

之后可以在浏览器输入localhost进行测试,由于笔者没有安装GUI,只能在客户端浏览器进行测试,在这之前需要打开80和443端口

首先开启防火墙并设置为开机启动

# systemctl start firewalld.service
# systemctl enable firewalld.service

开启端口(80和443)

# firewall-cmd --permanent --zone=public --add-service=http
# firewall-cmd --permanent --zone=public --add-service=https

重启防火墙

# firewall-cmd --reload

查询已开启端口

# irewall-cmd --list-ports

未分类

客户端测试
未分类

3. 安装并配置数据库(Mariadb)

由于甲骨文公司收购了MySQL后,有将MySQL闭源的潜在风险,所以在CentOS 7中弃用了MySQL,改为支持Mariadb(MySQL的一个分支,与之完全兼容),所以本文也将使用该数据库。

同样还是利用yum命令进行安装,并且配置开机启动

# yum -y install mariadb-server mariadb
# systemctl start mariadb.service
# systemctl enable mariadb.service

配置root密码

# mysql_secure_installation

配置过程中会有几个选项,大家根据自己的需要进行配置就好了

未分类

使用root用户登录mysql

# mysql -u root -p

为WordPress创建数据库

# CREATE DATABASE wordpress;

查看创建结果

未分类

为该数据库创建用户

# CREATE USER username@localhost IDENTIFIED BY 'password';

说明:username – 你将创建的用户名, host – 指定该用户在哪个主机上可以登陆,如果是本地用户可用localhost, 如果想让该用户可以从任意远程主机登陆,可以使用通配符%. password – 该用户的登陆密码,密码可以为空,如果为空则该用户可以不需要密码登陆服务器.

更改用户权限,保存并退出

# GRANT ALL PRIVILEGES ON wordpress.* TO wordpressuser@localhost;
# FLUSH PRIVILEGES;
# exit

重启服务

# systemctl restart mariadb.service

4. 安装PHP及相关组件

首先安装PHP

# yum -y install php

安装相关组件

# yum -y install php-mysql php-gd php-ldap php-odbc php-pear php-xml php-xmlrpc php-mbstring php-snmp php-soap curl curl-devel

安装完成之后我们可以新建一个php页面进行测试

# vim /var/www/html/info.php

编辑为以下内容

未分类

重启httpd服务

# systemctl restart httpd.service

打开网址 http://x.x.x.x/info.php 进行查看(x.x.x.x为vps的ip地址)

未分类
php测试页

二. WordPress安装与配置

安装wget(下载) unzip(解压) net-tools(网络管理)

# yum -y install wget unzip net-tools

下载WordPress

# wget http://wordpress.org/latest.zip

未分类

解压文件,并将其复制到/var/www/html/目录下

# unzip -q latest.zip
# cp -rf wordpress/* /var/www/html/

未分类

编辑配置文件

# cd /var/www/html
# cp wp-config-sample.php wp-config.php
# vim wp-config.php

将其修改为以下格式(其中wordpress为数据库名称,wordpressuser为数据库用户名,10293847为数据库密码)

未分类

保存后退出,重启相关服务

# systemctl restart httpd.service
# systemctl restart mariadb.service

三. WordPress的个人设置

完成以上配置之后,便可以输入http://yourserverip/来访问你的博客了。

  • 选择语言

未分类

  • 填写个人信息

未分类

  • 安装完成

未分类

  • 登录到仪表盘

未分类

至此WordPress已经搭建完成,之后可根据自己的需要进行其它配置。

Wireshark实战分析之TCP协议 挥手数据帧

1、捕获TCP四次挥手数据包

未分类

2、接下来分析四次挥手的过程

第一次挥手(分析524帧,通过FIN/ACK标志确定这个客户端提出挥手的第一次)

未分类

通过第一次挥手客户端发送FIN和ACK标志,表示本次通信已经结束,请求结束连接

3、分析第二次挥手,也就是525帧

未分类

4、分析第三次挥手,也就是526帧

未分类

5、第四次挥手分析,也就是527帧

未分类

到这里TCP四次挥手分析完毕,大家可以实际操作为主,同时结合下图分析

未分类

Wireshark实战分析之TCP协议 握手数据帧

1、TCP首部格式

未分类

  • 源端口: 用来传输数据报的端口

  • 目标端口: 数据包将要发送到的端口

  • 序号: 用来表示一个TCP片段。这个值用来表示数据流中的部分数据没有丢失

  • 确认号: 表示通信中希望从另一个设备得到的下一个数据包的序号

  • 数据偏移: 表示此块数据在整块数据中的偏移

  • 保留: 包括Reserved, Nonce, CWR和ECN-Echo,共6个比特位

  • 标记:用来表示所传输的TCP数据包类型。该字段中可用的标记包括URG, ACK, PSH, RST, SYN, FIN

  • 窗口: TCP接受者缓冲区的大小

  • 检验和: 用来保证TCP首部和数据部分的完整性

  • 紧急指针: 如果设置了URG位,这个值将被检查作为额外的指令

  • 选项: 各种可选的域,可以在TCP数据包中进行指定

上面提到了TCP传输时,可用的标记有URG, ACK, PSH, RST, SYN, FIN。 下面分别介绍这几个标记

  • URG: 紧急标志。此标志表示TCP包的紧急指针域有效,用来保证TCP连接补被中断。

  • ACK: 确认标志。此标志表示应答域有效。1表示应答域有效,0表示无效

  • PSH: 此标志表示Push操作,所谓Push操作就是指在数据包到达接收端以后,立刻传送到应用程序,而不在缓冲区排队。

  • RST: 该标志表示连接复位请求。

  • SYN: 表示同步序号,用来建立连接。SYN标志位和ACK标志位搭配使用。当连接请求时SYN=1, ACK=0。 当连接被响应的时候,SYN=1, ACK=1.

  • FIN: 表示发送端已经达到数据的末尾,也就是说双方的数据传输完成,没有数据可以传输了。此时发送FIN标志位的TCP数据包后,连接将被断开。

2、捕获TCP数据包

未分类

上图是捕获的TCP数据包。接下来对三次握手和四次挥手做详细说明

3、第一次握手(分析461帧)

未分类

从以上的分析可以看出,客户端向服务器发送请求建立连接,当前的序列号为0。

4、第二次握手(分析462帧)

未分类

从第二次的分析可以看到,服务器收到客户端的请求建立连接后,发送给客户端确定包(ACK=1)已经请求建立(SYN=1),当前的序列号为0,并且希望下一次的系列号为1.

5、第三次握手(分析463帧)

未分类

当第三次握手成功后,客户端和服务端就可以建立连接了,就可以传输数据了。

可能这部分有点不好懂,我建议大家实际操作分析,并结合下图分析

未分类

Wireshark实战分析之TCP协议 三次握手

1、TCP是怎么样的协议?

TCP(Transmission Control Protocol)传输控制协议,是一种面向连接的,可靠的,基于IP的传输层协议。它的主要目地是为数据提供可靠的端到端的传输。

2、TCP协议的由来?

上一节学习了UDP协议,可以知道UDP协议非常简单,而且容易实现。但是其可靠性较差,一旦将数据包发出,将无法知道对方是否收到。为了解决这个问题,TCP协议就诞生了。使用TCP协议,可以提供网络的安全性。因为使用TCP协议传输数据时,每发出一个数据包都要求确认。如果其中有一个数据包丢失,就收不到确定包,发送方就知道应该重发这个数据包。这样TCP协议就保证了数据的安全性。

3、TCP三次握手

未分类

上图就是TCP协议三次握手建议的连接。 其中Seq表示请求序列号,Ack表示确认序列号,SYN和ACK为控制位

  • 第一次握手

未分类

第一次握手建立连接时,客户端向服务器发送SYN报文(Seq=x, SYN=1),客户端进去SYN_SENT状态, 等待服务器确定。

  • 第2次握手

首先,服务器收到客户端的请求,向客户端回复一个确认信息(Ack = x + 1)

其次,服务器再次向客户端发送一个SYN包(seq=y)建立连接请求,此时服务器进去SYN_RECV状态

  • 第3次握手

未分类

第三次握手客户端收到服务器的回复(SYN+ACK报文)。此时,客户端向服务器端发送ACK,此包发送完毕后客户端和服务器端进入ESTABLISHED状态。完成三次握手

4、TCP四次断开

在TCP通信中,当每次通信完毕后都会终止连接。该过程包含4个数据包,并且用一个FIN标志来表明连接的终结。

未分类

TCP断开需要四个步骤:

  • 客户端通过发送一个设置了FIN和ACK标志的TCP数据包,告诉服务器通信已经完成

  • 服务器收到客户端的数据后,发送一个ACK数据包来响应客户端

  • 服务器再次向客户端传输一个自己的FIN/ACK数据包

  • 客户端手动啊服务器的FIN/ACK包后,响应服务器一个ACK数据包。然后结束通信。

5、有人机会问, 为什么建立连接只需3步,而断开需要4步?

答: 因为在客户端与服务器建立连接时,当收到客户端发送 的SYN数据后,是把ACK/SYN放在一起发送给客户端的。 但是当断开连接时,当收到客户端发送的FIN数据后,只能说明数据发送完毕,客户端不再发送数据,但是服务还是连接的。只能说明客户端没有数据发送给服务端了,但不代表服务端没有数据要发送给客户端了。当服务器所有的数据都发送完毕后,才会发送FIN/ACK数据,请求断开连接。

Wireshark实战分析之UDP协议

1、什么是UDP协议?

UDP(User Datagram Protocol )用户数据报协议。是OSI七层模型中一种无连接的传输层协议,提供面向事物的简单的不可靠信息传输服务。UDP协议就是一种无连接的网络协议,该协议用来支持那些需要在计算机之间传输数据的网络应用,包括网络视频会议系统在内的众多客户/服务器模式的网络应用。

2、UDP的特点?

  • UDP是一个无连接的协议,也就是传输数据之前源端口与目地端口不建立连接。
  • UDP由于传输补建立连接,因此也就不需要维护连接状态。
  • UDP信息包的标题很短,只有8个字节。
  • UDP使用最大努力交付,即补保证可靠交付。
  • UDP广泛应用在多媒体应用中,如QQ视频,网络电话等。

3、 UDP的首部格式

未分类

可以看到UDP数据报首部部分共有8个字节

  • 源端口: 用来传输数据包的端口
  • 目标端口: 数据包将要被传输到的端口
  • UDP长度: 数据包字节长度
  • 检验和: 用来确保UDP首部和数据部分的完整性
  • 数据: 被UDP封装进去的数据,包含应用层协议的头部和用户发送的数据

4、抓取UDP的数据包

配置好Wireshark登录QQ,就可以获取到UDP协议的数据包

未分类

其中OICQ就是腾讯QQ的协议,此协议是基于UDP协议的。

5、分析UDP协议

随便选中上述包中的一个即可

未分类

virtualbox的Linux虚拟磁盘大小调整及注意事项

安利

由于windows上面使用npm的体验很不好(目录嵌套导致的长目录错误), 所以不得不用linux系统.

然而无论是Debian还是Red Hat的包管理器, 都不能及时的提供最新的软件版本, 如果去官网编译安装的话, 总会由于网络问题中断, 一度很苦恼.

直到有一天, 一位dalao(@anciety)向我推荐了基于Arch Linux的Manjaro, 我才找到了一个真正满意的一款系统(各种意义上)

起因

最近由于安装了很多东西(主要是openvas的nvts feed), 把当初分配的8G空间占满了, 所以需要对虚拟磁盘进行扩充.

本应该是很简单的操作, 但是由于我之前创建过快照, 所以有一个坑, 导致修改后在Gparted中不显示新增的空间, 下面会提到.

正文

1、首先确认你当时创建的是动态分配空间的磁盘, 可以在虚拟机的”设置->存储”中选择控制器下的磁盘文件查看.

2、找到并复制该磁盘文件的路径,如:”F:GuestOSmanjaromanjaro.vdi”

3、找到你VirtualBox的安装目录, 里面有一个”VBoxManage.exe”程序

4、我假设你至少是Win7的系统了, 此时可以在VBox的目录空白处按住Shift单击鼠标右键, 选择”在此处打开命令窗口”.(如果你真的是xp, 请手动运行cmd然后cd到该目录吧..)

5、将命令 “VBoxManage modifyhd <vdi文件路径> –resize <文件大小(MB)>”, 替换为你的, 比如这里我要把磁盘空间提升到20G, 就输入:

VBoxManage modifyhd “F:GuestOSmanjaromanjaro.vdi” –resize 20480

要注意大小的单位只能是mb, 自己要先算好, 不需要单位只写数字.

PS: 如果你不是vdi格式的文件, 可以使用命令转换:

VBoxManage clonehd 源硬盘格式文件 目录硬盘格式文件 –format 目标格式后缀

6、回车执行命令, 很快进度就会到100%, 然后就完成了磁盘的扩容了, 不过这里有一个坑, 如果你建立过快照的话, 当前系统状态是基于你最后那个快照的, 所以你还需要对那个快照进行同样的扩容操作 ,如:

VBoxManage modifyhd “F:GuestOSmanjarosnapshots{xxxxxxxx-xxxx-xxxx-xxxx-xxxx}.vdi” –resize 20480

把里面的xxx换成你对应的文件名即可.

这可真是个大坑, 我当时在百度搜的五六篇文章都没有提到有快照时的情况, 导致我的vbox虽然提示我虚拟空间已经是20G了, 但在系统中查看未使用空间时总是显示一共就8G…然后又去百度vbox扩容后问题, 说的全是怎么用gparted分配空间, 最终在Google上搜vbox resize problem, 找到了一大堆官网的提问, 进去一看好多都是跟我一样的问题, 于是乎…问题解决.

附上参考:

https://www.virtualbox.org/ticket/9103

https://forums.virtualbox.org/viewtopic.php?f=35&t=50661

扩充完毕后, 就可以进行空间分配了, 即将新增的未使用空间添加到你要扩容的分区, 用gparted是一个不错的选择, 图形化, 方便快捷.

7、为虚拟机挂载一个有gparted的live光盘, 我直接用的ubuntu盘, 挂载之后选择live, 然后启动系统, 安装引导程序界面加载完后, 选择”Try Ubuntu”, 即可进入到Ubuntu live

8、打开终端, 运行

sudo gparted

9、选择你要扩容的分区, 我这里是 “/dev/sda1”, 右键 “Resize/Move”, 然后把上面的空间大小选择区域右侧拉到头, 点击 “Resize/Move”, 就可以了, 应该会有个提示提醒你如果操作不当可能会导致引导失败什么的, 点OK, 然后应用设置, 就可以了.

重启之后, 分区大小已扩增。

Virtualbox的centos7 nat和桥接网络配置

在实际配置虚拟机的过程中,网络配置时候一个很繁琐的过程,经常一个点没注意到,就访问不了了。在此,做一个简单的教程以供后续使用时可以参考!

方法一: 使用NAT网络

1. 选择网卡

安装centos7的时候注意选择两个网卡(配置CentOS7虚拟机里面能上外网,而主机与CentOS7虚拟机也能连通)

两个网卡分别为:

  • nat(虚拟机访问互联网,使用10.0.2.x段)
  • host-only(虚拟机和主机互相通信,使用192.168.56.x段)

在偏好设置里面设置网络。如下图配置:

未分类

未分类

2. 虚拟机网络设置

接下来对CentOS7虚拟机网络设置,添加网卡1和网卡2,分别选择连接方式和对应的网卡:

未分类

未分类

注意需要记下两个网卡的mac地址,后面需要在网络配置中使用到(如果第一步安装centos7的时候网络没有选择两个的话)

3. 配置网卡

开机,进入 /etc/etc/sysconfig/network-scripts/目录,可以看到目前只有ifcfg-enp0s3和ifcfg-enp0s8配置文件(如果安装centos7没有选择两个网卡的话,应该只有ifcfg-enp0s3 一个配置文件,如果只有一个配置文件,则另外一个就用这个copy过来改,需要更改UUID的值),如下图:

未分类

3.1 编辑ifcfg-enp0s3文件

vim ifcfg-enp0s3

未分类

注意看,是否已经将ONBOOT=no改为yes(最开始默认为NO,yes意思是,“BOOT开机”时候就能使用这张网卡),再添加BOOTPROTO为dhcp(只有“静态static”和“动态dhcp”两种方式),保存,退出,重启网络。
此时,已经可以ping通baidu的话,就说明虚拟机可以访问外网了

3.2 编辑ifcfg-enp0s8文件

vim ifcfg-enp0s8

未分类

注意:上面的NETMAST拼写错误,应该为NETMASK
注意此时宿主机要能ping通虚拟机的话,需要再配置一下

vi /etc/sysconfig/network
NETWORKING=yes
GATEWAY=192.168.56.1 (经后面测试,这个不能加入)

未分类

4. 执行重启网络命令

service network restart

此时应该就可以访问外网,并且可以与宿主机通信了

未分类

宿主机也能ping通虚拟机

未分类

方法二: 使用桥接网络

使用桥接网络也能够连通主机与虚拟机之间的网络,并且能够访问互联网

1. 设置桥接模式,virtualbox中设置

未分类

2. 配置centos的网卡地址

未分类

3. 测试

主机能ping通虚拟机:

未分类

虚拟机也能ping通主机:

未分类