5 个不稳定版本
0.3.1 | 2022年1月10日 |
---|---|
0.3.0 | 2020年10月24日 |
0.2.0 | 2020年9月22日 |
0.1.1 | 2020年8月3日 |
0.1.0 | 2020年7月2日 |
#1885 in 命令行工具
125KB
3.5K SLoC
FTP2MFS
将文件夹同步到 IPFS 的可变文件系统(通过 ipfs files …
可访问的目录结构)。尽管名称如此,FTP2MFS 能够从 FTP、HTTP 目录列表、rsyncd 和本地文件系统读取。
注意:ftp2mfs 可以轻松地在几小时内镜像几个 100 GB,并保持与上游和本地 IPFS 节点的同步。IPFS 不一定能够从单个节点向网络提供这么多内容,有关解释和解决方案,请参阅 hyperprov。
用法
您需要创建一个配置文件,指定要同步的内容,例如至少
# FTP server to read from
source: ftp://ftp.jaist.jp/pub/Linux/ArchLinux/core/os/x86_64/
# Beware that many FTP servers don't do well with IPv6 (Or maybe the FTP library ftp2mfs uses doesn't). If in doubt, specify the server by IP address, or change /etc/gai.conf to prefer IPv4, or …
# MFS folder to write to. The actual mirrored files will be written to $target/data
target: /some-archlinux-core-mirror
将文件保存为 ftp2mfs-cfg1
并运行 ftp2mfs --config ftp2mfs-cfg1
(如果您尚未 cargo install
此工具,则为 cargo run --
)。FTP2MFS 首先将文件在 /temp
的某个文件夹中实例化,一旦同步成功,就会在 $target
处创建一个副本。如果操作失败,使用相同的配置文件重新启动应继续操作。请注意,在执行任何复制/下载操作之前,会完全探索源文件夹结构,因此复制任何文件可能需要一段时间。
来源
所有源类型都有其优缺点。构建良好的镜像很困难。
HTTP
- (+) 是唯一可加密/受保护的源。
- (-) 没有定义目录列表的格式,目录结构是从 HTML 中猜测出来的:以 / 结尾的链接被视为目录,其他视为文件。不指向当前目录直接子级的链接将被忽略。
- (-) 为检查每个文件是否更新,必须发送一个HEAD请求。这有些低效
- (0) 从HTML目录列表中解析修改日期和文件大小可能很好
FTP
- (+) 列出目录和传输文件的标准化协议
- (-) 不支持FTP(它由底层库支持,实现起来也很容易)
- (-) 许多FTP服务器不支持MLSD命令。为了找出文件是否已更新,FTP2MFS必须逐个文件发送一个CWD、一个MDTM和一个SIZE命令。这非常低效。
- (0) 可能会添加对解析一些最常见的目录列表格式的支持
Rsync
- (+) 与完整元数据的高效同步
- (-) 自制的协议实现,没有标准化且文档很少
- (-) 不安全
本地文件系统
- (+) 这是唯一一个同步非常简单且因此可能正确实现的实现
- (-) 您将拥有两份文件,一份在您的文件系统中,一份在您的IPFS存储库中(无文件存储/URL存储支持)
- (0) 与FUSE结合可能很有趣
完整的配置格式
# The server to copy from
source: ftp://…|rsync://…|…
# Reprieve period for which files will be kept in MFS after deletion on server
reprieve: "1 month"
# Ignore glob patterns when listing files on server (gitignore style)
ignore:
# Example: Whitelist only folders a and b
- "/*"
- "!a"
- "!b"
# setting --log-level=debug may help with debugging ignore rules
# FTP credentials, defaults to anonymous, can be overwritten from command line
user: anonymous
pass: [email protected] # Many FTP servers ask you to provide your e-mail address as password
# Path on MFS where the finalized sync result is kept
target: /publish-me
# Path on MFS where files are written to during sync - defaults to /temp/$hash_of_config
workdir: /temp/foobar
# Maximum render depth for self-referential symlinks (e.g. a -> .)
max_symlink_cycle: 0
依赖项
~23–39MB
~670K SLoC