用gzip 1.7+配合rsync实现备份的快速传输

Backround

定期备份VPS的特定目录是一个常见的需求。一般来说,备份分为如下步骤:

  1. 会用tar来打包
  2. 用压缩工具(如gzip/bzip2/xz)压缩
  3. rsync来传输备份文件

比如说我定期备份博客目录的命令如下:

tar -cf - --exclude=/srv/www/wordpress/logs --exclude=/srv/www/wordpress/wp-content/cache /srv/www/wordpress/ | gzip - > ~/backup/wordpresss.bak.tar.gz

然后有另外的rsync脚本传输wordpresss.bak.tar.gz

Problem

只要wordpress里的任何一个文件/目录有任何改动,比如说时间戳变了,每次备份产生的tar.gz都完全不一样,这样rsync传输文件的时候每次都需要完整传输几乎所有的内容,即浪费时间也浪费流量。
比如说,我的博客备份的一次完整的传输在网络条件一般的情况下可能需要几十分钟!

Solution

gzip1.7开始正式提供 --rsyncable选项,使产生的压缩包对rsync更友好,方便rsync作delta传输。
虽然VPS上只有1.6版本,但是开源的好处就是大家可以自己编译:

  1. 到 https://ftp.gnu.org/gnu/gzip/ 下载1.7版本的gzip(最新的已经是1.8了)
  2. configure, make and install
  3. 添加--rsyncable选项到备份的命令里:
    tar -cf - --exclude=/srv/www/wordpress/logs --exclude=/srv/www/wordpress/wp-content/cache /srv/www/wordpress/ | gzip --rsyncable - > ~/backup/wordpresss.bak.tar.gz
    

Result

效果很明显,rsync的传输时间从几(十)分钟减少到几十秒钟,speedup大约在700左右。
节省了时间和流量 🙂

Share

大学毕业10周年

2006年毕业,一转眼,10年过去了。趁着2016年的校庆日,02cs也回到母校相聚。

感谢黄书剑博士的精心组织,活动搞得很不错,T恤很好玩,纪念品也很赞。
IMG_20160521_143043
话说,好多人还不知道为什么是T shirt上有蓝色的鲸鱼呢…

周老师虽然年过80,但还是那么帅!
mmexport1463834579756

506&508
mmexport1463884128199

趁这个机会,正好带着老婆女儿去南京玩一趟,还能带小依依到南大看看——姑娘,不到5个月你就已经在高等学府待过了噢 ^_^
IMG_20160520_161433

Share

Enable HTTP2 for WordPress on nginx Ubuntu 14.04

HTTP2 is enabled on mainline version of nginx (v1.9.x), while Ubuntu 14.04 is using nginx 1.4.6.
To enable HTTP2, the simplest way is to upgrade nginx to the mainline version.
But I met several issues during the upgrade, and here’re the steps, the issues and solutions.

Upgrade to mainline nginx

Let’s use nginx’s official pre-built packages.

  • Add below lines into /etc/apt/sources.list.d/nginx.list
    sudo sh -c 'echo deb http://nginx.org/packages/mainline/ubuntu/ trusty nginx >> /etc/apt/sources.list.d/nginx.list'
    sudo sh -c 'echo deb-src http://nginx.org/packages/mainline/ubuntu/ trusty nginx >> /etc/apt/sources.list.d/nginx.list'
    
  • Add nginx apt key
    wget -q -O- http://nginx.org/keys/nginx_signing.key | sudo apt-key add -
    
  • Update ans install nginx
    sudo apt-get update
    sudo apt-get install nginx
    

However, it fails with error that it tries to overwrite nginx-common’s file:

dpkg: error processing archive /var/cache/apt/archives/nginx_1.9.11-1~trusty_amd64.deb (--unpack):
 trying to overwrite '/usr/share/nginx/html/index.html'

The solution is to remove old nginx on Ubuntu and re-install mainline nginx.

sudo apt-get remove nginx-common
sudo apt-get install nginx

Now nginx is upgraded to 1.9.11

Config file changes

  1.   Previously the site config files are stored in /etc/nginx/site-available, and the enabled sites are soft-linked in /etc/nginx/site-enabled/.
    But mainline nginx only load config files in /etc/nginx/conf.d/*.conf.
    So either copy the old config files to conf.d, or add include /etc/nginx/sites-enabled/ in nginx.conf.
  2. Mainline nginx’s user is nginx, but Ubuntu uses www-data, so change it in nginx.conf.
    #user nginx;
    user www-data;
    
  3. Change spdy to http2 in site config.

Reload nginx, and now the site’s HTTP2 is working.
However, try to open any page of WordPress, it just shows a blank page without any error. The log shows HTTP 200 OK.

Blank page issue

After googling the issue, it’s found that a missing FastCGI param is the root cause.
Add below line in /etc/nginx/fastcgi_params:

fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;

Reload nginx again, and now everything works fine.

Share

Android M – Systemless Unroot, OTA and re-Root

Since Google is now pushing monthly security updates, it becomes a regular procedure for me to temporarily un-root my phone to get OTA updates.
This post introduces the steps of how to unroot Android M (6.0 or above), get OTA update and then re-root it.

[Update] Let’s take Nexus6p as example to OTA from angler-MHC19I to angler-MHC19Q.

Pre-condition

Preparation

  • Factory image of MHC19I
  • TWRP (e.g. 3.0.0.1)
  • SuperSU (2.60 or above, e.g. 2.68)

Steps

Unroot

  1. Extract MHC19I’s factory image to get boot.img and recovery.img
    tar -xf angler-mhc19i-factory-8c31db3f.tgz angler-mhc19i/image-angler-mhc19i.zip
    cd angler-mhc19i
    unzip image-angler-mhc19i.zip boot.img recovery.img
    
  2. Flash stock boot and recovery
    adb reboot bootloader
    fastboot flash boot boot.img
    fastboot flash recovery recovery.img
    

Now the phone is un-rooted and we get the stock Android.

OTA or Sideload

If you got OTA update from Google, just run OTA, Android does the OTA automatically.

If you did not get OTA update, you have the option to use adb sideload to manually flash the OTA package.

  1. Get the OTA package;
  2. Go to stock recovery, in recovery screen, press and hold the Power key and the Volume up key for a few seconds, and then let go of the Volume up key, but keep pressing Power.
  3. In stock recovery, run below command to do the OTA upgrade:
    adb sideload f7303e0c33450419deeb292b0887c1595fb5588d.signed-angler-MHC19Q-from-MHC19I.zip
    

After OTA, we’re now on MHC19Q (April 2016 release).

Root again

  1. Flash TWRP
    adb reboot bootloader
    fastboot flash recovery twrp-3.0.0-1-angler.img
    
  2. Flash SuperSU
    • Press the Volumn and Power key to enter Recovery
    • In TWRP, flash BETA-SuperSU-v2.68-20160228150503.zip
  3. Wipe cache/dalvik
  4. Reboot to system.

Now the phone is rooted again systemlessly.
Enjoy the new version 😉

Share

读书笔记 (2016.01)

幽灵舰队
很有趣的一本科幻小说,某些设定让人印象深刻:
* 社会的结构:殖民地的年轻人开拓疆土,不用服兵役;防卫军从老人中挑选,克隆DNA,传输意识,加上脑伴,简直是又一个攻壳机动队。
* 特种部队士兵的起名方式:从科学家和哲学家的名字里随机挑选,像极了docker里随机给container起名的方式,很有趣。而主角的姓氏狄拉克,也是我最喜欢的物理学家之一,呵呵。        幽灵舰队-美-约翰·斯卡尔齐

艾伦·图灵传——如谜的解谜者
作为搞IT的,祖师爷的传记当然想看一下。不过只看了一部分,并没有看完,因为内容确实太杂了。等有空的时候可以再继续。话说kindle上打开书本,就直接跳到没看完前的那一页,太方便了,十分适合看一半先不看的情况。。。
艾伦·图灵传——如谜的解谜者

时间简史
第一次看时间简史,大约是在高二的时候。记得那时要参加物理竞赛,学校组织俺们到南师大去上课,我舅舅家离那儿不远(进香河),所以我没有住校,而是骑个自行车往来于南师大。当时的“先锋书店”还在广州路上,我天天路过,进过一次之后,不出意外的迷上了这家书店——我在先锋书店的沙发上一坐就是一下午,在这书店里看完了《时间简史》,然后买了本《挪威的森林》。现在想来,真是文艺。。。
第二遍看《时间简史》,内容已然不新鲜,但是还是觉得讲得非常清楚。在科普这方面,霍金费曼都是顶级的。
时间简史

物理学的困惑
又一本没看完的书,为什么?这本书更多的感觉是吐槽,而不是科普。虽然它讲得也很清楚,很“正确”,但是作者夹带的私货太明显了,从一开始就知道你想表达什么,所以就别绕那么大弯了嘛。
当然,也许是因为我先看过了B·格林的几本书,所以对他的对头的书不太感冒吧。
不过,我也绝对不相信弦论就是这个世界的真理,真理到底是什么,这辈子也没机会知道吧。。。
物理学的困惑-L·斯莫林

三体
这是大概是第4次看《三体》了。
第一次是《科幻世界》的连载;
第二次是《三体》刚出版的时候,那会儿还写了篇博客推荐呢:推荐《三体》(没有剧透,放心)
第三次是《三体III 死神永生》出版前后,连着把1,2,3一起看完。
这次是因为amazon出了三体的kindle版合辑,虽然有实体书了,但还是想买个电子版,方便若干年之后再看一遍。不过既然买了,那就再看一遍,也已经隔了好几年了。
顺便推荐一下《三体X 观想之宙》,作为经过大刘认可的同人,写得也是相当好看的,虽然它更像是网络小说(其实它就是网络小说。。。),但不得不说它的想像以及行文,看得是蛮爽的。
三体全集-刘慈欣

怀孕这件大事儿》《怀孕这件大事儿之产后恢复大作战
这两本其实算不上书,只是几篇短文的合集。不过得说杜小溪写得确实不错,很多道理我们也懂,不过你这么总结一下,也方便我们跟老人沟通。总之,科学怀孕,科学“做月子”,我们也只能尽量和老人们沟通了。
怀孕这件大事儿 怀孕这件大事儿之产后恢复大作战

西尔斯怀孕百科》《怀孕圣经
老婆怀孕,生娃。整个过程中我们也把这两本书基本上翻了一遍。
现在女儿出生了,我的感觉是,这两本书只要看一本就够了。而且,最紧张的是前几个月,到后期只要按时去医院产检,一般都不太担心了。
不过还是要感谢一下这些书以及一些朋友的建议,老婆整个孕期都没出什么毛病,糖耐一次就过了,也没有高血压等等孕期的病;当然,最感谢的是老婆大人,这一切都是你控制得好啦!
西尔斯怀孕百科 怀孕圣经(第4版)

Share