cwRsync 文件备份

需求简介

  • 单服务器系统的文件备份;

  • 多服务器系统(相同OS 或 不同OS)之间的文件备份;

  • 数据库(DB)服务器的 .bak , .mdf & .ldf 等文件备份;

Rsync 应用介绍

什么是 Rsync ?

Rsync 是一款开源(且免费)的、快速的、多功能的、可实现全量及增量的本地或远程数据同步备份的优秀工具,主要是在 Linux 上面用于文件同步备份用的,也有 windows 版 cwRsync(分为免费和付费版本),不过基本上免费版本就可以满足大部份要求了。

Rsync 具有可使本地远程两台主机之间的快速复制同步镜像、远程、备份的功能。这个功能类似 ssh 带有的 scp 命令,但又优于 scp 命令的功能,ssh 的 scp 每都是全量拷贝,而 rsync 的 scp 可以增量拷贝,当然 rsync 还可以在本地主机的不同目录之间全量及增量的复制数据,这又类似 cp 命令,但也同样优于 cp 命令,cp 每次都是全量拷贝,而 rsync 可以增量拷贝,rsync 还可以实现删除文件和目录的功能。

Linux 为我们提供了两个用于文件 copy 的命令,一个是 cp,一个是 scp,但是他们略有不同。

  • cp — 主要是用于在同一台电脑上,在不同的目录之间来回copy文件
  • scp — 主要是在不同的Linux系统之间来回copy文件

查看更多:Linux中cp和scp命令的使用方法 (cnblogs.com)

cwRsync 是基于 cygwin 平台的 rsync 软件包,支持 windows 对 windows、windows 对 Linux、Linux 对 windows 高效文件同步。由于 cwRsync 已经集成了 cygwin 类库,因此安装的时候可以省去 cygwin 包。Cwrsync 还集成了 OpenSSH for windows,可以实现 Linux 下 Rsync 一模一样的操作。cwRsync 的架构很简单,有一个 Server 和多个 Client 组成。安装 cwRsync Server 以后,在服务器上面启动 cwRsync 服务,然后在客户端上面执行文件同步命令即可实现文件同步功能。如果我们将文件同步命令添加到 windows 计划任务当中,就可实现定义同步的功能。

Rsync 的特性

  • 支持拷贝特殊文件,如连接文件,设备等。
  • 可以有排除指定文件或目录同步的功能,相当于打包命令 tar 的排除功能。
  • 可以做到保持原有文件或目录的权限、时间、软硬链接、属主、组等所有属性均不改变。
  • 可以实现增量同步,即只同步发生变化的数据,因此数据传输效率很高。
  • 可以使用 rcp,rsh,ssh 等方式来配合传输文件(rsync本身不对数据加密)。
  • 可以通过 socket(进程方式)传输文件和数据。
  • 支持匿名的或认证(无需系统用户)的进程模式传输,可实现方便安全的进行数据备份及镜像。

Rsync 工作原理

  1. 单个主机本地之间的数据传输(此时类似 cp命令 的功能);
  2. 不同系统之间借助 rcp,ssh 等通道来传输数据(此时类似 scp命令 的功能);
  3. 以守护进程(socket)的方式传输数据(这个是 rsync 自身存在的重要功能);
rsync comes with ABSOLUTELY NO WARRANTY.  This is free software, and you are welcome to redistribute it under certain conditions.  See the GNU General Public Licence for details.
Rsync绝对没有任何保修。这是自由软件,欢迎您在特定条件下重新分发。有关详细信息,请参阅GNUGeneral Public License(通用公共许可证)rsync is a file transfer program capable of efficient remote update via a fast differencing algorithm.
rsync 是一个文件传输程序,能够通过快速差分算法进行有效的远程更新。

用法|Usage:
=> rsync [OPTION]... SRC [SRC]... DEST
=> rsync [OPTION]... SRC [SRC]... [USER@]HOST:DEST
=> rsync [OPTION]... SRC [SRC]... [USER@]HOST::DEST
=> rsync [OPTION]... SRC [SRC]... rsync://[USER@]HOST[:PORT]/DEST
=> rsync [OPTION]... [USER@]HOST:SRC [DEST]
=> rsync [OPTION]... [USER@]HOST::SRC [DEST]
=> rsync [OPTION]... rsync://[USER@]HOST[:PORT]/SRC [DEST]

The ':' usages connect via remote shell, while '::' & 'rsync://' usages connect to an rsync daemon, and require SRC or DEST to start with a module name.
使用 ':' 通过远程shell连接,而使用 '::' & 'rsync://' 连接到 rsync 守护进程,并要求 SRC 或 DEST 以模块名称开头。

参数说明:
 rsync:同步的命令
 [OPTION...]:同步的参数选项
 [SRC]:源,及待拷的分区、文件或目录等
 [DEST]:目的分区、文件、或目录等

cwRsync 资源下载

适用于 Windows 的 rsync 客户端的基本版本。这就是从您的计算机发起 rsync 请求所需的全部内容。提供的 rsync 二进制文件有以下方便的补丁:transliterate, timelimit, ignore case, no strict check of password file permissions (unofficial).

cwRsync client
将 rsync 守护程序设置为 Windows 服务,以便您可以为传入的 rsync 请求提供服务。
还提供了管理GUI。提供的 rsync 二进制文件具有以下方便的补丁: transliterate, timelimit, ignore case, no strict check of password file permissions (unofficial).
cwRsync server
该产品套件包含cwRsync和Copssh服务器安装程序,允许您通过ssh传输设置安全的rsync服务器。有关更多信息,请参阅我们的常见问题解答:Windows Linux/Unix

Secure cwRsync Server

cwRsync 整合资源包

整合资源包里面有一个服务器的安装程序【cwRsyncServer_4.1.0_Installer.exe】和一个绿色的客户端【cwRsync_5.4.1_x86_Free_客户端】。

注意 rsync 的 windows 发行版收费:rsync 下载 (samba.org)

  • Cygwin 是 MS Windows 的 Posix 运行时,在其许多软件包中包括 rsync。
  • cwRsync 是 MS Windows 的 rsync 的原生打包(不过,它们似乎只提供付费版本)。

cwRsync 安装

服务端安装 cwRsync Server

  1. 直接运行exe安装文件;
  2. 安装目录默认 C:\Program Files (x86)\ICW ;
  3. 修改成本机当前登录的账号密码(也可以自定义账号和密码);
  4. 安装完成后,替换安装目录中的 rsyncd.conf 文件(配置查看附件1);
  5. 然后在【服务】中把 RsyncServer 服务【启动模式】改成【自动】;

注意事项:查看【附件1-服务端注意事项】

客户端安装 cwRsync

  1. 直接运行客户端 .exe 安装文件;
  2. 安装目录默认 C:\Program Files (x86)\cwRsync;
  3. 运行脚本:
  • master2slave_1h.bat:master 更新到 slave, 建议做成服务,1小时运行一次bat文件
  • master2slave_30s.bat:master 更新到 slave, 建议做成服务,30秒运行一次bat文件
  • slave2master_1h.bat:slave更新到master, 建议做成服务,1小时运行一次bat文件
  • slave2master_30s.bat:slave更新到master, 建议做成服务,30秒运行一次bat文件

注意事项:查看【附件1-客户端注意事项】

ps:
Master:主服务器,运行 cwRsyncServer 服务端;
Slave:从服务器(备份服务器)运行 cwRsync 客户端;

Window 中添加任务计划

在Window中添加任务计划,不同的系统,操作有点不一样。

  • windows xp/Server 2003 : 开始->设置->控制面板->任务计划->打开添加任务计划->下一步
  • windows 7/Server 2008 : 开始-> 控制面板 -> 管理工具 -> 任务计划

总结

  • 对 Rsync 有个基本的了解,特别是 Rsync 的特性和工作原理的掌握,能够应用到实际的场景中进行文件的备份操作。
  • 合理配置 rsyncd.conf 文件的各项参数特性。
  • Rsync 文件备份的完整性高。对于不同系统 linux 和 windows 之间的文件同步,虽然会有一些报错,主要是权限配置的问题,但对于文件的完整性来说,并没有问题。

【附件1】

rsyncd.conf 配置文件

use chroot = false
strict modes = false
hosts allow = 192.168.10.103
log file = rsyncd.log
uid = 0
gid = 0

# Module definitions
# Remember cygwin naming conventions : c:\work becomes /cygwin/c/work
#
#[test]
#path = /cygdrive/c/work
#read only = false
#transfer logging = yes

[rsyncdata]
path = /cygdrive/c/rsyncdata
read only = true
transfer logging = yes
list = false
auth users = rsync
secrets file = /cygdrive/c/rsyncd.secrets

以上配置只允许 192.168.10.103 访问,这里按需修改。 如果需要添加单个 IP 或多个 IP 地址,例如:192.168.10.1 或者整个网段:

  • 添加单个 IP 地址,例如:192.168.10.1
  • 添加多个 IP 地址,例如:192.168.10.0/16,也可以是 192.168.10.0/255.255.0.0

注意:多个IP或网段需要用空格隔开,“*”则表示所有,默认是允许所有主机连接。

rsyncd.conf 参数说明

模块参数主要用于定义 rsync 服务器哪个目录要被同步。模块声明的格式必须为 [module] 形式,这个名字就是在 rsync 客户端看到的名字,类似于 Samba 服务器提供的共享名。而服务器真正同步的数据是通过 path 来指定的。可以根据自己的需要,来指定多个模块,模块中可以定义以下几类参数:

  • 基本模块参数;
  • 模块控制参数;
  • 模块文件筛选参数;
  • 模块用户认证参数;
  • 模块访问控制参数;
  • 模块日志参数;

查看详细参数信息

官方【守护进程模式下的 rsync 配置文件/configuration file for rsync in daemon mode】

以上 rsyncd.conf 配置文件注意 版本号,如下所示:

C:\Program Files (x86)\ICW\bin> rsync --version
rsync  version 3.0.8  protocol version 30
Copyright (C) 1996-2011 by Andrew Tridgell, Wayne Davison, and others.
Web site: http://rsync.samba.org/
Capabilities:
    64-bit files, 64-bit inums, 32-bit timestamps, 64-bit long ints,
    socketpairs, hardlinks, symlinks, IPv6, batchfiles, inplace,
    append, ACLs, no xattrs, iconv, symtimes

rsync comes with ABSOLUTELY NO WARRANTY.  This is free software, and you
are welcome to redistribute it under certain conditions.  See the GNU
General Public Licence for details.

服务端注意事项

  1. 密码文件格式:用户名:密码,一行一个,有的系统不支持长密码,另个密码文件的权限对其它用户组是不可读的,设置错了可能不工作。在Windows下,密码文件的访问权限一定要设置正确,不然用户验证的时候通不过。
  2. 权限配置,应将密码文件 E:\Setting\Rsync\rsync_db.ps 的权限加入 Rsycn 服务运行服务的用户名 cwRsyncServer 的读取权限 及 设置其为该文件为所有者。
  3. 在服务管理器中,找到服务 RsyncServer 服务,并启动服务且设置为自动或自动延迟模式。
  4. 如果开启了防火墙,则防火墙规则中要添加 Tcp 端口 28950 允许通信
  5. 服务验证,打开dos命令框,输入telnet ip 28950

如果没有安装 telnet 服务端与客户端,请在控制面板->添加删除程序->打开关闭windows功能中找到Telnet客户端和服务端,勾选进行安装;
如果telnet能成功连接,出现@RSYNCD: 30.0 等类似文字,则说明服务启动正常;

客户端注意事项

  1. 安装Rsync客户端程序,直至安装完成。
  2. 测试服务器Rsync的连通性。

在Rsync客户端所在计算机 telnet Rsync服务端所在计算的相应地址和端口
telnet 192.168.10.103 28950。出现@RSYNCD: 30.0 等类似文字,则说明客户端连接服务端正常。

  1. 打开 Dos 命令窗口,进到 Rsync 客户端安装目录的 bin 目录下,如 C:\Program Files (x86)\ICW\bin\ 输入以下命令,开始进行同步:
rsync --port=28950 -vzrtopg --progress --delete 192.168.10.103::data_backup /cygwin/f/dataBackup --password-file=/cygdrive/e/Setting/Rsync/rsync_db.ps

命令参数说明:

  • –port=28950 # 服务端口
  • -vzrtopg --progress # 显示同步过程的详细信息
  • –delete # 从客户端目录中删除与服务端目录中不同的数据,保证两边数据完全一致
  • 192.168.10.103::data_backup # Rsync 服务端 IP 地址和 rsyncd.conf 文件中定义的模块名称
  • /cygwin/f/dataBackup # 当前 Window 目录 F:\dataBackup
  • –password-file # 服务端密码配置文件,设置该命令文件的用户需要添加密码文件的读取权限及加其为文件所有者

注意【/cygwin/f/dataBackup】后面是否带 “/” 的区别:

  • 后面不带 “/” 指把 dataBackup 在服务端那边再重新建一下;

  • 后面带 “/” 指把这目录下的文件传到服务器上;

  • 下载同步 (把服务器上的文件下载当前目录)

rsync --port=28950 -vzrtopg --progress --delete root@xxx.xxx.xxx.xxx::backup  ./dbbackup

(此时须输入root用户的密码,就可进行同步了。)

  • 上传同步 (把本地文件上传到服务器)
rsync --port=28950 -vzrtopg --progress ./get/  root@xxx.xxx.xxx.xxx::backup

rsync 语法格式

SRC 表示源路径,DEST 表示目标路径。

  1. 本地复制
rsync [选项] SRC... [DEST]
  1. 通过远程 shell 复制
# 下载数据:
rsync [选项] [user@]HOST:SRC...[DEST]   
# 不加user@表示用root用户进行登陆远程主机下载数据到本地的DEST路径

# 上传数据:
rsync[选项] SRC...[user@]HOST:DEST  
# 这里的SRC表示本地数据,DEST表示远端主机目录
  1. 通过 rsync 进程复制
# 下载数据
rsync [选项] [user@] HOST::SRC ... [DEST]    
#这里双冒号后的SRC表示远端服务端的模块名
rsync [选项] rsync://[user@]HOST[:port]/SRC...[DEST]   
#这里的SRC表示实际的同步目录名,这种方式可以指定端口

# 上传数据
rsync [选项] SRC...[user@]HOST::DEST    
#上传本地客户端数据到远端服务端的DEST模块名指定的路径
rsync [选项] SRC...rsync://[user@HOST[:port]/DEST

查看更多 rsync 命令

cmd => dos命令进入客户端的 C:\Program Files (x86)\ICW\bin\ 目录,输入=> “rsync”,如下图所示:

Microsoft Windows [版本 10.0.14393]
(c) 2016 Microsoft Corporation。保留所有权利。

C:\Program Files (x86)\ICW\bin> rsync
rsync  version 3.0.8  protocol version 30
Copyright (C) 1996-2011 by Andrew Tridgell, Wayne Davison, and others.
Web site: http://rsync.samba.org/
Capabilities:
    64-bit files, 64-bit inums, 32-bit timestamps, 64-bit long ints,
    socketpairs, hardlinks, symlinks, IPv6, batchfiles, inplace,
    append, ACLs, no xattrs, iconv, symtimes

rsync comes with ABSOLUTELY NO WARRANTY.  This is free software, and you
are welcome to redistribute it under certain conditions.  See the GNU
General Public Licence for details.

rsync is a file transfer program capable of efficient remote update
via a fast differencing algorithm.

Usage: rsync [OPTION]... SRC [SRC]... DEST
  or   rsync [OPTION]... SRC [SRC]... [USER@]HOST:DEST
  or   rsync [OPTION]... SRC [SRC]... [USER@]HOST::DEST
  or   rsync [OPTION]... SRC [SRC]... rsync://[USER@]HOST[:PORT]/DEST
  or   rsync [OPTION]... [USER@]HOST:SRC [DEST]
  or   rsync [OPTION]... [USER@]HOST::SRC [DEST]
  or   rsync [OPTION]... rsync://[USER@]HOST[:PORT]/SRC [DEST]
The ':' usages connect via remote shell, while '::' & 'rsync://' usages connect
to an rsync daemon, and require SRC or DEST to start with a module name.

Options
 -v, --verbose               increase verbosity
 -q, --quiet                 suppress non-error messages
     --no-motd               suppress daemon-mode MOTD (see manpage caveat)
 -c, --checksum              skip based on checksum, not mod-time & size
 -a, --archive               archive mode; equals -rlptgoD (no -H,-A,-X)
     --no-OPTION             turn off an implied OPTION (e.g. --no-D)
 -r, --recursive             recurse into directories
 -R, --relative              use relative path names
     --no-implied-dirs       don't send implied dirs with --relative
 -b, --backup                make backups (see --suffix & --backup-dir)
     --backup-dir=DIR        make backups into hierarchy based in DIR
     --suffix=SUFFIX         set backup suffix (default ~ w/o --backup-dir)
 -u, --update                skip files that are newer on the receiver
     --inplace               update destination files in-place (SEE MAN PAGE)
     --append                append data onto shorter files
     --append-verify         like --append, but with old data in file checksum
 -d, --dirs                  transfer directories without recursing
 -l, --links                 copy symlinks as symlinks
 -L, --copy-links            transform symlink into referent file/dir
     --copy-unsafe-links     only "unsafe" symlinks are transformed
     --safe-links            ignore symlinks that point outside the source tree
 -k, --copy-dirlinks         transform symlink to a dir into referent dir
 -K, --keep-dirlinks         treat symlinked dir on receiver as dir
 -H, --hard-links            preserve hard links
 -p, --perms                 preserve permissions
 -E, --executability         preserve the file's executability
     --chmod=CHMOD           affect file and/or directory permissions
 -A, --acls                  preserve ACLs (implies --perms)
 -o, --owner                 preserve owner (super-user only)
 -g, --group                 preserve group
     --devices               preserve device files (super-user only)
     --specials              preserve special files
 -D                          same as --devices --specials
 -t, --times                 preserve modification times
 -O, --omit-dir-times        omit directories from --times
     --super                 receiver attempts super-user activities
 -S, --sparse                handle sparse files efficiently
 -n, --dry-run               perform a trial run with no changes made
 -W, --whole-file            copy files whole (without delta-xfer algorithm)
 -x, --one-file-system       don't cross filesystem boundaries
 -B, --block-size=SIZE       force a fixed checksum block-size
 -e, --rsh=COMMAND           specify the remote shell to use
     --rsync-path=PROGRAM    specify the rsync to run on the remote machine
     --existing              skip creating new files on receiver
     --ignore-existing       skip updating files that already exist on receiver
     --remove-source-files   sender removes synchronized files (non-dirs)
     --del                   an alias for --delete-during
     --delete                delete extraneous files from destination dirs
     --delete-before         receiver deletes before transfer, not during
     --delete-during         receiver deletes during transfer (default)
     --delete-delay          find deletions during, delete after
     --delete-after          receiver deletes after transfer, not during
     --delete-excluded       also delete excluded files from destination dirs
     --ignore-errors         delete even if there are I/O errors
     --force                 force deletion of directories even if not empty
     --max-delete=NUM        don't delete more than NUM files
     --max-size=SIZE         don't transfer any file larger than SIZE
     --min-size=SIZE         don't transfer any file smaller than SIZE
     --partial               keep partially transferred files
     --partial-dir=DIR       put a partially transferred file into DIR
     --delay-updates         put all updated files into place at transfer's end
 -m, --prune-empty-dirs      prune empty directory chains from the file-list
     --numeric-ids           don't map uid/gid values by user/group name
     --timeout=SECONDS       set I/O timeout in seconds
     --contimeout=SECONDS    set daemon connection timeout in seconds
 -I, --ignore-times          don't skip files that match in size and mod-time
     --size-only             skip files that match in size
     --modify-window=NUM     compare mod-times with reduced accuracy
 -T, --temp-dir=DIR          create temporary files in directory DIR
 -y, --fuzzy                 find similar file for basis if no dest file
     --compare-dest=DIR      also compare destination files relative to DIR
     --copy-dest=DIR         ... and include copies of unchanged files
     --link-dest=DIR         hardlink to files in DIR when unchanged
 -z, --compress              compress file data during the transfer
     --compress-level=NUM    explicitly set compression level
     --skip-compress=LIST    skip compressing files with a suffix in LIST
 -C, --cvs-exclude           auto-ignore files the same way CVS does
 -f, --filter=RULE           add a file-filtering RULE
 -F                          same as --filter='dir-merge /.rsync-filter'
                             repeated: --filter='- .rsync-filter'
     --exclude=PATTERN       exclude files matching PATTERN
     --exclude-from=FILE     read exclude patterns from FILE
     --include=PATTERN       don't exclude files matching PATTERN
     --include-from=FILE     read include patterns from FILE
     --files-from=FILE       read list of source-file names from FILE
 -0, --from0                 all *-from/filter files are delimited by 0s
 -s, --protect-args          no space-splitting; only wildcard special-chars
     --address=ADDRESS       bind address for outgoing socket to daemon
     --port=PORT             specify double-colon alternate port number
     --sockopts=OPTIONS      specify custom TCP options
     --blocking-io           use blocking I/O for the remote shell
     --stats                 give some file-transfer stats
 -8, --8-bit-output          leave high-bit chars unescaped in output
 -h, --human-readable        output numbers in a human-readable format
     --progress              show progress during transfer
 -P                          same as --partial --progress
 -i, --itemize-changes       output a change-summary for all updates
     --out-format=FORMAT     output updates using the specified FORMAT
     --log-file=FILE         log what we're doing to the specified FILE
     --log-file-format=FMT   log updates using the specified FMT
     --password-file=FILE    read daemon-access password from FILE
     --list-only             list the files instead of copying them
     --bwlimit=KBPS          limit I/O bandwidth; KBytes per second
     --stop-at=y-m-dTh:m     Stop rsync at year-month-dayThour:minute
     --time-limit=MINS       Stop rsync after MINS minutes have elapsed
     --write-batch=FILE      write a batched update to FILE
     --only-write-batch=FILE like --write-batch but w/o updating destination
     --read-batch=FILE       read a batched update from FILE
     --protocol=NUM          force an older protocol version to be used
     --iconv=CONVERT_SPEC    request charset conversion of filenames
     --tr=BAD/GOOD           transliterate filenames
 -4, --ipv4                  prefer IPv4
 -6, --ipv6                  prefer IPv6
     --version               print version number
(-h) --help                  show this help (-h works with no other options)

Use "rsync --daemon --help" to see the daemon-mode command-line options.
Please see the rsync(1) and rsyncd.conf(5) man pages for full documentation.
See http://rsync.samba.org/ for updates, bug reports, and answers
rsync error: syntax or usage error (code 1) at main.c(1420) [client=3.0.8]

输入命令 “rsync --daemon --help”,如下所示:

C:\Program Files (x86)\ICW\bin> rsync --daemon --help
rsync  version 3.0.8  protocol version 30
Copyright (C) 1996-2011 by Andrew Tridgell, Wayne Davison, and others.
Web site: http://rsync.samba.org/
Capabilities:
    64-bit files, 64-bit inums, 32-bit timestamps, 64-bit long ints,
    socketpairs, hardlinks, symlinks, IPv6, batchfiles, inplace,
    append, ACLs, no xattrs, iconv, symtimes

rsync comes with ABSOLUTELY NO WARRANTY.  This is free software, and you
are welcome to redistribute it under certain conditions.  See the GNU
General Public Licence for details.

Usage: rsync --daemon [OPTION]...
     --address=ADDRESS       bind to the specified address
     --bwlimit=KBPS          limit I/O bandwidth; KBytes per second
     --config=FILE           specify alternate rsyncd.conf file
     --no-detach             do not detach from the parent
     --port=PORT             listen on alternate port number
     --log-file=FILE         override the "log file" setting
     --log-file-format=FMT   override the "log format" setting
     --sockopts=OPTIONS      specify custom TCP options
 -v, --verbose               increase verbosity
 -4, --ipv4                  prefer IPv4
 -6, --ipv6                  prefer IPv6
     --help                  show this help screen

If you were not trying to invoke rsync as a daemon, avoid using any of the
daemon-specific rsync options.  See also the rsyncd.conf(5) man page.

参考文章

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ChaITSimpleLove

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值