这两天时间稍微多一点,好好的研究了一下back up的策略,本文只适用于各种shared hosting, vps, dedicated server, server clusters. 但是主要侧重于vps以上以及多台服务器的备份策略,系统环境为centos 6, 是否有whm/cpanel 均可。
9 a4 t; b* P- ]! n; L _' R2 f4 O/ R3 B
首先来说,作为一个marketer,最重要的莫过于自己的数据,而且我相信论坛上很多做paid traffic的人没有做back up的习惯,而且我的学员群里就有活生生的例子。。。数据库倒掉,辛苦全报废了,或者被东欧人入侵,数据全报废了。。我的其中一台服务器的硬盘也曾经报废了,但是我很幸运,因为managed的服务,立刻就给我恢复了,但是这也给我敲醒了警钟。
7 i9 `6 `* X) u! q) r
2 z {" _. G# W) u5 x( w- k! L 我不是linux备份方面的专家,以前一直使用managed的服务,但是目前服务器太多( 基本上US每个大型机房都有我的box),有些服务器的用途决定了他不需要managed的服务,毕竟挣钱是在太不容易了,所以就有了此文。此文的中心思想是automated back up,该花钱的地方花钱,该省钱的地方省钱。
' l* W/ v% L, }6 m
7 G/ ^4 e2 X* f1 }" g 论坛卧虎藏龙,如果此文有任何不正确之处,敬请各位大神以及各位hostloc过来的专家们不吝指出,争取打造为比较标准,完整的back up tutorial!: T' Y% I8 _' H* `
+ y- L" @1 m, J, L9 K' M; @) a 目前来说,backup一般分为三种,简单的说有FTP备份,rsync备份,以及R1Soft 备份( 商业软件)。(不考虑其他公司的in-house 程序,例如bpbackup等等)
" L7 v" k5 C6 z. s) g7 ~# z : `5 G. w1 {3 G4 b
三种备份各有个的优势,再有whm/cpanel的情况下, FTP备份是最最最简单的,但是流量消耗也是最大的,需要WHM/Cpanel支持。 Rsync 备份属于incremental 备份,效率较高,利用timestamp 的特性只备份变化的文件/夹,需要掌握一定的linux commands。 R1soft作为商业软件,也是incremental备份,基本各大IDC都在卖他们的服务,back up功能是最好的,能够有效的减少CPU负载以及磁盘的IO.
9 ]* F, K; z. `' D5 H4 s1 z
9 i; y4 D6 f! M2 H 这三种方式,无论哪一种方式,都需要你有一台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)。下面我们来实际分析一下:% b* ^5 J& i5 W' j: a
/ l% [ `" ~2 [( ~
1) FTP 备份. 主服务器最好有WHM/CPanel面板。同时你需要有back up server 或者第三方back up service的FTP信息。/ f4 l m+ i* q$ w- {& |
9 [9 x" w* t4 ~2 K$ q
CPanel 下备份: Back Up Wizard => Back Up => Full Back Up => Remote FTP Server, 然后填写remote back up FTP 信息即可。不好的一点是你无法实现automated backup.0 K) S, x$ a( e& }6 b
- k& N4 y6 J+ b$ q
想用CPanel实现automated backup,可以使用如下代码保存在/home/youraccount/fullbackup.php :<?php
; F- m% } x0 l
" w W' b; y4 x. d3 N1 } // Disclaim: 此code来源于internet,非 advertcn.com原创。此code适用于FTP 备份,或者rsync备份,或者自动备份到Amazon S3
, G7 e% T) N, }3 Y# \ // 你需要再你的/home下建立一个backup的文件夹
: y- s: x5 ]" Q7 x J7 A/ m, A // Information required for cPanel access
9 G k3 f& M7 V7 v# y7 F3 D& i6 a
5 B" C- Q8 k O0 U6 o $cpuser = "username"; // Username used to login to cPanel 9 C' K9 s: _2 L& W. X! X
$ x& {- G1 A' L" \( J* y: S7 j
$cppass = "password"; // Password used to login to cPanel
4 h! ^' ^+ c% v! N* f0 j! a; ]6 s
4 ^ j0 V( y$ h! {$ q% U! W- h $domain = "example.com";// Your main domain name 1 d* O/ K9 W6 }2 K* H9 g9 w3 |
" F$ G- ^# D* K! \ $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 + v H8 P3 S& Q+ |! k( {' ?( G
1 I6 H$ B! t5 Q+ V7 E, J- \ // Information required for FTP host * A# z( @" x, d7 [; | _
$ _. A4 Q5 F u; c( ~ $ftpuser = "ftpusername"; // Username for FTP account
" A; c" I4 c, H: e2 K! Z ( h( M' F+ r7 r
$ftppass = "ftppassword"; // Password for FTP account
3 D$ A9 o2 o7 ~1 V7 \
/ N& a; ~6 z( j# h( N# U) }* B $ftphost = "ip_address"; // IP address of your hosting account % Z% e5 a' k3 v/ ^
4 N4 t' [/ J6 O/ L8 @ $ftpmode = "passiveftp"; // FTP mode 5 {! \/ \$ } U6 V
+ P6 y# V; b4 a: J+ m) |5 o7 o% _
// Notification information $notifyemail = "[email protected] "; // Email address to send results 1 c, A) r2 A8 Y
; R$ a) v8 F) e% [3 \+ g* M
5 u, U7 H( {' a; X. u
; B7 t/ k( ?) p0 | // Secure or non-secure mode $secure = 0; // Set to 1 for SSL (requires SSL support), otherwise will use standard HTTP 3 [8 z" O) _" W: w. L$ ?
% c& I- N$ z e9 g
// Set to 1 to have web page result appear in your cron log $debug = 0;) _. r; M/ `' Y. g4 I! u5 e& V
0 H5 c! J; E1 a' P: U7 m$ K
// *********** NO CONFIGURATION ITEMS BELOW THIS LINE ********* : _5 v$ X8 G6 @ Y: o4 h
, Z3 J0 I1 W% Y c1 Y $ftpport = "21";
u* B Q! c7 s" N
4 _8 }. G/ r& w9 l $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; + w$ X9 w/ I K
4 R" f$ y$ ^* d
if ($secure) { 9 M. m" D/ a, c
; @! Q* G1 |$ d $url = "ssl://".$domain;
/ ~- n ?; U5 X$ i5 \) N& i7 ~4 ^# _
+ Y! u) o% `3 x+ B9 h1 y/ h6 b7 z' w $port = 2083; 2 G. K; z( w" @7 v5 @/ s
* n! q# c5 ?1 x0 h } else { z8 m7 |4 s3 h& x- w
3 S& \) K, C: |) T' E7 l7 n $url = $domain; 8 e; e; }3 i; E: o
2 a$ g Y, \" f4 T. V( e $port = 2082;
. r s# d: b, d % h& H: Z; m+ |6 I% R
}
. F; J @+ J1 U ]2 M5 {' } % h8 q) ~; m& y1 \4 `
4 ]. i9 `" d, S. M2 J) g
* l( ?9 F7 ?/ w* ~) E9 V \- u+ e $socket = fsockopen($url,$port);* Z! b" p" D8 e+ z' x
0 c7 K) f+ u" B3 K6 b
if (!$socket) { echo "Failed to open socket connection... Bailing out!n"; exit; } : [! P* g! }6 U0 [9 _
, b4 w% e2 b$ s4 w
7 G2 H6 V* e; I/ P9 N& T, F * m/ ]% a3 |; D% u+ v
// Encode authentication string " ^/ I% {* U; c, c
/ ~1 C+ o7 K5 l1 Q2 ~
$authstr = $cpuser.":".$cppass;
. h* K ^9 N% f; z1 w9 J
3 L3 X0 P. p9 l' T6 B6 ^ $pass = base64_encode($authstr);
6 ~2 {2 r$ N4 Y9 ]8 Q7 a4 A 3 n" K; _4 @3 l. i& j
$params = "dest=$ftpmode&email=$notifyemail&server=$ftphost&user=$ftpuser&pass=$ftppass&port=$ftpport&rdir=$ftpdir&submit=Generate Backup"; + _2 N3 Y9 [ D' C/ P7 |# @/ g, V6 {! }- D
% M3 d' ?3 T. {9 b7 o
3 u! Q- `7 U0 ], q1 o$ S6 n : T! B1 t' A4 B) ^3 J
// Make POST to cPanel % _! k: f- J, }* @
. j" t; y' N% e fputs($socket,"POST /frontend/".$skin."/backup/dofullbackup.html?".$params." HTTP/1.0\r\n"); {: A9 f( b/ m
0 X. O+ f- E$ v$ K4 e
fputs($socket,"Host: $domain\r\n"); 8 \- X- U* H9 e( `& ?
* |0 m! Z6 m! M6 j
fputs($socket,"Authorization: Basic $pass\r\n"); 4 O; a/ f; K2 D5 r1 S
0 S3 L, J q/ o7 b fputs($socket,"Connection: Close\r\n");
+ f9 U1 _2 p& {& Q # g: Q9 Q8 f9 e
fputs($socket,"\r\n");
9 T0 p+ E% c( P& Y
1 T/ |# }) X3 [; o7 }7 B // Grab response even if we do not do anything with it. 1 A, d5 Z6 e) ]8 q, A& s& }
7 H" }# _; R0 L4 D
while (!feof($socket)) {
8 d7 U2 G$ u& R5 q5 `4 B+ d 7 l+ p; b: F# e
$response = fgets($socket,4096); if ($debug) echo $response;
$ Z: W9 p t4 Q; r' n* @: k v
+ l: F0 t$ d" U3 J5 o, Y } 4 r6 W. W+ m! C+ b4 z
. X% N- V* ]9 c% D# v
fclose($socket); - B4 ]! c; D* R/ a! d
3 K" s- X4 z( m( \! {3 m ?> 复制代码 如果我们想每天凌晨2点钟进行备份,可以将如下code加到cron当中,就可以实现自动备份到远程FTP中00 2 * * * /usr/local/bin/php /home/youraccount/fullbackup.php 复制代码 或者将上面的code稍微修改下,只需要产生备份的文件,也可以利用下面的Rsycn或者amazon s3进行备份。* o8 r+ y. |' |+ {, m1 P
WHM 下实现automated back up: Back up => Configure Back Up, 然后再这里enable backup,并且填好FTP信息即可。
7 v; N' z; H7 l6 v- y4 B
3 o) v' v; X: z& N! h! Y 2) Rsync 备份. 此办法属于incremental 备份的,效率较高,节省服务器的CPU 负载,减少IO等等,但是配置较为复杂,需要一定的linux 基础。
n/ G) K; _, {- o* E: [; O0 u 9 p$ p! ^; G- n# s, X& B* o& `
代码如下:a) 用root身份登录录住服务器(避免权限问题)
+ h7 {' H# |/ D4 _9 ?1 Q- C+ } b) 设立SSH key pair。 $ i' t: ^' Z- T( b: z0 {) \% G6 `
有的box没有安装rsync,需要自己安装rsync 这种情况概率很低) j V5 g9 H' B& n+ w6 n
# yum install rsync, e! D$ k1 j+ i6 d4 v
0 s7 l) w0 V2 j1 q" L: \, z, N4 N- I7 {
你需要用如下命令检查是不是系统已经存在一个key3 E; Y) Y5 p1 ~. O
# cat ~/.ssh/id_rsa.pub P# m5 F U5 W9 ]6 A% o
4 Y9 d1 g" H5 g4 l2 X: n 如果已经存在,可以直接到c),否则执行如下命令:
9 x9 ^, ]. w/ ~, E- {4 T8 f
+ ?0 Q% _; T: R( c9 L # ssh-keygen -t rsa -N '' 2 X0 v3 w$ x- k _4 C" i( j
注意,是两个单引号,这样就产生了两个默认的key: id_rsa 和 id_rsa.pub& }$ Z6 m5 e- j5 {, F/ R
' ^/ |3 R0 ]3 d o" U5 _
3 c/ f) G/ F; ?3 m c)把RSA加密的key 复制到你的back up server, 假设IP为9.8.89.2' a6 Q% f, R) M4 t+ k
! {( V" w4 D2 K& z+ h
# scp /root/.ssh/id_rsa.pub [email protected] :/root/
0 |8 w: L; @5 T
5 P$ ^' Z E; v9 X3 }$ J 然后ssh到你的back up server,执行下列命令:4 S$ c. G1 L( H$ W/ t+ S
& C$ ~ n% E9 Q # cat /root/id_rsa.pub >> /root/.ssh/authorized_keys
( I* `8 w2 c/ w5 |. S # chmod 644 /root/.ssh/authorized_keys R2 ?/ b5 n; R! u4 r, z4 I
这样SSH pair就构建完毕。
1 u2 Z T/ ~7 [8 k: \4 [; D
& L. ]$ c! X: L& s) C d) 测试SSH pair是不是成功,如果不需要密码,就说明成功了
3 e4 }& Y/ g2 }% t- W0 X# M( L0 f #ssh -i /root/.ssh/id_rsa [email protected] ( V' X9 p: s- L" G0 J+ h9 ^
7 ~9 U( Z% ]) X0 E- F( D
e) 最后一步也就是最重要的一步,备份,假设我们的住服务器的备份文件夹是/home/var/etc, 需要备份到back up server的/home/root/backup_server1,则我们需要将! R- B% C, y' g) _" Y4 p
下列命令写入到cron:
9 A3 T& o4 g Z5 ? ~, I #echo "0 5 * * * root rsync -avz -e ssh /home/var/etc [email protected] :/home/root/backup_server1" >> /etc/crontab
7 _- C: H z* y9 c9 q5 P 表示每天5点的时候同步这两个文件夹
" s8 [7 o* j+ m+ Z& O 0 B6 |/ z8 ^5 [/ G9 D y
一些其他的备份例子:
9 R1 e( E/ C2 n: Z8 _3 y8 S 备份整个server: rsync -avz -e ssh / [email protected] :/home/root/backup_server1/ g" W8 M3 A3 \# b+ h! V i5 z
备份home: rsync -avz -e ssh /home [email protected] :/home/root/backup_server1, a2 R- ?6 ~ |+ J. l
备份某一个用户: rsync -avz -e ssh /home/advertcn [email protected] :/home/root/backup_server1 复制代码 由代码可以看出,rsync只能同步文件,不能保存每天都备份的数据。但是相当的经济实惠。
$ R" a r. d) c8 F0 l& Z7 ? & A7 y, G) t0 v9 o9 Z2 K
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. : M/ Q( j! q' H5 D$ U5 h
7 J6 h* E7 y& w; D# z- L
S3的服务有保证,你的备份文件不会丢失,不需要考虑什么RAID 1,5,6,10之类的。而且AWS的价格不是一般的便宜,每GB文件0.095刀,我估计大部分人的文件10GB到头了,也就是一个月1刀的费用。。。服务公道。可以综合上面的Rsync和FTP的获取备份文件的办法,将文件直接备份到Amazon S3。Amazon S3 全部使用API 进行操作,步骤非常的简单,备份过程如下:8 V) P0 \" t& \# l$ o. @
) D' f9 \& R8 R$ X$ ~; ~
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 Y/ o: \- I0 K* K! l
% `/ K( V0 g7 y I( I" l; Q. B: E
这样就完成了基本的配置工作,下面开始配置备份过程。
+ {2 ^+ n6 E {' i, @" ^0 q9 q$ n
. Z1 P2 F; Y1 @* R* n* u, \ c) 备份配置
! x ^ @0 Q1 f5 d/ b, o" s: _ 4 m2 E% u5 D5 _8 X
在S3上建议一个bucket,假设用来备份广告中国的这个server这样以后所有的关于advertcn的数据都会保存在这个bucket上
3 ^" {. ~' l& K+ M$ W, v& j * |4 j3 E+ L# a) [* }2 k
(更多的命令,可以查看:http://s3tools.org )
. q; ]9 i0 i. W9 m. ?+ T! {
# c$ S9 r& L4 I7 ?8 g# S 前面我们已经说过了如何开启WHM 自动备份功能,或者查看http://docs.cpanel.net/twiki/bin/view/AllDocumentation/WHMDocs/ConfigBackup 复制代码 假设我们使用的是WHM的默认备份文件夹/backup, 则在里面还有一个文件夹/cpbackup/daily,所有文件都会在daily里面
2 H1 `* I& m1 C; ` $ m# J$ M. X6 S, ~6 o$ Z% d* x
创建备份log文件# mkdir /var/log/backuplogs 复制代码 这样基本的参数就全部完毕
, F- ]& o* I- |4 {/ e 3 ^# ~- X4 Z0 \9 y
d) 自动备份代码; P7 m( u8 d. z! y; `3 Y
4 X& k- i9 b g8 V1 v9 a, D0 q
将下面的代码保存为/root/dailybackup.sh#!/bin/bash" e7 U) Q7 V1 |$ d: y( z! A8 J
+ d$ ^$ ^- m- b2 ^8 y
##notification email, 把这个email改成自己的email,需要改
( G1 G8 w. ^& y$ C0 U# k [email protected]
7 l) A( ]; z U6 C* F4 h
! V6 Q2 q( ~& H8 M N( b ERRORLOG=/var/log/backuplogs/backup.err`date +%F`# {! j* H) D$ y$ `, P
ACTIVITYLOG=/var/log/backuplogs/activity.log`date +%F`
' p/ |" g- m2 J1 o0 x( f. @
Q) n. Y6 D0 h, Q0 ]7 ` ##需要备份的文件地址,按照前面说过的,或者改成自己的
$ X' f8 |( [& f f7 E SOURCE=/backup/cpbackup/daily0 |) b/ \9 |8 A# J
5 C! R: x) P; C7 U4 a; g ##S3的Bucket文件名称,不要改5 I/ t3 Q+ g0 Q" M& T/ ?6 w! H
DESTINATION=`date +%F`
( z' q* w2 o) }: \3 A % k5 Y) O9 Q' g5 ^9 P. v) f
##保存的备份的天数,3表示只保持近三天的备份文件,一般用5或者7,或者up to yourself, Z2 k$ l1 @5 J0 I8 J( Z, H
DEGREE=3$ q. ~; E2 k7 ^; T) |$ l
6 `9 s2 }: g+ T5 l ##clear 日志,不要改
! l' G2 G* O& x* @5 O# n( e :> ${ERRORLOG}0 j+ V1 S+ W/ Z: z0 b/ `
:> ${ACTIVITYLOG}! B) r2 [7 R/ U" \6 C: v
2 s5 h+ X& w2 R$ }, j+ w1 ^! L
##上传到amazon S3,把backup_daily改成相应的s3 bucket9 r0 W* ?0 P/ K# k/ a1 X% m
/usr/bin/s3cmd -r put ${SOURCE} s3://Backup_daily/${DESTINATION}/ 1>>${ACTIVITYLOG} 2>>${ERRORLOG}
, Y. k- E) K l+ X3 {/ s ret2=$?. P6 c& m |& m, ^: e" d
7 O7 g7 ~$ Y1 {, w$ M, r+ w- E ##发送email notification,不要改8 P) t6 M; I$ h$ ~1 k. ^# @2 Q
msg="BACKUP NOTIFICATION ALERT FROM `hostname`"
5 o4 k$ Z% q1 Q
$ _- r& O! r; g* L9 @+ M if [ $ret2 -eq 0 ];then
% l" v: n2 K0 L; ~6 d% P4 T msg1="Amazon s3 Backup Uploaded Successfully"
/ W# {& O8 }& e% d else# W; I1 k! f# @9 O
msg1="Amazon s3 Backup Failed!!\n Check ${ERRORLOG} for more details"
+ [8 j) R, f5 |, _ fi
% o% P" O) W5 c! z, m9 Q echo -e "$msg1"|mail -s "$msg" ${_EMAIL}* Q' T: s$ f* T9 V2 t6 C. ^3 ~' D: I
% I) Z1 {" a' X. u; c Q4 ^5 r
#######################( M; L6 q" X/ a5 n$ M3 t
##删除超过备份天数的文件
" V. C0 l5 l2 ]% x, i% x5 P4 { ## 本地服务器和amazon s3全部删除,把backup_daily改成相应的bucket
: P. J0 J T, ?4 o7 X: ]8 A1 J- y #######################0 o. t! }$ U' j( i$ k- a
DELETENAME=$(date --date="${DEGREE} days ago" +%F)
! n$ c+ \' z7 e4 v- t/ O7 Z . p4 J$ \( u. A6 n) Z5 {
/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> 复制代码 这样基本就完成了自动备份工作。1 R" l- L- l$ _3 B
5 d" z: H+ o6 E* u. ] 从S3恢复文件到本地服务器:<p># mkdir restore</p><p>$ }9 l3 ? C8 l' O1 k# X- S" p
</p><p>#s3cmd -r get s3://Backup_daily/2011-02-32 restore</p> 复制代码 是不是很简单?
1 D: _% m1 H- q5 d
4 l" w/ {0 A7 \ Note:
' ]4 O x( x$ z- l: f1 i % ?' x4 K/ }+ i/ V0 j2 a
1) 如果你想在每天WHM完成备份之后就执行这个备份命令,可以如下:
' [0 ~3 K3 J% t% \3 i' R 3 G) T- t' H" m s* W: g
添加代码<p>#!/usr/bin/perl</p><p>system(“/root/dailybackup.sh”);</p> 复制代码 到/scripts/postcpbackup,再改文件权限' K0 J' |( c9 Y' ?
8 h. \: T0 b/ v) K/ G! @+ }: r
# chmod u+x /scripts/postcpbackup
% g4 U5 M% q: i% R6 |4 ` @; K: P7 [+ _ v1 o! [# X
2) 如果你想修改WHM每天的自动备份时间,可以在WHM后台
7 b- K: J; i- x7 Y4 u , g6 {3 @1 i5 A
WHM => Cpanel => Manage Plugins => Install and update, 给cronconfig打上勾7 t. h: b( X" {9 T6 l* `
( ]4 _7 w- ]/ g# j: u' W, H 然后去Plugin里面设定自动备份的时间即可。5 i6 h ]5 P9 U
2 {+ I+ E" G8 l
! u1 K% s: g' L5 }' J+ W7 _: L
--------------------------------------------------------------------------------------------------------------------------------------------------
# V2 p* Z: ?+ e, T" o4 p( B 以上涵盖了大部分人的备份方式。不要过于追求高端,选择合适你的就好,as long as it 能够保护好你的数据。2 N0 m! T$ ]0 t4 a# c) Q+ T% `1 k
: b& s8 U/ S9 V u, m
目前广告中国采取双重备份,每天自动备份到amazon s3,同时通过R1Soft 备份到自己的back up server9 K! |1 V+ e& k0 t/ S" [
' t" f% Q( ^+ f2 X( Y2 {. I
}; [ ?+ ]2 D/ C4 r
我是back up 这一行的菜鸟,希望各路大仙不吝指出我的代码错误或者offer一个更方便的办法& z: `+ s* w6 B+ k" R
9 k o1 ~0 C3 Z) b8 z1 Z7 i ; {( P8 I0 h" a* v a! }
3 T6 f- C& Z2 p. e( M: s0 e
5 R- k" }9 W4 b 5 T, ?/ Z/ m, j6 m
, U$ \! J) g! G8 v& y
# O4 X) u _0 z. T9 d
, @. H2 |" x# q6 e1 ]! ?) A
% ~0 j, l0 y" p+ `6 F
评分
查看全部评分
相关帖子