混合云备份服务 > 数据迁移 > 文件同步 > ECS同步到NAS教程 > 文件同步

文件同步

更新时间:2020-04-22 17:06:26

    

本页目录

  • 步骤一:创建源数据地址
  • 步骤二:创建目的数据地址
  • 步骤三:创建同步任务
  • 文件同步会占用源地址和目的地址的网络资源。若您的业务比较重要,建议您对同步任务设置限速,或在空闲时间启动同步任务。
  • 文件同步会检查源地址和目的地址的文件,但是若您源和目的有相同文件名的文件,且源地址的文件更新时间比目的地址文件更新时间晚,同步时会直接覆盖目的地址的文件。若两个文件内容不同,必须更改文件名或做好备份。
  • 创建数据地址时,系统提示该功能在公测中,需要提交白名单权限申请。单击去申请,然后填写相关信息,提交文件同步公测申请。申请通过后,您将收到短信提醒。
  • 创建数据地址时,混合云备份服务(HBR)请求需要获取访问您 VPC 的权限,单击去授权,授权之后您可以通过混合云备份服务的文件同步功能同步您 VPC 内的数据。
  • 登录混合云备份管理控制台
  • 在左侧导航栏选择同步 > 文件同步 > 数据地址。
  • 单击右上角的创建数据地址。
  • 在创建数据地址页面,配置相关参数,然后单击确定。

    各参数配置说明如下:

     
    参数是否必需说明
    数据类型选择 NAS。
    数据名称输入 3-63 位字符。不支持短横线(-)和下划线(_)之外的特殊字符。
    数据所在区域选择 ECS 实例所在地域。
    NAS 来源选择其他。
    专有网络选择 ECS 实例挂载的 VPC 网络。
    交换机选择 ECS 实例挂载的交换机。
    NAS 网络地址填写 ECS 实例的私有 IP 地址。
    子目录填写需要同步的数据所在的共享文件目录路径。

    说明 子目录共享文件路径如包含斜杠,请使用正斜杠。例如 Windows 共享路径为 \\myWindows\test,其中 myWindows 为主机名,若您要同步 test 目录下内容,子目录请填写 test/。若您要同步 test 目录下的a文件夹下的内容,子目录请填写 test/a/。

    连接类型选择共享文件的协议类型。

    说明 若 ECS 是 Windows 类型,连接类型请选择 SMB。若 ECS 是 Linux 类型,连接类型请选择 NFS。

    是否有连接密码可选选择是否需要访问密码。
    • 无密码:当访问NAS服务无需密码时选择无密码。
    • 有密码:当访问NAS服务有密码时选择有密码,并填写正确的用户名和密码信息。
    说明 NAS 数据地址创建后有以下三种状态:
    • 正常:数据地址创建正常。
    • 创建中:创建第一个 NAS 数据地址时所需时间可能较长(约3分钟),请您耐心等待。如果数据地址长时间处于创建中状态,您可单击右上角的刷新按钮更新数据地址状态。
    • 地址异常:创建地址异常。您可查看配置信息是否正确,NAS 服务是否已允许文件同步服务访问。若无法准确定位并解决此问题,请联系售后技术支持
  • 登录混合云备份管理控制台
  • 在左侧导航栏选择同步 > 文件同步 > 数据地址。
  • 单击右上角的创建数据地址。
  • 在创建数据地址页面,配置相关参数,然后单击确定。

    各参数配置说明如下:

     
    参数是否必需说明
    数据类型选择 NAS。
    数据所在区域选择 NAS 服务所在地域。
    数据名称输入 3-63 位字符。不支持短横线(-)和下划线(_)之外的特殊字符。
    NAS 来源选择阿里云。
    文件系统选择目标 NAS 对应的文件系统。
    挂载点选择目标 NAS 对应的挂载点。

    注意 目前只支持挂载在 VPC 网络上的 NAS,经典网络暂时不支持。

    子目录可选填写需要同步的数据所在文件目录。注意
    • 若填写了子目录,必须保证 NAS 服务器中有这个子目录存在,否则会导致数据地址创建失败。
    • 若为空,则默认同步该数据地址下的所有数据。
    说明 NAS 数据地址创建后有以下三种状态:
    • 正常:数据地址创建正常。
    • 创建中:创建第一个 NAS 数据地址时所需时间可能较长(约3分钟),请您耐心等待。如果数据地址长时间处于创建中状态,您可单击右上角的刷新按钮更新数据地址状态。
    • 地址异常:创建地址异常。您可查看配置信息是否正确,NAS 服务是否已允许文件同步服务访问。若无法准确定位并解决此问题,请联系售后技术支持
  • 登录混合云备份管理控制台
  • 在左侧导航栏选择同步 > 文件同步 > 同步任务。
  • 单击右上角的创建同步任务,阅读同步服务条款协议,勾选我理解如上条款,并开通数据同步服务,然后单击下一步。
  • 在任务配置页签,设置相关参数。

    参数说明如下:

     
    参数是否必需说明
    任务名称输入 3-63 位小写字母、数字、短横线(-),且不能以短横线(-)开头或结尾。
    源地址选择已创建的 NAS 源地址。
    目的地址选择已创建的 NAS 目的地址。

    注意 仅支持相同 Region 数据同步。

    同步文件起点时间
    • 同步全部:同步所有时间的文件。
    • 指定时间:只同步指定时间之后创建或修改的文件。例如,指定时间设置为:2019-08-01 08:00:00,则只同步 2019 年 8 月 1 日 8 点之后创建或修改的文件,在这个时间之前创建或修改的文件被忽略。
    同步开始时间
    • 立即:同步任务创建完成后立即执行同步任务。
    • 计划:设置计划时间,同步任务按指定时间开始执行。
    同步间隔时间同步任务每次执行的间隔时间,每个时间间隔结束,系统执行一次同步任务。可选单位:小时、天、周。
    上次同步任务未结束,不执行新同步任务可选选择是否在上个同步任务结束前开始执行新的同步任务,配合同步间隔时间使用。例如:您设置的同步间隔时间是 1 小时,并且未勾选此项,不管任务在 1 小时之内是否执行完毕,系统都会开始执行新的同步任务。此项默认勾选。
  • 单击下一步,配置性能调优。
  • 填写子任务文件数和子任务数据量。

    说明 子任务文件数和子任务数据量按条件满足的先后顺序生效,子任务文件数量达到而文件大小没达到的时候,按文件数量划分;反之,则按文件大小划分。例如:设置了子任务文件数为 1000,子任务数据量为 1GB。当第一个子任务的文件数量达到 1000,大小没达到 1GB 的时候,就按照 1000 个文件数量划分一个子任务;第二个子任务文件大小达到 1GB ,文件数量没达到 1000,则按文件大小划分。

    • 子任务文件数:将同步任务根据您设置的子任务文件数分解成若干个子任务进行同步,同一时间可执行 20 个子任务。设置合适的子任务文件数可缩短同步所需时间,默认值是 1000。例如:您有 10000 个文件,子任务文件数设置为 500,则此同步任务被划分为 20 个子任务同时进行;若您设置为 100,则这个任务被划分为100个子任务,每次可同时执行 20 个子任务,剩余的子任务需排队等待执行。
    • 子任务数据量:将同步任务根据您设置的子任务数据量分解成若干个子任务进行同步,同一时间可执行 20 个子任务。设置合适的子任务数据量可缩短同步所需时间,默认值是 1GB。例如:您需要同步的文件大小为 40GB,子任务数据量设置为 2GB,则此同步任务被划分为 20 个子任务同时进行;若您设置为 1GB,则这个任务被划分为 40 个子任务,每次可同时执行 20 个子任务,剩余的子任务需排队等待执行。
  • (可选)在性能调优页签的流量控制区域,设置限流时间段和最大流量,然后单击添加。

    说明 为了不影响您在线业务的访问,建议您根据业务访问的波峰和波谷来设置同步时的限流时间段和最大流量。

  • 单击创建,等待文件同步任务完成。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
您好,针对您的问题,我可以给出如下思路: 1. 使用FFmpeg的C++ API来编码H264和AAC数据流,并将它们混合在一起。 2. 对于每个视频帧和音频帧,使用PTS(Presentation Time Stamp)来保证它们的时间戳是正确的。 3. 将编码后的H264和AAC数据流写入一个文件中,同时确保它们的时间戳是同步的。 下面是一个简单的示例代码,仅供参考: ``` #include <iostream> #include <string> #include <vector> #include <chrono> #include <thread> extern "C" { #include <libavformat/avformat.h> #include <libavcodec/avcodec.h> #include <libavutil/opt.h> #include <libavutil/timestamp.h> #include <libavutil/audio_fifo.h> } #define AUDIO_SAMPLE_RATE 48000 #define AUDIO_CHANNELS 2 #define AUDIO_FORMAT AV_SAMPLE_FMT_FLT #define AUDIO_BITRATE 128000 using namespace std; int main(int argc, char* argv[]) { // Initialize FFmpeg av_register_all(); avcodec_register_all(); // Open video output file AVFormatContext* out_ctx; avformat_alloc_output_context2(&out_ctx, NULL, NULL, "output.mp4"); AVStream* video_stream = avformat_new_stream(out_ctx, NULL); AVStream* audio_stream = avformat_new_stream(out_ctx, NULL); // Configure video stream AVCodec* video_codec = avcodec_find_encoder(AV_CODEC_ID_H264); AVCodecContext* video_ctx = avcodec_alloc_context3(video_codec); video_ctx->bit_rate = 400000; video_ctx->width = 640; video_ctx->height = 480; video_ctx->time_base = { 1, 25 }; video_ctx->gop_size = 10; video_ctx->max_b_frames = 1; avcodec_open2(video_ctx, video_codec, NULL); avcodec_parameters_from_context(video_stream->codecpar, video_ctx); video_stream->time_base = video_ctx->time_base; // Configure audio stream AVCodec* audio_codec = avcodec_find_encoder(AV_CODEC_ID_AAC); AVCodecContext* audio_ctx = avcodec_alloc_context3(audio_codec); audio_ctx->sample_rate = AUDIO_SAMPLE_RATE; audio_ctx->channels = AUDIO_CHANNELS; audio_ctx->sample_fmt = AUDIO_FORMAT; audio_ctx->bit_rate = AUDIO_BITRATE; audio_ctx->time_base = { 1, AUDIO_SAMPLE_RATE }; avcodec_open2(audio_ctx, audio_codec, NULL); avcodec_parameters_from_context(audio_stream->codecpar, audio_ctx); audio_stream->time_base = audio_ctx->time_base; // Open output file avio_open(&out_ctx->pb, "output.mp4", AVIO_FLAG_WRITE); // Write header to output file avformat_write_header(out_ctx, NULL); // Encode and write frames to output file for (int i = 0; i < 100; i++) { // Encode video frame AVFrame* video_frame = av_frame_alloc(); video_frame->width = video_ctx->width; video_frame->height = video_ctx->height; video_frame->format = video_ctx->pix_fmt; av_frame_get_buffer(video_frame, 0); // Fill video frame with data... avcodec_send_frame(video_ctx, video_frame); AVPacket video_pkt; av_init_packet(&video_pkt); avcodec_receive_packet(video_ctx, &video_pkt); video_pkt.stream_index = video_stream->index; video_pkt.pts = i * video_ctx->time_base.den / (video_ctx->time_base.num * 25); video_pkt.dts = video_pkt.pts; av_interleaved_write_frame(out_ctx, &video_pkt); av_packet_unref(&video_pkt); av_frame_free(&video_frame); // Encode audio frame AVFrame* audio_frame = av_frame_alloc(); audio_frame->sample_rate = audio_ctx->sample_rate; audio_frame->channels = audio_ctx->channels; audio_frame->format = audio_ctx->sample_fmt; av_frame_get_buffer(audio_frame, 0); // Fill audio frame with data... avcodec_send_frame(audio_ctx, audio_frame); AVPacket audio_pkt; av_init_packet(&audio_pkt); avcodec_receive_packet(audio_ctx, &audio_pkt); audio_pkt.stream_index = audio_stream->index; audio_pkt.pts = i * audio_ctx->time_base.den / AUDIO_SAMPLE_RATE; audio_pkt.dts = audio_pkt.pts; av_interleaved_write_frame(out_ctx, &audio_pkt); av_packet_unref(&audio_pkt); av_frame_free(&audio_frame); // Sleep for a while to simulate real-time processing this_thread::sleep_for(chrono::milliseconds(40)); } // Write trailer to output file av_write_trailer(out_ctx); // Close output file avio_close(out_ctx->pb); avformat_free_context(out_ctx); // Cleanup FFmpeg avcodec_free_context(&video_ctx); avcodec_free_context(&audio_ctx); return 0; } ``` 在上述示例代码中,我们先初始化了FFmpeg,并创建了一个输出文件。然后,我们分别配置了视频流和音频流的编码参数,并将它们添加到输出文件中。接下来,我们编码并写入了100个视频帧和音频帧,并使用PTS保证它们的时间戳是正确的。最后,我们写入了输出文件的尾部,并关闭了输出文件。 请注意,上述示例代码仅供参考,您需要根据自己的实际需求进行修改和优化。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值