Mega

Mega 是一个云存储和文件托管服务, 以其安全特性而闻名,所有文件在上传之前都会在本地进行加密。 这可以防止任何人(包括 Mega 的员工)在不知道加密密钥的情况下访问这些文件。

这是一个用于 Mega 的 rclone 后端,它支持使用相同的客户端加密方式来实现 Mega 的文件传输功能。

路径的指定格式为 远程名称:路径

路径可以根据需要设置得很深,例如 远程名称:目录/子目录

配置

以下是一个如何创建一个名为 远程名称 的远程存储的示例。首先运行:

 rclone config

这将引导你完成一个交互式的设置过程:

No remotes found, make a new one?
n) New remote
s) Set configuration password
q) Quit config
n/s/q> n
name> remote
Type of storage to configure.
Choose a number from below, or type in your own value
[snip]
XX / Mega
   \ "mega"
[snip]
Storage> mega
User name
user> [email protected]
Password.
y) Yes type in my own password
g) Generate random password
n) No leave this optional password blank
y/g/n> y
Enter the password:
password:
Confirm the password:
password:
Remote config
Configuration complete.
Options:
- type: mega
- user: [email protected]
- pass: *** ENCRYPTED ***
Keep this "remote" remote?
y) Yes this is OK
e) Edit this remote
d) Delete this remote
y/e/d> y

注意: 必须先通过浏览器正常登录并生成加密密钥,否则尝试在 rclone 中使用这些凭证将会失败。

配置完成后,你可以像这样使用 rclone

列出你的 Mega 顶级目录

rclone lsd remote:

列出你的 Mega 中的所有文件

rclone ls remote:

将本地目录复制到名为 backup 的 Mega 目录

rclone copy /home/source remote:backup

修改时间和哈希值

Mega 目前不支持修改时间和哈希值。

受限文件名字符

字符 编码值 替换字符
NUL 0x00
/ 0x2F

无效的 UTF-8 字节也会被 替换,因为它们不能用于 JSON 字符串。

重复文件

Mega 可以存在两个名称和路径完全相同的文件(这与普通文件系统不同)。

重复文件会给同步带来问题,你会在日志中看到关于重复文件的消息。

使用 rclone dedupe 来处理重复文件。

登录失败

对象未找到

如果你是第一次连接到你的 Mega 远程存储,以测试访问和同步功能,可能会收到如下错误:

Failed to create file system for "my-mega-remote:": 
couldn't login: Object (typically, node or user) not found

rclone 论坛 上,通常推荐的诊断步骤是从 MEGAcmd 工具开始。请注意,这里指的是来自 https://github.com/meganz/MEGAcmd 的官方 C++ 命令行工具,而不是来自 t3rm1n4l/megacmd 的不再维护的 Go 语言构建的命令行工具。

按照安装 MEGAcmd 的说明进行操作,并按照他们的建议尝试访问你的远程存储。你可以确定自己是否能够使用 MEGAcmd 登录,并获取有助于解决问题的诊断信息,还可以在论坛上与其他人一起搜索解决方案或共同探讨。

MEGA CMD> login [email protected]
Password:
Fetching nodes ...
Loading transfers from local cache
Login complete as [email protected]
[email protected]:/$ 

请注意,有人发现包含特殊字符的密码会出现问题。如果你无法使用 rclone 登录,但使用 MEGAcmd 却能正常登录,那么可以考虑暂时将密码更改为纯字母数字字符,看看是否能解决问题。

重复命令导致访问被阻止

Mega 远程存储在“高频率使用”时似乎会被阻止(拒绝登录)。我们尚未确定确切的阻止规则,但这似乎与快速连续执行的 rclone 命令有关。

例如,连续执行 90 次 rclone link remote:file 命令会导致远程存储被“阻止”。这种情况并不罕见,比如你希望获取一个包含数百个文件的目录的公共链接时就可能遇到……大约一周后,远程存储会再次正常接受 rclone 登录。

你可以通过使用 rclone mount 挂载远程存储来缓解这个问题。这样只会在挂载时登录,卸载时登出。你也可以运行 rclone rcd,然后使用 rclone rc 通过 API 运行命令,以避免每次都登录。

目前 rclone 不会关闭 Mega 会话(你可以在网页界面中看到这些会话),但关闭会话并不能解决问题。

如果你每隔 3 秒执行一次 rclone 命令,就可以避免远程存储被阻止。我们尚未确定确切的阻止规则,所以也许可以连续执行 80 次命令而不等待,然后等待 3 秒,再继续执行……

请注意,这是通过反复试验观察到的,可能并非一成不变。

其他工具似乎不会产生这种阻止效果,因为它们采用了不同的工作方式(基于状态,使用会话 ID 而不是登录),这与当前无状态的 rclone 方式不兼容。

请注意,一旦远程存储被阻止,使用其他工具(如 megacmd)也不一定能解决问题:对于被阻止的远程存储,观察到的 megacmd 登录时间依次为:7 分钟、20 分钟、30 分钟、30 分钟、30 分钟。不过,网页访问似乎不受影响。

目前正在对基于超时、限速器、重试和每秒事务限制(TPS)的解决方法进行研究——如果你发现了相关的有用信息,请在论坛上分享。

所以,如果 rclone 之前一直正常工作,但突然无法登录,而你确定用户名和密码是正确的,那么很可能是远程存储被阻止了一段时间。

标准选项

以下是 Mega 特定的标准选项。

–mega-user

用户名。

属性:

  • 配置项:user
  • 环境变量:RCLONE_MEGA_USER
  • 类型:字符串
  • 是否必需:是

–mega-pass

密码。

注意:输入的内容必须进行加密处理 - 请参阅 rclone obscure

属性:

  • 配置项:pass
  • 环境变量:RCLONE_MEGA_PASS
  • 类型:字符串
  • 是否必需:是

高级选项

以下是 Mega 特定的高级选项。

–mega-debug

输出更多来自 Mega 的调试信息。

如果设置了此标志(同时使用 -vv),它将打印来自 Mega 后端的更多调试信息。

属性:

  • 配置项:debug
  • 环境变量:RCLONE_MEGA_DEBUG
  • 类型:布尔值
  • 默认值:false

–mega-hard-delete

永久删除文件,而不是将其放入回收站。

通常,Mega 后端会将所有删除操作的文件放入回收站,而不是永久删除。如果你指定了此选项,rclone 将永久删除对象。

属性:

  • 配置项:hard_delete
  • 环境变量:RCLONE_MEGA_HARD_DELETE
  • 类型:布尔值
  • 默认值:false

–mega-use-https

使用 HTTPS 进行传输。

Mega 默认使用纯文本 HTTP 连接。一些互联网服务提供商(ISP)会对 HTTP 连接进行限速,这会导致传输速度变得非常慢。启用此选项将强制 Mega 使用 HTTPS 进行所有传输。由于所有数据已经加密,通常不需要使用 HTTPS。启用它会增加 CPU 使用率并增加网络开销。

属性:

  • 配置项:use_https
  • 环境变量:RCLONE_MEGA_USE_HTTPS
  • 类型:布尔值
  • 默认值:false

–mega-encoding

后端的编码方式。

有关更多信息,请参阅 概述中的编码部分

属性:

  • 配置项:encoding
  • 环境变量:RCLONE_MEGA_ENCODING
  • 类型:Encoding
  • 默认值:Slash,InvalidUtf8,Dot

–mega-description

远程存储的描述。

属性:

  • 配置项:description
  • 环境变量:RCLONE_MEGA_DESCRIPTION
  • 类型:字符串
  • 是否必需:否

进程 killed

在处理包含大文件的账户或其他情况时,执行列表/同步指令时内存使用量可能会显著增加。在云服务提供商(如使用 AWS EC2)上运行时,请检查实例类型是否有足够的内存/CPU 来执行这些命令。发送命令后,使用资源监控工具进行检查。查看 此问题

限制

此后端使用 go-mega Go 库,这是一个实现 Mega API 的开源 Go 库。除了 Mega C++ SDK 源代码外,似乎没有关于 Mega 协议的任何文档,因此该库中可能仍存在不少错误。

Mega 允许存在重复文件,这可能会使 rclone 产生混淆。