ARTICLE DETAIL

资讯详情

深耕编程入门与网站建设的一线实战洞察。

rclone Internet Archive 后端完全指南:基于 IAS3 协议管理 archive.org Item

rclone Internet Archive 后端完全指南:基于 IAS3 协议管理 archive.org Item rclone Internet Archive 后端完全指南基于 IAS3 协议管理 archive.org Item【免费下载链接】rclonersync for cloud storage - Google Drive, S3, Dropbox, Backblaze B2, One Drive, Swift, Hubic, Wasabi, Google Cloud Storage, Azure Blob, Azure Files, Yandex Files项目地址: https://gitcode.com/GitHub_Trending/rc/rclone导读本文围绕 rclone 的internetarchive后端展开讲解如何把 archive.org 上的 Item条目当作类似 S3 bucket 的存储空间使用——支持目录式mkdir/ls/sync操作、文件元数据读写、以及对 Internet Archive 异步写入队列的正确处理。读完本文你将掌握如何创建该类型 remote、理解每个配置项的真实作用、利用元数据过滤规避自动生成文件带来的 sync 冲突以及何时开启wait_archive等选项保证写入即时可见。相关实现与测试位于 backend/internetarchive官方后端文档为 internetarchive.md自 rclone v1.59 起引入。一、架构定位Item 即 bucket一切读写都异步Internet Archive 后端操作的是 archive.org 上的Item条目其底层使用IAS3 APIInternet Archive 提供的 S3 兼容接口。路径写法为remote:bucket其中 bucket 对应一个 Item也可以继续追加子目录如remote:item/path/to/dir。只有lsd列目录命令允许使用裸remote:根路径。与 S3 不同IAS3不支持枚举你上传过的全部 Item只能列出特定 Item 内部的内容。从源码看backend 实现中真正用于写操作的是 IAS3 endpoint用于读取元数据与下载文件的是 frontend endpoint二者分别对应结构体Fs中的srv与front两个 REST 客户端见 internetarchive.go。由于 backend 以 Item 为逻辑桶split会把形如remote:item/path/to/file的路径拆成 bucketItem 名与桶内路径两部分见 internetarchive.go列表、取对象、上传、删除等操作都先落到这个“Item 桶内路径”的二元结构上。创建 remote 之后即可像使用普通存储一样操作# 新建一个 Item rclone mkdir remote:item # 列出某 Item 中的内容 rclone ls remote:item # 同步本地目录到远程 Item删除远程多余文件 rclone sync --interactive /home/local/directory remote:item注意rclone mkdir在 IAS3 中并不真正“建目录”Item 与目录都是惰性创建的目录只是 rclone 视角的虚拟概念。从源码可见Mkdir与Rmdir均为空实现直接返回nil见 internetarchive.go首次上传文件时通过x-archive-auto-make-bucket/x-amz-auto-make-bucket请求头自动创建 Item。二、绕不开的队列为什么上传/删除不立即生效Internet Archive 的架构决定了所有写操作上传、删除及其后续处理都会被投入per-item 队列服务器异步处理后才会真正落地。因此上传/删除后不会立刻出现在列表中需要等待一段时间。每个 Item 的队列状态可通过https://catalogd.archive.org/history/item-name-here查看。per-item 队列完成后还会进入下游的Item Deriver Queue后者存在容量上限可能阻塞你的上传甚至删除操作。实践建议避免一次上传大量小文件否则容易触发队列瓶颈。这套队列机制在源码中留下了多处痕迹上传路径使用x-archive-queue-derive控制是否排队触发 derive删除注释也写明“deleting files can take bit longer as itll be processed on same queue as uploads”见 internetarchive.go。rclone 无法在写后立即查询到元数据注释明确表示因为 IA 会在上传后“ingest”文件见 internetarchive.go。如果希望写入后的结果能立刻反映到后续的rclone ls/sync等比较类操作中可以开启wait_archiverclone 会以轮询方式等待服务器处理完毕内部每 10 秒轮询一次frontend/metadata/:item见 internetarchive.go 的waitFileUpload与waitDelete实现。注意要设置足够大的值例如小文件可设30m0s因为实际耗时取决于服务器队列的繁忙程度超时不会抛出错误只是放弃等待。三、配置 remote交互式向导全流程执行rclone config进入交互式配置选择类型internetarchiveNo remotes found, make a new one? n) New remote s) Set configuration password q) Quit config n/s/q n name remote Option Storage. Type of storage to configure. Choose a number from below, or type in your own value. XX / InternetArchive Items \ (internetarchive) Storage internetarchive Option access_key_id. IAS3 Access Key. Leave blank for anonymous access. You can find one here: https://archive.org/account/s3.php Enter a value. Press Enter to leave empty. access_key_id XXXX Option secret_access_key. IAS3 Secret Key (password). Leave blank for anonymous access. Enter a value. Press Enter to leave empty. secret_access_key XXXX Edit advanced config? y) Yes n) No (default) y/n y Option endpoint. IAS3 Endpoint. Leave blank for default value. Enter a string value. Press Enter for the default (https://s3.us.archive.org). endpoint Option front_endpoint. Host of InternetArchive Frontend. Leave blank for default value. Enter a string value. Press Enter for the default (https://archive.org). front_endpoint Option disable_checksum. Dont store MD5 checksum with object metadata. Normally rclone will calculate the MD5 checksum of the input before uploading it so it can ask the server to check the object against checksum. This is great for data integrity checking but can cause long delays for large files to start uploading. Enter a boolean value (true or false). Press Enter for the default (true). disable_checksum true Option encoding. The encoding for the backend. See the encoding section in the overview for more info. Enter a encoder.MultiEncoder value. Press Enter for the default (Slash,Question,Hash,Percent,Del,Ctl,InvalidUtf8,Dot). encoding Edit advanced config? y) Yes n) No (default) y/n n Configuration complete. Options: - type: internetarchive - access_key_id: XXXX - secret_access_key: XXXX Keep this remote remote? y) Yes this is OK (default) e) Edit this remote d) Delete this remote y/e/d y各选项的具体含义与默认值详见下文。需要匿名只读访问时可将access_key_id与secret_access_key留空。四、标准选项认证与派生控制标准Standard选项在配置时即需考虑且会出现在非高级配置界面中。--internetarchive-access-key-idIAS3 Access Key留空表示匿名访问。密钥申请页面为https://archive.org/account/s3.php。Config:access_key_id/ Env Var:RCLONE_INTERNETARCHIVE_ACCESS_KEY_IDType:stringRequired: false--internetarchive-secret-access-keyIAS3 密钥密码留空表示匿名访问。源码中该选项带有Sensitive: true标记见 internetarchive.go因此回显与日志都会做脱敏处理。Config:secret_access_key/ Env Var:RCLONE_INTERNETARCHIVE_SECRET_ACCESS_KEYType:stringRequired: false--internetarchive-item-derive是否在上传后触发 Internet Archive 的derive处理。derive 会从原始上传文件派生出大量次生文件如转码、缩略图、OCR 文本等使 Item 在网页端更可用但会增加服务器负担与队列等待时间。若上传的文件本身就是 IA 可直接展示的格式或希望减轻 IA 基础设施负担可设为false。Config:item_derive/ Env Var:RCLONE_INTERNETARCHIVE_ITEM_DERIVEType:boolDefault:true源码中该项直接映射为上传时的x-archive-queue-derive请求头1/0见 internetarchive.go。五、高级选项端点、元数据与等待策略以下选项在rclone config中选择“Edit advanced config? y”时出现也均可通过命令行 flag 直接覆盖。--internetarchive-endpointIAS3 写操作端点。官方客户端默认固定使用该值一般无需修改。Config:endpoint/ Env Var:RCLONE_INTERNETARCHIVE_ENDPOINTType:stringDefault:https://s3.us.archive.org--internetarchive-front-endpointInternet Archive 前端主机用于读取 Item 元数据与下载文件GETfront/metadata/:item与 GETfront/download/:item/:path。Config:front_endpoint/ Env Var:RCLONE_INTERNETARCHIVE_FRONT_ENDPOINTType:stringDefault:https://archive.org--internetarchive-item-metadata设置到Item 级别的元数据区别于通过--metadata-set设置的文件级别元数据。格式为keyvalue写入请求头时自动添加x-archive-meta-前缀。Config:item_metadata/ Env Var:RCLONE_INTERNETARCHIVE_ITEM_METADATAType:stringArrayDefault:[]从实现看appendItemMetadataHeaders当同一 key 只出现一次时使用x-archive-meta-key同一 key 出现多次时使用x-archive-meta01-key、x-archive-meta02-key这类带序号的头部来表达多值语义。注意本选项仅影响 Item 元数据并且它其实是 Hide不对配置向导暴露的隐藏高级项使用前需理解其与文件级 metadata 的差异。--internetarchive-disable-checksum默认情况下 rclone 会在上传前计算输入文件的 MD5并通过Content-MD5请求头请求服务器端校验从而保证数据完整性。但这会显著推迟大文件的上传开始时间。因此本后端默认启用disable_checksum值true关闭此校验以换取上传速度。Config:disable_checksum/ Env Var:RCLONE_INTERNETARCHIVE_DISABLE_CHECKSUMType:boolDefault:true对应源码见 internetarchive.go仅当DisableChecksum false时才回填Content-MD5头且 MD5 必须匹配^[0-9a-f]{32}$格式。--internetarchive-wait-archive等待服务器处理任务具体指 archive 与 book_op完成的超时时间。仅当你需要保证写操作之后立即被反映时才应开启此时普通文件比较与 mtime 精度才有意义。取值0默认表示禁用等待。超时不会抛出错误只是默默结束等待。Config:wait_archive/ Env Var:RCLONE_INTERNETARCHIVE_WAIT_ARCHIVEType:DurationDefault:0s等待期间 rclone 每 10 秒轮询一次 Item 元数据写入文件以 32 字符随机updateTracker值 文件大小双重匹配来确认新版本已生效见 internetarchive.go删除则轮询到目标文件从元数据中消失为止见 waitDelete。比较有意思的连带效果是后端对 mtime 的精度声明会随此选项变化Precision()在WaitArchive 0时返回“不支持 ModTime”开启后才返回纳秒级精度见 internetarchive.go。--internetarchive-encoding后端的文件名编码策略用于把本地文件名安全映射到 IAS3。默认包含Slash,LtGt,CrLf,Del,Ctl,InvalidUtf8,Dot即对/、、回车换行、控制字符、非法 UTF-8 及首尾点做转义。这与 S3 等云端存储的一致做法有关详细规则可参见 overview.md 的 Encoding 小节。注意交互示例中展示的默认值属于配置文档的简写表示精确的默认集合应以源码中注册的编码位为准见 internetarchive.go。Config:encoding/ Env Var:RCLONE_INTERNETARCHIVE_ENCODINGType:Encoding--internetarchive-descriptionremote 的描述信息供rclone config与listremotes展示用。Config:description/ Env Var:RCLONE_INTERNETARCHIVE_DESCRIPTIONType:stringRequired: false所有标准/高级选项的注册位置都在 backend/internetarchive/internetarchive.go 的fs.RegInfo.Options文档中的选项表即由该处自动生成。六、文件元数据可读、可写但有几把“锁”本后端支持对每个文件读取、更新与设置元数据这些元数据最终会以文件元数据形式出现在 Internet Archive 上。但部分字段被 IA 或 rclone保留。Internet Archive 保留字段只读以下 key 由 Internet Archive 保留尝试设置会被忽略并给出警告name、source、size、md5、crc32、sha1、format、old_version、viruscheck、summation唯一的例外是mtime设置它等价于设置文件的 ModTime。源码中定义只读集合roMetadataKey时特意注释“do not add mtime here, its a documented exception”见 internetarchive.go上传时会先把mtime改名映射为rclone-mtime再写入见 internetarchive.go。rclone 保留字段所有以rclone-前缀开头的 key 均被 rclone 保留。与 IA 保留字段不同设置这些 key只会产生警告但值会按请求写入见 internetarchive.go 的警告逻辑。多值与读取限制由于 rclone 的元数据模型是一个 key 对应一个值当某个 key 存在多个值时例如服务器端复制产生的重复元数据只返回第一个。读取时除上述标准与保留字段外还会返回 Item 所有者添加的自定义 key。实现上Metadata()会解析文件原始 JSON对每个 key 的数组/字符串值取首项见 internetarchive.go 与 listOrString。系统元数据清单NameHelpTypeExampleRead Onlycrc32CRC32 calculated by Internet Archivestring01234567YformatName of format identified by Internet ArchivestringComma-Separated ValuesYmd5MD5 hash calculated by Internet Archivestring01234567012345670123456701234567YmtimeTime of last modification, managed by RcloneRFC 33392006-01-02T15:04:05.999999999ZYnameFull file path, without the bucket partfilenamebackend/internetarchive/internetarchive.goYold_versionWhether the file was replaced and moved by keep-old-version flagbooleantrueYrclone-ia-mtimeTime of last modification, managed by Internet ArchiveRFC 33392006-01-02T15:04:05.999999999ZNrclone-mtimeTime of last modification, managed by RcloneRFC 33392006-01-02T15:04:05.999999999ZNrclone-update-trackRandom value used by Rclone for tracking changes inside Internet ArchivestringaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaNsha1SHA1 hash calculated by Internet Archivestring0123456701234567012345670123456701234567YsizeFile size in bytesdecimal number123456YsourceThe source of the filestringoriginalYsummationCheck how it is used in forum thread 31922stringmd5YviruscheckThe last time viruscheck process was run for the file (?)unixtime1654191352Y上表与 internetarchive.go 中MetadataInfo的注册一致summation字段背后还隐藏一个真实的历史坑来自_files.xmlsummation 非空的哈希与普通文件不同为避免被错误解读源码在summation ! 时不采信该文件的 md5/crc32/sha1见 internetarchive.go 及 makeValidObject。关于 rclone metadata 框架的整体说明可参见 docs.md 的 Metadata 支持一节。时间字段的三层回退mtime 的解析parseMtime按优先级依次尝试① rclone 写入的rclone-mtimeRFC 3339Nano② IA 自身记录的mtime浮点秒③ 取 Unix 时间零值。这也解释了为何rclone-ia-mtimeIA 管理的旧时间与mtimerclone 管理的时间会同时存在——读取元数据时原mtime被搬运到rclone-ia-mtime再由本地的modTime覆盖为权威mtime。七、用元数据过滤排除自动生成文件Internet Archive 在上传后会自动创建一批元数据文件如_meta.xml、_files.xml等派生记录。普通rclone sync会认为这些是远端多余文件而试图删除——但它们是 IA 自动创建、不可修改也不可删除的于是 sync 就会反复失败。解决方法是利用 rclone 的metadata 过滤机制把这些自动生成文件从 sync 中排除掉。IA 自动文件带两个标志sourcemetadata与formatMetadata因此可以rclone sync ... --metadata-exclude sourcemetadata --metadata-exclude formatMetadata该命令会排除所有带sourcemetadata或formatMetadata标记的文件。元数据过滤器的完整语法请参阅 filtering.md 的 Metadata filters 一节。八、从源码读懂后端能力边界作为收尾从代码接口可以精确概括该后端的完整能力文件 internetarchive.go 底部有一组编译期接口断言fs.Fs/fs.Object常规列表、取对象、上传、下载、删除。fs.Copier支持服务端复制Copy通过 IAS3 PUT 加x-amz-copy-source实现见 internetarchive.go且会附带sha1/md5/crc32/size/rclone-mtime/rclone-update-track等x-archive-filemeta-*头来重建元数据。fs.ListRer以单次元数据请求实现递归列表一个 Item 的文件清单都在一次front/metadata/:item响应中。fs.CleanUpper清理history/前缀下被替换的旧版本文件相当于倒空回收站。fs.PublicLinker为单文件生成可公开访问的下载链接front/download/:item/:path。fs.Abouter基于常量iaItemMaxSize 10995116277761 TiB与元数据中的item_size、history/累积量计算 Total/Free/Used/Trashed见 internetarchive.go。支持的哈希为 MD5、SHA1、CRC32Hashes()见 internetarchive.go全部由服务器直接提供无需本地计算。此外 backend 使用 S3 风格的重试码429/500/503与 pacer 限制请求速率最小间隔 10ms见 internetarchive.go 与 NewFs对服务器队列拥塞有一定容错。集成测试入口见 backend/internetarchive/internetarchive_test.go。实际使用建议汇总写后要读对一致性敏感如上传后立即 sync 对比时开启--internetarchive-wait-archive如30m0s否则依赖显式等待或人工确认。避免海量小文件尽量打包成大文件上传降低 per-item 队列与 Deriver Queue 的拥塞风险。sync 必加元数据过滤使用--metadata-exclude sourcemetadata --metadata-exclude formatMetadata否则会自动生成文件导致删除失败。不必追校验和保持disable_checksumtrue默认值除非你对超大文件上传前的 MD5 预计算延迟不敏感。利用元数据体系通过--metadata-set设置文件级自定义键避开rclone-前缀与上表只读键需要写 Item 级元数据时再考虑item_metadata选项。【免费下载链接】rclonersync for cloud storage - Google Drive, S3, Dropbox, Backblaze B2, One Drive, Swift, Hubic, Wasabi, Google Cloud Storage, Azure Blob, Azure Files, Yandex Files项目地址: https://gitcode.com/GitHub_Trending/rc/rclone创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表