选用bbcp替代scp的原因

这两天用scp往服务器上传数据,scp传输速度太慢。特别是网络不太稳定的时候,速度非常慢。惨不忍睹。 所以想找个替代工具。

使用中遇到的问题

如何好用, 比scp 快多少就不测试了。这里说说遇到问题。

  1. 需要目标服务器上同样放置bbcp程序。如果有admin权限,比较好办。
  2. 防火墙。由于采用了多个端口同时传输数据, 所以需要开发至少8个端口用于传输数据。
    • 目标服务器在公网,并且开放端口,直接传输;
    • 目标服务器在内网,
      • 防火墙映射端口,直接传输。
      • 目标服务器无法映射端口,本地开放端口或者可以映射端口, 可以使用-Z(同--port 此为12.08.17版本中加入,如果无法使用, 请使用 --help 查看版本) 传输。
      • 本地也无法映射端口。那就没辙了。
  3. 连接目标服务器ssh的端口貌似没法修改, 默认22。 但是好多服务器都修改了这个端口。(提供了-S, 但是不会设置)

bbcp的相关网页

  • 官方文档 http://www.slac.stanford.edu/~abh/bbcp/, 主要介绍bbcp 的使用方法,并提供源码地址和二进制文件下载。

    • 源码

      git clone http://www.slac.stanford.edu/~abh/bbcp/bbcp.git
      
    • 可执行文件官方下载 http://www.slac.stanford.edu/~abh/bbcp/bin/, 目前仅提供一下平台

      amd64_darwin_100/       17-Aug-2012 19:49
      amd64_linux26/          24-Apr-2012 14:43
      amd64_rhel50/           17-Aug-2012 19:49
      amd64_rhel60/           17-Aug-2012 19:01
      i386_linux26/           19-May-2012 08:56
      i386_rhel50/            17-Aug-2012 19:48
      i386_rhel60/            17-Aug-2012 19:49
      sun4x_510/              30-Jan-2012 23:12
      sunx86_510/             12-Jan-2012 18:19
      x86_darwin_100/         17-Aug-2012 19:49
      
  • HOWTO move data, 介绍如何移动数据, 其中介绍到bbcp,以及与rsync的区别, 以下引用的文章目录

    1. Executive Summary
    2. Compression & Encryption
    3. Avoiding data transfer
      1. kdirstat
      2. rsync
      3. Unison
    4. Streaming Data Transfer
      1. bbcp
      2. bbftp
      3. Fast Data Transfer (fdt)
      4. GridFTP
      5. Globus Online
      6. netcat
  • Using BBCP, 比较详细的介绍

  • 用 bbcp 取代 scp,上篇 “Using BBCP” 的中文译文(非全文翻译)
  • Using bbcp At NERSC, 简单介绍
  • bbcp测试, 国人简单的测试

基于pelican 写blog

12-14-2012 by luw2007

很久之前在dotcloud上面部署了一个pypress, 更新几篇之后就停歇了.

最近在G+上面的ubuntu中文社区看到+mutse young贴了个使用pelican的截图

pelican 是托管在github上的开源项目. 基于python.

目的是让geek很方便的使用markdown 或者rst 写博客.

之前在选用pypress之前也接触过直接生成html的一些项目, 不过那个时候觉得写作和部署都很麻烦.

随着最近一些项目中使用到了rst和markdown写文档, 加之对git 的熟悉以及对github的喜爱. 决定试用一下pelican.

官方的文档 很齐全. 配置和使用过程中的问题,都能在官方文档里面找到说明.

read more

关于博客更新的想法

10-21-2011 by luw2007

blog 不知道写什么. 天天都会看邮件列表和问答社区. 

准备把CpyUG 里面自己回答到的问题组织一下思路.

转发到blog 中来. 不知道涉及不涉及到版权的问题. 

read more

cefpython - python bindings for CEF(Chromium Embedded Framework)

01-11-2013 by luw2007

手头有个pyQT的项目里面使用QtWebKit, 用于在客户端中展示网页内容。虽然使用QtWebkit实现了基本功能。但是存在不少问题。 QtWebKit打开页面速度慢,一些js代码无法正常运行,需要自己去实现的东西太多。由于时间有点紧,所以就准备找第三方实现的库来做。

最后采用CEF(Chromium Embedded Framework)。 这个项目稳定(2008开始),社区活跃。而且还有python实现cefpython。

cefpython 使用cython 实现与libcef之前的交互。项目2012-05-08提交0.11,到最近2012-12-27提交0.51版本的cef1。

使用New BSD License 开源协议。目前只有czarek.tomczak一人维护。 cefpython项目分为cef1, cef3 。cef1的完成度比较高,cef3可用的api太少。 由于项目中对webkit的要求比较少。 所以直接拿来使用。

问题和不足

  • 项目完成度还不高,存在一些问题。好在作者开发热情很高,问题能很快解决。
  • 目前只支持windows和mac。
  • 编译需要安装windows SDK和vs2008。

更多链接

read more

认识cgroup和 lxc

01-09-2013 by luw2007

引子

[CPyUG] 对于python的sandbox,有什么好的方案吗? 由python的沙箱引出虚拟化中的两个名词lxc和cgroup。

cgroup(control groups)

Lxc(LinuX Containers)

read more

计算当前目录下的子目录数量并打印子目录名称

09-08-2011 by luw2007

问题:

组里有人问,有什么好方法来统计当前目录下所有子目录的数量。

解决方案:

我大致综合大家提出的方法,做了一个对照。实现方法有4个 。其中test_diskwalk.py 是利用python 的os.walk 做的。

  1. time find /usr/ -type d |wc -l
  2. time python test_diskwalk.py /usr/
  3. time tree -ad /usr/ |tail -1
  4. ls -aR /usr/|grep ":$" |wc -l

大致结果是ls 和tree快, find 接近是ls 的1.5倍。 os.walk 更慢。测试不太精准,权当娱乐。

对照测试具体步骤:

利用python ...

read more

python实现一个Stack类

09-16-2011 by luw2007

python 实现Stack类。

之前网上也有不同的实现,但是不是感觉版本太老就是感觉写的不好。自己写了一个,请大家指教。

# -*- coding:utf-8 -*-
class Stack(object):
    """
        Stack 类
    """
    def __init__(self, other=None):
        """doc test
        >>> s = Stack([1,2,3,4])
        >>> s.pop()
        4
        >>> s.count
        3
        >>> e = Stack([1,2,3,4])
        >>> s != e
        True
        >>> s.push(4)
        >>> s == e
        True
        >>> s += e
        >>> len ...
read more

莫工厂的面试题之一古诗横转

09-16-2011 by luw2007

要求横转古诗输出,输出的结果请运行一下程序。

string = u"""静夜思 李白
床前明月光,
疑似地上霜。
举头望明月,
低头思故乡。
"""

list_s=[L for L in string.splitlines()[::-1]]
row_num = max(map(len,list_s))
out=[[row[L] for row in list_s] for L in xrange(row_num)]
print '\n'.join([U'┊'.join(row) for row in out])
read more

莫工厂的面试题之一古诗横转(二)

09-21-2011 by luw2007

要求横转古诗输出,输出的结果请运行一下程序。

之前使用列表解析实现,还可以用map + zip 实现矩阵转换。当然使用NumPy 也可以很方便实现。

代码如下:

string = u"""静夜思 李白
床前明月光,
疑似地上霜。
举头望明月,
低头思故乡。
"""

list_s=[L for L in string.splitlines()[::-1]]
out=map(list,zip(*list_s))
print '\n'.join([U'┊'.join(row) for row in out])
read more