在 Linux 上编译和安装 ZFS 文件系统

因为版权的问题,使用 GPL 协议的 Linux 内核无法直接使用 CDDL 协议的 ZFS 文件系统,有一个办法可以绕过这个问题,就是先把 ZFS 代码编译成版权为 CDDL 的内核模块,然后 Linux 内核加载一个 CDDL 协议的内核模块,很高兴已经有人(ZFS on Linux)这么做了,所以我们终于有了原生的 Linux ZFS 文件系统。在 Linux 上和 ZFS 相似的还有一个 Btrfs 文件系统,被称为 Linux 下一代文件系统,起初是由 Oracle 开发的,有意思的是 Oracle 收购 SUN 后又得到了 ZFS,不过因为 Btrfs 使用的是 GPL 协议,所以不管 Oracle 的态度如何,对 Btrfs 的影响有限。

安装必备软件包:

# yum install kernel-devel rpm-build

下载、编译和安装 SPL 包:

# wget http://github.com/downloads/behlendorf/spl/spl-0.5.1.tar.gz
# tar zxvf spl-0.5.1.tar.gz
# cd spl-0.5.1
# ./configure
# make rpm

# rpm -Uvh *.x86_64.rpm

加载 splat 模块到内核,并测试:

# /sbin/modprobe splat

# splat -t kmem:all
------------------------------ Running SPLAT Tests ------------------------------
                kmem:kmem_alloc           Pass  
                kmem:kmem_zalloc          Pass  
                kmem:vmem_alloc           Pass  
                kmem:vmem_zalloc          Pass  
                kmem:slab_small           Pass  
                kmem:slab_large           Pass  
                kmem:slab_align           Pass  
                kmem:slab_reap            Pass  
                kmem:slab_age             Pass  
                kmem:slab_lock            Pass  
                kmem:slab_overcommit      Pass  
                kmem:vmem_size            Pass

下载、编译和安装 ZFS 包:

# wget http://github.com/downloads/behlendorf/zfs/zfs-0.5.1.tar.gz
# tar zxvf zfs-0.5.1.tar.gz
# cd zfs-0.5.1
# ./configure
# make pkg

# rpm -Uvh *.x86_64.rpm

加载 zfs 模块到内核,并测试:

# /sbin/modprobe zfs

# /usr/libexec/zfs/zpios-sanity.sh 
status    name        id	wr-data	wr-ch	wr-bw	rd-data	rd-ch	rd-bw
-------------------------------------------------------------------------------
PASS:     file-raid0   0	64m	64	112.68m	64m	64	4.81g
PASS:     file-raid10  0	64m	64	10.46m	64m	64	876.71m
PASS:     file-raidz   0	64m	64	12.14m	64m	64	780.49m
PASS:     file-raidz2  0	64m	64	17.68m	64m	64	14.66m
PASS:     lo-raid0     0	64m	64	1.30g	64m	64	876.71m
PASS:     lo-raid10    0	64m	64	666.67m	64m	64	14.65m
PASS:     lo-raidz     0	64m	64	1.10g	64m	64	876.71m
PASS:     lo-raidz2    0	64m	64	492.31m	64m	64	876.71m

如果上述加载内核模块有问题,建议重启系统后重新加载试一下,并检查是否模块加载成功:

# reboot

# /sbin/modprobe splat
# /sbin/modprobe zfs

# lsmod
Module                  Size  Used by
zfs                   866368  0 
zcommon                75504  1 zfs
znvpair                82432  2 zfs,zcommon
zavl                   40576  1 zfs
zlib_deflate           52825  1 zfs
zunicode              353664  1 zfs
splat                 160848  0
...

如果没有多余的硬盘玩 ZFS 的话,可以按照 “ZFS 的简单使用” 介绍的方法创建几个文件充当硬盘,简单玩一下 Linux 下的原生 ZFS 支持。

Linux 上最常用的用户名和密码

如果打开 VPS 的 ssh 登录日志(/var/log/secure)就一定会发现有无数无聊的人无数次的试探 ssh 密码,对付这种 brute force 密码探测,用一个特殊字符、大小写字母加数字混合的无规律12位密码就能搞定,所以对安全很在意的用户不用太担心自己 VPS 被黑,用一个好密码就基本可以解决这类问题。VPSee 最近常遇到客户被自己 iptables 或错误的 sshd 配置锁在外面的事情,比如有客户用了很复杂的 ssh 配置文件,加上一些辅助工具比如 fail2ban, sshdfilter 等,并且用 iptables 来过滤,把一个很简单的事情搞得很复杂,结果不小心把自己锁在外面了。注重安全性是好的,太过就不必了,简单就好。安全是一大块,甚至是一个大的研究方向,非常复杂,需要综合考虑,真正容易出问题的地方在应用,比如 PHP 程序、WordPress 插件等,比如上次 “备份 WordPress 博客到 Dropbox” 的一个 WordPress 插件就有安全问题。所以应该多花精力在应用程序的安全性上,应用的安全性问题最多,黑客也多是从应用下手的。

Dragon Research Group 发布了一个 Linux/SSH 密码认证的报告, 统计了一些最常用的 Linux/SSH 用户名和密码,下图截取自 DRG SSH Username and Password Authentication Tag Clouds,看看有没有自己常用的密码,有的话赶快换吧。

most popular usernames

most popular passwords

如果对 ssh 还不放心的话可以采用下面几个简单做法来进一步增强 ssh 的安全性,不过要记住的是下面的技巧不能替代一个好的密码:

  • 修改和配置 DenyUsers, AllowUsers, DenyGroups, AllowGroups 只允许相关人员登录 ssh;
  • 生成 public/private key,修改 AuthorizedKeysFile,采用 ssh key 的方式登录 ssh;
  • 禁止 PasswordAuthentication no;
  • 禁止 root 直接登录,PermitRootLogin no;
  • 修改 ssh 的默认端口 22 为其他数字(比如 2012)。

AllSimple:£4 128MB Xen VPS

allsimple

AllSimple 是家在英格兰和威尔士注册的 hosting 公司,注册号是 OC354906. 他们的数据中心在 MaidenheadV 的 BlueSquare,BlueSquare 和 RapidSwitch 都是英国的两家非常不错的数据中心,不过英国的服务器较贵(加上美元近期持续贬值)而且机房较少,而且线路对中国不好,所以很少受关注。有热心的网友可能会在这里问到既然对中国线路不好为什么要把这些 VPS 列出来(就像上次问 “既然这么多问题,发出来还有意义?”),因为可能对那些特别需要英国 VPS 的朋友有帮助,VPSee 就收到不少 Email 询问我们是否能提供英国机房的 IP 和 VPS,因为有人做欧洲外贸需要欧洲的机房,或者 CDN、SEO 业务需要把 VPS 分布在不同的地区等。lowendbox 上有这家 VPS 的优惠码,使用 lowendbox20 可得到20%的永久优惠。VPS 配置如下:

Xen 128 Xen 256
128MB RAM 256MB RAM
256MB Swap 512MB Swap
4GB 硬盘 10GB 硬盘
100GB 流量 200GB 流量
1 IP 1 IP
4英镑(约6.25美元) 6英镑(约9.38美元)

没有服务器硬件配置信息。

数据中心的最佳温度

昨天中午发现实验室机房有个机柜的风扇不知道怎么回事坏了,导致机柜里面的温度过高,服务器风扇排出来的热都闷在机柜里出不去,尽管机房有空调,貌似空调的冷空气进不到机柜。Meeting Data Center Temperature Requirements 这篇论文就提到了数据中心(机房)的冷却和温度问题,空调的冷空气只能照顾到数据中心的部分设备,还有一部分设备却享受不到(取决于设备的排风速度和设备的位置),所以合理安排设备的位置和设计数据中心的整体通风流程很重要。

根据 ASHRAE 发布的 2008 ASHRAE Environmental Guidelines for Datacom Equipment,数据中心设备的温度最好维持在18和27摄氏度之间。为了保护环境、减少排放,ASHRAE 2008年把推荐的最低温度降低了2度(相比2004年)、最高温度增加了2度。温度太高或太低都会减少服务器、网络等各种设备的寿命、影响设备工作、甚至损害设备。

Recommended Temperature for Data Center

StriveHost:$5.99 256MB OpenVZ VPS

strivehost

Strive Host 官方网站的介绍里提到是2007年夏天开始提供 VPS 业务的,但是域名显示是2010年8月才注册的,他们网站上的 Terms of Service 页面居然是抄袭 HighVPS 的,名字都没有改过来,打开 HighVPS.com 一看发现这两家网站基本一样,StriveHost 应该是复制 HighVPS 或者用的是同一个模版,如果被数据中心发现版权问题或者有人抱怨的话,这个网站立刻就 “被” 下线,VPSee 不推荐用户使用这种有版权问题的服务商提供的产品,如果机房罚款(或者拔网线),这家服务商(one man)不能承受罚金或拒绝的话就可能跑路。他们家的 VPS 承诺有 99.9% Uptime Guarantee!,有意思的是他们自己网站上的 Site Uptime Report 显示只有 99.886% Uptime,不知道他们如何向客户保证 99.9% 的在线时间的。他们的服务器放在 Scranton PA 的 HostNOC ,大家熟悉的 BurstNET 和 HostNOC 其实是一家。VPS 配置如下:

Ant Hill Rolling Hills
256MB RAM 512MB RAM
512MB Burst 768MB Burst
20GB 硬盘 50GB 硬盘
200GB 流量 300GB 流量
2 IPs 3 IPs
5.95美元 9.99美元

服务器硬件配置信息:

All of our VPS’s are hosted off the top of the line Q8300 processors, packaged with a bare minimum of 6GB of RAM.

利用 Android 和 Wi-Fi 做间谍相机

现在 iPhone 和 Android 上的应用程序如此丰富不是偶然的,在 iPhone 和 Android 上开发应用实在是太简单了,开发人员很容易就能上手。VPSee 花了两天的时间完成了一个 Android 上的中、日、英文本阅读器,还包括自动识别文本编码(不用自己调编码设定),触摸放大、翻页等功能,这在 Nokia Symbian 上是不可能的(至少两天内不可能完成),如果有人也有过痛苦的 Symbian 开发经历就会明白 VPSee 在说什么。现在 Android 在 Scripting Layer for Android (SL4A) 项目的帮助下能支持 Python, Perl, JRuby, Lua, BeanShell, JavaScript, Tcl 等脚本语言,我们安装 SL4A 后可以在 Android 上直接运行这些脚本,使得 Android 能支持更多编程语言、更加强大了。

利用 Android 和 Wi-Fi 做间谍相机的想法是这样的,在 Android 上装一个 web server 并用 Ruby 写个小小的 web app,通过浏览器和 wifi 访问这个 web server 和 web app,每次访问 web app 都会拍一张照片并更新 web server 上的照片。这样我们只需要把 Android 手机藏在某个地方,然后在电脑上就可以 “看” 到 Android 拍到的照片了~~(请保留邪恶的想法:D),以下操作在 VPSee 的 HTC Desire (Android 2.1) 上测试通过:

安装 SL4A 和 JRuby

首先到 SL4A 官方网站下载 sl4a_r2.apk 安装到 Android 上,然后点击 “menu” -> “View” -> “Interpreters”,然后再点击 “menu” -> “Add” -> “JRuby-1.4” 就会安装 JRuby for Android,安装成功后打开 SL4A 就会看到 hello_world.rb 和 toggle_airplane.rb 连个例子脚本,点击 “menu” -> “Add” 就会看到多了一个 “JRuby-1.4” 选项。

Ruby web app

接下来在自己电脑上写个 web app,并把 web app 拷贝到 Android 上,用 Ruby 写 web app 当然最好是用 Ruby on Rails 了,这里的应用没那么复杂,使用另一个轻量级 Ruby web 框架 Sinatra 就可以了。在桌面上创建一个 spycam 项目、创建相关目录、安装 sinatra:

$ cd /Users/vpsee/Desktop/
$ mkdir spycam
$ cd spycam
$ mkdir public
$ mkdir vendor
$ mkdir vendor/gems

$ gem install --http-proxy http://192.168.0.1:3128 sinatra
$ gem unpack sinatra --target=vendor/gems
Unpacked gem: '/Users/vpsee/Desktop/spycam/vendor/gems/sinatra-1.0'
$ gem unpack rack --target=vendor/gems
Unpacked gem: '/Users/vpsee/Desktop/spycam/vendor/gems/rack-1.1.0'

创建一个 spycam.rb 文件,并把以下内容拷贝过去(代码来自这篇文章):

$ vi spycam.rb

APP_DIR = File.expand_path File.dirname(__FILE__)
GEM_DIR = File.join(APP_DIR, 'vendor', 'gems')
PUBLIC_DIR = File.join(APP_DIR, 'public')

Dir.entries(GEM_DIR).each do |dir|
  $LOAD_PATH << File.join(GEM_DIR, dir, 'lib')
end

require "rack"
require "sinatra/base"
require "android"
DROID = Android.new

TEMPLATE = <<HTML
<!DOCTYPE html>
<html>
<head>
<title>Spy Camera - vpsee.com</title>
</head>
<body>
<a href="/"><img src="latest.png"></a>
</body>
</html>
HTML
class SpyCam < Sinatra::Base set :public, File.join(APP_DIR, 'public') get "/" do snapshot_path = File.join PUBLIC_DIR, 'latest.png' DROID.cameraCapturePicture snapshot_path TEMPLATE end end SpyCam.run!

运行

测试一下上面的 web app 和远程 WiFi 相机是否能拍照。用电脑通过 USB 连上 Android,拷贝上面的 spycam 下的 spycam.rb, public, vendor 到 Android 下的 sl4a/scripts,然后断开 Android USB 连接,运行 SL4A 执行 spycam.rb 脚本就会自动启动 WEBrick server 和运行 spycam.rb,WEBrick 是个提供 HTTP web services 的 Ruby 库,集成在 RoR 开发环境里用来测试程序,也是一个简单的 HTTP server,成功运行后显示应该如下:

Android WEBrick

在任何一台使用相同网络的电脑上打开浏览器访问 http://192.168.1.115:4567(Android 当前使用的 IP 地址是 192.168.1.115)就可以看到 Android 拍照了,每点击一次照片就会更新。

Android Spy Camera

限制 Linux 用户的进程数

我们这两天监测到一位客户的 VPS 持续维持 100% 的 CPU 利用率很长一段时间,然后昨天客户向我们报告他的 VPS 无法登录了,从我们这边来看他的 VPS 正在运行,而且网络也有反应,只不过 CPU 利用率满负荷而已,VPSee 收到客户消息的第一反应是客户的 VPS 被 CC (Challenge Collapsar) 攻击了,后来客户告诉我们他没有做网站,只是开了一些 shell 帐号供别人通过 ssh 使用,这有可能是其中某个帐号(被黑了以后)放了 fork 炸弹,这是非常简单而且很常用的一类恶意程序,原理很简单,就是通过不停的 fork 进程来达到消耗 Linux 系统所有资源的目的,使得系统无法(没有资源)运行其他程序。比如被 fork 炸了以后,就会出现:

-bash: fork: retry: Resource temporarily unavailable

下面就是一个最简单的 bash fork 炸弹:

: () { : | : & } ; :

上面几个符号看上去很复杂,其实如果写成下面这个样子就好懂了,: 是函数名,执行一个调用自己的递归并且 pipe 到自己,& 表示后台执行程序,最后的一个 : 是在函数外调用和执行 : () 这个函数的意思:

: () {
    : | : &
}; :

如何避免 fork 炸弹呢?方法很简单,只要限制每个用户可以调用的进程数就可以避免,这个可以通过修改 vi /etc/security/limits.conf 文件来设定:

# vi /etc/security/limits.conf

vpsee           hard    nproc           32
@student        hard    nproc           32
@faculty        hard    nproc           64

上面的配置文件意思是说限制 vpsee 这个用户只能 fork 32 个进程;然后限制 student 这个用户组的每个成员最多能 fork 32 个进程;限制 faculty 这个用户组的每个成员最多能 fork 64 个进程。不过要事先检查系统是否有 pam_limits.so 这个模块以及是否已经加载:

# ls /lib64/security/pam_limits.so 
/lib64/security/pam_limits.so

# vi /etc/pam.d/login
session    required     pam_loginuid.so

如果自己是 Linux 普通用户,不是 root 用户不能修改 limits.conf 和重启系统的话,可以用 ulimit 来临时限制自己允许创建的进程数,ulimit 有 Hard 和 Soft 两种方法限制,用 Hard 的话可以减少最大可用的进程数,但是就不能重新增大这个限制了;用 Soft 的话可以自己自由增大和减小限制(ulimit,-H 和 -S 的详细说明可以参看 man ulimit)。不同的 Linux 版本对这个 ulimit -u 的默认值不同,在 CentOS 上默认情况下最大运行进程数是 8256,在 Fedora 上是 1024,所以这个要看不同的发行版本,不过这个无所谓,反正可以改,不过改成32后就不能再改成比32更大的了(比如64),只能再改成比32小的,ulimit 不带 -H 和 -S 参数的时候同时设置 Hard 和 Soft:

$ ulimit -u
8256
$ ulimit -u 32
$ ulimit -u 64
-bash: ulimit: max user processes: cannot modify limit: Operation not permitted

$ ulimit -a
core file size          (blocks, -c) 0
data seg size           (kbytes, -d) unlimited
scheduling priority             (-e) 0
file size               (blocks, -f) unlimited
pending signals                 (-i) 8256
max locked memory       (kbytes, -l) 32
max memory size         (kbytes, -m) unlimited
open files                      (-n) 1024
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
real-time priority              (-r) 0
stack size              (kbytes, -s) 10240
cpu time               (seconds, -t) unlimited
max user processes              (-u) 32
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited

Bloglines 的技术选择和经验

VPSee 以前常用 Bloglines 的 RSS 阅读器订阅一些博客,后来改成 Google Reader 用了一段时间,再后来干脆直接在 Mac 上装个 NetNewWire 客户端,并且可以和 Google Reader 同步,非常方便阅读和管理。这篇文章介绍了 Bloglines 创始人 Mark Fletcher 的的一些创业经验、技术选择和架构等,值得学习学习,特别是对一边工作一边创业的小团队来说。

Bloglines 是典型的车库文化,Mark Fletcher 当初是一边干着正式的工作一边开始自己的创业的,硅谷有很多 startup(创业公司)都是这样起步的,这是包括著名高科技风险投资公司 Y Combinator 创始人 Paul Graham 在内的很多创业大师都推荐的创业方式,在确定自己的创业/赚钱想法可行之前保持稳定的收入来源,这样有助于减少创业的风险和压力,毕竟不是每个人都是 Bill Gates,不是每个人都可以放弃大学或工作开始创业并取得成功的。让人惊奇的是,Bloglines 2005年卖给 Ask.com 的时候还不到10个人。遗憾的是,Ask.com 决定将在今年的10月1日关闭 Blogline.

创业经验

  • 激情,因为这辈子大部分时间都会花在工作和事业上,如果对自己所做的事情没有兴趣和激情的话是不可能坚持到最后的;
  • 采用廉价的技术,现在是互联网创业的好时候,硬件和软件(开源)越来越便宜;
  • Keep it simple,保持简单,使用简单的技术并让为用户觉得简单;(把简单的事情做好就是不简单
  • 夜晚工作,使用自己晚上或者周末的时间工作在自己的创业项目上,从亲朋好友那里寻找资金,免费的服务=更少的压力,免费服务 down 几个小时不会有人抱怨;
  • 雇佣一个律师
  • Web services API 是个好东西
  • 寻找帮助(尤其需要找个好的系统管理员)
  • 考虑外包(eLance.com)

软件选择

  • DBJ (http://cr.yp.to), qmail, djbdns, daemontools
  • ClearSilver (web templating package)
  • Berkeley DBs
  • Linux/Apache
  • C/C++/Bash/Python
  • Skiplist data structure(一个数据结构算法)
  • 避免使用 NFS
  • 避免在 MySQL 中使用表级别的锁,因为不 scale

硬件选择

  • 是租用独立服务器还是托管呢?Bloglines 选择了租用,起步的费用更少;
  • 一切为廉价硬件设计,Google 就是个用廉价硬件搭建服务器集群的好例子;
  • eBay 是个买便宜硬件的好地方;
  • APC PDUs;
  • HP ProCurve 很不错;
  • 避免使用 Seagate Ultra-SCSI 硬盘;
  • 一个有好的 ssh 客户端的手机,这样可以在任何地方 ssh 到服务器上。

存储选择

  • 关系数据库 vs. 文件,他们的所有博客文章都采用文件方式存储;
  • RAID vs. Redundant,他们在所有机器上都保留博客文章副本,如果一台机器 down 了不影响访问;
  • Linux software RAID 1,非常稳定。

系统管理

  • 网站服务器采用 DNS round robin,不必设置负载均衡;
  • 采用热备份冷处理,每小时备份,但是到线下再处理数据(比如 RSS 的订阅数可以每天线下统计,不必即时统计);
  • 小心服务器温度,如果硬盘出问题,可能是服务器过热、温度不适造成的。

Rizie:$4 128MB OpenVZ VPS

rizie

Rizie 是家加拿大的 VPS 服务商,也提供共享主机和独立主机服务,在不列颠哥伦比亚省。域名是2005年注册的,2006年2月用一个疑似免费的网页模版架了一个网站开始提供共享主机的服务,发展了4年仍然看上去 “没有内容”,网站连一个联系方式都没有,Email 都没有,联系还需要点击 “contact” 然后填写一个表单(ticket)提交,摆明了不想别人联系嘛,做了4年的主机服务没有一个联系方式??没有客户??他们家的 VPS 有意思的地方是 128MB RAM VPS 的 Burst 内存是 512MB,是 128MB 的4倍,这样还有谁愿意去买他们的 256MB RAM 的 VPS 呢?512MB bust 已经足够应付多数情况了。他们采用 SolusVM 控制面板,机房在洛杉矶的 WebNX,应该对中国的线路较好。VPS 配置如下:

RIZ-128 RIZ-256 RIZ-512
128MB RAM 256MB RAM 512MB RAM
512MB Burst 768MB Burst 1024MB Burst
20GB 硬盘 30GB 硬盘 60GB 硬盘
250GB 流量 500GB 流量 1000GB 流量
1 IP 1 IP 1 IP
4美元 6美元 9.99美元

没有服务器硬件配置信息。

用同一个配置文件启动任意 Xen DomU

当我们使用 xm create vps1 这行命令创建一个 Xen DomU (VPS) 的时候,xm 会自动在 /etc/xen/ 目录下匹配到 vps1 这个配置文件,通过正确解析 vps1 配置文件而成功启动一个 DomU,如果我们有很多个 DomU 需要启动的话,那就需要在 /etc/xen/ 下创建和编辑很多个对应的 DomU 配置文件。这些配置文件的内容都是差不多的,无非就是一些参数需要修改,那么如何只在 /etc/xen/ 下保留一份配置文件并让所有 DomU 能通过传参数的方式来启动不同的 DomU 呢?比如,如何通过下面一行命令来自定义配置文件参数并启动 DomU 呢?

# xm create vps.config vpsid=1 vpscpu=2 vpsmem=512

我们企图通过上面这行命令来启动一个 VPS ID 为1、CPU cores 数为2、内存大小为 512MB 的 VPS (DomU). 我们接下来需要编辑 vps.config 这个文件,让这个文件在 xm create 时能接受 vpsid, vpscpu, vpsmem 这些参数。

# A domU configuration file for all the domUs
# written by vpsee.com

def vpsid_check(var, val):
    val = int(val)
    if val <= 0:
         raise ValueError
    return val
def vpscpu_check(var, val):
    val = int(val)
    if val <= 0:
        return 1
    elif val >= 8:
        return 8
    return val
def vpsmem_check(var, val):
    val = int(val)
    if val <= 128:
        return 128
    return val

xm_vars.var('vpsid',
            use="VPS ID > 0",
            check=vpsid_check)
xm_vars.var('vpscpu',
            use="VPS CPU > 0 and <= 8",
            check=vpscpu_check)
xm_vars.var('vpsmem',
            use="VPS RAM >= 128",
            check=vpsmem_check)

xm_vars.check()

name="vps%d" % vpsid
bootloader = "/usr/bin/pygrub"
vcpus = "%d" % vpscpu
maxmem="%d" % vpsmem
memory="%d" % vpsmem
disk=[ "tap:aio:/home/vpsee/xen/vps%d/disk.img,sda1,w" % vpsid ]
vif = [ "bridge=xenbr0" ]
on_shutdown = "destroy"
on_poweroff = "destroy"
on_reboot = "restart"
on_crash = "restart"

上面的片段来自我们自己的脚本程序,VPSee 去除了一些和业务相关的代码,比如 xm create 的时候自动把客户名和客户的联系方式、VPS 配置、初始化流量等信息提交到数据库等。我们自己编写了很多类似的脚本帮助我们自动化管理和减少我们的管理、维护服务器和 VPS 的成本。