这两天时间稍微多一点,好好的研究了一下back up的策略,本文只适用于各种shared hosting, vps, dedicated server, server clusters. 但是主要侧重于vps以上以及多台服务器的备份策略,系统环境为centos 6, 是否有whm/cpanel 均可。* V. O* h- Z1 W5 c: y& y
8 I. h% {! U" Z. C9 D7 R, c 首先来说,作为一个marketer,最重要的莫过于自己的数据,而且我相信论坛上很多做paid traffic的人没有做back up的习惯,而且我的学员群里就有活生生的例子。。。数据库倒掉,辛苦全报废了,或者被东欧人入侵,数据全报废了。。我的其中一台服务器的硬盘也曾经报废了,但是我很幸运,因为managed的服务,立刻就给我恢复了,但是这也给我敲醒了警钟。
) d+ R* E+ h7 h9 M( d. h
8 Y/ E5 v# g: `& r% } 我不是linux备份方面的专家,以前一直使用managed的服务,但是目前服务器太多( 基本上US每个大型机房都有我的box),有些服务器的用途决定了他不需要managed的服务,毕竟挣钱是在太不容易了,所以就有了此文。此文的中心思想是automated back up,该花钱的地方花钱,该省钱的地方省钱。7 R$ z" h, O. l- d
$ K5 T8 e8 c, e 论坛卧虎藏龙,如果此文有任何不正确之处,敬请各位大神以及各位hostloc过来的专家们不吝指出,争取打造为比较标准,完整的back up tutorial!3 ~. R! Q% @/ @2 i2 s) \2 o! x+ Q: X
/ r- `4 \* q' n0 H8 I/ w
目前来说,backup一般分为三种,简单的说有FTP备份,rsync备份,以及R1Soft 备份( 商业软件)。(不考虑其他公司的in-house 程序,例如bpbackup等等) $ D" u' Y8 v; ?: Y8 ^
8 Z- ?5 T( I& Q- Y+ A8 G 三种备份各有个的优势,再有whm/cpanel的情况下, FTP备份是最最最简单的,但是流量消耗也是最大的,需要WHM/Cpanel支持。 Rsync 备份属于incremental 备份,效率较高,利用timestamp 的特性只备份变化的文件/夹,需要掌握一定的linux commands。 R1soft作为商业软件,也是incremental备份,基本各大IDC都在卖他们的服务,back up功能是最好的,能够有效的减少CPU负载以及磁盘的IO.4 N s# f9 B. `
6 w4 \( Z+ f2 K) Z0 Z2 D4 Q7 L3 c 这三种方式,无论哪一种方式,都需要你有一台back up server 或者vps,或者第三方back up service. 对于自己的back up server来说,需要的配置由你的实际情况有关。 Rsync的方式内存1GB即可,R1Soft 需要最少8GB内存。服务器的硬盘可以选择2*1TB, RAID 1 BBU 或者RAID 6的搭配方式( 一般来说RAID 1足够,RAID 6 是备份十分敏感的数据 ,RAID10 一般是向外提供back up的service)。下面我们来实际分析一下:
1 B- t- ^! U9 s, }* {' n % J7 w& R0 X1 L$ p, f" B2 C0 |
1) FTP 备份. 主服务器最好有WHM/CPanel面板。同时你需要有back up server 或者第三方back up service的FTP信息。. S8 \0 F$ `7 _5 [# N
5 y, T; o3 Y" q$ P( A" `9 c! U
CPanel 下备份: Back Up Wizard => Back Up => Full Back Up => Remote FTP Server, 然后填写remote back up FTP 信息即可。不好的一点是你无法实现automated backup.) T- P* D8 D3 ~$ m. @: B& ~
; n) k! [9 j& }& j: a" h 想用CPanel实现automated backup,可以使用如下代码保存在/home/youraccount/fullbackup.php :<?php
1 I% v9 X5 ^. f- m
2 o' u, \6 k: L. A, G // Disclaim: 此code来源于internet,非 advertcn.com原创。此code适用于FTP 备份,或者rsync备份,或者自动备份到Amazon S3
( k( }4 S+ {- w- P9 C) x // 你需要再你的/home下建立一个backup的文件夹
8 l% y" E8 H4 S // Information required for cPanel access : ?8 ~8 j# E$ P0 K* U) k. ~
9 N) _- M( E& ^! h3 b' Y7 d. Y $cpuser = "username"; // Username used to login to cPanel $ ?# Y8 x- G; J) ]1 k' x$ Q- s/ g+ `
4 o" P. I6 M! D {0 f$ J $cppass = "password"; // Password used to login to cPanel
0 l: D' D' `, T & a5 g( V W) m
$domain = "example.com";// Your main domain name 2 h/ t% n ~1 a2 I' }- o
( u6 x9 g4 b* K/ W! K4 h! V $skin = "x"; // Set to cPanel skin you use (script will not work if it does not match). Most people run the default "x" theme or "x3" theme
5 L$ X; M5 H7 K6 m2 q 7 I- P( T( w1 l" E7 l. {) J
// Information required for FTP host * a) O( k: q: I$ y5 F
1 h! |) C, o: J+ I1 M $ftpuser = "ftpusername"; // Username for FTP account 8 t* p e; C2 I: v# i6 Y" T
/ E2 t) h" x+ q r $ftppass = "ftppassword"; // Password for FTP account : C% S; ~/ A, C
3 a# b% J( a* b3 G2 W( f/ J $ftphost = "ip_address"; // IP address of your hosting account 6 n8 S- {" w! i! x6 D4 t0 }; ]
/ E8 Z+ r5 N5 J: F) `9 O w+ _1 |0 ?
$ftpmode = "passiveftp"; // FTP mode
, L. ~4 _1 R3 w% g
$ B# T2 v1 [$ o r/ `9 S // Notification information $notifyemail = "[email protected] "; // Email address to send results
, _- i+ P( n) ?3 p3 G5 `5 i) b1 h
# T# @, ~- n5 V. J% S% h ; y. G/ a: Y6 P8 [
# a( y3 h9 u; z# z
// Secure or non-secure mode $secure = 0; // Set to 1 for SSL (requires SSL support), otherwise will use standard HTTP 5 a0 T/ [! j- e% e
- x$ [2 T7 y( v7 Q: ~2 H // Set to 1 to have web page result appear in your cron log $debug = 0;+ u# ?# |0 a5 Z- }, r) J
2 i% k) W' z! u; d! }/ G9 {! G // *********** NO CONFIGURATION ITEMS BELOW THIS LINE *********
! C" A0 K0 M/ u% @' X
t8 K& H$ Y2 M4 I+ I; C" G $ftpport = "21"; ' u- Z# X% M" }& x# i* s5 D! S8 [
" t# B; |& d; u" M7 V/ c
$ftpdir = "/backups/"; // Directory where backups stored (make it in your /home/ directory). Or you can change 'backups' to the name of any other folder created for the backups;
}2 {2 i' P, C# E% w! G7 m- r$ M3 b
) n! L. {4 Q, ~5 v) C if ($secure) { . Y- R! F- j/ e5 Y# l- k
' v" B# j! L# S3 v" d $url = "ssl://".$domain; 7 A# L0 x' H: z
4 @' G* O" o1 d, {; ~- Y $port = 2083;
0 ^% f' U" g3 a4 O% \7 @& x1 T 7 v. D# H& Y9 @# U- y" e8 ^
} else {
" B# u5 K3 T$ e# t( W. l: T9 X
6 }9 k% z6 F9 Y( R8 _6 J: k F ? $url = $domain;
% o) B U1 r/ A- F- Q
5 T/ @# q3 |# n' n5 L $port = 2082; # D% q# [& o/ P8 L! g+ E/ j
6 u* Y @ { Y* `# n9 N } ) V% O. i" b5 n4 I9 f# h
3 D5 M, X+ R3 Y. L2 f4 Z0 f) u ' q: s2 T. {1 ?1 ~8 S8 A
, Z3 z( P" L6 Y& z/ N+ O' I. a& _$ P
$socket = fsockopen($url,$port);
' F' b* f( X) [4 q2 b9 [* f 5 L2 \7 n( Q8 z5 `9 ^0 g
if (!$socket) { echo "Failed to open socket connection... Bailing out!n"; exit; } ! \( m. o, k9 g# p9 T2 H
8 G( u! a$ D7 g- O ^+ i, q: U+ O- h ]+ V
8 V0 X. e0 n# y3 J4 L6 _: i: I8 Y // Encode authentication string ' C% ~ W8 Y4 L
- v5 J( u: P8 o V2 ^( t l0 p $authstr = $cpuser.":".$cppass; # v- \9 |* u/ T& k1 g
9 U+ w9 N6 s( U: x4 J( o1 X $pass = base64_encode($authstr); ' ?) R, _7 P; z9 O2 C4 d
5 }4 K3 b1 B* R& S. l# B" T( ?
$params = "dest=$ftpmode&email=$notifyemail&server=$ftphost&user=$ftpuser&pass=$ftppass&port=$ftpport&rdir=$ftpdir&submit=Generate Backup";
( J! s: o! m6 v3 M, H% X$ q
" Z7 |0 y6 p/ n, _7 {1 B5 u ( s$ ^) u; w. C& z, d7 B, y, y
7 p" V4 e' J7 A+ U, H/ h; y' U, P // Make POST to cPanel
& L6 x9 U( b4 e } . s5 ^9 r3 N1 M
fputs($socket,"POST /frontend/".$skin."/backup/dofullbackup.html?".$params." HTTP/1.0\r\n");
3 j) U% ^. T3 I3 H3 u% D
2 {( G' T7 q. T. G fputs($socket,"Host: $domain\r\n"); + u; S4 m3 q* S' V; D# h. q/ R
* D1 `2 ?( A& S) A% X" T$ } fputs($socket,"Authorization: Basic $pass\r\n");
# K. F0 R4 T3 f) T" p6 b
7 J) G/ G- p( _0 N$ B9 @* G fputs($socket,"Connection: Close\r\n"); 1 r2 q: |, d: [2 N# e7 D/ z7 |
& e v' c1 N! x9 S9 z* B6 A3 d
fputs($socket,"\r\n"); 5 p* m6 D5 K5 V; k) l Y; L. G0 @
) _; I5 [0 e8 p) u! v
// Grab response even if we do not do anything with it.
( t, Y ^; W0 M; e& K' B! A
8 N/ \9 [9 Q! i, M F$ o& Y( d6 k while (!feof($socket)) {
# m0 v9 _, b- d7 O) b7 K# `. \ 9 G9 j. i" W) \4 N: A
$response = fgets($socket,4096); if ($debug) echo $response; / v$ Z! }! b# y h) _! F, ^
/ P4 v4 u! n& t' @# L } 0 q3 R8 I2 p1 c/ w v1 h3 x( o
& l, C' w. j5 u5 w
fclose($socket); 6 E) e( \, u( j
7 }1 {- ~! a1 \9 f8 ?# @ ?> 复制代码 如果我们想每天凌晨2点钟进行备份,可以将如下code加到cron当中,就可以实现自动备份到远程FTP中00 2 * * * /usr/local/bin/php /home/youraccount/fullbackup.php 复制代码 或者将上面的code稍微修改下,只需要产生备份的文件,也可以利用下面的Rsycn或者amazon s3进行备份。' w5 }. X; F, S6 c# K* ^
WHM 下实现automated back up: Back up => Configure Back Up, 然后再这里enable backup,并且填好FTP信息即可。
2 X0 V+ v y" `
, ]9 Q4 t! u/ K# O7 u% I8 L 2) Rsync 备份. 此办法属于incremental 备份的,效率较高,节省服务器的CPU 负载,减少IO等等,但是配置较为复杂,需要一定的linux 基础。 / p$ h* `/ O& i" }# c" g: D
0 x( m: O6 o& D) j 代码如下:a) 用root身份登录录住服务器(避免权限问题)
' g: C2 C2 A8 p: K G( M b) 设立SSH key pair。 7 n O$ ^& J! R8 ^ m% i
有的box没有安装rsync,需要自己安装rsync 这种情况概率很低
. w3 A* S9 o: S9 {" G # yum install rsync5 W! V% L- z0 D/ X9 E @
( }1 E2 t8 r* ~5 ?" C2 D% H
你需要用如下命令检查是不是系统已经存在一个key
3 ?$ g, y: Z9 ^% R) \) a; t1 C # cat ~/.ssh/id_rsa.pub( a! v! O9 _: T+ b# z7 I; R
8 U1 ^, h( f2 Y% M" y7 q; S0 ~8 q
如果已经存在,可以直接到c),否则执行如下命令: V9 Z) `! B$ H4 H6 X
( L+ M9 Q9 \6 e: O% w" v" v # ssh-keygen -t rsa -N ''
9 m% z2 Z( V" c, v, K. _* k& j 注意,是两个单引号,这样就产生了两个默认的key: id_rsa 和 id_rsa.pub
7 m( Y$ q, s; v4 y D a. |
# b, L& W: T# t# B, G ( c4 g9 \/ F3 `1 L4 @
c)把RSA加密的key 复制到你的back up server, 假设IP为9.8.89.2) d7 g& Y% c) R1 \9 b3 v
- ^, u" l- P5 I& M5 d* x
# scp /root/.ssh/id_rsa.pub [email protected] :/root/ * B# T- O" \! I# P' Z; @6 p9 D
- b% t/ C# ?- u$ h, W, l
然后ssh到你的back up server,执行下列命令:4 |" p. o' t1 z% v1 y& u/ s3 J
$ t9 {* |, O8 V
# cat /root/id_rsa.pub >> /root/.ssh/authorized_keys
; U( {/ Q8 s0 F+ H$ k4 l # chmod 644 /root/.ssh/authorized_keys
( e: s- N* p4 e. \( q 这样SSH pair就构建完毕。
' l8 [- X) z. l8 U 4 l4 |3 P- V% z* X- V- i/ H& s7 a- v* K
d) 测试SSH pair是不是成功,如果不需要密码,就说明成功了
8 ^. c0 @3 ^2 C* k/ D) L #ssh -i /root/.ssh/id_rsa [email protected]
~" c! p( C, `0 }/ x: C
7 u* g9 J+ M6 ^: r e) 最后一步也就是最重要的一步,备份,假设我们的住服务器的备份文件夹是/home/var/etc, 需要备份到back up server的/home/root/backup_server1,则我们需要将3 D; Z6 j' Z! L; L) U
下列命令写入到cron:7 |! ]: \" R/ C
#echo "0 5 * * * root rsync -avz -e ssh /home/var/etc [email protected] :/home/root/backup_server1" >> /etc/crontab! l7 H& Q3 N4 u4 y3 ^7 a: j& k
表示每天5点的时候同步这两个文件夹
1 B( d$ m# B# _7 X 9 i Z* A5 w1 U; @: a' s7 H
一些其他的备份例子:, j' ]3 }# r! n6 c6 z! i
备份整个server: rsync -avz -e ssh / [email protected] :/home/root/backup_server1
7 H3 x Q M* r: v- u3 T1 c 备份home: rsync -avz -e ssh /home [email protected] :/home/root/backup_server15 }8 r2 K" S* a) C& v
备份某一个用户: rsync -avz -e ssh /home/advertcn [email protected] :/home/root/backup_server1 复制代码 由代码可以看出,rsync只能同步文件,不能保存每天都备份的数据。但是相当的经济实惠。 H6 p3 @( @4 ]
4 C& N( h+ l! [ 3) R1Soft 软件备份。虽然花点钱,但是使用的很值。我的建议是服务器多的同学可以考虑这个产品。买一个2*1TB的RAID 1的服务器,就可以备份n多服务器,甚至也可以提供备份服务。很多大型的ISP的备份服务都是R1Soft。 我建议可以使用gigenet或者steadfast 的R1Soft 备份服务,价格公道,network好。http://www.gigenet.com/hosting-solutions/storage/r1soft-cdp-backup/ 复制代码 http://steadfast.net/services/disaster-recovery.backup.php 复制代码 4) 直接备份到Amazon S3. % c9 p+ {! G4 d
$ C7 e- f9 }2 P9 F( d S3的服务有保证,你的备份文件不会丢失,不需要考虑什么RAID 1,5,6,10之类的。而且AWS的价格不是一般的便宜,每GB文件0.095刀,我估计大部分人的文件10GB到头了,也就是一个月1刀的费用。。。服务公道。可以综合上面的Rsync和FTP的获取备份文件的办法,将文件直接备份到Amazon S3。Amazon S3 全部使用API 进行操作,步骤非常的简单,备份过程如下:% ]& {, T- U$ t% F
$ x7 y s( c3 x+ v$ d+ I a) 注册AWS账户,获取你的access key 和secret keyhttp://aws.amazon.com/s3/ 复制代码 b) 在你的主服务器上安装s3 client,用来和AWS进行通信<p># cd /etc/yum.repos.d</p><p># wget http://s3tools.org/repo/RHEL_6/s3tools.repo</p><p># yum install s3cmd</p> 复制代码 配置s3 client<p># s3cmd --configure</p><p></p> 复制代码 这个过程需要你输入你的aws的access key 和secret key,其余全部默认即可。4 S. w3 a% o3 H0 A1 U W
$ D5 |, _' ~; P4 `9 T; D& U9 x 这样就完成了基本的配置工作,下面开始配置备份过程。) |1 G: v. i/ N6 o) w
! x' y; q% r5 g, y c) 备份配置
& l% O8 H* Z* J# E7 s9 Z9 d, M
& M0 h- L+ z9 } ] 在S3上建议一个bucket,假设用来备份广告中国的这个server这样以后所有的关于advertcn的数据都会保存在这个bucket上 c/ ^% Q1 W7 ^( l
; t$ c/ D3 n+ T! y; P (更多的命令,可以查看:http://s3tools.org )
' _! T' V9 X8 H* D2 c6 [; Z
2 F# [) M( i: z; g4 I8 C 前面我们已经说过了如何开启WHM 自动备份功能,或者查看http://docs.cpanel.net/twiki/bin/view/AllDocumentation/WHMDocs/ConfigBackup 复制代码 假设我们使用的是WHM的默认备份文件夹/backup, 则在里面还有一个文件夹/cpbackup/daily,所有文件都会在daily里面
& S/ V& Y1 O& Q5 i0 R; z0 x 6 \2 H% y- t; A& v2 p7 k( i9 U
创建备份log文件# mkdir /var/log/backuplogs 复制代码 这样基本的参数就全部完毕- e5 k7 _8 d' F) Y% P- ^: b( T1 a
0 J/ g5 Y7 |- u. B. |: @# @ d) 自动备份代码3 Q: g7 i: u% K& B& @
: z/ K: i' F q1 N( q
将下面的代码保存为/root/dailybackup.sh#!/bin/bash8 ?% a6 Q' u, O, c/ J$ S
, a& ]; Z4 l# c. E
##notification email, 把这个email改成自己的email,需要改
( p7 h' ?# g! I; C0 a- h [email protected] * Y$ I0 Z. D' d& Y3 w
9 e: N8 ^6 h& v7 t8 d
ERRORLOG=/var/log/backuplogs/backup.err`date +%F`
) V1 W6 l7 S6 D' Y8 e8 X ACTIVITYLOG=/var/log/backuplogs/activity.log`date +%F`+ R9 k) Z4 o& j# C$ y( J
( s: t8 U. J; U. n3 W0 u0 }
##需要备份的文件地址,按照前面说过的,或者改成自己的
- R0 ]( J4 n& _7 Q* |0 L0 e f SOURCE=/backup/cpbackup/daily
/ _* J8 q7 @: `1 L7 n% o ; a) N: k- E8 w
##S3的Bucket文件名称,不要改
) l9 D; t! s! o7 z; ?! \ DESTINATION=`date +%F`
3 I; B+ C0 w2 R5 G, f1 I
# G! ]1 S( t$ Y) i, A @9 T. Q9 H ##保存的备份的天数,3表示只保持近三天的备份文件,一般用5或者7,或者up to yourself
# N* {* H7 M p. R5 O6 M4 V5 n) ?4 Y$ w DEGREE=3
5 @% `' {2 S% c& d& q 3 {) j7 w2 G3 I2 i, {7 _- `# m# W5 F
##clear 日志,不要改
; _: x& m# |& v- ~* W :> ${ERRORLOG}, x" a8 n1 p8 S. `- e# ?! U
:> ${ACTIVITYLOG}1 G$ V% ]+ v$ g+ F3 R
* N; L8 Y9 U0 f ##上传到amazon S3,把backup_daily改成相应的s3 bucket
, \* N. m% U- G* [4 M$ _- r /usr/bin/s3cmd -r put ${SOURCE} s3://Backup_daily/${DESTINATION}/ 1>>${ACTIVITYLOG} 2>>${ERRORLOG}# @) T" m/ V1 T1 |8 d, i+ [3 S
ret2=$?
3 X8 [$ {7 R# B% _, Q u) L
. z/ `( p2 B9 F( ? ##发送email notification,不要改! G8 [ A. q) J7 J
msg="BACKUP NOTIFICATION ALERT FROM `hostname`"
* Y; J6 F4 E% y ! w) y; {" B4 ^! T8 }
if [ $ret2 -eq 0 ];then
, l( ?- n5 {/ o msg1="Amazon s3 Backup Uploaded Successfully"
# A, ~+ c5 C# K" P2 G# V else- P$ h1 B( U4 Q, y1 J7 z* t0 l, ?
msg1="Amazon s3 Backup Failed!!\n Check ${ERRORLOG} for more details"3 j3 h6 _3 P2 {) ^$ c- l; E
fi* {6 N( I6 [7 l% s/ l5 r: n
echo -e "$msg1"|mail -s "$msg" ${_EMAIL}$ k2 u! E7 _( b0 w
( m' h, c' `8 p" A- ]' \ #######################4 b. |' u; m5 v' }+ O1 j' Q; }. o
##删除超过备份天数的文件5 Y+ R- F; R8 U9 N
## 本地服务器和amazon s3全部删除,把backup_daily改成相应的bucket1 Q3 u! [+ C7 T
#######################1 A8 Y1 n! B% _
DELETENAME=$(date --date="${DEGREE} days ago" +%F)
4 L* r T: h: f ' l0 Y @ w0 v& v3 q" P
/usr/bin/s3cmd -r --force del s3://Backup_daily/${DELETENAME} 1>>${ACTIVITYLOG} 2>>${ERRORLOG} 复制代码 然后更改权限,加入cron,实现自动备份<p># chmod u+x /root/dailybackup.sh</p><p># cp -p /root/dailybackup.sh /etc/cron.daily/</p> 复制代码 这样基本就完成了自动备份工作。
0 l( L( W/ w" z7 g3 D) F) ~; {" k 1 x6 U$ ]# k( R4 X5 Q, i
从S3恢复文件到本地服务器:<p># mkdir restore</p><p>% t0 A) q: `" s+ Q" {9 ~4 n6 N
</p><p>#s3cmd -r get s3://Backup_daily/2011-02-32 restore</p> 复制代码 是不是很简单?
6 z2 ?% D6 ~* w) N
# N# }1 R& y j6 \ Note:
x6 H X; Q8 Z# w9 W' w
/ H5 r& Y2 i5 F5 ?8 p 1) 如果你想在每天WHM完成备份之后就执行这个备份命令,可以如下:
+ v' ]" r3 O/ Z! i ( H' \5 J, V' e, E
添加代码<p>#!/usr/bin/perl</p><p>system(“/root/dailybackup.sh”);</p> 复制代码 到/scripts/postcpbackup,再改文件权限
3 S4 C/ H! ~3 r, J w4 k9 Z$ [ ' p( g5 I5 q7 o
# chmod u+x /scripts/postcpbackup
$ f1 i( g! T! V9 W9 s
1 I( M+ \! C- G, r 2) 如果你想修改WHM每天的自动备份时间,可以在WHM后台" C( k( D! z# |8 v- T- `
& I& B3 I0 j" `& p WHM => Cpanel => Manage Plugins => Install and update, 给cronconfig打上勾
$ U* e- q5 f% R# a8 m
1 R8 s' j" J$ r: G9 B4 u 然后去Plugin里面设定自动备份的时间即可。
/ Y; d; ], \% |8 [) w ; z1 u% L9 u( P9 Y! E0 B
) M; C! U7 \2 N9 c1 o
--------------------------------------------------------------------------------------------------------------------------------------------------
) M, J C6 l" t' R$ X( d+ s 以上涵盖了大部分人的备份方式。不要过于追求高端,选择合适你的就好,as long as it 能够保护好你的数据。
$ z9 F0 ~- |/ ]( N$ p $ l( U4 p* @8 d- p% v3 ~
目前广告中国采取双重备份,每天自动备份到amazon s3,同时通过R1Soft 备份到自己的back up server
; `) R, x* L: G; O ; x) O: b: {' h
% {2 {1 o8 n9 [6 I 我是back up 这一行的菜鸟,希望各路大仙不吝指出我的代码错误或者offer一个更方便的办法0 F9 P7 u: p- @9 [) h& z( K @
" }4 {. `( |: d: E8 U+ D6 T1 x
# z) e# e( q0 E+ k3 Z; ~5 S9 M
0 p! {5 K- j" \- @# ?, y+ B " j1 g: r. x* c/ z: k' [) l
6 y a( G$ z2 W; M
: }4 ^* S9 q' E) G) C- ^6 s. s
- h5 O% m, O1 }/ x
) Y# Z6 A* f: u) } R% {# W- n1 w% N 4 F/ z9 Z S: P* z! e
评分
查看全部评分
相关帖子