From f1f3f0ddbf5dfd2a7c545985550f8fb42594613f Mon Sep 17 00:00:00 2001 From: Chen Miao Date: Sun, 5 Jul 2026 12:28:37 +0800 Subject: [PATCH 1/4] docs: fix roadmap GSoC links Signed-off-by: Chen Miao --- src/roadmap.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/roadmap.md b/src/roadmap.md index f14018a..7f7435c 100644 --- a/src/roadmap.md +++ b/src/roadmap.md @@ -13,7 +13,7 @@ Code (GSoC) projects. - Stabilize liberofs APIs; - - **\[GSoC\]** [Multi-threaded decompression](gsoc.md#multi_threaded_decompression); + - **\[GSoC\]** Multi-threaded decompression; - Fanotify on-demand loading support (using fanotify pre-content hooks); @@ -29,4 +29,4 @@ Code (GSoC) projects. ## Miscellaneous items - - **\[GSoC\]** [Porting EROFS to BSD Kernels](gsoc.md#porting-erofs-to-freebsd). + - **\[GSoC\]** Porting EROFS to BSD Kernels. From 949258f84f3bfee258eea5c0183aa387e6446a3e Mon Sep 17 00:00:00 2001 From: Chen Miao Date: Sun, 5 Jul 2026 12:28:45 +0800 Subject: [PATCH 2/4] docs: add zh_CN localization Signed-off-by: Chen Miao --- Makefile | 14 +- requirements.txt | 1 + .../zh_CN/LC_MESSAGES/bootable_system.po | 126 ++ src/_locale/zh_CN/LC_MESSAGES/casestudies.po | 105 ++ .../zh_CN/LC_MESSAGES/comparison/dedupe.po | 401 +++++ src/_locale/zh_CN/LC_MESSAGES/credits.po | 126 ++ src/_locale/zh_CN/LC_MESSAGES/design.po | 289 ++++ src/_locale/zh_CN/LC_MESSAGES/developers.po | 204 +++ src/_locale/zh_CN/LC_MESSAGES/faq.po | 208 +++ src/_locale/zh_CN/LC_MESSAGES/features.po | 398 +++++ src/_locale/zh_CN/LC_MESSAGES/gsoc.po | 526 +++++++ src/_locale/zh_CN/LC_MESSAGES/imagefs.po | 319 ++++ src/_locale/zh_CN/LC_MESSAGES/index.po | 520 +++++++ src/_locale/zh_CN/LC_MESSAGES/install.po | 100 ++ src/_locale/zh_CN/LC_MESSAGES/merging.po | 164 ++ src/_locale/zh_CN/LC_MESSAGES/mkfs.po | 333 +++++ .../LC_MESSAGES/ondisk/chunked_format.po | 527 +++++++ .../zh_CN/LC_MESSAGES/ondisk/core_ondisk.po | 1332 +++++++++++++++++ src/_locale/zh_CN/LC_MESSAGES/ondisk/index.po | 114 ++ .../zh_CN/LC_MESSAGES/ondisk/xattrs.po | 759 ++++++++++ src/_locale/zh_CN/LC_MESSAGES/roadmap.po | 120 ++ src/_templates/article-header-buttons.html | 16 + src/_templates/language-switcher.html | 21 + src/conf.py | 8 + 24 files changed, 6730 insertions(+), 1 deletion(-) create mode 100644 src/_locale/zh_CN/LC_MESSAGES/bootable_system.po create mode 100644 src/_locale/zh_CN/LC_MESSAGES/casestudies.po create mode 100644 src/_locale/zh_CN/LC_MESSAGES/comparison/dedupe.po create mode 100644 src/_locale/zh_CN/LC_MESSAGES/credits.po create mode 100644 src/_locale/zh_CN/LC_MESSAGES/design.po create mode 100644 src/_locale/zh_CN/LC_MESSAGES/developers.po create mode 100644 src/_locale/zh_CN/LC_MESSAGES/faq.po create mode 100644 src/_locale/zh_CN/LC_MESSAGES/features.po create mode 100644 src/_locale/zh_CN/LC_MESSAGES/gsoc.po create mode 100644 src/_locale/zh_CN/LC_MESSAGES/imagefs.po create mode 100644 src/_locale/zh_CN/LC_MESSAGES/index.po create mode 100644 src/_locale/zh_CN/LC_MESSAGES/install.po create mode 100644 src/_locale/zh_CN/LC_MESSAGES/merging.po create mode 100644 src/_locale/zh_CN/LC_MESSAGES/mkfs.po create mode 100644 src/_locale/zh_CN/LC_MESSAGES/ondisk/chunked_format.po create mode 100644 src/_locale/zh_CN/LC_MESSAGES/ondisk/core_ondisk.po create mode 100644 src/_locale/zh_CN/LC_MESSAGES/ondisk/index.po create mode 100644 src/_locale/zh_CN/LC_MESSAGES/ondisk/xattrs.po create mode 100644 src/_locale/zh_CN/LC_MESSAGES/roadmap.po create mode 100644 src/_templates/article-header-buttons.html create mode 100644 src/_templates/language-switcher.html diff --git a/Makefile b/Makefile index ee23016..1021ce4 100644 --- a/Makefile +++ b/Makefile @@ -12,7 +12,19 @@ BUILDDIR = build help: @$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) -.PHONY: help Makefile +.PHONY: help Makefile gettext update-po html-en html-zh + +gettext: + @$(SPHINXBUILD) -b gettext "$(SOURCEDIR)" "$(BUILDDIR)/gettext" $(SPHINXOPTS) + +update-po: gettext + @sphinx-intl update -p "$(BUILDDIR)/gettext" -l zh_CN -d "$(SOURCEDIR)/_locale" + +html-en: + @$(SPHINXBUILD) -b html "$(SOURCEDIR)" "$(BUILDDIR)/html" $(SPHINXOPTS) + +html-zh: + @$(SPHINXBUILD) -D language=zh_CN -b html "$(SOURCEDIR)" "$(BUILDDIR)/html_zh" $(SPHINXOPTS) # Catch-all target: route all unknown targets to Sphinx using the new # "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS). diff --git a/requirements.txt b/requirements.txt index c565ef2..64bfcb0 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,3 +1,4 @@ myst_parser sphinx_design sphinx-book-theme==1.0.1 +sphinx-intl diff --git a/src/_locale/zh_CN/LC_MESSAGES/bootable_system.po b/src/_locale/zh_CN/LC_MESSAGES/bootable_system.po new file mode 100644 index 0000000..f2fcb65 --- /dev/null +++ b/src/_locale/zh_CN/LC_MESSAGES/bootable_system.po @@ -0,0 +1,126 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2018-2026, EROFS filesystem developers +# This file is distributed under the same license as the EROFS package. +# FIRST AUTHOR , 2026. +# +msgid "" +msgstr "" +"Project-Id-Version: EROFS 0.1\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2026-07-05 05:03+0800\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language: zh_CN\n" +"Language-Team: zh_CN \n" +"Plural-Forms: nplurals=1; plural=0;\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.10.3\n" + +#: ../../src/bootable_system.md:1 c3c5f481acc146e292ef9103b827c61a +msgid "Bootable system images" +msgstr "可启动系统镜像" + +#: ../../src/bootable_system.md:3 7292aff970b949499e936edd3845ba3e +msgid "Android system partitions" +msgstr "Android 系统分区" + +#: ../../src/bootable_system.md:5 58add297658747bf8030fcdb7dfee731 +msgid "" +"EROFS was originally developed for this use case in 2017. Nowadays, all " +"mainstream Android vendors use EROFS for their system partitions, " +"leveraging its high-performance compression to reduce image sizes without" +" any noticeable impact on user experience." +msgstr "" +"EROFS 最初于 2017 年为这一用例而开发。如今,所有主流 Android 厂商都" +"将 EROFS 用于其系统分区,借助其高性能压缩能力,在不影响用户体验的" +"前提下缩小镜像体积。" + +#: ../../src/bootable_system.md:10 2b32313214ae4b91a1fbe4c404bfcd41 +msgid "Known adopters include (alphabetical, may be incomplete):" +msgstr "已知采用者包括(按字母顺序排列,可能不完整):" + +#: ../../src/bootable_system.md:12 c598e013bbf748d3b4a8c694de2aa82e +msgid "Coolpad" +msgstr "Coolpad" + +#: ../../src/bootable_system.md:13 33569cbf98944209846c113f6c7486af +msgid "Honor" +msgstr "Honor" + +#: ../../src/bootable_system.md:14 a97f130869ce42cd9c7f5fe986775381 +msgid "Huawei" +msgstr "Huawei" + +#: ../../src/bootable_system.md:15 0d89ad20c1e844379505448177b1ac19 +msgid "Motorola" +msgstr "Motorola" + +#: ../../src/bootable_system.md:16 fced15b390d949c8b681b7ace0341c12 +msgid "Samsung" +msgstr "Samsung" + +#: ../../src/bootable_system.md:17 9f8d2288d1fd475b9640a621a26146a1 +msgid "OPPO" +msgstr "OPPO" + +#: ../../src/bootable_system.md:18 962f442151cb49d0b169734fc03a1ff6 +msgid "Xiaomi" +msgstr "Xiaomi" + +#: ../../src/bootable_system.md:19 229796c362b3437d8561ed3e859eeba1 +msgid "vivo" +msgstr "vivo" + +#: ../../src/bootable_system.md:21 8f622343b14446e2b4a6d408d9075201 +msgid "For more details on Android system partition use cases, see:" +msgstr "有关 Android 系统分区用例的更多详情,请参阅:" + +#: ../../src/bootable_system.md:23 143b1d6bdab94acea82ce0081eecb1dd +msgid "" +"[EROFS AOSP user " +"guide](https://source.android.com/docs/core/architecture/kernel/erofs)" +msgstr "" +"[EROFS AOSP 用户" +"指南](https://source.android.com/docs/core/architecture/kernel/erofs)" + +#: ../../src/bootable_system.md:24 f1f741721d3f44cab87a34684e275a7c +msgid "[ATC'19 EROFS](https://www.usenix.org/conference/atc19/presentation/gao)" +msgstr "[ATC'19 EROFS](https://www.usenix.org/conference/atc19/presentation/gao)" + +#: ../../src/bootable_system.md:26 cfcfa3f078bd40309d9011dc9e94b871 +msgid "Fedora LiveCDs" +msgstr "Fedora LiveCD" + +#: ../../src/bootable_system.md:28 1db74adb14bb4c01a5170d38717118f5 +msgid "" +"Since Fedora 42, the EROFS filesystem has been used to compress Fedora " +"LiveCDs to achieve smaller images with even better runtime performance." +msgstr "" +"自 Fedora 42 起,EROFS 文件系统已被用于压缩 Fedora LiveCD,以获得更" +"小的镜像和更优的运行时性能。" + +#: ../../src/bootable_system.md:31 7e0c4341b1594b5aa8b2b63565a674e2 +msgid "" +"![Starting Fedora Workstation 43 Live ISO on x86_64 (at 1.8x " +"speed)](_static/fedora_workstation_live_43_erofs.gif)" +msgstr "" +"![启动 Fedora Workstation 43 Live ISO(x86_64,1.8 倍" +"速)](_static/fedora_workstation_live_43_erofs.gif)" + +#: ../../src/bootable_system.md:31 25369929b54c48f38177d7e00d3d3e81 +msgid "" +"Starting Fedora Workstation 43 Live ISO on x86_64 (at 1.8x " +"speed)" +msgstr "" +"启动 Fedora Workstation 43 Live ISO(x86_64,1.8 倍" +"速)" + +#: ../../src/bootable_system.md:33 78c1df9a7937461f811a1ddc67bc381e +msgid "" +"For more details, see [Switch to EROFS for Live " +"Media](https://fedoraproject.org/wiki/Changes/EROFSforLiveMedia)." +msgstr "" +"更多详情请参阅 [改用 EROFS 作为 Live " +"媒体](https://fedoraproject.org/wiki/Changes/EROFSforLiveMedia)。" diff --git a/src/_locale/zh_CN/LC_MESSAGES/casestudies.po b/src/_locale/zh_CN/LC_MESSAGES/casestudies.po new file mode 100644 index 0000000..0dee944 --- /dev/null +++ b/src/_locale/zh_CN/LC_MESSAGES/casestudies.po @@ -0,0 +1,105 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2018-2026, EROFS filesystem developers +# This file is distributed under the same license as the EROFS package. +# FIRST AUTHOR , 2026. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: EROFS 0.1\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2026-07-05 05:03+0800\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language: zh_CN\n" +"Language-Team: zh_CN \n" +"Plural-Forms: nplurals=1; plural=0;\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.10.3\n" + +#: ../../src/casestudies.md:1 e16c101073f441f29fe2d2a1dc857f15 +msgid "🔍 Case Studies" +msgstr "🔍 案例研究" + +#: ../../src/casestudies.md:8 4db4024e2d7f42fc96cd05d460ddf15c +msgid "" +"The EROFS filesystem has been deployed in production at large scale since" +" its inclusion in Linux 5.4 and is now part of several prominent open-" +"source ecosystems." +msgstr "自并入 Linux 5.4 以来,EROFS 文件系统已大规模投入生产环境,并已成为多个重要开源生态的一部分。" + +#: ../../src/casestudies.md:12 3db29419d2d84a268d95fda7472ba6a7 +#, python-format +msgid "" +"It started in 2017, when Linux image filesystems were still primitive " +"([cramfs](https://docs.kernel.org/filesystems/cramfs.html) and " +"[ROMFS](https://docs.kernel.org/filesystems/romfs.html)), or focused " +"solely on extreme image size reduction " +"([squashfs](https://docs.kernel.org/filesystems/squashfs.html)) for low-" +"end embedded devices, while lacking good real-time response in [low " +"memory " +"scenarios](https://web.archive.org/web/20220322054637/https://source.android.com/devices/architecture/kernel/squashfs#:~:text=Unfortunately%20the%20performance%20of%20SquashFS%20lags%20behind%20ext4.)." +" In addition, kernel development for most in-tree immutable filesystems " +"(particularly on-disk format enhancements) was inactive for a decade at " +"that time." +msgstr "这一切始于 2017 年,当时 Linux 镜像文件系统仍十分原始([cramfs](https://docs.kernel.org/filesystems/cramfs.html) 和 [ROMFS](https://docs.kernel.org/filesystems/romfs.html)),或者仅专注于为低端嵌入式设备极度缩减镜像体积([squashfs](https://docs.kernel.org/filesystems/squashfs.html)),同时在[低内存场景](https://web.archive.org/web/20220322054637/https://source.android.com/devices/architecture/kernel/squashfs#:~:text=Unfortunately%20the%20performance%20of%20SquashFS%20lags%20behind%20ext4.)下缺乏良好的实时响应。此外,当时大多数内核内嵌的不可变文件系统(尤其是磁盘格式增强方面)的开发已停滞十年。" + +#: ../../src/casestudies.md:23 d08b1b14485e4ae683d1d7b2dd363bc9 +msgid "" +"To meet our production performance needs and fill the gap for a better " +"high-performance Linux image filesystem, the EROFS project was launched. " +"Before being successfully upstreamed, it had already been successfully " +"deployed on millions of Android smartphones and it should be billions of " +"various devices now." +msgstr "为满足生产环境的性能需求,并填补高性能 Linux 镜像文件系统的空白,EROFS 项目应运而生。在被成功合入上游之前,它已部署在数百万台 Android 智能手机上,而如今这一数字应已覆盖数十亿台各类设备。" + +#: ../../src/casestudies.md:29 42b8835ff8df4ebfb2bdb7375452f68c +msgid "" +"Note that the EROFS filesystem aims to be a generic image filesystem from" +" the beginning, not limited to a specific use case (e.g. only for Android" +" system partitions). We believe that even if image filesystems have " +"certain useful use cases, in reality it often fails to attract many real " +"experienced kernel filesystem developers. Designing a specialized " +"filesystem for a single use case will lead to unhealthy development, " +"unnecessary reinvention, and fragmentation." +msgstr "请注意,EROFS 文件系统从一开始就旨在成为一种通用镜像文件系统,并不局限于特定用例(例如仅用于 Android 系统分区)。我们认为,即便镜像文件系统确实存在某些有益的用例,但实际上往往难以吸引众多真正经验丰富的内核文件系统开发者。为单一用例设计专门的文件系统将导致不健康的发展、不必要的重复造轮子以及碎片化。" + +#: ../../src/casestudies.md:36 081005630f6b43dd9dd84e7b46ef153f +msgid "" +"Currently, apart from the [initial Android use " +"cases](https://source.android.com/docs/core/architecture/kernel/erofs), " +"we are also focused on bringing up a better image filesystem for " +"containers. Many recent features, such as native layering support, large " +"folios, [file-backed mounts](https://lwn.net/Articles/990750/), [inode-" +"based page cache sharing](https://lwn.net/Articles/984839/), and [direct " +"access for files](https://docs.kernel.org/filesystems/dax.html), are " +"dedicated to container image use cases." +msgstr "目前,除了[最初的 Android 用例](https://source.android.com/docs/core/architecture/kernel/erofs)之外,我们还致力于构建一种更优秀的容器镜像文件系统。许多近期新增特性,例如原生分层支持、large folios、[基于文件的挂载](https://lwn.net/Articles/990750/)、[基于 inode 的 page cache 共享](https://lwn.net/Articles/984839/) 以及 [文件的直接访问](https://docs.kernel.org/filesystems/dax.html),都是面向容器镜像用例而设计的。" + +#: ../../src/casestudies.md:44 4f8a9fe34e0e47e79b0fd0939c99f50d +msgid "" +"In several popular projects, EROFS is used as a powerful tool to provide " +"advanced features or improve the de-facto standard Docker/OCI container " +"images, such as [ComposeFS](https://github.com/containers/composefs) and " +"the [EROFS containerd " +"snapshotter](https://github.com/containerd/containerd/pull/10705). " +"However, EROFS can also serve as a next-generation container filesystem " +"on its own. We believe it should be more useful as the EROFS container " +"ecosystem continues to evolve." +msgstr "在多个热门项目中,EROFS 被用作一种强大的工具,以提供高级特性或改进事实上的 Docker/OCI 容器镜像标准,例如 [ComposeFS](https://github.com/containers/composefs) 和 [EROFS containerd snapshotter](https://github.com/containerd/containerd/pull/10705)。不过,EROFS 本身也可以作为下一代容器文件系统独立使用。我们相信,随着 EROFS 容器生态的不断演进,它将发挥更大的作用。" + +#: ../../src/casestudies.md:52 e3c9a350a3e049ab87395a771c170bd2 +msgid "" +"The EROFS filesystem is now a completely community-driven, neutral open-" +"source project and part of the Linux kernel. If you’re working on, or " +"interested in image filesystem use cases, feel free to provide feedback " +"and join us." +msgstr "EROFS 文件系统现在是一个完全由社区驱动、中立的开源项目,也是 Linux 内核的一部分。如果你正在从事镜像文件系统用例相关工作,或对此感兴趣,欢迎提供反馈并加入我们。" + +#: ../../src/casestudies.md:56 2b58f1edeb5b4c10b110f33d76dd3578 +msgid "" +"🚧 Detailed introduction to the current main use cases is still in " +"progress." +msgstr "🚧 当前主要用例的详细介绍仍在完善中。" diff --git a/src/_locale/zh_CN/LC_MESSAGES/comparison/dedupe.po b/src/_locale/zh_CN/LC_MESSAGES/comparison/dedupe.po new file mode 100644 index 0000000..44eb08b --- /dev/null +++ b/src/_locale/zh_CN/LC_MESSAGES/comparison/dedupe.po @@ -0,0 +1,401 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2018-2026, EROFS filesystem developers +# This file is distributed under the same license as the EROFS package. +# FIRST AUTHOR , 2026. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: EROFS 0.1\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2026-07-05 05:03+0800\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language: zh_CN\n" +"Language-Team: zh_CN \n" +"Plural-Forms: nplurals=1; plural=0;\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.10.3\n" + +#: ../../src/comparison/dedupe.md:1 e4a18373ba3a45dc960ee2fbbbe6af0e +msgid "Deduplication among versions" +msgstr "版本间去重" + +#: ../../src/comparison/dedupe.md:3 827dc40eeaff4f9eacf276a9215cfc59 +msgid "Minor container image updates" +msgstr "容器镜像的小幅更新" + +#: ../../src/comparison/dedupe.md:5 5e2a10d1b7ba4e21a9a8f3eb29182594 +msgid "" +"Examine 10 versions of ubuntu:jammy from [Docker " +"Hub](https://hub.docker.com/_/ubuntu), specifically " +"jammy-{20221130,20230126,20230301,20230308,20230425,20230522,20230605,20230624,20230804,20230816};" +msgstr "查看 [Docker Hub](https://hub.docker.com/_/ubuntu) 上 ubuntu:jammy 的 10 个版本,分别为 jammy-{20221130,20230126,20230301,20230308,20230425,20230522,20230605,20230624,20230804,20230816};" + +#: ../../src/comparison/dedupe.md:8 6f1acb8a7a694deca0defa56da80ba5f +msgid "These images only have one layer which is in the tar.gz format;" +msgstr "这些镜像仅有一个层,采用 tar.gz 格式;" + +#: ../../src/comparison/dedupe.md:10 815753ded43141059bc4005d2a164406 +msgid "" +"Uncompressed EROFS images are built with `-Ededupe` and compressed EROFS " +"images are built with `-Ededupe,all-fragments` and LZ4HC, DEFLATE " +"algorithms." +msgstr "未压缩的 EROFS 镜像使用 `-Ededupe` 构建,压缩的 EROFS 镜像则使用 `-Ededupe,all-fragments` 与 LZ4HC、DEFLATE 算法构建。" + +#: ../../src/comparison/dedupe.md a3af943141184cbba03fae6698029574 +msgid "Total Size (MiB)" +msgstr "总大小(MiB)" + +#: ../../src/comparison/dedupe.md 7517998f3c8e4ef48b063c6f9262900e +msgid "Average layer size (MiB)" +msgstr "平均层大小(MiB)" + +#: ../../src/comparison/dedupe.md 8efbee82c1254466bdddd1b71470424a +msgid "Saved / 766.1MiB" +msgstr "节省 / 766.1MiB" + +#: ../../src/comparison/dedupe.md 8040f9b63ec84e97a5c87be23507503f +msgid "Compressed OCI (tar.gz)" +msgstr "压缩 OCI(tar.gz)" + +#: ../../src/comparison/dedupe.md e724f7a070f649aab8075567e090fbc2 +msgid "282.5" +msgstr "282.5" + +#: ../../src/comparison/dedupe.md 8e7c2d86ea5c4fbb977fd8d40662be5c +msgid "28.3" +msgstr "28.3" + +#: ../../src/comparison/dedupe.md 2d6d95e8710b4db39e0264a14a0e0450 +msgid "63%" +msgstr "63%" + +#: ../../src/comparison/dedupe.md 629ab2e263f844769b15554ef7be1bf4 +msgid "Uncompressed OCI (tar)" +msgstr "未压缩 OCI(tar)" + +#: ../../src/comparison/dedupe.md 3aa9a0ce81d24f57a22dfbd4e240bd5e +msgid "766.1" +msgstr "766.1" + +#: ../../src/comparison/dedupe.md 4c90cbcd8844473ab12eb4b5bd406562 +msgid "76.6" +msgstr "76.6" + +#: ../../src/comparison/dedupe.md 8d4efc8ba25948cc87adaebdc9dcf4bf +#: 8f98088070ed4d25b552a86d25d448d1 +msgid "0%" +msgstr "0%" + +#: ../../src/comparison/dedupe.md 561f14c69e6b48719ad5f2a8cc0611b9 +msgid "Uncompressed EROFS" +msgstr "未压缩 EROFS" + +#: ../../src/comparison/dedupe.md 5e68b9dcb9364bf59ba285f762308499 +msgid "109.5" +msgstr "109.5" + +#: ../../src/comparison/dedupe.md 84a681880e474f79b1d0545f183001a0 +msgid "11.0" +msgstr "11.0" + +#: ../../src/comparison/dedupe.md e425f8c8ec9e42faba4ca73827f4ebcc +msgid "86%" +msgstr "86%" + +#: ../../src/comparison/dedupe.md e2105e4e10b544aca8ba7b389f0a1054 +msgid "EROFS (DEFLATE,9,32k)" +msgstr "EROFS (DEFLATE,9,32k)" + +#: ../../src/comparison/dedupe.md 6fb49f600435489b8d6a2b5fcfb570df +msgid "46.4" +msgstr "46.4" + +#: ../../src/comparison/dedupe.md 288f20b77ec642e39fa8b96a9207383d +msgid "4.6" +msgstr "4.6" + +#: ../../src/comparison/dedupe.md 12491dc8b2794857bfba0f2e849782ca +#: 47142f772f0146cf91178119878f8f7d +msgid "94%" +msgstr "94%" + +#: ../../src/comparison/dedupe.md d162e02ac78b4f77bfcd76dac361059f +msgid "EROFS (LZ4HC,12,64k)" +msgstr "EROFS (LZ4HC,12,64k)" + +#: ../../src/comparison/dedupe.md 2f80d4c1fdc341b0ae5a1cc0ccc75206 +msgid "54.2" +msgstr "54.2" + +#: ../../src/comparison/dedupe.md 9883944fcd864f4593570c7038a9449d +msgid "5.4" +msgstr "5.4" + +#: ../../src/comparison/dedupe.md 53495c8444e5432e902d2c99893b951c +#: e1fab671124841f78eaeccc5b3bc8ad0 +msgid "93%" +msgstr "93%" + +#: ../../src/comparison/dedupe.md 101fb3b1c83a4469be1ce5bd473abbde +msgid "SquashFS (GZIP,9,128k,-noI [^1])" +msgstr "SquashFS (GZIP,9,128k,-noI [^1])" + +#: ../../src/comparison/dedupe.md 51fab67752744f4c885e7afd3af53cfc +msgid "47.0" +msgstr "47.0" + +#: ../../src/comparison/dedupe.md 8ff9298cd44542a783254656f01ada2d +msgid "4.7" +msgstr "4.7" + +#: ../../src/comparison/dedupe.md 571ba7be86b04ec3b38824fa67d0eea1 +msgid "SquashFS (LZ4HC,12,128k,-noI)" +msgstr "SquashFS (LZ4HC,12,128k,-noI)" + +#: ../../src/comparison/dedupe.md b459f576b4b144ab8dfdf779249cdde0 +msgid "54.7" +msgstr "54.7" + +#: ../../src/comparison/dedupe.md e972659f18a84f1facc0e93b39168487 +msgid "5.5" +msgstr "5.5" + +#: ../../src/comparison/dedupe.md:26 7ac760a279e8428cbb8f68be4271bf59 +msgid "" +"It shows that EROFS gets **smaller sizes** even with smaller compression " +"granularity." +msgstr "结果表明,即使压缩粒度更小,EROFS 也能获得**更小的体积**。" + +#: ../../src/comparison/dedupe.md:29 078633bf6858478b8da49447565abaa0 +msgid "[Wikipedia](https://en.wikipedia.org) snapshots" +msgstr "[Wikipedia](https://en.wikipedia.org) 快照" + +#: ../../src/comparison/dedupe.md:31 252ae508bd4a4f13b530180a7f275ddd +msgid "" +"Two [snapshots](https://dumps.wikimedia.org/enwiki) were selected: " +"`20230201` and `20230220`:" +msgstr "选定了两个[快照](https://dumps.wikimedia.org/enwiki):`20230201` 和 `20230220`:" + +#: ../../src/comparison/dedupe.md:34 f74e6505d1c14ee1ac68a8659cec7d6a +msgid "Each snapshot included the first 100 pages at that time." +msgstr "每个快照都包含当时的前 100 个页面。" + +#: ../../src/comparison/dedupe.md:36 95d5d7370b624724ae1082d6060522f0 +msgid "There was 20-day difference between each other." +msgstr "两者相隔 20 天。" + +#: ../../src/comparison/dedupe.md 21f631a93bcb4936b3d50e93db59c296 +#: f4c64c85648d4441ace7652dc78e967d +msgid "Deduped?" +msgstr "已去重?" + +#: ../../src/comparison/dedupe.md d15cd1bd4116439a9f8b9874d9f5a063 +msgid "Size (MiB)" +msgstr "大小(MiB)" + +#: ../../src/comparison/dedupe.md bb9dec815ede4a41af4a897dc56e7583 +msgid "Saved / 1888MiB" +msgstr "节省 / 1888MiB" + +#: ../../src/comparison/dedupe.md cb4e44c1e16d4ea68e846bd688f19d0d +msgid "Uncompressed text" +msgstr "未压缩文本" + +#: ../../src/comparison/dedupe.md 2dd783a47d7e4eefb339f84c7e0d383b +#: 5b95a573be20404cb645f89bedf8c3fa 652a10b64eda492db8fd60015cb4cc9a +#: 673a56d628274f5e9a1936058284714f 70c33c3ea6d44f59b24bc3fc70c09c8e +#: 79b994e56fda432bb07bbe5486055524 7f2512b71fc4404598f6327791a29bcd +#: a2f15228a6c14e419e12219efc7341d7 db4b7725932a4de1a2e982b857ad7c9f +msgid "No" +msgstr "否" + +#: ../../src/comparison/dedupe.md c6d8a398ebd24abc95af091b34fa5b19 +msgid "1888" +msgstr "1888" + +#: ../../src/comparison/dedupe.md 13290b6d06c04cbd837ef37f5afcb85e +msgid "SquashFS [4k] [^2]" +msgstr "SquashFS [4k] [^2]" + +#: ../../src/comparison/dedupe.md 316e61ae8e1742069e2b5f4980105823 +msgid "1235" +msgstr "1235" + +#: ../../src/comparison/dedupe.md cd191c8f1ece416b945ee8cfebbb0f9d +msgid "34.6%" +msgstr "34.6%" + +#: ../../src/comparison/dedupe.md 5e34e0ca739b42b8bed591e95cf07db0 +#: a3ade7486fb9441c819c28b4b894da2e +msgid "EROFS [4k, _default_]" +msgstr "EROFS [4k, _default_]" + +#: ../../src/comparison/dedupe.md b0c4a7b63cf54385ae89578f92d66059 +msgid "1201" +msgstr "1201" + +#: ../../src/comparison/dedupe.md 2a8cb71c9c10424b8663db546330d9d2 +msgid "36.4%" +msgstr "36.4%" + +#: ../../src/comparison/dedupe.md 7b0f7b834ce7407fafcc5e08dd519ce4 +msgid "SquashFS [8k]" +msgstr "SquashFS [8k]" + +#: ../../src/comparison/dedupe.md 4d668872bce0418d8876690e2b4d8eb2 +msgid "1150" +msgstr "1150" + +#: ../../src/comparison/dedupe.md 15e74c39ad5a4aa08dc71ca9376b514d +msgid "39.1%" +msgstr "39.1%" + +#: ../../src/comparison/dedupe.md 9a279ab7a2e843d19b5f2fa9daad925b +msgid "EROFS [4k] [^3]" +msgstr "EROFS [4k] [^3]" + +#: ../../src/comparison/dedupe.md 097b3d56d2434fd1b586c809cb45c9aa +#: 1aed03b60d1640988a44d02405643ac6 3806d5c4ed8249bb9a6ef8f31620f81f +#: 49c069b25f8f4627a73cb32b58e78506 4d447b39ea8f44ccbbd60f176820fbe0 +#: 62c2403b49304e1799ee34fe9061c38a 7bb0d2ddfbeb44449a9c420ff6b89046 +#: 8055d1f6c55c488f99cab6c2dab21771 9b10fe2e50ae4a7ab598c3a448d11991 +#: a22d4df5622b4e2dbeeb795fac092bfd afc7618ee67146a49e91df2d6124fbb4 +#: c0b21cf3f76a496a9951681ed0421381 c5803d4fb9184e6d80b269c3ee7ca086 +#: dc271a5cc95249a982bcda21dbf88f9a +msgid "Yes" +msgstr "是" + +#: ../../src/comparison/dedupe.md 62c484b7b76246a7bdfb326c3b39558b +msgid "1147" +msgstr "1147" + +#: ../../src/comparison/dedupe.md 17b5eb0c160147cbadc28f001f5acce5 +msgid "39.2%" +msgstr "39.2%" + +#: ../../src/comparison/dedupe.md 9743638157324c9dae5a6a41f2773bb2 +#: 9dc6e1f26b3d4cfe8147be9b656d975f +msgid "SquashFS [128k, _default_]" +msgstr "SquashFS [128k, _default_]" + +#: ../../src/comparison/dedupe.md e77e8a19ae9e4fe7956a0cc3844658f6 +msgid "1110" +msgstr "1110" + +#: ../../src/comparison/dedupe.md 13017f7642754a17adf6cb53823db6a5 +msgid "41.2%" +msgstr "41.2%" + +#: ../../src/comparison/dedupe.md 18ecb1972e844147ad84b3ac42e148b6 +#: b06227dd059343519681ecfc382bd0a5 +msgid "EROFS [64k]" +msgstr "EROFS [64k]" + +#: ../../src/comparison/dedupe.md eaa3f90fb7d648b0baa55a191569acd0 +msgid "988" +msgstr "988" + +#: ../../src/comparison/dedupe.md cd85be05b03a4edcba5b1a99d74f651d +msgid "47.7%" +msgstr "47.7%" + +#: ../../src/comparison/dedupe.md:51 eca6bd7135ff48e787a79c48cfcb82ba +msgid "[Linux kernel source code](https://www.kernel.org) releases" +msgstr "[Linux kernel source code](https://www.kernel.org) 发布版本" + +#: ../../src/comparison/dedupe.md:53 d9d51924878a40809eb998b8b30991c1 +msgid "" +"[Three kernel releases](https://www.kernel.org/pub/linux/kernel/v5.x) are" +" selected: `5.10`, `5.10.50`, `5.10.100`:" +msgstr "选定了 [三个内核发布版本](https://www.kernel.org/pub/linux/kernel/v5.x):`5.10`、`5.10.50`、`5.10.100`:" + +#: ../../src/comparison/dedupe.md:56 901a1e5b9e664cb5ae3bb89dc69ac0a9 +msgid "" +"Images from both filesystems are compressed with `LZ4HC, 12` since " +"SquashFS uses the maximum level 12 for LZ4HC;" +msgstr "两种文件系统的镜像均使用 `LZ4HC, 12` 压缩,因为 SquashFS 对 LZ4HC 使用的最高级别为 12;" + +#: ../../src/comparison/dedupe.md:59 3939206b5f8f4e2ea2971211ec77a33d +msgid "" +"EROFS images are built with `-T0 --force-uid=1000 --force-gid=100` in " +"order to force 32-byte inodes to approximately match SquashFS metadata " +"size;" +msgstr "EROFS 镜像使用 `-T0 --force-uid=1000 --force-gid=100` 构建,以强制使用 32 字节 inode,大致匹配 SquashFS 的元数据大小;" + +#: ../../src/comparison/dedupe.md f4315918c6f34f6c90a663119fc4640b +msgid "Fragments?" +msgstr "分片?" + +#: ../../src/comparison/dedupe.md 4112266dafa14e42b510ed34bcbcf01e +msgid "Size" +msgstr "大小" + +#: ../../src/comparison/dedupe.md 865ecada1d0949679ef3e2970a9d7717 +msgid "SquashFS [16k]" +msgstr "SquashFS [16k]" + +#: ../../src/comparison/dedupe.md 54271b60d7bf4df48689b368c6053893 +msgid "409 MiB" +msgstr "409 MiB" + +#: ../../src/comparison/dedupe.md 37f9e9f963614956b0b3748e3766a5bb +msgid "379 MiB" +msgstr "379 MiB" + +#: ../../src/comparison/dedupe.md 8fdb2c2871e44d37ba2124437c135983 +msgid "SquashFS [32k]" +msgstr "SquashFS [32k]" + +#: ../../src/comparison/dedupe.md be82047e285548dbbe573b1cf5460a61 +msgid "365 MiB" +msgstr "365 MiB" + +#: ../../src/comparison/dedupe.md 8bb760b38ad947adb6aeca0bcc8fd95c +msgid "EROFS [8k]" +msgstr "EROFS [8k]" + +#: ../../src/comparison/dedupe.md ece3471476b6409e8416b954cf373b07 +msgid "347 MiB" +msgstr "347 MiB" + +#: ../../src/comparison/dedupe.md 454769edb7364655b33d56676498172d +msgid "SquashFS [64k]" +msgstr "SquashFS [64k]" + +#: ../../src/comparison/dedupe.md c5a8a60a7cbf45128e0a27106390e1a0 +msgid "334 MiB" +msgstr "334 MiB" + +#: ../../src/comparison/dedupe.md de3b94840bcc403c905b1bb29854a762 +msgid "EROFS [32k]" +msgstr "EROFS [32k]" + +#: ../../src/comparison/dedupe.md d496ae7d98464f30a57b610a98c14c93 +msgid "313 MiB" +msgstr "313 MiB" + +#: ../../src/comparison/dedupe.md a5b09b67e3d34bd3aee8771b60dfce2c +msgid "312 MiB" +msgstr "312 MiB" + +#: ../../src/comparison/dedupe.md 5ce98e9f013f40119951966de8c447c8 +msgid "310 MiB" +msgstr "310 MiB" + +#: ../../src/comparison/dedupe.md:23 7bc6bb3fb47545afa154ea483ab72b98 +msgid "" +"SquashFS uses `–b 131072` by default, `-noI` will disable its metadata " +"compression." +msgstr "SquashFS 默认使用 `–b 131072`,`-noI` 会禁用其元数据压缩。" + +#: ../../src/comparison/dedupe.md:48 7cbcf2686c9d4bcabe0e98b8fe6b302a +msgid "SquashFS command line: `-comp lz4 -b # -noappend`" +msgstr "SquashFS 命令行:`-comp lz4 -b # -noappend`" + +#: ../../src/comparison/dedupe.md:49 557b41f585be45f398e7d028f8ee8664 +msgid "EROFS command line: `-zlz4 -Ededupe -C #`" +msgstr "EROFS 命令行:`-zlz4 -Ededupe -C #`" diff --git a/src/_locale/zh_CN/LC_MESSAGES/credits.po b/src/_locale/zh_CN/LC_MESSAGES/credits.po new file mode 100644 index 0000000..688e50c --- /dev/null +++ b/src/_locale/zh_CN/LC_MESSAGES/credits.po @@ -0,0 +1,126 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2018-2026, EROFS filesystem developers +# This file is distributed under the same license as the EROFS package. +# FIRST AUTHOR , 2026. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: EROFS 0.1\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2026-07-05 05:03+0800\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language: zh_CN\n" +"Language-Team: zh_CN \n" +"Plural-Forms: nplurals=1; plural=0;\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.10.3\n" + +#: ../../src/credits.md:1 a3832d1f82d84ca89b2c48e68ebb0d01 +msgid "🎉 Contributors" +msgstr "🎉 贡献者" + +#: ../../src/credits.md:3 e4914b056917404383fd510c2510f9e4 +msgid "" +"EROFS has been contributed by community developers around the world, " +"including but not limited to (in alphabetical order):" +msgstr "" +"EROFS 由来自世界各地的社区开发者共同贡献," +"包括但不限于(按字母顺序排列):" + +#: ../../src/credits.md:6 576368c60b3548228beb7858fe6681a4 +msgid "" +"By vendor " +"([raw](https://github.com/erofs/docs/actions/workflows/credits.yml))" +msgstr "" +"按厂商划分 " +"([原始数据](https://github.com/erofs/docs/actions/workflows/credits.yml))" + +#: ../../src/credits.md:7 7f8ed6744eb6471cbc80fa5037673594 +msgid "Alibaba Group (@linux.alibaba.com)" +msgstr "Alibaba Group (@linux.alibaba.com)" + +#: ../../src/credits.md:8 a2c65b3629df4ec3beec895cf1fc7b9b +msgid "ByteDance (@bytedance.com)" +msgstr "ByteDance (@bytedance.com)" + +#: ../../src/credits.md:9 72ec8849973944f4827c23a083518da2 +msgid "Coolpad (@coolpad.com, @yulong.com)" +msgstr "Coolpad (@coolpad.com, @yulong.com)" + +#: ../../src/credits.md:10 25d7b4e39c034d708966deb94bc3441c +msgid "Docker (@docker.com)" +msgstr "Docker (@docker.com)" + +#: ../../src/credits.md:11 6ea47821dc2a46a28f0073f7d4acafe4 +msgid "Google (@google.com)" +msgstr "Google (@google.com)" + +#: ../../src/credits.md:12 68b58062301648d9a98e75675abf3e1f +msgid "Huawei (@huawei.com)" +msgstr "Huawei (@huawei.com)" + +#: ../../src/credits.md:13 d9af0054a1d74fab90f714159a578381 +msgid "Inspur (@inspur.com)" +msgstr "Inspur (@inspur.com)" + +#: ../../src/credits.md:14 adac71f0f5e94083a720e649b3416e90 +msgid "NVIDIA (@nvidia.com)" +msgstr "NVIDIA (@nvidia.com)" + +#: ../../src/credits.md:15 084d53218f7c4a27852463140182f65c +msgid "OPPO (@oppo.com)" +msgstr "OPPO (@oppo.com)" + +#: ../../src/credits.md:16 0bdb1b4adc5b4ad98beafaaa9294eff6 +msgid "Red Hat (@redhat.com)" +msgstr "Red Hat (@redhat.com)" + +#: ../../src/credits.md:17 d283f3b15945413ba4430d6faea33ac2 +msgid "Shanghai Jiao Tong University (@sjtu.edu.cn)" +msgstr "Shanghai Jiao Tong University (@sjtu.edu.cn)" + +#: ../../src/credits.md:18 545c66e2a20c4266b9f2e4cc1f646952 +msgid "Sony Group Corporation (@sony.com)" +msgstr "Sony Group Corporation (@sony.com)" + +#: ../../src/credits.md:19 4becbb22cbb5462dabe8e011fd40cf89 +msgid "South China University of Technology (@mail.scut.edu.cn)" +msgstr "South China University of Technology (@mail.scut.edu.cn)" + +#: ../../src/credits.md:20 7b357151016b490bbda89786934f1214 +msgid "Tencent (@tencent.com)" +msgstr "Tencent (@tencent.com)" + +#: ../../src/credits.md:21 fb3a6b8b0356483aaacad71270bd4509 +msgid "Tuxera (@tuxera.com)" +msgstr "Tuxera (@tuxera.com)" + +#: ../../src/credits.md:22 7fd9a9db91f34cfba595cbbfcb301feb +msgid "Uniontech (@uniontech.com)" +msgstr "Uniontech (@uniontech.com)" + +#: ../../src/credits.md:23 68e4b05f350c455cb020c3be69b3ef66 +msgid "Vivo (@vivo.com)" +msgstr "Vivo (@vivo.com)" + +#: ../../src/credits.md:24 e8fb665116224a758abc44151b6da0bc +msgid "Xiaomi (@xiaomi.com)" +msgstr "Xiaomi (@xiaomi.com)" + +#: ../../src/credits.md:26 496e17b85b634db88ff9aa30905ca833 +msgid "Individuals" +msgstr "个人贡献者" + +#: ../../src/credits.md:28 655a3e138d10432ab709424a5ec45f8d +msgid "" +"Since it's _an incomplete list_, feel free to submit a pull request to " +"add yourself here if you'd like to be highlighted as an EROFS " +"contributor." +msgstr "" +"由于这是一个_不完整的列表_,如果你想被列为 EROFS " +"贡献者,欢迎提交 pull request 将自己的名字添加到这里。" + diff --git a/src/_locale/zh_CN/LC_MESSAGES/design.po b/src/_locale/zh_CN/LC_MESSAGES/design.po new file mode 100644 index 0000000..a634eb5 --- /dev/null +++ b/src/_locale/zh_CN/LC_MESSAGES/design.po @@ -0,0 +1,289 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2018-2026, EROFS filesystem developers +# This file is distributed under the same license as the EROFS package. +# FIRST AUTHOR , 2026. +# +msgid "" +msgstr "" +"Project-Id-Version: EROFS 0.1\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2026-07-05 05:03+0800\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language: zh_CN\n" +"Language-Team: zh_CN \n" +"Plural-Forms: nplurals=1; plural=0;\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.10.3\n" + +#: ../../src/design.md:1 57cb41a0d40e41f29222d7866c514e33 +msgid "📝 Technical Design" +msgstr "📝 技术设计" + +#: ../../src/design.md:3 8bbbc0403ebb4a399dd1dee843806a2c +msgid "" +"The following sections are a summarized technical description for " +"reference if you are a user or developer interested in EROFS internals. " +"There is also a paper available, [EROFS: A Compression-friendly Readonly " +"File System for Resource-scarce " +"Devices](https://www.usenix.org/conference/atc19/presentation/gao). The " +"details defined in the paper are slightly outdated but the overall ideas " +"are nearly the same." +msgstr "" +"以下章节为对 EROFS 内部机制感兴趣的用户或开发者提供了简明的技术参考说明。" +"另有一篇论文可供参阅:[EROFS: A Compression-friendly Readonly File " +"System for Resource-scarce " +"Devices](https://www.usenix.org/conference/atc19/presentation/gao)。" +"论文中的具体细节已略显过时,但整体思路基本一致。" + +#: ../../src/design.md:10 bd4a3b643fcb425fa489f9fbdc29452c +msgid "Block-aligned vs unaligned" +msgstr "块对齐与非对齐" + +#: ../../src/design.md:12 6481a4cadec44ef2add542e57c20292b +msgid "" +"EROFS data is all arranged in **fixed-size blocks** (aka. block-aligned, " +"typically 4 KiB) like many modern disk filesystems (e.g. ext4, xfs, " +"btrfs, f2fs, etc.) to match the intrinsic characteristics of [block " +"devices](https://en.wikipedia.org/wiki/Block_\\(data_storage\\)). This " +"means the corresponding data can be *directly* parsed by reading a single" +" filesystem block for __non-encoded data__ or (possibly) multiple " +"consecutive blocks (called a single physical cluster) for __encoded " +"data__, which differs from _archive formats or unaligned filesystems_ " +"(e.g. `cramfs`, `romfs`, `squashfs`, `affs`, and possibly more FUSE-based" +" implementations.)" +msgstr "" +"EROFS 的数据全部按**固定大小数据块**(即块对齐,通常为 4 KiB)排列,与许多现代磁盘文件系统" +"(例如 ext4、xfs、btrfs、f2fs 等)一致,以匹配 [block " +"devices](https://en.wikipedia.org/wiki/Block_\\(data_storage\\)) 的固有特性。" +"这意味着,对应的数据可以通过读取单个文件系统块来*直接*解析__非编码数据__," +"或者通过读取(可能的)多个连续块(即单个 physical cluster)来解析__编码数据__;" +"这与_归档格式或非对齐文件系统_(例如 `cramfs`、`romfs`、`squashfs`、`affs`," +"以及可能更多的 FUSE 实现)不同。" + +#: ../../src/design.md:21 1935b613e8c441bbac9c82d086577a8c +msgid "" +"![Comparison between unaligned and block-aligned " +"data](_static/aligned_io.svg)" +msgstr "" +"![非对齐与块对齐数据的对比" +"](_static/aligned_io.svg)" + +#: ../../src/design.md:21 86a671dc32604f1b8ab260bb5ed9a7b7 +msgid "Comparison between unaligned and block-aligned data" +msgstr "非对齐与块对齐数据的对比" + +#: ../../src/design.md:23 8b250cc48d6248fa8a47c4abf87bb4d0 +msgid "The main benefits of using fixed-size blocks are:" +msgstr "使用固定大小数据块的主要优势如下:" + +#: ../../src/design.md:25 50dd497cde084e0f9b1f567a4503b70c +msgid "" +"Block-aligned non-encoded EROFS data can be directly loaded into kernel " +"page cache and memory-mapped into user space **without any extra post-" +"processing**. Direct I/O and FSDAX can also be used for block-aligned " +"non-encoded EROFS data." +msgstr "" +"块对齐的非编码 EROFS 数据可以直接加载到内核 page cache 中," +"并内存映射到用户空间,**无需任何额外后处理**。" +"块对齐的非编码 EROFS 数据也可以使用 Direct I/O 和 FSDAX。" + +#: ../../src/design.md:30 ac6f1698fcb0425baaaf7dee2c4e63ad +msgid "" +"Block-aligned encoded EROFS data I/O can be **fully utilized**, which " +"means there is no unusable encoded byte in each single I/O request. " +"Unlike other unaligned approaches, EROFS does not have to cache such " +"unusable encoded bytes for later decoding (or never used) for better " +"performance (otherwise I/O efficiency for small random I/Os is low due to" +" undecodable encoded bytes), which is considered harmful due to utilizing" +" a larger memory footprint than necessary." +msgstr "" +"块对齐的编码 EROFS 数据 I/O 可以被**充分利用**,即每个 I/O 请求中都不会存在无法使用的编码字节。" +"与其他非对齐方案不同,EROFS 无需为了提升性能而将这些无法使用的编码字节缓存起来留待后续解码" +"(或永不使用)——否则,由于存在无法解码的编码字节,小数据量随机 I/O 的效率会很低;" +"这种缓存会占用超出必要的更大内存空间,因此被认为是有害的。" + +#: ../../src/design.md:38 8c1ca3a2503f4981a9380e08538bdb50 +msgid "" +"Alternatively, if the encoded blocks are not utilized immediately (esp. " +"very little decoded data is requested), the encoded blocks could still be" +" _cached in the page cache for later use_. This is quite useful on " +"memory-limited devices since _caching compressed data is generally more " +"efficient than decompressed data if selected compression algorithms are " +"**fast** enough_ (considering main benefits of ZSWAP or ZRAM). Although " +"unaligned solutions could also cache encoded data in page cache, " +"reclaiming could lead to lower cache pages utilization due to " +"fragmentation since page cache reclaims data in pages instead of bytes." +msgstr "" +"此外,如果编码块没有被立即使用(尤其是请求的解码数据非常少时)," +"这些编码块仍然可以_缓存到 page cache 中供后续使用_。" +"这在内存受限的设备上非常有用,因为_在所选 compression algorithms 足够**快**的前提下," +"缓存压缩数据通常比缓存解压后的数据更高效_(考虑到 ZSWAP 或 ZRAM 的主要优势)。" +"尽管非对齐方案也可以将编码数据缓存到 page cache 中," +"但由于回收是以页为单位而非字节进行的,回收时的碎片化可能导致缓存页利用率降低。" + +#: ../../src/design.md:48 aceba88e7a2b41de91c01289c70668c4 +msgid "" +"Because of this, block-aligned encoded EROFS makes **compressed data " +"cached independently**, which means a single physical cluster could be " +"cached without coupling with other compression units. In other words, " +"unlike unaligned solutions, it is more flexible for EROFS to only cache " +"the necessary physical clusters." +msgstr "" +"正因如此,块对齐的编码 EROFS 使得**压缩数据可以独立缓存**," +"这意味着单个 physical cluster 可以在不与其他 compression units 耦合的情况下被缓存。" +"换言之,与非对齐方案不同,EROFS 可以只缓存必要的 physical clusters,从而更加灵活。" + +#: ../../src/design.md:54 c1e47d038a7942b8b3a9e61e93f1f40b +msgid "![Different compressed cache behaviors](_static/unaligned_reclaiming.svg)" +msgstr "![不同的压缩缓存行为](_static/unaligned_reclaiming.svg)" + +#: ../../src/design.md:54 d4ec74e35081457dae5d561a5ca5195c +msgid "Different compressed cache behaviors" +msgstr "不同的压缩缓存行为" + +#: ../../src/design.md:58 14e3017d2be3417589da988c65f1edd5 +msgid "Block-aligned fitblk compression" +msgstr "块对齐的 fitblk 压缩" + +#: ../../src/design.md:60 1ef1d749d9854f4b9e47c4dcd8a117b1 +msgid "" +"In addition to block-aligned data, unlike EXT4, XFS, BTRFS, F2FS, etc., " +"EROFS mainly uses a **fixed-size output compression** approach to " +"increase encoded block utilization and maximize compression ratios." +msgstr "" +"除了块对齐的数据外,与 EXT4、XFS、BTRFS、F2FS 等不同的是," +"EROFS 主要采用**固定大小输出压缩**方法来提高编码块的利用率并最大化压缩比。" + +#: ../../src/design.md:64 08a255e8dc534e8784f411347ba9cc49 +msgid "" +"Such compression approach is not required. However, without this " +"approach, the final blocks of physical clusters will not be fully filled " +"with encoded data. Currently LZ4, LZMA (Linux 5.16+), DEFLATE (Linux " +"6.6+), and Zstandard (Linux 6.10+) algorithms natively support this mode." +msgstr "" +"这种压缩方法不是必需的。然而,如果不采用这种方法," +"physical clusters 末尾的块将无法被编码数据完全填满。" +"目前,LZ4、LZMA(Linux 5.16+)、DEFLATE(Linux 6.6+)和 Zstandard(Linux 6.10+)" +"等算法原生支持此模式。" + +#: ../../src/design.md:69 b1825add83ac42ccaf794e313cc1c563 +msgid "" +"Fixed-size output compression generally provides better compression " +"ratios, especially on small physical clusters (e.g., 4 or 8 KiB), saving " +"about 5% additional space." +msgstr "" +"固定大小输出压缩通常能提供更高的压缩比,尤其是在较小的 physical clusters(例如 4 或 8 KiB)上," +"可额外节省约 5% 的空间。" + +#: ../../src/design.md:72 0a1a4102930f4622a6114e12fd66ddd0 +msgid "" +"Note that **small compressed physical clusters** are quite important to " +"end-to-end performance for memory-intensive workloads (that is exactly " +"the EROFS main target case) since it's quite hard to fully cache either " +"(de)compressed data in memory on such extreme workloads. In other words, " +"reloading can happen frequently due to cache misses on these workloads." +msgstr "" +"请注意,**小型压缩 physical clusters** 对于内存密集型工作负载的端到端性能至关重要" +"(这正是 EROFS 主要针对的场景),因为在这类极端工作负载下," +"很难将(解)压缩数据完全缓存在内存中。换言之,由于缓存未命中," +"这些工作负载可能会频繁发生重新加载。" + +#: ../../src/design.md:78 d29403e202d4447595800943110119b1 +msgid "Data deduplication" +msgstr "数据去重" + +#: ../../src/design.md:80 a379211601c948789b40ffeb98752648 +msgid "" +"EROFS supports both _fixed-size chunk deduplication_ and _compressed data" +" deduplication_:" +msgstr "" +"EROFS 同时支持_固定大小分块去重_和_压缩数据去重_:" + +#: ../../src/design.md:83 e54f6c31238644e681b8f7e25e9d8fd4 +msgid "" +"For non-encoded files, data can be split into fixed-size chunks for " +"mmap-I/O friendly and only keep chunks with different contents on disk." +msgstr "" +"对于非编码文件,数据可以拆分为固定大小的分块,以便对 mmap-I/O 更友好," +"并且只在磁盘上保留内容不同的分块。" + +#: ../../src/design.md:86 d3f0599c42904b29a4d7d7e0eb806a13 +#, python-format +msgid "" +"For encoded files, each physical cluster can be used in a similar way for" +" multiple reference. Note that cut points will be adjusted using the " +"[Rabin–Karp " +"algorithm](https://en.wikipedia.org/wiki/Rabin%E2%80%93Karp_algorithm) in" +" order to improve deduplication (decrease likelihood of unique blocks)." +msgstr "" +"对于编码文件,每个 physical cluster 都可以类似地被多处引用。" +"请注意,切分点将使用 [Rabin–Karp " +"algorithm](https://en.wikipedia.org/wiki/Rabin%E2%80%93Karp_algorithm) 进行调整," +"以提高去重率(降低唯一块出现的概率)。" + +#: ../../src/design.md:91 d4df360309af4feab21308c548899210 +msgid "![EROFS deduplication](_static/erofs_dedupe.svg)" +msgstr "![EROFS 去重](_static/erofs_dedupe.svg)" + +#: ../../src/design.md:91 21eb3ede47f04934b1150b46d01f243d +msgid "EROFS deduplication" +msgstr "EROFS 去重" + +#: ../../src/design.md:93 a4a636d6a78941ecb13fe6a28e2b0bd4 +msgid "In short: how is EROFS designed for performance?" +msgstr "简而言之:EROFS 如何针对性能进行设计?" + +#: ../../src/design.md:95 b8350b1de1624fb3b4bfc6323d29f4a4 +msgid "A summary of our overall design is listed below:" +msgstr "我们的整体设计总结如下:" + +#: ../../src/design.md:97 3060a714dedd4b9b8aa4b8799bba0615 +msgid "Block-aligned data - no additional I/O waste;" +msgstr "块对齐的数据——无额外 I/O 浪费;" + +#: ../../src/design.md:99 06114d1abcf741828a26e2c54223bce3 +msgid "" +"Fixed-size output compression - better compression ratios and efficient " +"I/O utilization;" +msgstr "" +"固定大小输出压缩——更高的压缩比和高效的 I/O 利用率;" + +#: ../../src/design.md:102 8575cd76f97849c58907bac3f692c1f4 +msgid "" +"Independent cache or in-place I/O strategies - to minimize memory " +"footprints;" +msgstr "" +"独立的缓存或就地 I/O 策略——以最小化内存占用;" + +#: ../../src/design.md:104 74f3bb0a1c9c4630aba9f518c13c780f +msgid "" +"In-place decompression - avoid bounced compressed buffers and poisoned " +"cache lines as much as possible;" +msgstr "" +"就地解压——尽量避免反弹的压缩缓冲区和被污染的 cache line;" + +#: ../../src/design.md:107 942f6c6aaa914fd5b2d34f9b654b7445 +msgid "" +"Multi-reference compressed clusters - avoid deduplicated data I/O (where " +"possible) and minimize images even further." +msgstr "" +"多引用压缩集群——(在可能的情况下)避免重复数据 I/O,并进一步减小镜像大小。" + +#: ../../src/design.md:112 518eabce52b54c24ac9a5ccbc6294e84 +msgid "" +"EROFS does not prefetch unnecessary on-disk data or amplify user I/O at " +"runtime, unlike some alternative approaches, which degrades random I/O " +"performance and increases memory footprint. Those customized strategies " +"can also be achieved by using " +"[posix_fadvise()](https://pubs.opengroup.org/onlinepubs/000095399/functions/posix_fadvise.html)" +" or user space tools like `ureadahead`, so there is no need to bother the" +" kernel." +msgstr "" +"与其他某些方案不同,EROFS 不会在运行时预取不必要的磁盘数据或放大用户 I/O," +"因为这样做会降低随机 I/O 性能并增加内存占用。" +"这些定制策略也可以通过 " +"[posix_fadvise()](https://pubs.opengroup.org/onlinepubs/000095399/functions/posix_fadvise.html)" +" 或 `ureadahead` 等用户空间工具来实现,因此无需打扰内核。" diff --git a/src/_locale/zh_CN/LC_MESSAGES/developers.po b/src/_locale/zh_CN/LC_MESSAGES/developers.po new file mode 100644 index 0000000..89dc59c --- /dev/null +++ b/src/_locale/zh_CN/LC_MESSAGES/developers.po @@ -0,0 +1,204 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2018-2026, EROFS filesystem developers +# This file is distributed under the same license as the EROFS package. +# FIRST AUTHOR , 2026. +# +msgid "" +msgstr "" +"Project-Id-Version: EROFS 0.1\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2026-07-05 05:03+0800\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language: zh_CN\n" +"Language-Team: zh_CN \n" +"Plural-Forms: nplurals=1; plural=0;\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.10.3\n" + +#: ../../src/developers.md:1 1d3d1a908a7342c0b466ed601c190378 +msgid "📚 Developer Guides" +msgstr "📚 开发者指南" + +#: ../../src/developers.md:3 b5b44fb3c9804d67b7ae330492c7afcc +msgid "Git Repositories" +msgstr "Git 仓库" + +#: ../../src/developers.md:5 dbc4aa00bd2c4fb0ad881ae229832ee2 +msgid "erofs-utils" +msgstr "erofs-utils" + +#: ../../src/developers.md:7 d9e6a9bbec834fa4bd77dae333d16c05 +msgid "" +"erofs-utils is developed with [Git](https://git-scm.com), and multiple " +"branches are available for different needs:" +msgstr "" +"erofs-utils 使用 [Git](https://git-scm.com) 开发,针对不同需求提供了多个分支:" + +#: ../../src/developers.md 187e9c3ff2d949f8a7cf42d0d99bfde6 +#: 1cdef374739a42cb97217cda20461143 +msgid "branch" +msgstr "分支" + +#: ../../src/developers.md 39cafbf5d4154e288cbc9053b6d3b21c +#: 94d5375dfae24aba94337b4dd6703b66 +msgid "description" +msgstr "描述" + +#: ../../src/developers.md a7a0b1f5195d49b8a1b4a5a459fc6fa9 +#: c6945e1d346648a08c3f0f4e66dd23bd +msgid "rebase?" +msgstr "是否 rebase?" + +#: ../../src/developers.md 03ec2a1ac8884aefa1b3d696ccd2533b +#: fcacbee46c554463b87eec4a4edb1c6f +msgid "dev" +msgstr "dev" + +#: ../../src/developers.md 490e790146e64227b11c37b943bc2edd +msgid "erofs-utils development tree" +msgstr "erofs-utils 开发树" + +#: ../../src/developers.md 8c0cb37c22134fcaa5c7de279743f5bf +msgid "Maybe" +msgstr "可能" + +#: ../../src/developers.md 282a19030815486f8277d100eb81c40b +msgid "experimental" +msgstr "experimental" + +#: ../../src/developers.md 4abbe039c17a406fb574bcc19e933d72 +msgid "erofs-utils tree with unstable patches for testing" +msgstr "包含不稳定补丁、用于测试的 erofs-utils 树" + +#: ../../src/developers.md 19e37be925114b458f2263fda91e9004 +#: 6040d672fbfb46e8b748cbec220098f3 f88c15d2e2364530a0353bfaf3947c74 +msgid "Yes" +msgstr "是" + +#: ../../src/developers.md d8a92d6fa6174b248d6434b0f6ce9592 +msgid "master" +msgstr "master" + +#: ../../src/developers.md 26ef0c6ec92c479f80df055b97ad797b +msgid "erofs-utils stable tree" +msgstr "erofs-utils 稳定树" + +#: ../../src/developers.md 74a16a843caf4065ad275a52b2f6ca98 +msgid "No" +msgstr "否" + +#: ../../src/developers.md:20 d0983bd6742b4138b0cf66f00f220d6e +msgid "Linux kernel source" +msgstr "Linux 内核源码" + +#: ../../src/developers.md:21 d89b04a1a9104c918370d8e63bf21683 +msgid "" +"If you're interested in EROFS kernel development, it is recommended to " +"keep your local code in sync with the latest [EROFS development " +"repo](https://git.kernel.org/pub/scm/linux/kernel/git/xiang/erofs.git):" +msgstr "" +"如果你有兴趣参与 EROFS 内核开发,建议将本地代码与最新的 [EROFS 开发仓库]" +"(https://git.kernel.org/pub/scm/linux/kernel/git/xiang/erofs.git)保持同步:" + +#: ../../src/developers.md 12a9752bb4944e43a79372aaf3f206f4 +msgid "fixes" +msgstr "fixes" + +#: ../../src/developers.md c0c16d14e4dc4151a31226a78c73eeb8 +msgid "EROFS kernel fixes-only tree (for this cycle)" +msgstr "仅包含修复的 EROFS 内核树(当前周期)" + +#: ../../src/developers.md 6e9b26704e84412784ad9faa5891852a +msgid "EROFS kernel development tree (for the next cycle)" +msgstr "EROFS 内核开发树(下一周期)" + +#: ../../src/developers.md:33 aefd4b87e1e5499bbc8c5f4546ed679e +msgid "Mailing List" +msgstr "邮件列表" + +#: ../../src/developers.md:35 3838f75281ec4e7eb3a1455ce90c2d63 +msgid "" +"EROFS has its own development mailing list hosted by " +"[OzLabs](https://www.ozlabs.org): <[linux-erofs@lists.ozlabs.org](mailto" +":linux-erofs@lists.ozlabs.org)>" +msgstr "" +"EROFS 拥有由 [OzLabs](https://www.ozlabs.org) 托管的专属开发邮件列表:" +"<[linux-erofs@lists.ozlabs.org](mailto:linux-erofs@lists.ozlabs.org)>" + +#: ../../src/developers.md:38 6304df58ab014a66ba383f09cb3d0395 +msgid "" +"You can [subscribe to the mailing list](https://lists.ozlabs.org/listinfo" +"/linux-erofs) to receive the latest status of EROFS." +msgstr "" +"你可以[订阅邮件列表](https://lists.ozlabs.org/listinfo/linux-erofs),以获取 " +"EROFS 的最新动态。" + +#: ../../src/developers.md:41 0021947c52b5455bb5e54795094e2da4 +msgid "When posting, it is helpful to:" +msgstr "发帖时,建议:" + +#: ../../src/developers.md:43 bf838ceef5db4126a29a6ef99dc90ad6 +msgid "" +"Add an additional tag in the subject like `[PATCH]`, `[question]` or " +"`[bug report]`, etc.;" +msgstr "" +"在主题中添加额外标签,例如 `[PATCH]`、`[question]` 或 `[bug report]` 等;" + +#: ../../src/developers.md:46 7431978ba8b741aabb509965ce3e93f3 +msgid "" +"Avoid [top-posting](https://daringfireball.net/2007/07/on_top) if " +"possible." +msgstr "" +"尽可能避免[顶部回复](https://daringfireball.net/2007/07/on_top)。" + +#: ../../src/developers.md:48 e7a5090c3ddd4672baf5243ee1c20497 +msgid "" +"All patches should follow the Linux kernel's coding style. Additionally, " +"as one of the Linux kernel development communities, patches require the " +"\"sign-off\" procedure." +msgstr "" +"所有补丁都应遵循 Linux 内核的编码风格。此外,作为 Linux 内核开发社区的一" +"员,补丁需要经过 \"sign-off\" 流程。" + +#: ../../src/developers.md:52 6eec84ffc7fa4b7296b59eb77bb52c63 +msgid "" +"The sign-off should be appended as a simple line at the end of the commit" +" message for the patch, which claims that you agree to [Developer " +"Certificate of Origin](https://developercertificate.org/). In other " +"words, it certifies that either you wrote it or have the right to pass it" +" on as an open-source patch." +msgstr "" +"\"sign-off\" 应以一行简单的说明附加在补丁提交信息的末尾,表明你同意 " +"[Developer Certificate of Origin](https://developercertificate.org/)。换言" +"之,它证明该补丁要么是你亲自编写,要么你有权将其作为开源补丁提交。" + +#: ../../src/developers.md:57 aeb5b6901a84424b8a09723599676e31 +msgid "Then you just add a line saying:" +msgstr "然后只需添加一行:" + +#: ../../src/developers.md:63 db885462a9d74a9ca1495e435058730c +msgid "using your real name (sorry, no pseudonyms or anonymous contributions.)" +msgstr "并使用真实姓名(抱歉,不接受化名或匿名贡献)。" + +#: ../../src/developers.md:65 fc1698ac7d5e4f75899b6cc15115e901 +msgid "Matrix room" +msgstr "Matrix 聊天室" + +#: ../../src/developers.md:67 730d8937abbd4460bd56b9cec6bb40a4 +msgid "" +"You can also join our Matrix room " +"([#erofs:matrix.org](https://matrix.to/#/#erofs:matrix.org)) for informal" +" discussions." +msgstr "" +"你也可以加入我们的 Matrix 聊天室 " +"([#erofs:matrix.org](https://matrix.to/#/#erofs:matrix.org)) 进行非正式讨论。" + +#: ../../src/developers.md:71 291e818928df4a14a0c3550b325ae0ab +msgid "" +"However, proposals, bug reports, and/or patches should be sent to the " +"mailing list eventually so that they can be properly archived." +msgstr "" +"不过,提案、错误报告和/或补丁最终应发送到邮件列表,以便妥善归档。" diff --git a/src/_locale/zh_CN/LC_MESSAGES/faq.po b/src/_locale/zh_CN/LC_MESSAGES/faq.po new file mode 100644 index 0000000..ef7f3e1 --- /dev/null +++ b/src/_locale/zh_CN/LC_MESSAGES/faq.po @@ -0,0 +1,208 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2018-2026, EROFS filesystem developers +# This file is distributed under the same license as the EROFS package. +# FIRST AUTHOR , 2026. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: EROFS 0.1\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2026-07-05 05:03+0800\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language: zh_CN\n" +"Language-Team: zh_CN \n" +"Plural-Forms: nplurals=1; plural=0;\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.10.3\n" + +#: ../../src/faq.md:1 cceaddbb1e5347c88f8c000d8d73b18a +msgid "🙋 Frequently Asked Questions" +msgstr "🙋 常见问题" + +#: ../../src/faq.md:3 e3e5cb24b6c045b7936e3c1a20776f99 +msgid "Why are images packaged in EROFS larger than those with SquashFS?" +msgstr "为什么用 EROFS 打包的镜像比 SquashFS 更大?" + +#: ../../src/faq.md:5 0f5833e6dabf459fad86fe1eae97359e +msgid "" +"First of all, the initial target use cases of EROFS are _high-performance" +" embedded scenarios, such as smartphones powered by Android_. Runtime " +"performance is always the top priority for EROFS (or, systems and " +"applications will be lagged), even if it means sacrificing some ultra-" +"space savings to avoid significant performance regressions against " +"uncompressed approaches." +msgstr "" +"首先,EROFS 最初的目标用例是 _高性能嵌入式场景,例如运行 Android 的智能手机_。" +"运行时性能始终是 EROFS 的首要优先级(否则系统和应用会出现卡顿)," +"即便这意味着要牺牲一部分极致的空间节省," +"以避免相对未压缩方案出现显著的性能回退。" + +#: ../../src/faq.md:11 71f3cdb74f3d48a3b6f8b1aa186e66f2 +msgid "" +"However, EROFS has landed **several new on-disk features** to narrow the " +"slight size difference with SquashFS or even outperform SquashFS. When " +"comparing, please ensure the same configuration is used:" +msgstr "" +"不过,EROFS 已经落地了**多项新的磁盘特性**,以缩小与 SquashFS 之间微小的体积差距," +"甚至比 SquashFS 更小。进行比较时,请确保使用相同的配置:" + +#: ../../src/faq.md:15 a620bfc8a154475b850329d2d06ad276 +msgid "" +"**Compression algorithm (if data is compressed)**: EROFS uses *LZ4* by " +"default due to lowest decompression latencies among popular open-source " +"algorithms, while SquashFS uses *GZIP* instead;" +msgstr "" +"**压缩算法(如果启用了数据压缩)**:在主流开源算法中,LZ4 的解压延迟最低," +"因此 EROFS 默认使用 *LZ4*,而 SquashFS 则使用 *GZIP*;" + +#: ../../src/faq.md:19 b0f29f56b73d43608dbf213f8cf1c1c5 +msgid "" +"**Compressed extent size**: Almost all filesystems that natively support " +"compression typically cut data into compressed extents for random access." +" EROFS focuses on smaller physical clusters to maximize random " +"performance and use *block-sized physical clusters* by default (usually 4" +" KiB), whereas SquashFS uses *128 KiB*. It can be adjusted using the `-C`" +" option with `mkfs.erofs`." +msgstr "" +"**压缩 extent 大小**:几乎所有原生支持压缩的文件系统都会把数据切分成压缩 extent," +"以支持随机访问。EROFS 专注于更小的 physical clusters,以最大化随机读取性能," +"并默认使用*块大小的 physical clusters*(通常为 4 KiB),而 SquashFS 使用 *128 KiB*。" +"可以通过 `mkfs.erofs` 的 `-C` 选项进行调整。" + +#: ../../src/faq.md:28 c8eacf58c36f4ceeba7a6f4d929dc69c +msgid "" +"Large physical clusters (e.g., 1MiB) can significantly degrade random " +"read performance as well as increase memory usage. Please conduct a " +"thorough evaluation by factoring in the target image size prior to " +"deployment." +msgstr "" +"过大的 physical clusters(例如 1MiB)会显著降低随机读取性能,并增加内存占用。" +"请在部署前结合目标镜像体积进行充分评估。" + +#: ../../src/faq.md:34 3c3fe7fd35044359a37322b26a5e74a5 +msgid "" +"**Compression level**: For example, EROFS uses *LZ4HC_CLEVEL_DEFAULT " +"(level 9)* for LZ4 HC, whereas SquashFS often uses *[LZ4HC_CLEVEL_MAX " +"(level 12)](https://github.com/plougher/squashfs-tools/blob/4.6.1" +"/squashfs-tools/lz4_wrapper.c#L52)*;" +msgstr "" +"**压缩级别**:例如,EROFS 对 LZ4 HC 使用 *LZ4HC_CLEVEL_DEFAULT(level 9)*," +"而 SquashFS 通常使用 *[LZ4HC_CLEVEL_MAX(level 12)]" +"(https://github.com/plougher/squashfs-tools/blob/4.6.1" +"/squashfs-tools/lz4_wrapper.c#L52)*;" + +#: ../../src/faq.md:38 f251772709be46b7a56480877af4c480 +msgid "" +"**Advanced features**: Enable the `-Efragments` option for EROFS when " +"comparing with SquashFS." +msgstr "" +"**高级特性**:与 SquashFS 对比时,请为 EROFS 启用 `-Efragments` 选项。" + +#: ../../src/faq.md:41 2309c9057103473ab190a4fc249518dc +msgid "" +"In addition, EROFS may produce larger images due to the following " +"differences:" +msgstr "" +"此外,由于以下差异,EROFS 生成的镜像可能会更大:" + +#: ../../src/faq.md:42 7e3ad9eca6624e5b95dcfea382cfa895 +msgid "" +"**Inode size**: Currently EROFS has to use 64-byte on-disk inodes " +"(extended inodes) to support per-inode nanosecond timestamps, whereas " +"SquashFS often uses [32-byte inodes with only 4-byte " +"timestamps](https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/fs/squashfs/squashfs_fs.h?h=v6.12#n334)" +" for regular files; Consider switching to 32-byte EROFS compact inodes " +"(e.g., by using `-T`) if per-file timestamps are not a strong " +"requirement;" +msgstr "" +"**Inode 大小**:目前 EROFS 必须使用 64 字节的 on-disk inodes(扩展 inode)" +"来支持每个 inode 的纳秒级时间戳,而 SquashFS 对普通文件通常使用 " +"[32 字节 inode,仅带 4 字节时间戳]" +"(https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/fs/squashfs/squashfs_fs.h?h=v6.12#n334)。" +"如果每个文件的时间戳不是强需求,可以考虑切换到 32 字节的 EROFS 紧凑 inode" +"(例如使用 `-T`);" + +#: ../../src/faq.md:48 6abfa10a3b194a6d98c45d73efbe8119 +msgid "" +"**Metadata compression**: If your test sets contain a large number of " +"files, EROFS may result in larger images compared to SquashFS if metadata" +" compression is not enabled. Optional metadata compression has been " +"supported since Linux 6.17; consider enabling it if metadata size is a " +"concern." +msgstr "" +"**元数据压缩**:如果测试集中包含大量文件,在未启用元数据压缩的情况下," +"EROFS 生成的镜像可能会比 SquashFS 更大。可选的元数据压缩自 Linux 6.17 起已受支持;" +"如果元数据体积令人担忧,可以考虑启用它。" + +#: ../../src/faq.md:54 9f7fcb3417aa49ddb9759085e90947da +msgid "" +"**File-based deduplication**: SquashFS deduplicates files with identical " +"data by default (it can be disabled with `-no-duplicates`), whereas EROFS" +" does not (except for hardlinks). However, EROFS offers the similar " +"functionality using `-Efragments` and even finer-grained data " +"deduplication using `-Ededupe`." +msgstr "" +"**基于文件的去重**:SquashFS 默认会对数据完全相同的文件进行去重" +"(可通过 `-no-duplicates` 禁用),而 EROFS 不会(硬链接除外)。" +"不过,EROFS 可以通过 `-Efragments` 提供类似功能," +"甚至可以通过 `-Ededupe` 实现更细粒度的数据去重。" + +#: ../../src/faq.md:59 afa4141ce51948e08c319f0fe38f6ba8 +msgid "" +"**BCJ filters**: SquashFS can compress with XZ algorithm of BCJ enabled " +"to optimize executable code. This feature is not supported by EROFS for " +"now, but there are plans to introduce [BCJ filters for all EROFS-" +"supported algorithms](https://github.com/tukaani-" +"project/xz/releases/tag/v5.8.0)." +msgstr "" +"**BCJ filters**:SquashFS 可以在启用 BCJ 后使用 XZ 算法压缩可执行代码以进行优化。" +"EROFS 目前不支持该特性,但计划引入 [适用于所有 EROFS 支持算法的 BCJ filters]" +"(https://github.com/tukaani-" +"project/xz/releases/tag/v5.8.0)。" + +#: ../../src/faq.md:63 44dfd3d55c664cb6a072653d25ef93d0 +msgid "" +"Note that EROFS is still under active development. The features mentioned" +" above are not top priorities at the moment due to limited development " +"resources (anyway, SquashFS has existed for over 20 years) and target use" +" scenarios, but they will be considered in the future, and contributions " +"are always welcome. Again, note that SquashFS doesn't always outperform " +"EROFS in image size either. EROFS images are often significantly smaller " +"(while still offering better runtime performance) when compressing files " +"in small compressed extent sizes (especially smaller than 32KiB)." +msgstr "" +"请注意,EROFS 仍在积极开发中。由于开发资源有限" +"(毕竟 SquashFS 已经存在 20 多年了)以及目标使用场景的原因," +"上述特性目前并非最高优先级,但未来会纳入考虑,并且欢迎随时贡献。" +"另外,SquashFS 在镜像体积上也不总是优于 EROFS。" +"当使用较小的压缩 extent 大小(尤其是小于 32KiB)压缩文件时," +"EROFS 镜像通常明显更小(同时仍能提供更好的运行时性能)。" + +#: ../../src/faq.md:72 4045944d87694f2595f56cf9f960e7f2 +msgid "" +"Additionally, EROFS has supported CDC-like [compressed data " +"deduplication](design.md#data-deduplication) since Linux 6.1, which also " +"gives extra space savings (although `-Ededupe` is still single-threaded)." +msgstr "" +"此外,自 Linux 6.1 起,EROFS 已支持类似 CDC 的[压缩数据去重]" +"(design.md#data-deduplication),这也能带来额外的空间节省" +"(尽管 `-Ededupe` 目前仍是单线程的)。" + +#: ../../src/faq.md:76 ee6c0c1a88b04d44a10ec83deeb9ab39 +msgid "" +"In brief, if image size is your top priority, please ensure that the " +"options `-Ededupe` and `-E(all-)fragments` are specified with mkfs.erofs." +" At least, enable `-Efragments` to match the default configuration of " +"SquashFS." +msgstr "" +"简而言之,如果镜像体积是你的最高优先级,请确保在使用 mkfs.erofs 时" +"指定 `-Ededupe` 和 `-E(all-)fragments` 选项。" +"至少应启用 `-Efragments`,以与 SquashFS 的默认配置对齐。" + +#: ../../src/faq.md:80 91c278407fea462787914dadac0315b5 +msgid "🚧 Under construction.." +msgstr "🚧 建设中……" diff --git a/src/_locale/zh_CN/LC_MESSAGES/features.po b/src/_locale/zh_CN/LC_MESSAGES/features.po new file mode 100644 index 0000000..46540a1 --- /dev/null +++ b/src/_locale/zh_CN/LC_MESSAGES/features.po @@ -0,0 +1,398 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2018-2026, EROFS filesystem developers +# This file is distributed under the same license as the EROFS package. +# FIRST AUTHOR , 2026. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: EROFS 0.1\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2026-07-05 05:03+0800\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language: zh_CN\n" +"Language-Team: zh_CN \n" +"Plural-Forms: nplurals=1; plural=0;\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.10.3\n" + +#: ../../src/features.md:1 2c85c2ebe3554c398e845640120da399 +msgid "⚖️ Features and Comparison" +msgstr "⚖️ 特性与对比" + +#: ../../src/features.md:9 893e86d6ad614e3c980d062c8dcf98e6 +msgid "" +"Note that it's just **an incomplete list** for the qualitative " +"evaluation. The overall purpose of this is to show EROFS benefits " +"compared to other in-kernel approaches when making technical decisions." +msgstr "" +"请注意,这仅是一个用于定性评估的**不完整列表**。其总体目的是在" +"技术决策时展示 EROFS 相较于其他内核内方案的优势。" + +#: ../../src/features.md:3 91c2990482c04bfa98e78500fef19f9c +msgid "Feature (as of Linux 6.17)" +msgstr "特性(截至 Linux 6.17)" + +#: ../../src/features.md:3 ea73cf63371d4438844ba72d5fe8855b +msgid "EROFS" +msgstr "EROFS" + +#: ../../src/features.md:3 ba8d2b5ac59548c6979cea6ee113dbbc +msgid "EXT4" +msgstr "EXT4" + +#: ../../src/features.md:3 35589bf64a374e1a83512d205be36c9b +msgid "SquashFS" +msgstr "SquashFS" + +#: ../../src/features.md:3 58f99cbc200549f0a2dfaac807f92647 +msgid "Minimal block size" +msgstr "最小块大小" + +#: ../../src/features.md:3 87e52b363e404bd6b2601d1e9bff062a +msgid "512 B [^1]" +msgstr "512 B [^1]" + +#: ../../src/features.md:3 8ee9043f5eed45efbcefc311609f2c5f +msgid "1 KiB" +msgstr "1 KiB" + +#: ../../src/features.md:3 522d6e6ac0b14a84ad5c817592a269aa +msgid "Unaligned[^2]" +msgstr "Unaligned[^2]" + +#: ../../src/features.md:3 f582149cb48a4b749f3ec13c766564ff +msgid "Inode size" +msgstr "inode 大小" + +#: ../../src/features.md:3 d6e1dccb1a2c46bc8869dec83ad9e2c0 +msgid "32/64 B" +msgstr "32/64 B" + +#: ../../src/features.md:3 9210a4f46747402fb70562a8816e963e +msgid "128/256 B" +msgstr "128/256 B" + +#: ../../src/features.md:3 0a00e7079cf4483f9fabd08137eaa3f7 +msgid "Varied [^3]" +msgstr "Varied [^3]" + +#: ../../src/features.md:3 81c691e5dbcf4abdbda9af86ecc37c0a +msgid "Limitation of total UIDs/GIDs" +msgstr "UID/GID 总数限制" + +#: ../../src/features.md:3 0647298ccb3f4843924270d48e1cf0d9 +#: e28a7bfb7f3a44679578ed5858850314 +msgid "Unlimited" +msgstr "无限制" + +#: ../../src/features.md:3 c62bee479ee44aaa8b1a0877e6d12166 +msgid "65536 [^4]" +msgstr "65536 [^4]" + +#: ../../src/features.md:3 c96c6e2b1eec426ead9082a0c5942753 +msgid "Pre-1970 / ns timestamps" +msgstr "1970 年前 / 纳秒时间戳" + +#: ../../src/features.md:3 0050997395a147d89ef2f6279db6c8b9 +#: 07f6fe84dba446719a541b8bb77e1031 129fd95bbebb42aa873b3352ede1c880 +#: 15216c96b4a7437f93e613d2e49db406 16fbdfe21f5d45c2ba1f8bf1a2de5c12 +#: 193868b56e444c469733ab6100465091 2de63d87ef9c43708eef8d39368b29c9 +#: 31413a33f8314a77abfba2e68c6371b9 44be869796314a52b4429f1b62acbf3e +#: 5221f02def8442ab9dc54a2cca5db9b3 573a5889bfdd4668b6701fe02b24f25f +#: 67729a8af0ae48d9b122364591fd7425 89d53982a21e4b55a5804289e8b5bc48 +#: 928a118662fb43ab8c372a33d402d2d1 969b96a125b04e62aa8564be0a069ea5 +#: 9860dd4468a14d4aa0b8a65a8a6a434c a1088a49a22e43f5bf812ebcc9a85cbf +#: a6283673110044fa97e72be540298c63 ba29cb78757f4404af5645575094f34f +#: beb7f473f82549f488e417c9d5101bf4 c55096e7e9a74b5ebcbeffe551b99ec0 +#: ca10d161f5514a4ba021df4b34980383 d2053ffca2fb4bb59ef551cc721d4646 +#: e4f6a4b3cb9b458db845dcb12952e4f2 fbada368600241f0af5e3bb334f460ba +msgid "Yes" +msgstr "是" + +#: ../../src/features.md:3 0102f446f4684b619fba51567eed7911 +#: 0402e84921da422c9090f85a4f51669c 0a0e8816e2bc4041b71fd7b64c8c8a84 +#: 219324a3934641d0af80785672f3f10d 23b306ab72d74540ae40ed53e96247eb +#: 2cbb84304761446f98d58bda45df39d3 40ce490a8213497ba9b71612b03adfd5 +#: 4f5592815b1f45b0b1472d0cc3c082c5 6dbf3d4052ec45569dcfc0cbfc204265 +#: 734ce2f1659943e7a6498f58bb95816c 7e3fc4b459d44648a03466e36eca344a +#: 87036b94e986486f95d7dc411a0200c4 a66b0370814e4e5aa1829bedfcf379a6 +#: ae8c92b567e849aab2bc13b6d1488947 b601e270203846219e1a0ddcb66f9233 +#: dade2219c7264ce4af5b26af35d8ad3a f440d8f8cc6544f3b5683b212ae656af +#: fa388d88454e44f0af447487ed9f68f5 +msgid "No" +msgstr "否" + +#: ../../src/features.md:3 cc81c19a20ee4610b8814ad0529af6bc +msgid "Filesystem UUID" +msgstr "文件系统 UUID" + +#: ../../src/features.md:3 889edc80512446ffb35c42352acd3c8b +msgid "Filesystem label (Volume label)" +msgstr "文件系统标签(卷标)" + +#: ../../src/features.md:3 8acf4abe7ff74508a9d21bc8c37927ad +msgid "Inline data" +msgstr "内联数据" + +#: ../../src/features.md:3 f23b6879b6bd441f9041e2a4fd7611e0 +msgid "Yes (Inline tail)" +msgstr "是(内联尾部)" + +#: ../../src/features.md:3 7394efb80df44ab3bb609ed235f455d6 +msgid "Data compression" +msgstr "数据压缩" + +#: ../../src/features.md:3 91283f5d86954840988942440f70b317 +msgid "Yes [^5]" +msgstr "Yes [^5]" + +#: ../../src/features.md:3 e35fc88175fb4930aacbd1f7b3dab10c +msgid "Largest compression granularity" +msgstr "最大压缩粒度" + +#: ../../src/features.md:3 4960e1479feb419aa034ccf218cbd35b +#: d763362d3f5341d3b0d1792b0bbed059 +msgid "1 MiB" +msgstr "1 MiB" + +#: ../../src/features.md:3 05b24fc39bea48b4be1bff81c3cfee22 +#: 306d97d1fe954220a9a007736eb51bd3 462443d9e88c479bb6a70a2d55cee632 +#: 834c4660d83643ca84860a1f58049113 ff394d308a9e4103aad0a5461e2875d7 +msgid "N/A" +msgstr "不适用" + +#: ../../src/features.md:3 7a796c4832d54155b84637ec0bb07c20 +msgid "Default compression granularity" +msgstr "默认压缩粒度" + +#: ../../src/features.md:3 60390e394c3345a0b0298dd5987eb5fa +msgid "1 Block [^6]" +msgstr "1 Block [^6]" + +#: ../../src/features.md:3 eeaf487c1c174bf8a0ff53f46de094c6 +msgid "128 KiB" +msgstr "128 KiB" + +#: ../../src/features.md:3 333b244180f14a128a54d16365f0fd37 +msgid "Fragments" +msgstr "片段" + +#: ../../src/features.md:3 edd0df78ac6c4bda9eddc24fda72f134 +msgid "File-backed mounts" +msgstr "基于文件的挂载" + +#: ../../src/features.md:3 c85413dc6bd144298aa2ea7325596d38 +msgid "Yes [^7]" +msgstr "Yes [^7]" + +#: ../../src/features.md:3 ff12e1836413424b92834b18f9145981 +msgid "Metadata compression" +msgstr "元数据压缩" + +#: ../../src/features.md:3 6220e8d61ad049aeb74817e5f3911253 +msgid "Yes [^8]" +msgstr "Yes [^8]" + +#: ../../src/features.md:3 9804102c4d824e9ba56a5958eed6ebdd +msgid "Multiple compression algorithms" +msgstr "多种压缩算法" + +#: ../../src/features.md:3 aefc90f400394bc2b360393feae21115 +msgid "Per-file" +msgstr "按文件" + +#: ../../src/features.md:3 7933d395719244bc942c6b19a020c18b +msgid "Data deduplication" +msgstr "数据去重" + +#: ../../src/features.md:3 9c005fd41fef4ff98fbcb5987a384e90 +msgid "Extent-based" +msgstr "基于 extent" + +#: ../../src/features.md:3 61c4536215b94b4cbbf6d1fb98902a27 +msgid "No? [^9]" +msgstr "No? [^9]" + +#: ../../src/features.md:3 97e2e30e1c35413f9e615552f5e4645d +msgid "File-based" +msgstr "基于文件" + +#: ../../src/features.md:3 9db0291712f44de1996c61305046878b +msgid "Extended attribute support" +msgstr "扩展属性支持" + +#: ../../src/features.md:3 6fc04590a1274657972b46ffce585640 +msgid "External data (multi-devices)" +msgstr "外部数据(多设备)" + +#: ../../src/features.md:3 e68eb6b441fb4d028adad5dd3e393a13 +msgid "POSIX.1e ACL support" +msgstr "POSIX.1e ACL 支持" + +#: ../../src/features.md:3 6a33dfe603a24c98b69a882999164ca7 +msgid "Direct I/O support [^10]" +msgstr "Direct I/O support [^10]" + +#: ../../src/features.md:3 a1f18091b1504c6b8b990a8613b8f40f +msgid "FIEMAP support" +msgstr "FIEMAP 支持" + +#: ../../src/features.md:3 3e4a9452f77b44109ac404ffa34fca66 +msgid "SEEK_{DATA,HOLE} support" +msgstr "SEEK_{DATA,HOLE} 支持" + +#: ../../src/features.md:3 ea304dcf818b40ab97e42b8fb2289f51 +msgid "FSDAX support" +msgstr "FSDAX 支持" + +#: ../../src/features.md:3 72a8c545da264581839c022263d18a64 +msgid "Large folio support" +msgstr "大 folio 支持" + +#: ../../src/features.md:3 bbc3964debac4763a36e69d448800356 +msgid "Yes [^11]" +msgstr "Yes [^11]" + +#: ../../src/features.md:3 9bcf20d6abfd4fde9a6d4416933451ab +msgid "Yes [^12]" +msgstr "Yes [^12]" + +#: ../../src/features.md:3 702c531f752e45acb413fb013f59b72d +msgid "Hardware acceleration support" +msgstr "硬件加速支持" + +#: ../../src/features.md:3 b5a5d9c387b0491c92b81365623fcea8 +msgid "Yes [^13]" +msgstr "Yes [^13]" + +#: ../../src/features.md:40 7003779cefa3470b89aaea85fc5392c1 +msgid "512-byte blocks can be used for tarball data reference." +msgstr "512 字节块可用于引用 tarball 数据。" + +#: ../../src/features.md:42 e954447c16b7484193336c8b865f0133 +msgid "" +"It means a fixed minimal filesystem I/O size which SquashFS doesn't have." +" Instead, SquashFS has its own \"block size\": its compressed files are " +"split up in fixed-size blocks. See [Squashfs Binary Format/About](https" +"://dr-emann.github.io/squashfs/squashfs.html#_about)." +msgstr "" +"它指的是 SquashFS 所没有的固定最小文件系统 I/O 大小。相反,SquashFS 有自" +"己的“块大小”:其压缩文件会被拆分为固定大小的块。详见 [Squashfs Binary " +"Format/About](https://dr-emann.github.io/squashfs/squashfs.html#_about)。" + +#: ../../src/features.md:46 3dcf27ae800446dc8bc9f0494d1cb986 +msgid "" +"SquashFS has different on-disk inodes for each type of varying contents " +"and size. See [Squashfs Binary Format/Inode Table](https://dr-" +"emann.github.io/squashfs/squashfs.html#_inode_table)." +msgstr "" +"SquashFS 针对每种类型的不同内容和大小使用不同的磁盘 inode。详见 " +"[Squashfs Binary Format/Inode Table](https://dr-emann.github.io/squashfs/" +"squashfs.html#_inode_table)。" + +#: ../../src/features.md:49 d52dd3838d984b4bb2f7303d814194f5 +msgid "" +"SquashFS allows 32-bit UIDs/GIDs, but only among 2{sup}`16` unique " +"values. See [Squashfs Binary Format/Inode Table](https://dr-" +"emann.github.io/squashfs/squashfs.html#_inode_table)." +msgstr "" +"SquashFS 允许 32 位 UID/GID,但仅限于 2{sup}`16` 个唯一值。详见 " +"[Squashfs Binary Format/Inode Table](https://dr-emann.github.io/squashfs/" +"squashfs.html#_inode_table)。" + +#: ../../src/features.md:52 f8896242d6f14402ab8539985acc2dd8 +msgid "" +"Data compression is an optional feature of the EROFS filesystem. " +"Currently, the supported compression algorithms include " +"[LZ4](https://lz4.org), [MicroLZMA](https://tukaani.org/xz) (since Linux " +"5.16), [DEFLATE](https://datatracker.ietf.org/doc/html/rfc1951) (since " +"Linux 6.6 LTS) and " +"[Zstandard](https://datatracker.ietf.org/doc/html/rfc8878) (since Linux " +"6.10)." +msgstr "" +"数据压缩是 EROFS 文件系统的可选特性。目前支持的压缩算法包括 " +"[LZ4](https://lz4.org)、[MicroLZMA](https://tukaani.org/xz)(自 Linux " +"5.16 起)、[DEFLATE](https://datatracker.ietf.org/doc/html/rfc1951)(自 " +"Linux 6.6 LTS 起)以及 " +"[Zstandard](https://datatracker.ietf.org/doc/html/rfc8878)(自 Linux " +"6.10 起)。" + +#: ../../src/features.md:59 a4291e0cf8184c12805aea67bd778a1b +msgid "The default block size of EROFS is 4 KiB on x86 and x86-64." +msgstr "EROFS 在 x86 与 x86-64 上的默认块大小为 4 KiB。" + +#: ../../src/features.md:61 f16cf78ba6d44974b487713ca9ab89d6 +msgid "" +"EROFS has supported [EROFS over fscache](https://lwn.net/Articles/896140)" +" (since Linux 5.19, deprecated in Linux 6.12) and [file-backed " +"mounts](https://lwn.net/Articles/990750) (since Linux 6.12) to avoid " +"unnecessary loop devices." +msgstr "" +"EROFS 支持 [EROFS over fscache](https://lwn.net/Articles/896140)(自 Linux " +"5.19 起,在 Linux 6.12 中已弃用)和[基于文件的挂载](https://lwn.net/Articles/" +"990750)(自 Linux 6.12 起),以避免不必要的 loop 设备。" + +#: ../../src/features.md:65 0793ecb507dc4224901037aa82594a60 +msgid "" +"EROFS metadata is designed to be directly accessible from block devices " +"without decoding, or deserialization, as these can lead to I/O " +"amplification and additional runtime latency in performance-critical " +"scenarios. Nevertheless, optional metadata compression has been supported" +" since Linux 6.17 to minimize filesystem images." +msgstr "" +"EROFS 的元数据设计为可直接从块设备访问,无需解码或反序列化,因为这些操" +"作可能在性能敏感场景下导致 I/O 放大和额外的运行时延迟。不过,自 Linux " +"6.17 起已支持可选的元数据压缩,以最小化文件系统镜像。" + +#: ../../src/features.md:71 cee44ff0ae454e60b93d287beac8686a +msgid "" +"Strictly speaking, EXT4 has a feature named " +"\"[shared_blocks](https://lore.kernel.org/r/20201005161941.GF4225@quack2.suse.cz)\"," +" which will prevent applications from writing to the filesystem." +msgstr "" +"严格来说,EXT4 有一个名为 " +"\"[shared_blocks](https://lore.kernel.org/r/20201005161941.GF4225@quack2.suse.cz)\"" +" 的特性,开启后会阻止应用向文件系统写入。" + +#: ../../src/features.md:74 fc7a8db9cd2545ca9b09afcc7f25aeb7 +msgid "" +"For example, `direct I/O` can be used for loop devices backed by " +"unencoded files on the EROFS filesystem to avoid double caching. `Direct " +"I/O` on encoded files is almost useless since it should not do ANY " +"caching and thus will kill the overall performance." +msgstr "" +"例如,`direct I/O` 可用于由 EROFS 文件系统上未编码文件支持的 loop 设备," +"以避免双重缓存。在编码文件上使用 `Direct I/O` 几乎毫无用处,因为它不应做" +"任何缓存,从而会严重影响整体性能。" + +#: ../../src/features.md:79 4d45b8a2c6334eb2baa84caeed1b148a +msgid "" +"EROFS has supported large folios [for uncompressed " +"files](https://lwn.net/Articles/931794) (since Linux 6.2) and [compressed" +" files](https://git.kernel.org/torvalds/c/e080a26725fb) (since Linux " +"6.11)." +msgstr "" +"EROFS 已支持未压缩文件的[大 folio](https://lwn.net/Articles/931794)(自 " +"Linux 6.2 起)以及压缩文件的[大 folio](https://git.kernel.org/torvalds/c/" +"e080a26725fb)(自 Linux 6.11 起)。" + +#: ../../src/features.md:82 b2bc76b801324e3b88233cf2a8a25dd0 +msgid "" +"EXT4 supports [large folios since Linux " +"6.16](https://git.kernel.org/torvalds/c/d87d73895fcd)." +msgstr "" +"EXT4 自 [Linux 6.16 起支持大 folio](https://git.kernel.org/torvalds/c/" +"d87d73895fcd)。" + +#: ../../src/features.md:84 d53695020e9143ca85c82ec541cbbcbd +msgid "" +"EROFS has supported [Intel QuickAssist Technology to accelerate DEFLATE " +"algorithm since Linux " +"6.16](https://git.kernel.org/torvalds/c/79b98edf918e)." +msgstr "" +"EROFS 自 [Linux 6.16 起支持 Intel QuickAssist Technology 加速 DEFLATE " +"算法](https://git.kernel.org/torvalds/c/79b98edf918e)。" diff --git a/src/_locale/zh_CN/LC_MESSAGES/gsoc.po b/src/_locale/zh_CN/LC_MESSAGES/gsoc.po new file mode 100644 index 0000000..b1baa78 --- /dev/null +++ b/src/_locale/zh_CN/LC_MESSAGES/gsoc.po @@ -0,0 +1,526 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2018-2026, EROFS filesystem developers +# This file is distributed under the same license as the EROFS package. +# FIRST AUTHOR , 2026. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: EROFS 0.1\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2026-07-05 05:03+0800\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language: zh_CN\n" +"Language-Team: zh_CN \n" +"Plural-Forms: nplurals=1; plural=0;\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.10.3\n" + +#: ../../src/gsoc.md:1 50f14a89720844e28dbd21f4431e7cb3 +msgid "🌞 Google Summer of Code 2026" +msgstr "🌞 Google Summer of Code 2026" + +#: ../../src/gsoc.md:3 9319d84bbc6b46e9b8b3197f89651fdf +msgid "About Google Summer of Code" +msgstr "关于 Google Summer of Code" + +#: ../../src/gsoc.md:5 d71701e5dc094c458f28e02564db232d +msgid "" +"The [Google Summer of Code](https://summerofcode.withgoogle.com) is a " +"global, online program focused on bringing new contributors into open source" +" software development. Contributors work with an open source organization " +"on a 12+ week-long program under the guidance of mentors." +msgstr "" +"[Google Summer of Code](https://summerofcode.withgoogle.com) " +"是一项全球性的在线计划,旨在吸引新的贡献者参与开源软件开发。贡献者将在导师指导下,与某个开源组织一起完成为期 12 周以上的项目。" + +#: ../../src/gsoc.md:10 b7146df50c3e4e2ea625bef12a497900 +msgid "Project Proposal Guidelines" +msgstr "项目提案指南" + +#: ../../src/gsoc.md:12 fa727bccbcbd47b88d5e0f1daf39ca6f +msgid "" +"Contributors/applicants are responsible for writing a proposal and " +"submitting it to Google before the application deadline." +msgstr "贡献者/申请者负责撰写提案,并在申请截止日期前提交给 Google。" + +#: ../../src/gsoc.md:15 daaa8294c4524a08b2a5f61651010f97 +msgid "" +"See the Project Ideas for a starting point for project ideas. We welcome " +"proposals which are variations of these project ideas and new project ideas " +"as well. Please reach out to us on the development mailing list or Matrix " +"room to discuss project proposals." +msgstr "" +"请参阅“项目想法”作为选题起点。我们欢迎基于这些项目想法的变体提案,也欢迎全新的项目想法。如需讨论项目提案,请通过开发邮件列表或 Matrix " +"房间与我们联系。" + +#: ../../src/gsoc.md:20 8a8dc694521442d0aceb20a499cde08b +msgid "" +"In order to ensure the projects run healthily, your proposal must contain a " +"clear yes/no statement about whether you used LLM-based AI tools (ChatGPT, " +"Gemini, etc.) to help you write it. Include exactly one of the following " +"statements in your proposal:" +msgstr "" +"为确保项目顺利开展,你的提案必须包含一条明确的“是/否”声明,说明你使用了哪些基于 LLM 的 AI 工具(ChatGPT、Gemini " +"等)来辅助撰写。请在提案中恰好包含以下其中一条声明:" + +#: ../../src/gsoc.md:25 7d0d2ee450834cc3b963449a0a57142c +msgid "" +"`This proposal was written with the assistance of [ChatGPT/Gemini/etc] to " +"[check spelling / check accuracy / format text].`" +msgstr "" +"`This proposal was written with the assistance of [ChatGPT/Gemini/etc] to " +"[check spelling / check accuracy / format text].`" + +#: ../../src/gsoc.md:27 e48e4b2147004c348d58be6de64f4ba7 +msgid "or:" +msgstr "或:" + +#: ../../src/gsoc.md:29 742289ac4da8486d99f1aabcdf68ad6d +msgid "`This proposal was written without the use of any AI tools.`" +msgstr "`This proposal was written without the use of any AI tools.`" + +#: ../../src/gsoc.md:31 687d24ec52d74ef9b104ec8f63d7095e +msgid "" +"If your proposal does not contain either of these statements, your proposal " +"will not be considered." +msgstr "如果你的提案未包含上述任一声明,该提案将不被考虑。" + +#: ../../src/gsoc.md:34 ac9fec91053a4cc2a537f7eabbee9ddb +msgid "" +"Using AI tools for refining project proposals is allowed, but please try to " +"keep the proposal within your own development capability." +msgstr "允许使用 AI 工具润色项目提案,但请尽量确保提案内容在你自身的开发能力范围内。" + +#: ../../src/gsoc.md:37 b75c2727d538476ea5de902ae0df475d +msgid "" +"Please **do not submit a proposal completely generated by AI** since it's " +"just a waste of our time." +msgstr "请**不要提交完全由 AI 生成的提案**,因为这只会浪费我们的时间。" + +#: ../../src/gsoc.md:40 78422295ff314764bcc4ea450ba9eb32 +msgid "Project Ideas" +msgstr "项目想法" + +#: ../../src/gsoc.md:44 8ace1d0041fc4ea3b9c2f139bc718cd7 +msgid "Multi-threaded Decompression Support in fsck.erofs" +msgstr "fsck.erofs 的多线程解压缩支持" + +#: ../../src/gsoc.md:46 e89870d1afdd43e393e222070620b122 +msgid "" +"Proposed mentors: Yifan Zhao ([@SToPire](https://github.com/SToPire)), " +"Chunhai Guo ([@speedan1](https://github.com/speedan1)), Gao Xiang " +"([@hsiangkao](https://github.com/hsiangkao)) Languages: C Estimated " +"project length: 350 hours Difficulty: hard Skills:" +msgstr "" +"建议导师:Yifan Zhao ([@SToPire](https://github.com/SToPire))、Chunhai Guo " +"([@speedan1](https://github.com/speedan1))、Gao Xiang " +"([@hsiangkao](https://github.com/hsiangkao)) 语言:C 预计项目时长:350 小时 " +"难度:hard 技能:" + +#: ../../src/gsoc.md:51 ../../src/gsoc.md:98 ../../src/gsoc.md:169 +#: ../../src/gsoc.md:211 7a1bb21217fe45bd9f03e90ba36304d1 +#: 9ad9193abd9640f08055afcf7ae4d7d8 b318a53c2dcf4499988838c8a41082f4 +#: bc8ecee8bef94903b869e6114ac4ab7b +msgid "Proficiency in C programming;" +msgstr "熟练掌握 C 编程;" + +#: ../../src/gsoc.md:52 8407d7332890437aa7c8e1197c729ba8 +msgid "Experience with multi-threaded programming;" +msgstr "具备多线程编程经验;" + +#: ../../src/gsoc.md:53 ../../src/gsoc.md:99 ../../src/gsoc.md:132 +#: ../../src/gsoc.md:170 34acb3e1374a4238aa3dc5ad7928c0e1 +#: b845d47670a24e118c56f52ebfe8e0a9 c707d0a545cd459ebc8898d7e0f2138e +#: ed6be05e052144daaab863db8867f0ff +msgid "Experience with file system concepts and operations." +msgstr "具备文件系统概念与操作经验。" + +#: ../../src/gsoc.md:55 ../../src/gsoc.md:101 ../../src/gsoc.md:134 +#: ../../src/gsoc.md:172 ../../src/gsoc.md:215 +#: 215b6b15520e4aa5896959488a96c539 3aef6031cad8453ca3377e79c0e6994f +#: 53bdd7bc82bb460b892c84ba9e1ffc4f 5e3a2051beb54d4986c0d9b604e62002 +#: ba16284758884c5a8420671ab921590b +msgid "**Description**" +msgstr "**描述**" + +#: ../../src/gsoc.md:57 747000a91ee64138968a873743fa01d5 +msgid "" +"EROFS is designed for modern high-performance immutable use cases and is " +"widely used in OS images such as Android system images and container images." +" Its userspace tool, fsck.erofs, is critical for filesystem integrity " +"checking, image unpacking, and regression testing." +msgstr "" +"EROFS 面向现代高性能不可变应用场景设计,广泛用于操作系统镜像,例如 Android 系统镜像和容器镜像。其用户空间工具 fsck.erofs " +"对文件系统完整性检查、镜像解包和回归测试至关重要。" + +#: ../../src/gsoc.md:62 a0a988083bb54b708b1e9a47e07b876f +msgid "" +"Currently fsck.erofs is strictly single-threaded, therefore it unpacks each " +"file one-by-one, even though:" +msgstr "目前 fsck.erofs 严格采用单线程模式,因此只能逐个文件解包,尽管:" + +#: ../../src/gsoc.md:65 eb083315f9294f1a92e78c9c02eaa7da +msgid "EROFS compression units (e.g., pclusters) are largely independent;" +msgstr "EROFS 的压缩单元(例如 pclusters)在很大程度上相互独立;" + +#: ../../src/gsoc.md:66 48a3ce5f406c45679aa5c9549aedb828 +msgid "Modern computer systems provide abundant CPU parallelism;" +msgstr "现代计算机系统提供了充足的 CPU 并行能力;" + +#: ../../src/gsoc.md:67 5046767a3745480d9a167acb42bb0296 +msgid "" +"Unpacking workloads for compressed files are often CPU-bound rather than " +"I/O-bound." +msgstr "压缩文件的解包工作负载通常是 CPU 密集型,而非 I/O 密集型。" + +#: ../../src/gsoc.md:70 7f0eb32e2ab745109a1cec53c9219ac9 +msgid "" +"For large images, extraction time scales poorly, which negatively impacts " +"image installation, CI pipelines and/or developer workflows. Therefore, " +"introducing multi-threaded decompression would unlock significant " +"performance improvements of these use cases." +msgstr "" +"对于大型镜像,解压时间扩展性较差,会对镜像安装、CI 流程和/或开发者工作流产生负面影响。因此,引入多线程解压缩将为这些用例带来显著的性能提升。" + +#: ../../src/gsoc.md:75 0b73a51299a64b86939a258c928f5da2 +msgid "" +"The primary goal is to design and implement a new multi-threaded " +"decompression pipeline for fsck.erofs that is efficient, safe and " +"maintainable." +msgstr "主要目标是为 fsck.erofs 设计并实现一条高效、安全且可维护的新型多线程解压缩流水线。" + +#: ../../src/gsoc.md:79 5fc2760734764a7db3781e2aba0ad0d8 +msgid "Specific goals:" +msgstr "具体目标:" + +#: ../../src/gsoc.md:81 3bd60250cc5f4320928a5c7801025c4b +msgid "" +"Parallelized decompression at different levels (compressed clusters, inodes," +" etc.)" +msgstr "在不同层级上并行化解压缩(压缩簇、inode 等)" + +#: ../../src/gsoc.md:83 000af5fc7cc64ba4872969cdaa994429 +msgid "" +"Always perform better than the single-threaded approach among all supported " +"algorithms (LZ4, LZMA, DEFLATE and Zstandard);" +msgstr "在所有支持的算法(LZ4、LZMA、DEFLATE 和 Zstandard)中,始终优于单线程方案;" + +#: ../../src/gsoc.md:85 c15f07d4aedb4015b8e46946852c578d +msgid "Maintain correctness and stability;" +msgstr "保持正确性与稳定性;" + +#: ../../src/gsoc.md:86 30010d7573ff4784b50a2b015c3021d9 +msgid "Minimize memory overhead and contention;" +msgstr "最小化内存开销与竞争;" + +#: ../../src/gsoc.md:87 7f394a4de3f346359fbbe00bd81e899d +msgid "" +"The unpacking performance of metadata compressed filesystems should be " +"greatly improved too;" +msgstr "元数据压缩文件系统的解包性能也应得到大幅提升;" + +#: ../../src/gsoc.md:89 b1499571e44345f9b118d28b65f7c654 +msgid "Add tests to look after this new feature (e.g. stress tests)." +msgstr "添加测试以覆盖这一新功能(例如压力测试)。" + +#: ../../src/gsoc.md:91 6b39e6f4060846e7a127fb23923bcd4a +msgid "Support generating filesystems from manifests with mkfs.erofs" +msgstr "支持使用 mkfs.erofs 从清单文件生成文件系统" + +#: ../../src/gsoc.md:93 63771eebe09f489daf5acd461f5b198f +msgid "" +"Proposed mentors: Chengyu Zhu " +"([@ChengyuZhu6](https://github.com/ChengyuZhu6)), Gao Xiang Languages: C" +" Estimated project length: 175 hours Difficulty: medium Skills:" +msgstr "" +"建议导师:Chengyu Zhu ([@ChengyuZhu6](https://github.com/ChengyuZhu6))、Gao Xiang" +" 语言:C 预计项目时长:175 小时 难度:medium 技能:" + +#: ../../src/gsoc.md:103 1a777aeb1d534097b3c8c2dc1c21ebd6 +msgid "" +"For local builds, currently mkfs.erofs only supports generating from source " +"directories or tarballs. However, building from source directories has the " +"following disadvantages:" +msgstr "在本地构建时,目前 mkfs.erofs 仅支持从源目录或 tarballs 生成镜像。然而,从源目录构建存在以下缺点:" + +#: ../../src/gsoc.md:107 86f78d91c59e493382f919622972f77b +msgid "Limited inode metadata control;" +msgstr "对 inode 元数据的控制有限;" + +#: ../../src/gsoc.md:108 0eeed0f8d55541e99e81288e66d918c6 +msgid "Requires privileges for special inodes;" +msgstr "处理特殊 inode 需要特权;" + +#: ../../src/gsoc.md:109 de87f2550fb24f52a96f74357cf55690 +msgid "No explicit data dump ordering control;" +msgstr "无法显式控制数据转储顺序;" + +#: ../../src/gsoc.md:110 7424d92a52dc4813a46c217fa86f3b93 +msgid "Slower for very large filesystem trees." +msgstr "对于非常大的文件系统树速度较慢。" + +#: ../../src/gsoc.md:112 8f7143d11d7c40ab977b1d28b33ad897 +msgid "" +"The primary goal is to implement the functionality to generate EROFS images " +"from manifest files. Note that manifest formats are highly fragmented, so " +"you should implement support for at least two common manifest formats, for " +"example:" +msgstr "主要目标是实现从清单文件生成 EROFS 镜像的功能。请注意,清单格式非常分散,因此你应至少支持两种常见的清单格式,例如:" + +#: ../../src/gsoc.md:116 3372830a7b4a4eabadfb9e831a794b1c +msgid "" +"[composefs-dump(5)](https://manpages.debian.org/testing/composefs/composefs-" +"dump.5.en.html);" +msgstr "" +"[composefs-dump(5)](https://manpages.debian.org/testing/composefs/composefs-" +"dump.5.en.html);" + +#: ../../src/gsoc.md:118 e055943a735b401a9eb2b81ee0b1add4 +msgid "" +"Modified [unix proto " +"files](https://www.ibm.com/docs/en/aix/7.3.0?topic=m-mkproto-command);" +msgstr "" +"修改后的 [unix proto " +"files](https://www.ibm.com/docs/en/aix/7.3.0?topic=m-mkproto-command);" + +#: ../../src/gsoc.md:120 4baa6ae263804ee48a8dfb84ea113093 +msgid "" +"BSD " +"[mtree(5)](https://man.freebsd.org/cgi/man.cgi?query=mtree&sektion=5&format=html)." +msgstr "" +"BSD " +"[mtree(5)](https://man.freebsd.org/cgi/man.cgi?query=mtree&sektion=5&format=html)." + +#: ../../src/gsoc.md:122 c73385b4db9d4d058089e6d8c5f38d20 +msgid "Dedicated test cases should be added to ensure its correctness." +msgstr "应添加专门的测试用例以确保其正确性。" + +#: ../../src/gsoc.md:124 0c78120536824f7cab52459d53751adb +msgid "Complete Filesystem Feature Support for erofs-rs" +msgstr "erofs-rs 的完整文件系统特性支持" + +#: ../../src/gsoc.md:126 6dd0b497bb3046c4bca8c7ed6c6760bf +msgid "" +"Proposed mentors: [@Dreamacro](https://github.com/Dreamacro), Gao Xiang " +"Languages: Rust Estimated project length: 350 hours Difficulty: hard " +"Skills:" +msgstr "" +"建议导师:[@Dreamacro](https://github.com/Dreamacro)、Gao Xiang 语言:Rust " +"预计项目时长:350 小时 难度:hard 技能:" + +#: ../../src/gsoc.md:131 be8f737fdbf343a7a1392139c4a886aa +msgid "Proficiency in Rust programming;" +msgstr "熟练掌握 Rust 编程;" + +#: ../../src/gsoc.md:136 6074a7ca34f24b14a688140290d59b42 +msgid "" +"EROFS is a high-performance, space-efficient read-only filesystem widely " +"used in the Linux ecosystem." +msgstr "EROFS 是一种高性能、空间高效的只读文件系统,广泛用于 Linux 生态系统。" + +#: ../../src/gsoc.md:139 455003b898ec4472805b298caf801bf8 +msgid "" +"Currently, there is no mature, full-featured EROFS implementation in pure " +"Rust. However, [erofs-rs](https://github.com/Dreamacro/erofs-rs) has the " +"following features that make it particularly appealing:" +msgstr "" +"目前尚无成熟、功能完善的纯 Rust EROFS 实现。然而,[erofs-" +"rs](https://github.com/Dreamacro/erofs-rs) 具有以下特别吸引人的特性:" + +#: ../../src/gsoc.md:143 6b47a18247bb4a539989c2d3fedfb99d +msgid "`no_std` support for embedded systems;" +msgstr "`no_std` support for embedded systems;" + +#: ../../src/gsoc.md:145 de783b819e9e4fad87987fb330528cf1 +msgid "Zero-copy parsing via mmap (std) or byte slices (no_std)." +msgstr "通过 mmap(std)或字节切片(no_std)实现零拷贝解析。" + +#: ../../src/gsoc.md:147 c5528ccc941b49859542e07256892737 +msgid "" +"However, it currently only includes a reader, and even this reader lacks the" +" following basic features:" +msgstr "然而,它目前仅包含一个读取器(reader),且即便是这个读取器也缺少以下基本功能:" + +#: ../../src/gsoc.md:150 b8bab369e4354506a3de1c354151608f +msgid "Support for extended attributes (xattrs);" +msgstr "支持扩展属性(xattrs);" + +#: ../../src/gsoc.md:151 d5bbb02a28d84609ba44dda472a19ea2 +msgid "Support for multiple devices;" +msgstr "支持多设备;" + +#: ../../src/gsoc.md:152 9e89dca8f5ed48e2a687466a6f04115d +msgid "Support for two compression layouts;" +msgstr "支持两种压缩布局;" + +#: ../../src/gsoc.md:153 2b954aedf0d1443285e64c78b745b5eb +msgid "Support for 48-bit addressing layouts;" +msgstr "支持 48 位寻址布局;" + +#: ../../src/gsoc.md:154 7e9464ea9cea4aad90746c1ea67ecd64 +msgid "Support for metadata compression." +msgstr "支持元数据压缩。" + +#: ../../src/gsoc.md:156 eb848bee288b4c45aef19d5640ca1375 +msgid "" +"The primary goal is to complete the erofs-rs feature set, including the " +"missing reader features listed above, and additionally implement a writer " +"with an efficient block allocator as a plus." +msgstr "主要目标是完善 erofs-rs 的功能集,包括上述缺失的读取器特性,并额外实现一个具有高效块分配器的写入器(writer)作为加分项。" + +#: ../../src/gsoc.md:162 2c63b5a5d8a74bdfb6745bc248748204 +msgid "Porting EROFS to BSD Kernels (FreeBSD Focus)" +msgstr "将 EROFS 移植到 BSD 内核(以 FreeBSD 为重点)" + +#: ../../src/gsoc.md:164 5b73aebe633949f1bfb65941baf681f3 +msgid "" +"Proposed mentors: Gao Xiang, Hongbo Li ([@hb-lee](https://github.com/hb-" +"lee)) Languages: C Estimated project length: 350 hours Difficulty: " +"hard Skills:" +msgstr "" +"建议导师:Gao Xiang、Hongbo Li ([@hb-lee](https://github.com/hb-lee)) 语言:C " +"预计项目时长:350 小时 难度:hard 技能:" + +#: ../../src/gsoc.md:174 cb8c1140c6614918875fc00a454a7cb1 +msgid "" +"EROFS is a high-performance, space-efficient read-only filesystem widely " +"used in the Linux ecosystem, particularly for immutable infrastructure, " +"containers, and embedded systems." +msgstr "EROFS 是一种高性能、空间高效的只读文件系统,广泛用于 Linux 生态系统,尤其适用于不可变基础设施、容器和嵌入式系统。" + +#: ../../src/gsoc.md:178 f9dc9d6770924cb8b2ec5b1c8bd900dc +msgid "Today, EROFS is heavily used in:" +msgstr "如今,EROFS 已大量应用于:" + +#: ../../src/gsoc.md:180 7c76a8e8ceae4f4b9e896bf814bc3905 +msgid "Android system images;" +msgstr "Android 系统镜像;" + +#: ../../src/gsoc.md:181 28076fe521af424ea497eda0d255e2a0 +msgid "" +"Container images and snapshotters (containerd, gVisor, Kata containers);" +msgstr "容器镜像与快照工具(containerd、gVisor、Kata Containers);" + +#: ../../src/gsoc.md:182 c1bfc0c3527c4c74a16929c1e32588dc +msgid "Immutable OS (AWS Bottlerocket) and cloud infrastructure." +msgstr "不可变操作系统(AWS Bottlerocket)与云基础设施。" + +#: ../../src/gsoc.md:184 3724d787e8154c37acc8b8168df34f6d +msgid "" +"However, BSD kernels currently lack native implementation for EROFS, forcing" +" interested users to rely on other alternatives. Porting EROFS to BSDs " +"would:" +msgstr "然而,BSD 内核目前缺少 EROFS 的原生实现,迫使用户不得不依赖其他替代方案。将 EROFS 移植到 BSD 将:" + +#: ../../src/gsoc.md:187 e3fa1c724c3846a5bb8d0d1dac011fbb +msgid "Enable direct mounting of native EROFS images;" +msgstr "实现对原生 EROFS 镜像的直接挂载;" + +#: ../../src/gsoc.md:188 e099d286639845219d58fd1c842b60ff +msgid "Improve interoperability between Linux and BSD systems;" +msgstr "提升 Linux 与 BSD 系统之间的互操作性;" + +#: ../../src/gsoc.md:189 0850472f961c487b94222939227769d1 +msgid "" +"Provide FreeBSD with a modern high-performance immutable filesystem " +"optimized for container and immutable OS workloads." +msgstr "为 FreeBSD 提供一个现代、高性能的不可变文件系统,针对容器和不可变操作系统工作负载进行优化。" + +#: ../../src/gsoc.md:192 5fd248aca22247948eaad536aeab6bcb +msgid "" +"The primary goal is to implement EROFS filesystem support in the FreeBSD " +"kernel, following FreeBSD VFS conventions while remaining compatible with " +"the standard EROFS on-disk format." +msgstr "" +"主要目标是在 FreeBSD 内核中实现 EROFS 文件系统支持,遵循 FreeBSD VFS 约定,同时保持与标准 EROFS 磁盘格式兼容。" + +#: ../../src/gsoc.md:196 95101274c9004f9f9aa917118c955796 +msgid "Key objectives:" +msgstr "关键目标:" + +#: ../../src/gsoc.md:198 10b7e317585a496986a25f46b28cda43 +msgid "Implement a FreeBSD kernel EROFS filesystem driver;" +msgstr "实现 FreeBSD 内核 EROFS 文件系统驱动;" + +#: ../../src/gsoc.md:199 613dee9fa6b84f83a42002c896ac61fc +msgid "Support mounting and reading standard EROFS images;" +msgstr "支持挂载和读取标准 EROFS 镜像;" + +#: ../../src/gsoc.md:200 ebcb6f61b18d49a0871a822618f4b4f8 +msgid "Integrate EROFS with FreeBSD’s VFS, buffer cache, and VM systems;" +msgstr "将 EROFS 与 FreeBSD 的 VFS、缓冲区缓存和 VM 系统集成;" + +#: ../../src/gsoc.md:201 983f60fe63f04aa5b4fc277b17295d57 +msgid "Validate correctness and performance using real-world workloads;" +msgstr "使用真实工作负载验证正确性与性能;" + +#: ../../src/gsoc.md:202 f74e569d606e468fbc3eeb4be8ae5bdb +msgid "Lay groundwork for future BSD ports (OpenBSD, NetBSD)." +msgstr "为未来的 BSD 移植(OpenBSD、NetBSD)奠定基础。" + +#: ../../src/gsoc.md:204 fbaa305a68f24967aa33acce3e3ca0ed +msgid "Advanced Fuzzing and Image Injection for the Kernel and erofs-utils" +msgstr "面向内核与 erofs-utils 的高级模糊测试与镜像注入" + +#: ../../src/gsoc.md:206 21194f94f97f497aa193e0464c7158ef +msgid "" +"Proposed mentors: Yifan Zhao, Hongbo Li, Gao Xiang Languages: C, Go and/or" +" Rust Estimated project length: 175 hours Difficulty: medium Skills:" +msgstr "" +"建议导师:Yifan Zhao、Hongbo Li、Gao Xiang 语言:C、Go 和/或 Rust 预计项目时长:175 小时 " +"难度:medium 技能:" + +#: ../../src/gsoc.md:212 414e0b48a54643bca57c270237819073 +msgid "Experience with file system concepts and operations;" +msgstr "具备文件系统概念与操作经验;" + +#: ../../src/gsoc.md:213 e441add32aa546199c59f6350999c63d +msgid "" +"Familiarity with fuzzing frameworks (e.g., AFL++, libFuzzer) is a plus." +msgstr "熟悉模糊测试框架(例如 AFL++、libFuzzer)者优先。" + +#: ../../src/gsoc.md:217 5548e7ee34a843d89389b26b8920c13d +msgid "" +"EROFS aims to be a secure, immutable image-based kernel filesystem by " +"design. Because its on-disk format contains less redundant metadata and is " +"designed to tolerate bogus or corrupted values, EROFS behaves differently " +"from generic writable filesystems. In addition, its immutable design means " +"that all writable data is copied up (aka copy-on-write) into another local " +"trusted filesystem. This makes it safer than writing directly to an " +"untrusted and potentially inconsistent generic writable filesystem." +msgstr "" +"EROFS 旨在设计成为一种安全、不可变的基于镜像的内核文件系统。由于其磁盘格式包含较少的冗余元数据,并且能够容忍虚假或损坏的值,因此 EROFS " +"的行为与通用可写文件系统不同。此外,其不可变设计意味着所有可写数据都会通过写时复制(copy-on-" +"write)方式上拷到另一个本地可信文件系统。这使其比直接写入不可信且可能不一致的通用可写文件系统更安全。" + +#: ../../src/gsoc.md:225 196003ac3c484ea7a62f171eadf9e8e5 +msgid "" +"We pay particular attention to the EROFS core on-disk format. Although the " +"format design is simple and the implementation (especially for the core " +"format) is straightforward, it is highly beneficial to develop more advanced" +" tools alongside the current syzkaller and the existing erofs-utils fuzzer. " +"These tools will keep the codebase robust and allow us to address random " +"human-introduced bugs more actively and in time." +msgstr "" +"我们特别关注 EROFS 核心磁盘格式。尽管该格式设计简单,实现(尤其是核心格式)也很直接,但开发更先进的工具以补充当前的 syzkaller 和现有 " +"erofs-utils fuzzer 将非常有益。这些工具将使代码库保持健壮,并使我们能够更主动、更及时地修复随机的人为引入的缺陷。" + +#: ../../src/gsoc.md:232 e45911f5223a4fa89f797d1753b6281f +msgid "" +"The main goal is to implement an advanced fuzzing tool and an image " +"injection tool. These tools may be easier to implement using go-erofs (Go) " +"or erofs-rs (Rust), for example. We also intend to enable a new GitHub " +"Actions CI workflow to perform periodic fuzzing." +msgstr "" +"主要目标是实现一个高级模糊测试工具和一个镜像注入工具。例如,使用 go-erofs(Go)或 erofs-" +"rs(Rust)实现这些工具可能更为简便。我们还计划启用新的 GitHub Actions CI 工作流,以执行定期的模糊测试。" + +#: ../../src/gsoc.md:237 cb6884f668e5455091ae8600937a068e +msgid "" +"This will allow us to maintain the kernel and erofs-utils implementations in" +" better shape." +msgstr "这将有助于我们更好地维护内核和 erofs-utils 的实现。" diff --git a/src/_locale/zh_CN/LC_MESSAGES/imagefs.po b/src/_locale/zh_CN/LC_MESSAGES/imagefs.po new file mode 100644 index 0000000..fd0447a --- /dev/null +++ b/src/_locale/zh_CN/LC_MESSAGES/imagefs.po @@ -0,0 +1,319 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2018-2026, EROFS filesystem developers +# This file is distributed under the same license as the EROFS package. +# FIRST AUTHOR , 2026. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: EROFS 0.1\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2026-07-05 05:03+0800\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language: zh_CN\n" +"Language-Team: zh_CN \n" +"Plural-Forms: nplurals=1; plural=0;\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.10.3\n" + +#: ../../src/imagefs.md:1 c012d549ddef4b9a89393c2f15a2d9dd +msgid "Image filesystem" +msgstr "镜像文件系统" +#: ../../src/imagefs.md:3 3ab69655ba1e41718bc2638ca0b7a815 +msgid "" +"Container technologies like cgroups and namespaces offer strong isolation" +" and portability. When applications are manually maintained, they can " +"still end up with outdated dependencies or inconsistent configurations. " +"This inconsistency demands constant monitoring and manual intervention, " +"which quickly becomes unmanageable at scale." +msgstr "" +"cgroups 和 namespaces" +" 等容器技术提供了强大的隔离性与可移植性。当应用由人工维护时,仍可能出现过时的依赖或不一致的配置。这种不一致需要持续监控和手动干预,规模一大很快就会变得" +"难以管理。" +#: ../../src/imagefs.md:9 eb3977c04bf34785b896e8f0eb9a1be5 +#, python-format +msgid "" +"Therefore, the industry consensus for addressing this is to introduce " +"immutable infrastructure: just like the famous Docker slogan [\"Build " +"once, run " +"anywhere\"](https://www.docker.com/#:~:text=Build%20once%2C%20run%20anywhere)," +" immutable images make every container consistent with each other, " +"providing strong reliability and reducing deployment failures. In " +"addition, since every new deployment starts from a clean, verified state," +" it's much easier to audit and scale, which improves security and " +"scalability. That's why container images have become so popular today, in" +" the cloud-native and AI eras." +msgstr "" +"因此,业界的共识是引入不可变基础设施:正如 Docker" +" 那句著名的口号[\"一次构建,随处运行\"](https://www.docker.com/#:~:text=Build%20once%2C%20ru" +"n%20anywhere),不可变镜像让每个容器彼此一致,提供高可靠性并减少部署失败。此外,由于每次新部署都从一个干净、经过验证的状态开始,审计和扩展都" +"更加容易,从而提升了安全性和可扩展性。这就是容器镜像在云原生和 AI 时代如此流行的原因。" +#: ../../src/imagefs.md:17 14825b32191f4aed92b2daf2b4655b9a +msgid "Layering" +msgstr "分层" +#: ../../src/imagefs.md:19 ff19efea9c5c4057a309c97ab71cb531 +msgid "" +"Since containers are isolated, lightweight silos for running applications" +" on the host operating system, it makes sense to keep those immutable " +"container images lightweight as well." +msgstr "由于容器是在主机操作系统上运行应用的隔离、轻量级沙箱,因此让这些不可变容器镜像保持轻量也是合理的。" +#: ../../src/imagefs.md:23 aaba5a8cddaf4f4ebe99caa6b8bedc07 +msgid "" +"One way to achieve this is through deduplication across images. Today, " +"Docker/OCI container images are composed of layers to support incremental" +" builds, enabling files in shared layers to be reused across different " +"images." +msgstr "实现这一点的一种方式是跨镜像去重。如今,Docker/OCI 容器镜像由多个层组成,以支持增量构建,使得共享层中的文件可以在不同镜像之间复用。" +#: ../../src/imagefs.md:27 dfb2f15e5d864bd2ab92e6dca88855b4 +msgid "" +"The key technology enabling layering is called `snapshotting`. To share " +"layers among various physical nodes, snapshots should be distributable " +"easily too. Currently, there are three main approaches to snapshotting:" +msgstr "实现分层的关键技术称为 `snapshotting`。为了在不同物理节点之间共享层,快照也应该便于分发。目前,快照主要有三种方法:" +#: ../../src/imagefs.md:31 03597e96758d4227be92965833787bb3 +msgid "The classic VM disk image approach;" +msgstr "经典的 VM 磁盘镜像方案;" +#: ../../src/imagefs.md:33 4ddca2896612412aa55f1f5a60da31c9 +msgid "" +"Using an existing copy-on-write filesystem that supports snapshots, such " +"as BTRFS or ZFS;" +msgstr "使用支持快照的现有写时复制文件系统,例如 BTRFS 或 ZFS;" +#: ../../src/imagefs.md:36 534ef56493084632907365bdf1a1451c +msgid "Using a dedicated archive format or an effective image filesystem." +msgstr "使用专用的归档格式或高效的镜像文件系统。" +#: ../../src/imagefs.md:38 c044d0532bc14e74b24ee13667ded482 +msgid "The following subsection explores these approaches in more detail." +msgstr "下面的小节将更详细地探讨这些方法。" +#: ../../src/imagefs.md:40 6a4fa747f5004774a39fdbac47594dee +msgid "Why not VM disk images or CoW filesystems?" +msgstr "为什么不用 VM 磁盘镜像或 CoW 文件系统?" +#: ../../src/imagefs.md:42 7194c769df644d6c9093ae99dc15282f +msgid "" +"You may expect it is all about the image filesystem as the title " +"suggests, but why do we use an image filesystem instead of distributing " +"VM disk images or simply using mature filesystem snapshotting to manage " +"container images?" +msgstr "你可能以为本文的重点就是镜像文件系统,但为什么我们使用镜像文件系统,而不是分发 VM 磁盘镜像,或者干脆利用成熟的文件系统快照来管理容器镜像呢?" +#: ../../src/imagefs.md:46 f01bcffa3ec14253ae2a039f57098844 +msgid "" +"First of all, an answer like \"tar.gz is the de facto standard and it " +"uses the tar package format, so we'd better use a filesystem to overcome " +"all the shortcomings of the tar format\" is not helpful because it relies" +" on historical precedent and does not address any key point." +msgstr "" +"首先,像“tar.gz 是事实标准,它使用 tar 包格式,所以我们最好用文件系统来克服 tar" +" 格式的所有缺点”这样的回答没有帮助,因为它依赖历史惯例,没有触及任何关键点。" +#: ../../src/imagefs.md:51 67bdbad7d62240d18f1594c4bc349fd1 +msgid "Here are two main reasons:" +msgstr "主要有两个原因:" +#: ../../src/imagefs.md:53 7a0b5a1597714348b04ee3388d19166c +msgid "Containerization requires a precise, auditable format" +msgstr "容器化需要精确、可审计的格式" +#: ../../src/imagefs.md:55 b59ead14a4074b35a1abc041f8a1eb35 +msgid "" +"Indeed, the classic VM disk image approaches can also be used for " +"container images, and disk snapshot formats like Qcow2 can be used in " +"order to support layering. They do address [the main issues of " +"tar](https://www.cyphar.com/blog/post/20190121-ociv2-images-i-tar) " +"because they add another level of abstraction for layering support and " +"expect existing black-box kernel filesystems to resolve the remaining " +"pain points. However, the main concern with those approaches is the lack " +"of precision: any format can be included as long as some component (e.g.," +" the host kernel) can handle it." +msgstr "" +"诚然,经典的 VM 磁盘镜像方案也可以用于容器镜像,像 Qcow2 这样的磁盘快照格式也可以用来支持分层。它们确实解决了 [tar" +" 的主要问题](https://www.cyphar.com/blog/post/20190121-ociv2-images-i-tar),因为它们为分" +"层支持增加了另一层抽象,并期望现有的黑盒内核文件系统去解决其余痛点。然而,这些方法的主要问题在于缺乏精确性:只要某个组件(例如主机内核)能够处理,任何格" +"式都可以被包含进去。" +#: ../../src/imagefs.md:65 83c6af1ff7ad4f90b81751c28e1536f3 +msgid "" +"Unlike virtualization, which provides very strong isolation, " +"containerization typically shares a single kernel, requiring greater " +"cooperation and trust. As a result, any data from a remote source could " +"become a vulnerability for the entire system. That means container " +"images must be safe for both virtualization and containerization. In " +"other words, every user must know exactly what is inside the container " +"image, making the classic VM disk image approaches insecure if an unknown" +" filesystem format is mounted by the host kernel and a precise white-box " +"format definition essential for auditing and scanning to find security " +"vulnerabilities." +msgstr "" +"与提供强隔离的虚拟化不同,容器化通常共享同一个内核,需要更多的协作与信任。因此,来自远程源的任何数据都可能成为整个系统的漏洞。这意味着容器镜像必须同时对" +"虚拟化和容器化都是安全的。换句话说,每个用户都必须确切知道容器镜像里有什么;如果主机内核挂载了未知的文件系统格式,经典的 VM" +" 磁盘镜像方案就会不安全,而精确的白盒格式定义对于审计和扫描安全漏洞至关重要。" +#: ../../src/imagefs.md:75 fd874cee2d00452bac5029eba7a44332 +msgid "Generic filesystems pose consistency and stability risks" +msgstr "通用文件系统带来一致性和稳定性风险" +#: ../../src/imagefs.md:77 44dcef8472d446a492630e00ff7e9867 +msgid "" +"Generic filesystems can serve as precise, white-box formats for container" +" images. However, they are still vulnerable when used as remote images " +"due to immitigable metadata inconsistencies." +msgstr "通用文件系统可以作为精确、白盒的容器镜像格式。然而,当它们被用作远程镜像时,由于无法消除的元数据不一致性,仍然存在脆弱性。" +#: ../../src/imagefs.md:81 a1652b688b644687abd5ead43651c039 +msgid "" +"For example, the allocation status of a physical block may be recorded in" +" multiple places: the allocation tree (or bitmap), inode extents, and may" +" also appear in a reverse mapping tree. When an image is fetched from an" +" untrusted remote source, an attacker can craft inconsistencies and the " +"resulting bugs are serious and hard to prevent." +msgstr "" +"例如,物理块的分配状态可能被记录在多个位置:分配树(或位图)、inode" +" extents,甚至还可能出现在反向映射树中。当镜像来自不可信的远程源时,攻击者可以构造不一致,由此产生的错误严重且难以防范。" +#: ../../src/imagefs.md:87 d8a43bbd40b4447595b1e62a7760d840 +msgid "" +"Performing extra consistency checks, either at runtime or beforehand with" +" a tool like `fsck(8)`, incurs heavy performance penalties. These risks " +"will then be amplified by the complexity of kernel filesystem " +"implementations, posing additional threats to the hosts." +msgstr "" +"无论是在运行时执行额外的一致性检查,还是事先使用 `fsck(8)`" +" 之类的工具,都会带来严重的性能损失。这些风险还会因内核文件系统实现的复杂性而被放大,对主机构成额外威胁。" +#: ../../src/imagefs.md:92 705cf821f40e4980a1c7a72ddb457c6f +msgid "" +"Other internal metadata, such as filesystem journaling, which can cause " +"extra inconsistency, which is similar, so no need to go into further " +"detail here." +msgstr "其他内部元数据,例如文件系统日志,也可能导致额外的不一致性,情况类似,这里不再赘述。" +#: ../../src/imagefs.md:96 0ec6c308ece14030b6a29c17c69d0597 +msgid "" +"For example, the following crafted EXT4 image can immediately crash all " +"Linux kernel versions, since it uses [an expected by-design behavior in " +"EXT4](https://lore.kernel.org/r/20160331165125.GF6207@thunk.org):" +msgstr "" +"例如,下面这个精心构造的 EXT4 镜像可以立即崩溃所有 Linux 内核版本,因为它利用了 [EXT4" +" 中一种符合设计预期的行为](https://lore.kernel.org/r/20160331165125.GF6207@thunk.org):" +#: ../../src/imagefs.md:100 216e3fb508a2425e862c625f3ea4fa49 +msgid "![An EXT4 panic example](_static/ext4_panic.gif)" +msgstr "![EXT4 崩溃示例](_static/ext4_panic.gif)" +#: ../../src/imagefs.md:100 88ceec7c34304da4ba498cdfc80a2a30 +msgid "An EXT4 panic example" +msgstr "EXT4 崩溃示例" +#: ../../src/imagefs.md:102 5183ae24cf324cd88641004ce9ed462e +msgid "" +"It does not cause any obscure metadata inconsistency; it just corrupts " +"the root inode and sets " +"[`s_errors(EXT4_ERRORS_PANIC)`](https://docs.kernel.org/filesystems/ext4/super.html" +"#super-errors:~:text=__le16-,s_errors) using the following `debugfs` " +"commands:" +msgstr "" +"它并没有造成任何隐晦的元数据不一致;它只是破坏了根 inode,并使用以下 `debugfs` 命令设置了" +" [`s_errors(EXT4_ERRORS_PANIC)`](https://docs.kernel.org/filesystems/ext4/su" +"per.html#super-errors:~:text=__le16-,s_errors):" +#: ../../src/imagefs.md:111 553b7a8e49074a2fb3566c57727222b4 +msgid "" +"In addition, there are known [EXT4 syzkaller " +"bugs](http://syzkaller.appspot.com/upstream/s/ext4) that could be " +"exploited (51 open bugs as of 12/03/2025), making mounting untrusted " +"remote EXT4 filesystems on the host absolutely unsafe." +msgstr "" +"此外,已知的 [EXT4 syzkaller 缺陷](http://syzkaller.appspot.com/upstream/s/ext4)" +" 可能被利用(截至 2025 年 12 月 3 日仍有 51 个未修复缺陷),这使得在主机上挂载来自不可信远程源的 EXT4 文件系统绝对不安全。" +#: ../../src/imagefs.md:115 878e4f161cf84e8c8bb6472a12d36174 +msgid "" +"**Disclaimer:** This paragraph is only used to explain technical details." +" Any further harmful exploits have no relationship with the EROFS " +"project." +msgstr "**免责声明:** 本段仅用于解释技术细节。任何进一步的恶意利用都与 EROFS 项目无关。" +#: ../../src/imagefs.md:119 d67f768700f64ecbbb01d6f943d9389e +msgid "The solution" +msgstr "解决方案" +#: ../../src/imagefs.md:121 3bf84c88ecc1448c9361bb3969f539d6 +msgid "" +"Our way to resolve this is *read/write separation at the filesystem " +"level*: distribute remote data in a reliable, read-only archive format to" +" prevent any serious inconsistencies, and then prepare the writable layer" +" by reusing a trusted generic filesystem or generating a new filesystem " +"locally." +msgstr "" +"我们的解决方式是在文件系统层面实现" +" *读写分离*:将远程数据以可靠的只读归档格式分发,以防止任何严重的不一致性;然后通过复用受信任的通用文件系统或在本地生成新文件系统来准备可写层。" +#: ../../src/imagefs.md:126 4ac7886d7c024b40bfd254993e2b3789 +msgid "" +"By the way, it does NOT mean a simple archive format won't have any " +"inconsistency or corruption, but since it only contains necessary " +"metadata like inodes and directories, either such inconsistency is not " +"harmful (and can even be ignored) or should be a common issue either " +"resolved in the VFS (e.g. _directory hardlinks_) or needs to be resolved " +"by any specific filesystem which needs to parse filesystem metadata, " +"including FUSE." +msgstr "" +"顺便说一下,这并不意味着简单的归档格式就不会有任何不一致或损坏,但由于它只包含必要的元数据,如 inode 和" +" directory,因此这种不一致要么无害(甚至可以忽略),要么是一个共性问题:要么在 VFS 中解决(例如 _directory" +" hardlinks_),要么需要由任何必须解析文件系统元数据的特定文件系统(包括 FUSE)来解决。" +#: ../../src/imagefs.md:133 aaf7670973ac42899e3f491d2c3e3307 +msgid "" +"EROFS is designed as a simple, flexible immutable filesystem format " +"similar to previous archive formats such as tar, zip, and cpio as well as" +" the CD-ROM filesystems with the following advanced highlights:" +msgstr "" +"EROFS 被设计为一种简单、灵活的不可变文件系统格式,类似于以往的归档格式(如 tar、zip、cpio)以及 CD-ROM" +" 文件系统,并具有以下先进特性:" +#: ../../src/imagefs.md:137 4a23d22129de4cc6a8c79db6da2a946f +msgid "" +"Since it's just like an advanced archive format _(basically equivalent to" +" unpacking packages)_, its metadata cannot become severely inconsistent, " +"and the kernel implementation should be able to bear any on-disk " +"corruption by design;" +msgstr "由于它就像一个高级的归档格式(_基本相当于解包_),其元数据不会变得严重不一致,内核实现理应能够按设计承受任何磁盘损坏;" +#: ../../src/imagefs.md:142 e4f66c16b0c248239c93c2c12c03c0d7 +msgid "" +"Data is strictly aligned on disk for extreme performance, and it enables " +"other possibilities, such as FSDAX and global data deduplication, from " +"the storage stack perspective (e.g., filesystem reflinks and disk " +"deduplication, which are difficult with unaligned archive formats);" +msgstr "" +"数据在磁盘上严格对齐,以获得极致性能,并从存储栈角度带来其他可能性,例如 FSDAX 和全局数据去重(例如文件系统 reflink" +" 和磁盘去重,这对未对齐的归档格式来说很困难);" +#: ../../src/imagefs.md:147 367e65c4ccaf41a08fc35df895f9ca4a +msgid "" +"It implements built-in compression, deduplication, and native layering " +"features, which can be helpful for containerization;" +msgstr "它内置了压缩、去重和原生分层特性,对容器化非常有帮助;" +#: ../../src/imagefs.md:150 f203415e7576442daa07fae27fff668f +msgid "" +"It supports native kernel file-backed mounts, so EROFS images can be " +"mounted on Linux natively without loopback block devices;" +msgstr "它支持原生的内核文件后端挂载,因此 EROFS 镜像可以直接在 Linux 上挂载,而无需 loopback block device;" +#: ../../src/imagefs.md:153 26e2182b39cb4efa983848d02f02669b +msgid "" +"Like common archive formats, EROFS images can be distributed as golden " +"data and stored on any filesystem. Depending on user requirements or " +"specific workloads, the writable layer can also be freely configured with" +" any supported filesystem using OverlayFS instead of purely relying on " +"remote metadata." +msgstr "" +"与常见归档格式一样,EROFS 镜像可以作为 golden data 分发并存储在任何文件系统上。根据用户需求或具体工作负载,可写层还可以自由地通过" +" OverlayFS 与任何支持的文件系统组合,而不是单纯依赖远程元数据。" +#: ../../src/imagefs.md:159 940ee200cd524cebb40eac1fa609e5a7 +msgid "" +"Due to its flexibility and simplicity, it is well-suited for use in " +"container images and sandbox templates among runc and VM-based " +"containers, making it easier for end users to audit and scan for " +"vulnerabilities in the images and reduce potential risks." +msgstr "由于其灵活性和简洁性,它非常适合用于 runc 和基于 VM 的容器的容器镜像与沙箱模板,让最终用户更容易审计和扫描镜像中的漏洞,并降低潜在风险。" +#: ../../src/imagefs.md:164 d12b7174235e428e9eb68cd3bdc60624 +msgid "Use Cases (Alphabetical)" +msgstr "使用案例(按字母顺序)" +#: ../../src/imagefs.md:166 12f763cf255b4784bc668c52c03a12d7 +msgid "[Composefs](https://www.cncf.io/projects/composefs)" +msgstr "[Composefs](https://www.cncf.io/projects/composefs)" +#: ../../src/imagefs.md:168 66b433c20d80424c87c4fcdd832635dd +msgid "" +"[Containerd EROFS " +"snapshotter](https://github.com/containerd/containerd/blob/main/docs/snapshotters/erofs.md)" +msgstr "" +"[Containerd EROFS" +" snapshotter](https://github.com/containerd/containerd/blob/main/docs/snapsh" +"otters/erofs.md)" +#: ../../src/imagefs.md:170 4392bb74f8bc4956b3a15b924a99e2f5 +msgid "" +"[Dragonfly Nydus](https://github.com/dragonflyoss/nydus?tab=readme-ov-" +"file#run-nydus-with-in-kernel-erofs-filesystem)" +msgstr "" +"[Dragonfly" +" Nydus](https://github.com/dragonflyoss/nydus?tab=readme-ov-file#run-nydus-w" +"ith-in-kernel-erofs-filesystem)" diff --git a/src/_locale/zh_CN/LC_MESSAGES/index.po b/src/_locale/zh_CN/LC_MESSAGES/index.po new file mode 100644 index 0000000..a3ad829 --- /dev/null +++ b/src/_locale/zh_CN/LC_MESSAGES/index.po @@ -0,0 +1,520 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2018-2026, EROFS filesystem developers +# This file is distributed under the same license as the EROFS package. +# FIRST AUTHOR , 2026. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: EROFS 0.1\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2026-07-05 05:03+0800\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language: zh_CN\n" +"Language-Team: zh_CN \n" +"Plural-Forms: nplurals=1; plural=0;\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.10.3\n" + +#: ../../src/index.md:166 +msgid "🚀 Get Started" +msgstr "🚀 开始使用" + +#: ../../src/index.md:176 +msgid "🚜 For Developers" +msgstr "🚜 开发者专区" + +#: ../../src/index.md:186 +msgid "📌 More" +msgstr "📌 更多" + +#: ../../src/index.md:5 d105b8e2401f45e0bb5f990d6480d623 +msgid "🔎 Overview" +msgstr "🔎 概览" + +#: ../../src/index.md:7 1f0461a40d6648459bf793589364d584 +msgid "EROFS - Enhanced Read-Only File System" +msgstr "EROFS - 增强型只读文件系统" + +#: ../../src/index.md:10 4829da558e874bef86e2812e2a9fa438 +msgid "" +"A modern, flexible, general-purpose, high-performance, block-based " +"immutable filesystem with a highly optimized on-disk format and runtime " +"implementation, designed for a variety of use cases—not just storage " +"space savings—while maintaining optimal runtime performance." +msgstr "" + "一种现代、灵活、通用、高性能、基于块的不可变文件系统,具备高度优化的磁盘格式与运行时实现,适用于多种场景——不仅限于节省存储空间——同时保持最佳运行时性" + "能。" + +#: ../../src/index.md:15 1b4d8ec1308148c59f7c6d10b8f6464e +msgid "" +"[EROFS](https://docs.kernel.org/filesystems/erofs.html) has been formally" +" available since Linux 5.4. It is currently maintained by an open-source " +"community from all over the world, and is still [under active " +"development](roadmap.md)." +msgstr "" + "[EROFS](https://docs.kernel.org/filesystems/erofs.html) 自 Linux 5.4 " + "起正式发布。它目前由来自世界各地的开源社区维护,并且仍在[积极开发](roadmap.md)中。" + +#: ../../src/index.md:21 8fcb3a49bcb745fba3d59999d9f0fbae +msgid "Get Started" +msgstr "开始使用" + +#: ../../src/index.md:29 fd870c0e2c0d492d869d81082805cb88 +msgid "FAQ" +msgstr "常见问题" + +#: ../../src/index.md:44 4a80ece111484c8881e94ad2cd770af0 +msgid "" + " Advanced designs" +msgstr "" + " 先进设计" + +#: ../../src/index.md:48 4a88dab72ee44ffa8e5728b2e5cded7a +msgid "" +"A modern filesystem more than just another archive format: EROFS is " +"_strictly_ block-aligned to maximize the data utilization of a single " +"disk I/O and enable advanced features like Direct I/O and FSDAX." +msgstr "" + "现代文件系统不仅仅是又一种归档格式:EROFS _严格_ 按块对齐,以最大化单次磁盘 I/O 的数据利用率,并支持 Direct I/O、FSDAX " + "等高级特性。" + +#: ../../src/index.md:53 dd01fc1042d04faca001511e9848bd94 +msgid "[Learn more »](design)" +msgstr "[了解更多 »](design)" + +#: ../../src/index.md:56 8f882a79eeff417b91414b421a033206 +msgid "" + " Highly configurable" +msgstr "" + " 高度可配置" + +#: ../../src/index.md:60 0a3e0a07d38b4b53b9aed58daf411f9e +msgid "" +"Minimal core on-disk format for non-encoded use cases. \\ Besides, " +"advanced on-disk and/or runtime features can be enabled on demand." +msgstr "针对非编码用例的最小化核心磁盘格式。\\ 此外,可按需启用高级磁盘和/或运行时特性。" + +#: ../../src/index.md:64 75dba03b782b4ecc9517740cf9dcd9d0 +msgid "[Learn more »](features)" +msgstr "[了解更多 »](features)" + +#: ../../src/index.md:67 10b0a64912664532a07d53f79cf09cdb +msgid "" + " Compression & Deduplication" +msgstr "" + " 压缩与去重" + +#: ../../src/index.md:71 e5c936976f624021a9e7adf4d12d1cf4 +msgid "" +"Per-file data compression as an option, normally using fixed-sized output" +" compression to fill up each block. Compressed data can be deduplicated " +"with byte-granularity cut points." +msgstr "可按需启用按文件数据压缩,通常采用固定大小输出压缩以填满每个块。压缩数据可按字节粒度切分点进行去重。" + +#: ../../src/index.md:76 cd6e6af8dca644e09a5b5ebb2ba5c111 +msgid "[Learn more »](compression_dedupe)" +msgstr "[了解更多 »](compression_dedupe)" + +#: ../../src/index.md:82 e9a92e2039d04119b89d8a7c78cf5b09 +msgid "Applications" +msgstr "应用" + +#: ../../src/index.md:85 62759d484d594e4b9f66e93323cba132 +msgid "" +"{octicon}`device-mobile;1em` [The Android system " +"firmware](https://source.android.com/docs/core/architecture/kernel/erofs)" +msgstr "" + "{octicon}`device-mobile;1em` [Android " + "系统固件](https://source.android.com/docs/core/architecture/kernel/erofs)" + +#: ../../src/index.md:87 a2c5e4c6f84a4aeda71a86b9e58681b2 +msgid "" + "{octicon}`container;1em` " + "[Composefs](https://github.com/containers/composefs); " + "[containerd](https://github.com/containerd/containerd/pull/10705); " + "[Dragonfly Nydus](https://nydus.dev/); " + "[gVisor](https://github.com/google/gvisor/pull/9486); [Kata " + "Containers](https://github.com/kata-containers/kata-" + "containers/blob/main/docs/how-to/how-to-use-erofs-snapshotter-with-kata.md);" + " [Kata Containers (rootfs)](https://github.com/kata-containers/kata-" + "containers/blob/main/docs/how-to/how-to-use-erofs-build-rootfs.md); " + "[nerdbox](https://github.com/containerd/nerdbox)" +msgstr "" + "{octicon}`container;1em` " + "[Composefs](https://github.com/containers/composefs); " + "[containerd](https://github.com/containerd/containerd/pull/10705); " + "[Dragonfly Nydus](https://nydus.dev/); " + "[gVisor](https://github.com/google/gvisor/pull/9486); [Kata " + "Containers](https://github.com/kata-containers/kata-" + "containers/blob/main/docs/how-to/how-to-use-erofs-snapshotter-with-kata.md);" + " [Kata Containers (rootfs)](https://github.com/kata-containers/kata-" + "containers/blob/main/docs/how-to/how-to-use-erofs-build-rootfs.md); " + "[nerdbox](https://github.com/containerd/nerdbox)" + +#: ../../src/index.md:94 018fd181dd9a4ee49cfafbf401f06db8 +msgid "" + "{octicon}`device-desktop` [Archiso](https://gitlab.archlinux.org/archlinux/a" + "rchiso/-/merge_requests/82); [CoreOS " + "Assembler](https://github.com/coreos/coreos-assembler/pull/4012); [dracut-" + "ng](https://github.com/dracut-ng/dracut-ng/pull/546); [kdump-" + "utils](https://github.com/rhkdump/kdump-utils/pull/33); " + "[KIWI](https://github.com/OSInside/kiwi/issues/2799); " + "[Linglong](https://linglong.dev)" +msgstr "" + "{octicon}`device-desktop` [Archiso](https://gitlab.archlinux.org/archlinux/a" + "rchiso/-/merge_requests/82); [CoreOS " + "Assembler](https://github.com/coreos/coreos-assembler/pull/4012); [dracut-" + "ng](https://github.com/dracut-ng/dracut-ng/pull/546); [kdump-" + "utils](https://github.com/rhkdump/kdump-utils/pull/33); " + "[KIWI](https://github.com/OSInside/kiwi/issues/2799); " + "[Linglong](https://linglong.dev)" + +#: ../../src/index.md:99 a2acaeec66984baaadb99d79e79a1ba3 +msgid "" +"Agent Sandboxes: [Super Rad Company " +"microsandbox](https://github.com/superradcompany/microsandbox); [Tencent " +"Cloud Cube Sandbox](https://github.com/TencentCloud/CubeSandbox) " +"\\[[intro (chn)](https://mp.weixin.qq.com/s/AsdIvvZdZMVVCKsi9OG9Gg)\\]; " +"[openEuler Conch](https://gitcode.com/openeuler/Conch) \\[[intro " +"(chn)](https://mp.weixin.qq.com/s/cpSrWvow71tzlNr6rziOCg)\\]" +msgstr "" + "智能体沙箱: [Super Rad Company " + "microsandbox](https://github.com/superradcompany/microsandbox); [Tencent " + "Cloud Cube Sandbox](https://github.com/TencentCloud/CubeSandbox) " + "\\[[简介(中文)](https://mp.weixin.qq.com/s/AsdIvvZdZMVVCKsi9OG9Gg)\\]; [openEuler " + "Conch](https://gitcode.com/openeuler/Conch) " + "\\[[简介(中文)](https://mp.weixin.qq.com/s/cpSrWvow71tzlNr6rziOCg)\\]" + +#: ../../src/index.md:104 d249a9cb57c848a59efeae13b721a67e +#, python-format +msgid "" +"Distributions: [Alpine " +"Linux](https://pkgs.alpinelinux.org/package/edge/community/x86_64/erofs-" +"utils); [Amazon Linux](https://docs.aws.amazon.com/linux/al2023/release-" +"notes/relnotes-2023.7.20250512.html); [Arch " +"Linux](https://archlinux.org/packages/extra/x86_64/erofs-utils); [Azure " +"Linux](https://github.com/microsoft/azurelinux/pull/9971); " +"[Bottlerocket](https://github.com/bottlerocket-os/twoliter/pull/379); " +"[Buildroot](https://buildroot.org); [CentOS " +"Stream](https://gitlab.com/redhat/centos-stream/src/kernel/centos-" +"stream-9/-/commit/37d0627c30a55e4159f00af2d02b5d64b1dc98e8); [Chromium " +"OS](https://chromium-" +"review.googlesource.com/c/chromiumos/platform/crosutils/+/5125177); " +"[Debian](https://packages.debian.org/sid/erofs-utils); [Deepin " +"Linux](https://github.com/deepin-community/erofs-utils); " +"[Fedora](https://packages.fedoraproject.org/pkgs/erofs-utils/erofs-" +"utils); [Gentoo](https://packages.gentoo.org/packages/sys-fs/erofs-" +"utils); [GNU Guix](https://packages.guix.gnu.org/packages/erofs-utils); " +"[Homebrew](https://formulae.brew.sh/formula/erofs-utils); " +"[MacPorts](https://github.com/macports/macports-ports/pull/28807); " +"[NixOS](https://github.com/NixOS/nixpkgs/tree/nixos-" +"unstable/pkgs/tools/filesystems/erofs-utils); " +"[openAnolis](https://openanolis.cn/?lang=en); " +"[OpenCloudOS](https://gitee.com/OpenCloudOS/OpenCloudOS-" +"Kernel/commit/65fdb18aed207b763076b4014139a57662d999c5); " +"[openEuler](https://gitee.com/openeuler/kernel/pulls/3828); " +"[openSUSE](https://packagehub.suse.com/packages/erofs-utils); " +"[OpenWrt](https://github.com/openwrt/openwrt/pull/19244); [Oracle " +"Linux](https://linux.oracle.com/errata/ELSA-2025-20480.html#:~:text=%5BOrabug%3A%2038042713%5D);" +" [Ubuntu](https://packages.ubuntu.com/erofs-utils); [Red Hat Enterprise " +"Linux](https://access.redhat.com/articles/7084858); [Void " +"Linux](https://github.com/void-linux/void-packages/tree/master/srcpkgs" +"/erofs-utils); [yocto](https://yoctoproject.org); and maybe " +"[more](https://repology.org/project/erofs-utils)." +msgstr "" + "发行版: [Alpine " + "Linux](https://pkgs.alpinelinux.org/package/edge/community/x86_64/erofs-" + "utils); [Amazon Linux](https://docs.aws.amazon.com/linux/al2023/release-" + "notes/relnotes-2023.7.20250512.html); [Arch " + "Linux](https://archlinux.org/packages/extra/x86_64/erofs-utils); [Azure " + "Linux](https://github.com/microsoft/azurelinux/pull/9971); " + "[Bottlerocket](https://github.com/bottlerocket-os/twoliter/pull/379); " + "[Buildroot](https://buildroot.org); [CentOS " + "Stream](https://gitlab.com/redhat/centos-stream/src/kernel/centos-" + "stream-9/-/commit/37d0627c30a55e4159f00af2d02b5d64b1dc98e8); [Chromium " + "OS](https://chromium-" + "review.googlesource.com/c/chromiumos/platform/crosutils/+/5125177); " + "[Debian](https://packages.debian.org/sid/erofs-utils); [Deepin " + "Linux](https://github.com/deepin-community/erofs-utils); " + "[Fedora](https://packages.fedoraproject.org/pkgs/erofs-utils/erofs-utils); " + "[Gentoo](https://packages.gentoo.org/packages/sys-fs/erofs-utils); [GNU " + "Guix](https://packages.guix.gnu.org/packages/erofs-utils); " + "[Homebrew](https://formulae.brew.sh/formula/erofs-utils); " + "[MacPorts](https://github.com/macports/macports-ports/pull/28807); " + "[NixOS](https://github.com/NixOS/nixpkgs/tree/nixos-" + "unstable/pkgs/tools/filesystems/erofs-utils); " + "[openAnolis](https://openanolis.cn/?lang=en); " + "[OpenCloudOS](https://gitee.com/OpenCloudOS/OpenCloudOS-" + "Kernel/commit/65fdb18aed207b763076b4014139a57662d999c5); " + "[openEuler](https://gitee.com/openeuler/kernel/pulls/3828); " + "[openSUSE](https://packagehub.suse.com/packages/erofs-utils); " + "[OpenWrt](https://github.com/openwrt/openwrt/pull/19244); [Oracle Linux](htt" + "ps://linux.oracle.com/errata/ELSA-2025-" + "20480.html#:~:text=%5BOrabug%3A%2038042713%5D); " + "[Ubuntu](https://packages.ubuntu.com/erofs-utils); [Red Hat Enterprise " + "Linux](https://access.redhat.com/articles/7084858); [Void " + "Linux](https://github.com/void-linux/void-" + "packages/tree/master/srcpkgs/erofs-utils); " + "[yocto](https://yoctoproject.org); " + "以及[更多](https://repology.org/project/erofs-utils)." + +#: ../../src/index.md:131 61e065d6ce734b99a1ca38aafa3f2ff4 +msgid "" +"Bootloaders: [Das " +"U-Boot](https://source.denx.de/u-boot/u-boot/-/tree/master/fs/erofs); " +"[GNU GRUB](https://git.savannah.gnu.org/cgit/grub.git/tree/grub-" +"core/fs/erofs.c)" +msgstr "" + "引导加载程序: [Das " + "U-Boot](https://source.denx.de/u-boot/u-boot/-/tree/master/fs/erofs); [GNU " + "GRUB](https://git.savannah.gnu.org/cgit/grub.git/tree/grub-core/fs/erofs.c)" + +#: ../../src/index.md:134 558d76e6e95142d39f8489c8a28ac6dc +msgid "Architecture" +msgstr "架构" + +#: ../../src/index.md:137 363bb65ac2934740b70ebd97d51f071f +msgid "![EROFS dataflow in brief](_static/erofs_dataflow.svg)" +msgstr "![EROFS 数据流简图](_static/erofs_dataflow.svg)" + +#: ../../src/index.md:137 df93efcd20db4c4aa5f4ad976f8a1287 +msgid "EROFS dataflow in brief" +msgstr "EROFS 数据流简图" + +#: ../../src/index.md:139 0a21edc55e1f4bca9545c8ca9eca3ec5 +msgid "Feedback & Contributing" +msgstr "反馈与贡献" + +#: ../../src/index.md:142 2cb7d292e2714fb09a2c69ea71f8966c +msgid "" +"If you're interested, feel free to send feedback and/or patches to the " +"linux-erofs mailing list <[linux-erofs@lists.ozlabs.org](mailto:linux-" +"erofs@lists.ozlabs.org)> or join our Matrix room " +"<[#erofs:matrix.org](https://matrix.to/#/#erofs:matrix.org)>. [_Developer" +" guides_](developers.md) might be a useful start for newcomers as the " +"first step." +msgstr "" + "如果你感兴趣,欢迎向 linux-erofs 邮件列表 <[linux-erofs@lists.ozlabs.org](mailto:linux-" + "erofs@lists.ozlabs.org)> 发送反馈和/或补丁,或加入我们的 Matrix 房间 <[#erofs:matrix.org](htt" + "ps://matrix.to/#/#erofs:matrix.org)>。[_开发者指南_](developers.md) " + "对新手来说可能是入门的第一步。" + +#: ../../src/index.md:148 6f86414d7cf84183870a5ef6b6d58c90 +msgid "" +"Please also take a look at [Code of Conduct](https://www.kernel.org/code-" +"of-conduct.html) for all Linux kernel development communities." +msgstr "同时请查看所有 Linux 内核开发社区的[行为准则](https://www.kernel.org/code-of-conduct.html)。" + +#: ../../src/index.md:151 3fe88dd629014f8da926b368894a92dd +msgid "Additional resources" +msgstr "更多资源" + +#: ../../src/index.md:154 656774bdbc2e4f53958bc3f15eeae26f +msgid "" +"[EROFS in-tree " +"documentation](https://www.kernel.org/doc/Documentation/filesystems/erofs.rst)" +" - kernel.org" +msgstr "" + "[EROFS " + "内核源码内文档](https://www.kernel.org/doc/Documentation/filesystems/erofs.rst) - " + "kernel.org" + +#: ../../src/index.md:156 467bf9a0e10247ff94e1ee5183f238fb +msgid "[An introduction to EROFS](https://lwn.net/Articles/934047/) - LWN.net" +msgstr "[EROFS 简介](https://lwn.net/Articles/934047/) - LWN.net" + +#: ../../src/index.md:158 234029d9b0924e8981baf067db148444 +msgid "" +"[EROFS: A Compression-friendly Readonly File System for Resource-scarce " +"Devices](https://www.usenix.org/conference/atc19/presentation/gao) - " +"USENIX ATC'19." +msgstr "" + "[EROFS:适用于资源受限设备的压缩友好型只读文件系统](https://www.usenix.org/conference/atc19/presen" + "tation/gao) - USENIX ATC'19." + +#: ../../src/index.md:160 7fffe0ce85124ee9975cb106d25bcd5a +msgid "" +"[EROFS的介绍与讨论](https://mp.weixin.qq.com/s/0_5JnSvfu2pm0CZjBHx8yw) (chn) - " +"Weixin Official Accounts Platform" +msgstr "[EROFS的介绍与讨论](https://mp.weixin.qq.com/s/0_5JnSvfu2pm0CZjBHx8yw)(中文)- 微信公众平台" + +#: ../../src/index.md:162 a1073d9092064c268ac4121175b98cd9 +msgid "" +"[EROFS Everywhere: An Image-Based Kernel Approach for Various Use " +"Cases](https://youtu.be/nyfECa7OOUM) (chn) with " +"[slides](https://static.sched.com/hosted_files/kccncosschn2023/13/OSS-" +"China-2023-EROFS.pdf) (eng) - [KubeCon + CloudNativeCon + Open Source " +"Summit China 2023](https://www.lfasiallc.com/kubecon-cloudnativecon-open-" +"source-summit-china/)" +msgstr "" + "[EROFS 无处不在:面向多种场景的镜像化内核方案](https://youtu.be/nyfECa7OOUM)(中文),附[幻灯片](https:/" + "/static.sched.com/hosted_files/kccncosschn2023/13/OSS-" + "China-2023-EROFS.pdf)(英文)- [KubeCon + CloudNativeCon + Open Source Summit " + "China 2023](https://www.lfasiallc.com/kubecon-cloudnativecon-open-source-" + "summit-china/)" + +#: ../../src/index.md:164 674f98c17d2c4e50bf6697fa6a1b5cee +msgid "" +"[Finding the Best Block Filesystem for Your Embedded Linux " +"System](https://youtu.be/kLxM4FyiVpQ) - Michael Opdenacker, Bootlin @ " +"EOSS 2023" +msgstr "" + "[为你的嵌入式 Linux 系统寻找最佳块文件系统](https://youtu.be/kLxM4FyiVpQ) - Michael " + "Opdenacker,Bootlin @ EOSS 2023" + diff --git a/src/_locale/zh_CN/LC_MESSAGES/install.po b/src/_locale/zh_CN/LC_MESSAGES/install.po new file mode 100644 index 0000000..51ff32f --- /dev/null +++ b/src/_locale/zh_CN/LC_MESSAGES/install.po @@ -0,0 +1,100 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2018-2026, EROFS filesystem developers +# This file is distributed under the same license as the EROFS package. +# FIRST AUTHOR , 2026. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: EROFS 0.1\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2026-07-05 05:03+0800\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language: zh_CN\n" +"Language-Team: zh_CN \n" +"Plural-Forms: nplurals=1; plural=0;\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.10.3\n" + +#: ../../src/install.md:1 ba4ae7e7e5434c9fa80d66f95d163d7d +msgid "📥 Installation" +msgstr "📥 安装" + +#: ../../src/install.md:3 cebdc47473c346ce93741873e94d70ba +msgid "Install erofs-utils via Package Managers" +msgstr "通过包管理器安装 erofs-utils" + +#: ../../src/install.md:5 65dfbbeb3d8b4e4d86c4d542fa267023 +msgid "" +"erofs-utils is available on most popular Linux distributions, although it" +" may not be the latest stable version." +msgstr "" +"erofs-utils 可在大多数主流 Linux 发行版上使用,但可能不是最新的稳定版本。" + +#: ../../src/install.md:8 059963b2663b4413beb10d9765c5ab5e +msgid "" +"Here are examples for `Arch Linux`, `Debian`, `Fedora`, `OpenAnolis` and " +"`Ubuntu`:" +msgstr "" +"以下是 `Arch Linux`、`Debian`、`Fedora`、`OpenAnolis` 和 `Ubuntu` 的示例:" + +#: ../../src/install.md:22 55b8c76d0a284401a2be5fa0c2149eec +msgid "On macOS, erofs-utils can be installed using `MacPorts` or `Homebrew`:" +msgstr "在 macOS 上,可以使用 `MacPorts` 或 `Homebrew` 安装 erofs-utils:" + +#: ../../src/install.md:32 cb369e4182d94c248dd0b5e031c7a057 +msgid "Build from source" +msgstr "从源码构建" + +#: ../../src/install.md:34 a29c8db01aa2496fa85ca6ed44165c58 +msgid "Install build dependencies" +msgstr "安装构建依赖" + +#: ../../src/install.md:36 15e55fe09cd540f99f7b4366759dedc8 +msgid "To build erofs-utils, the following dependencies will be needed:" +msgstr "构建 erofs-utils 需要以下依赖:" + +#: ../../src/install.md:46 3fd67a274e54433a9a08f14c9060544e +msgid "Download the erofs-utils source code" +msgstr "下载 erofs-utils 源代码" + +#: ../../src/install.md:48 942abd769c7245eea6e9fa3fc3a8e446 +msgid "" +"Use [Git](https://git-scm.com) to clone the [erofs-utils " +"repository](https://git.kernel.org/pub/scm/linux/kernel/git/xiang/erofs-" +"utils.git):" +msgstr "" +"使用 [Git](https://git-scm.com) 克隆 [erofs-utils " +"仓库](https://git.kernel.org/pub/scm/linux/kernel/git/xiang/erofs-" +"utils.git):" + +#: ../../src/install.md:55 7e98bd8e690a44988aa741b457c98043 +msgid "" +"The repo defaults to the master development branch. You can also check " +"out a release tag to build:" +msgstr "" +"该仓库默认位于 master 开发分支。你也可以检出发布标签来构建:" + +#: ../../src/install.md:61 ee6f0d51f073484195d82c3ab7433b03 +msgid "Configure and build" +msgstr "配置并构建" + +#: ../../src/install.md:63 2f804cc960914499956daef38f9c4200 +msgid "" +"Please run `./autogen.sh; ./configure` from the repository's root " +"directory. `./configure` will prompt you for the usability of erofs-utils" +" dependencies and asks for additional build configuration options:" +msgstr "" +"请在仓库根目录下运行 `./autogen.sh; ./configure`。`./configure` 会提示你确认 " +"erofs-utils 依赖的可用性,并询问额外的构建配置选项:" + +#: ../../src/install.md:73 73f4c34cc7304ca48a849f3502a7a08a +msgid "Install erofs-utils" +msgstr "安装 erofs-utils" + +#: ../../src/install.md:75 bf95da91908746c8bd056f1d12bbe8b1 +msgid "Use `make install` to install the generated files of erofs-utils:" +msgstr "使用 `make install` 安装 erofs-utils 生成的文件:" diff --git a/src/_locale/zh_CN/LC_MESSAGES/merging.po b/src/_locale/zh_CN/LC_MESSAGES/merging.po new file mode 100644 index 0000000..afbfffe --- /dev/null +++ b/src/_locale/zh_CN/LC_MESSAGES/merging.po @@ -0,0 +1,164 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2018-2026, EROFS filesystem developers +# This file is distributed under the same license as the EROFS package. +# FIRST AUTHOR , 2026. +# +msgid "" +msgstr "" +"Project-Id-Version: EROFS 0.1\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2026-07-05 05:03+0800\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language: zh_CN\n" +"Language-Team: zh_CN \n" +"Plural-Forms: nplurals=1; plural=0;\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.10.3\n" + +#: ../../src/merging.md:1 be5ea7ff914f49229f9b0125a183b8ce +msgid "Native sub-filesystem merging" +msgstr "原生子文件系统合并" + +#: ../../src/merging.md:3 a638372078764dbaac444e4a808e0b9b +msgid "" +"In addition to the [OSTree/Composefs file-based " +"model](https://github.com/containers/composefs), EROFS itself supports " +"three native forms to merge common external binary sources (like sub-" +"filesystem layers) into one filesystem and mount the merged filesystem in" +" one go." +msgstr "" +"除了 [OSTree/Composefs 基于文件的模型](https://github.com/containers/composefs)" +" 之外,EROFS 自身还支持三种原生形式,将常见的外部二进制源(如子文件系统层)" +"合并为一个文件系统,并一次性挂载合并后的文件系统。" + +#: ../../src/merging.md:8 35688475bf3b407fbb31c68acb29956d +msgid "Single device" +msgstr "单设备" + +#: ../../src/merging.md:10 2182495b2c0a47e29816a9f40da092ad +msgid "" +"Unlike other kernel filesystems which have inflexible layouts, EROFS has " +"only one fixed-offset on_disk part: {ref}`the superblock " +"`. It's quite easy to compose external payloads such " +"as binary formats like " +"[tarballs](https://pubs.opengroup.org/onlinepubs/007908799/xcu/tar.html) " +"or other filesystems (e.g., EROFS, EXT4, XFS, etc.) just with **linear " +"physical mappings** to form the entire filesystem view." +msgstr "" +"与其他布局不够灵活的内核文件系统不同,EROFS 只有一个固定偏移的磁盘部分:" +"{ref}`superblock `。只需使用**线性物理映射**,即可轻松" +"组合外部载荷,例如 " +"[tarballs](https://pubs.opengroup.org/onlinepubs/007908799/xcu/tar.html) " +"等二进制格式,或其他文件系统(如 EROFS、EXT4、XFS 等),以构成完整的文件系统视图。" + +#: ../../src/merging.md:17 bc1e7472d049420c8889e95d5457ef58 +msgid "" +"It's particularly useful for virtualization cases since _only one EROFS " +"mount_ will be passed in via [virtio-blk](https://docs.oasis-" +"open.org/virtio/virtio/v1.3/csd01/virtio-v1.3-csd01.html#x1-3050002) or " +"[virtio-pmem](https://docs.oasis-" +"open.org/virtio/virtio/v1.3/csd01/virtio-v1.3-csd01.html#x1-68900019) " +"instead of individual parts." +msgstr "" +"这在虚拟化场景中尤为有用,因为只需通过 [virtio-blk](https://docs.oasis-" +"open.org/virtio/virtio/v1.3/csd01/virtio-v1.3-csd01.html#x1-3050002) 或 " +"[virtio-pmem](https://docs.oasis-" +"open.org/virtio/virtio/v1.3/csd01/virtio-v1.3-csd01.html#x1-68900019) " +"传入_一个 EROFS 挂载_,而无需分别传入各个部分。" + +#: ../../src/merging.md:22 badef7789ce941ac8be09f5be46af6b4 +msgid "![Single block device with sub-filesystems](_static/merging_singledev.svg)" +msgstr "![带子文件系统的单块设备](_static/merging_singledev.svg)" + +#: ../../src/merging.md:22 b245dfae95a648aaa38db7009bdde02c +msgid "Single block device with sub-filesystems" +msgstr "带子文件系统的单块设备" + +#: ../../src/merging.md:24 8ae4ce084db34a1e9f4951f16c21ac53 +msgid "" +"Especially for each virtio-pmem instance, the host page cache can be " +"easily shared at a finer sub-image granularity due to linear physical " +"mappings compared to other approaches, which are typically based on " +"traditional disk snapshots." +msgstr "" +"特别是对于每个 virtio-pmem 实例,得益于线性物理映射,主机 page cache 可以" +"以更细的子镜像粒度轻松共享,而其他方法通常基于传统的磁盘快照。" + +#: ../../src/merging.md:29 3ac33618deef4a41aadeb34f2c22dcbe +msgid "" +"This way has already been usable since the initial EROFS version. " +"However, if your use cases also cover multiple devices, an on-disk device" +" table will be needed then; See below." +msgstr "" +"这种方式自 EROFS 首个版本起就已可用。不过,如果你的用例还涉及多个设备," +"那么就需要一个 on-disk device table;详见下文。" + +#: ../../src/merging.md:34 ef7166b8fa894fbc8b1796466eeb474a +msgid "Multiple devices / blobs" +msgstr "多设备 / blobs" + +#: ../../src/merging.md:36 9b71490d955b4b098badc5064beb2cb1 +msgid "" +"Since [Linux 5.16](https://lwn.net/Articles/874683), EROFS has supported " +"[multiple " +"devices](https://git.kernel.org/torvalds/c/dfeab2e95a75a424adf39992ac62dcb9e9517d4a)" +" explicitly as its external data sources. EROFS device table can indicate" +" external data on extra devices as below:" +msgstr "" +"自 [Linux 5.16](https://lwn.net/Articles/874683) 起,EROFS 已明确支持将" +"[多个设备](https://git.kernel.org/torvalds/c/dfeab2e95a75a424adf39992ac62dcb9e9517d4a)" +"作为外部数据源。EROFS device table 可以指示额外设备上的外部数据,如下所示:" + +#: ../../src/merging.md:41 63ed290d8da442eabcba51c4d66ead30 +msgid "" +"![Multiple block devices with sub-" +"filesystems](_static/merging_multidev.svg)" +msgstr "" +"![带子文件系统的多块设备](_static/merging_multidev.svg)" + +#: ../../src/merging.md:41 90c66e964d584583b49726d868b3abdd +msgid "Multiple block devices with sub-filesystems" +msgstr "带子文件系统的多块设备" + +#: ../../src/merging.md:43 5bdf47ebc1aa4fc7a292c9418c7cbe15 +msgid "" +"Besides, it is quite useful for scenarios where we have no way to compose" +" a single specific block device from individual sources as described in " +"the previous section." +msgstr "" +"此外,对于无法像上一节所述将各个来源组合成单个特定 block device 的场景," +"它也非常有用。" + +#: ../../src/merging.md:47 9ebcc067bbbb4c869a14541240e08c08 +msgid "" +"In addition, since [Linux 5.19](https://lwn.net/Articles/896140), EROFS " +"has added __EROFS over fscache__ to make use of fscache caching framework" +" without explicit block devices, which is currently used by [Dragonfly " +"Nydus image service](https://nydus.dev). There are some benefits such as " +"massive blobs and on-demand loading. For more details, please look into " +"[this](https://lore.kernel.org/r/20220509074028.74954-1-jefflexu@linux.alibaba.com)." +msgstr "" +"此外,自 [Linux 5.19](https://lwn.net/Articles/896140) 起,EROFS 新增了 " +"__EROFS over fscache__,可在没有显式 block device 的情况下利用 fscache " +"缓存框架,目前 [Dragonfly Nydus image service](https://nydus.dev) 正在使用它。" +"其优点包括海量 blob 和按需加载等。更多详情请查看" +"[此链接](https://lore.kernel.org/r/20220509074028.74954-1-jefflexu@linux.alibaba.com)。" + +#: ../../src/merging.md:54 02ff9a1a5ccc41eba9281652e5f87cf7 +msgid "Single flattened device" +msgstr "单扁平化设备" + +#: ../../src/merging.md:56 3cc313f0dcc440f1bea2ea7029ae256b +msgid "" +"EROFS can still be mounted as a [single, flattened " +"device](https://git.kernel.org/torvalds/c/8b465fecc35a434e61728a6184d188c6daa37a5d)" +" even if the on-disk device table exists. It's __highly recommended__ " +"that an on-disk device table is always included in the long term for " +"related use cases." +msgstr "" +"即使存在 on-disk device table,EROFS 仍可挂载为[单个扁平化设备]" +"(https://git.kernel.org/torvalds/c/8b465fecc35a434e61728a6184d188c6daa37a5d)。" +"对于相关用例,__强烈建议__从长远来看始终包含 on-disk device table。" diff --git a/src/_locale/zh_CN/LC_MESSAGES/mkfs.po b/src/_locale/zh_CN/LC_MESSAGES/mkfs.po new file mode 100644 index 0000000..9a0ec20 --- /dev/null +++ b/src/_locale/zh_CN/LC_MESSAGES/mkfs.po @@ -0,0 +1,333 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2018-2026, EROFS filesystem developers +# This file is distributed under the same license as the EROFS package. +# FIRST AUTHOR , 2026. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: EROFS 0.1\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2026-07-05 05:03+0800\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language: zh_CN\n" +"Language-Team: zh_CN \n" +"Plural-Forms: nplurals=1; plural=0;\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.10.3\n" + +#: ../../src/mkfs.md:1 37cc12178c6b449385b933f53f1e0ad3 +msgid "📦 Build & Mount" +msgstr "📦 构建与挂载" + +#: ../../src/mkfs.md:3 1ee12a11c51d4e049f359a865fe2614d +msgid "Creating an EROFS filesystem" +msgstr "创建 EROFS 文件系统" + +#: ../../src/mkfs.md:5 f25b984c5b42473283c7965b073d9288 +msgid "" +"To create an EROFS image, use the **mkfs.erofs(1)** utility provided by " +"erofs-utils." +msgstr "要创建 EROFS 镜像,请使用 erofs-utils 提供的 **mkfs.erofs(1)** 工具。" + +#: ../../src/mkfs.md:8 bf3739b7dfab411981ab2b5888bfde89 +msgid "From a local directory" +msgstr "从本地目录" + +#: ../../src/mkfs.md:10 1f06db26b7324edcbede6f3780343239 +msgid "You can create an EROFS image directly from a local directory:" +msgstr "你可以直接从本地目录创建 EROFS 镜像:" + +#: ../../src/mkfs.md:15 acc34985d59641abb3f7cd198ac53f51 +msgid "" +"By default, `mkfs.erofs` creates plain images, as compression is an " +"optional on-disk feature. Compression and other behaviors can be " +"configured via command-line options." +msgstr "默认情况下,`mkfs.erofs` 创建未压缩镜像,因为压缩是一项可选的磁盘特性。压缩和其他行为可以通过命令行选项进行配置。" + +#: ../../src/mkfs.md:19 33544b06dfff43a69472674a0afae77a +msgid "Here are some frequently used options for mkfs.erofs:" +msgstr "以下是 mkfs.erofs 的一些常用选项:" + +#: ../../src/mkfs.md ../../src/mkfs.md:47 4ca4d56928d941a9a417436d3296ae41 +#: cba5e646cea645028378bd33fd078e08 +msgid "Option" +msgstr "选项" + +#: ../../src/mkfs.md ../../src/mkfs.md:47 1b4319aee0414ca09ce0e9a4fb98a5d6 +#: e32a7291ba2d417dbbf56c20f4129ab2 +msgid "Description" +msgstr "说明" + +#: ../../src/mkfs.md 87a73a320cd4473fa451b31e13cd3e8d +msgid "-z X[,level=#]" +msgstr "-z X[,level=#]" + +#: ../../src/mkfs.md 0ac545bd161943f8b778757eeca8cba8 +msgid "Specify a valid compressor [^1] and, optionally, a compression level." +msgstr "Specify a valid compressor [^1] and, optionally, a compression level." + +#: ../../src/mkfs.md 9268d21ac42649d5988947f432815b04 +msgid "-C #" +msgstr "-C #" + +#: ../../src/mkfs.md 48c6d496040d41089d491807bb0686db +msgid "" +"Specify the physical cluster size for compression (default: filesystem " +"block size)." +msgstr "指定用于压缩的 physical cluster 大小(默认:文件系统块大小)。" + +#: ../../src/mkfs.md a69343fdd03348cea45669da00176617 +msgid "-b #" +msgstr "-b #" + +#: ../../src/mkfs.md e01e7b4984dc486da9ec6ab8f938995b +msgid "Specify the filesystem block size (default: system page size, e.g. 4096)." +msgstr "指定文件系统块大小(默认:系统页大小,例如 4096)。" + +#: ../../src/mkfs.md 0a9844ec2c734a87af24d5da383815d3 +msgid "-T #" +msgstr "-T #" + +#: ../../src/mkfs.md bd4a9ebbeef947a2a8123262973bde26 +msgid "" +"Set the UNIX timestamp for the filesystem. It will behave as `--all-time`" +" if `--mkfs-time` is not specified." +msgstr "设置文件系统的 UNIX 时间戳。如果未指定 `--mkfs-time`,则其行为与 `--all-time` 相同。" + +#: ../../src/mkfs.md b909f16387bf4ad6af397867a1f0daa1 +msgid "--all-time" +msgstr "--all-time" + +#: ../../src/mkfs.md e732206c50a94608b75f6518bbedc3ca +msgid "(used together with `-T`) Set all files to the fixed timestamp." +msgstr "(与 `-T` 一起使用)将所有文件设置为固定时间戳。" + +#: ../../src/mkfs.md cedf96e7f64a4f27a3a4966357647f5e +msgid "--mkfs-time" +msgstr "--mkfs-time" + +#: ../../src/mkfs.md e88c6220ea984ebdb688e18eed9135f3 +msgid "" +"(used together with `-T`) The given timestamp is only applied to the " +"image creation time." +msgstr "(与 `-T` 一起使用)给定的时间戳仅应用于镜像创建时间。" + +#: ../../src/mkfs.md fa5b420eed3a4dd18946de3545cdd6cf +msgid "-U X" +msgstr "-U X" + +#: ../../src/mkfs.md e6517bc621004f51a1aa4d1ee961a75a +msgid "Specify the filesystem UUID, or one of the following value: clear, random." +msgstr "指定文件系统 UUID,或以下值之一:clear、random。" + +#: ../../src/mkfs.md 4e56d69eaeb041cc8acf6b90ae8d72d3 +msgid "-E ztailpacking" +msgstr "-E ztailpacking" + +#: ../../src/mkfs.md d6e3e044d690477f990105c2f8b548f9 +msgid "Inline the tail parts of compressed files into their metadata." +msgstr "将压缩文件的尾部内联到其元数据中。" + +#: ../../src/mkfs.md 2223976b5bf64f2c802b29201481c825 +msgid "-E fragments" +msgstr "-E fragments" + +#: ../../src/mkfs.md cc888b4b65274664a80ebba1dcf9df76 +msgid "" +"Pack the tail parts of compressed files, or entire files if they are " +"small, into a special inode." +msgstr "将压缩文件的尾部,或较小的整个文件,打包到一个特殊的 inode 中。" + +#: ../../src/mkfs.md 2b38a630949c47ab89d02a9ed78a5fa1 +msgid "-E all-fragments" +msgstr "-E all-fragments" + +#: ../../src/mkfs.md 9b6e94f431e24ff5922d1df7c5d973e4 +msgid "" +"(not recommended) Pack entire files into a special inode to reduce image " +"size." +msgstr "(不推荐)将整个文件打包到一个特殊的 inode 中,以减小镜像大小。" + +#: ../../src/mkfs.md d8c7d5e4d3274c9aaa52ffa9f2d8191d +msgid "-E dedupe" +msgstr "-E dedupe" + +#: ../../src/mkfs.md befc0e6a101e4411a5ecc9e2793401c8 +msgid "" +"Enable global data deduplication [^2]. Note: not supported with multi-" +"threading *yet*." +msgstr "" +"Enable global data deduplication [^2]. Note: not supported with multi-" +"threading *yet*." + +#: ../../src/mkfs.md:35 0c9ee35b7d004ce9b9bced382a1fa0e4 +msgid "For example, to generate an uncompressed EROFS image from `foo/`:" +msgstr "例如,要从 `foo/` 生成未压缩的 EROFS 镜像:" + +#: ../../src/mkfs.md:41 661710d9bbb54a83ad00a2e31a28e17d +msgid "" +"To generate a compressed EROFS image using LZ4HC (level 12), with " +"`fragments` and `ztailpacking` features enabled, and the physical cluster" +" size of 65536:" +msgstr "要使用 LZ4HC(级别 12)生成压缩的 EROFS 镜像,并启用 `fragments` 和 `ztailpacking` 特性,且 physical cluster 大小为 65536:" + +#: ../../src/mkfs.md:49 6facf41a5a924930b341182e80c2833d +msgid "" +"By default, EROFS just uses a physical cluster size equal to the block " +"size (e.g., 4096 on x86) and disables advanced features to keep the " +"random access performance. Consider increasing `-C` (e.g., to 65536 or " +"131072) and enabling advanced features if a smaller image size is " +"desired. Note that larger cluster sizes may increase memory footprint " +"during decompression and degrade random access performance." +msgstr "默认情况下,EROFS 使用等于块大小的 physical cluster 大小(例如 x86 上为 4096),并禁用高级特性以保持随机访问性能。如果希望获得更小的镜像大小,可以考虑增大 `-C`(例如到 65536 或 131072)并启用高级特性。请注意,较大的 cluster 大小可能会增加解压缩时的内存占用,并降低随机访问性能。" + +#: ../../src/mkfs.md:56 0ffcb548183c4489883bcb084ed26410 +msgid "" +"Using `-Eall-fragments` is not recommended now, as it can degrade runtime" +" performance unless minimizing image size is the top priority. " +"`-Efragments` already supports multi-threading." +msgstr "目前不推荐使用 `-Eall-fragments`,因为它会降低运行时性能,除非最小化镜像大小是最高优先级。`-Efragments` 已支持多线程。" + +#: ../../src/mkfs.md:67 967a1873461241e1a556b3b3bfcc22e1 +msgid "From a tarball file" +msgstr "从 tar 归档文件" + +#: ../../src/mkfs.md:69 9f99fd6c256d4af0b7617b2862e5be0d +msgid "" +"Alternatively, an EROFS image can also be generated from a tarball file " +"using the `--tar` command-line option." +msgstr "此外,还可以使用 `--tar` 命令行选项从 tarball 文件生成 EROFS 镜像。" + +#: ../../src/mkfs.md:72 0c4377a6c89e4bde9f45cdeef513e01d +msgid "" +"Here are some frequently used additional options for `mkfs.erofs` tar " +"mode:" +msgstr "以下是 `mkfs.erofs` tar 模式的一些常用附加选项:" + +#: ../../src/mkfs.md:47 86b63b04d23e451bb4230ef45924fd7a +msgid "--tar=f" +msgstr "--tar=f" + +#: ../../src/mkfs.md:47 41e1ff7828924721a1789b87c6efffa9 +msgid "Generate a full EROFS image from a regular tarball." +msgstr "从常规 tarball 生成完整的 EROFS 镜像。" + +#: ../../src/mkfs.md:47 b25fe093e1ff46daa9c371b3d8b2e304 +msgid "--tar=i" +msgstr "--tar=i" + +#: ../../src/mkfs.md:47 b0570d4100a64685aaf9042c305e046b +msgid "Generate a meta-only EROFS image from a regular tarball." +msgstr "从常规 tarball 生成仅包含元数据的 EROFS 镜像。" + +#: ../../src/mkfs.md:47 79ca49f821ab4f039deed9f6d7920af8 +msgid "--aufs" +msgstr "--aufs" + +#: ../../src/mkfs.md:47 f53b451365c24c22bb973c84e04a0743 +msgid "" +"Convert AUFS special files to OverlayFS metadata (commonly used in " +"Docker/OCI images)." +msgstr "将 AUFS 特殊文件转换为 OverlayFS 元数据(常用于 Docker/OCI 镜像)。" + +#: ../../src/mkfs.md:47 26ebd13a5ec4468898fb66aca787b246 +msgid "--sort=none" +msgstr "--sort=none" + +#: ../../src/mkfs.md:47 798d1fe72c504a92ab29ed960d80aa8b +msgid "" +"(only valid with `--tar=f`) Keep inode data order consistent with tar " +"data order." +msgstr "(仅对 `--tar=f` 有效)保持 inode 数据顺序与 tar 数据顺序一致。" + +#: ../../src/mkfs.md:47 7e4a9eb2dba14e9caabb7e0e8e4a0a57 +msgid "--sort=path" +msgstr "--sort=path" + +#: ../../src/mkfs.md:47 4cf98fb282ec46139702c2b3af276e09 +msgid "" +"(only valid with `--tar=f`) Data order strictly follows the tree " +"generation order (default)." +msgstr "(仅对 `--tar=f` 有效)数据顺序严格遵循树生成顺序(默认)。" + +#: ../../src/mkfs.md:82 00e64fe81b19424586843a4bf648f188 +msgid "For example, to generate a full EROFS image from a tarball `foo.tar`:" +msgstr "例如,要从 tarball `foo.tar` 生成完整的 EROFS 镜像:" + +#: ../../src/mkfs.md:88 f62ffac390cc425dafd022e1b30ddd43 +msgid "" +"Note that `--sort=none` is used if strict data order is not required; it " +"helps eliminate unnecessary data writes." +msgstr "如果不需要严格的数据顺序,可以使用 `--sort=none`;这有助于消除不必要的数据写入。" + +#: ../../src/mkfs.md:91 52ad0e02a5254511bcf400f4675f181f +msgid "" +"Additionally, `--tar=i` can be used to generate a minimized EROFS " +"metadata index that references external tar data:" +msgstr "此外,`--tar=i` 可用于生成一个最小化的 EROFS 元数据索引,该索引引用外部 tar 数据:" + +#: ../../src/mkfs.md:98 816af86baee74da6a40b164ffeea16fd +msgid "" +"The generated tar index EROFS image can be used with the original tar " +"file specified using the mount option `-odevice=`. Alternatively, you can" +" append the original tar file to the tar index:" +msgstr "生成的 tar 索引 EROFS 镜像可以与使用挂载选项 `-odevice=` 指定的原始 tar 文件一起使用。或者,你也可以将原始 tar 文件追加到 tar 索引之后:" + +#: ../../src/mkfs.md:105 9f13da0a738c422599deb3e67033f717 +msgid "Mount" +msgstr "挂载" + +#: ../../src/mkfs.md:107 5017e4f7215a47f884ecf2617ba8f91b +msgid "" +"To mount an EROFS image, use the **mount(8)** command on a block device " +"or a regular EROFS image file, as shown below:" +msgstr "要挂载 EROFS 镜像,请在 block device 或常规 EROFS 镜像文件上使用 **mount(8)** 命令,如下所示:" + +#: ../../src/mkfs.md:115 fa9da3fdb2604b77b1f57fa65545b888 +msgid "" +"All files contained in `/dev/sdX` will now be accessible under the " +"`~/mnt` mount point." +msgstr "`/dev/sdX` 中的所有文件现在都可以在 `~/mnt` 挂载点下访问。" + +#: ../../src/mkfs.md:118 9cd11bffa6364eff9a25c07256b12921 +msgid "" +"If the image is a regular file and the command above doesn't work (e.g., " +"due to an older version of util-linux), you can use the `-o loop` option:" +msgstr "如果镜像是常规文件且上述命令不起作用(例如,由于 util-linux 版本较旧),可以使用 `-o loop` 选项:" + +#: ../../src/mkfs.md:126 a2d27c60a4fe499581f93b0b3f257138 +msgid "" +"Alternatively, unprivileged users can mount an EROFS image using " +"**erofsfuse**:" +msgstr "或者,非特权用户可以使用 **erofsfuse** 挂载 EROFS 镜像:" + +#: ../../src/mkfs.md:133 8afc14eb55b644b186fa41bc2d639251 +msgid "Unmount" +msgstr "卸载" + +#: ../../src/mkfs.md:135 56f9c2462c24460794b900ce0521889e +msgid "" +"To unmount the filesystem, use the **umount (8)** command for privileged " +"users:" +msgstr "要卸载文件系统,特权用户可以使用 **umount (8)** 命令:" + +#: ../../src/mkfs.md:141 312152cc31f9447388d9ee731d9b0726 +msgid "" +"For unprivileged users, you could also use the **fusermount** command to " +"unmount an instance out of ``erofsfuse``:" +msgstr "对于非特权用户,也可以使用 **fusermount** 命令来卸载由 ``erofsfuse`` 挂载的实例:" + +#: ../../src/mkfs.md:62 74fd1151a2d14b50bdeb8eecd3588d33 +msgid "Supported compressors: lz4, lz4hc, lzma, deflate, libdeflate, and zstd." +msgstr "支持的压缩器:lz4、lz4hc、lzma、deflate、libdeflate 和 zstd。" + +#: ../../src/mkfs.md:63 fb57467d78df484198e82c9b69bdd68b +msgid "" +"If data compression (encoded data) is enabled, rolling-hash-based " +"deduplication will be used; otherwise, block-based deduplication will be" +" applied." +msgstr "如果启用了数据压缩(编码数据),将使用基于滚动哈希的去重;否则将应用基于块的去重。" diff --git a/src/_locale/zh_CN/LC_MESSAGES/ondisk/chunked_format.po b/src/_locale/zh_CN/LC_MESSAGES/ondisk/chunked_format.po new file mode 100644 index 0000000..ac60b69 --- /dev/null +++ b/src/_locale/zh_CN/LC_MESSAGES/ondisk/chunked_format.po @@ -0,0 +1,527 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2018-2026, EROFS filesystem developers +# This file is distributed under the same license as the EROFS package. +# FIRST AUTHOR , 2026. +# +msgid "" +msgstr "" +"Project-Id-Version: EROFS 0.1\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2026-07-05 05:03+0800\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language: zh_CN\n" +"Language-Team: zh_CN \n" +"Plural-Forms: nplurals=1; plural=0;\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.10.3\n" + +#: ../../src/ondisk/chunked_format.md:2 0ef6d46d48c641888c3cab743691e889 +msgid "Chunk-based Inode Layout" +msgstr "基于分块的 inode 布局" + +#: ../../src/ondisk/chunked_format.md:4 d108a86a44ac42aab9ec5adb2eea6b05 +msgid "" +"The chunk-based inode layout splits inode data into fixed-size chunks, " +"each mapped to a contiguous range of physical filesystem blocks. This " +"format supports data deduplication and multi-device storage, allowing " +"efficient data sharing among different inodes and images." +msgstr "" +"基于分块的 inode 布局将 inode 数据切分为固定大小的分块,每一块映射到一段连续的物理文件系统块。该格式支持数据去重与多设备存储,可在不同 " +"inode 与镜像之间高效共享数据。" + +#: ../../src/ondisk/chunked_format.md:9 0b2d79d2f73d4db9b1d2db8f19fcf03f +msgid "Superblock Extension for Chunk-based Inodes and Multiple Devices" +msgstr "针对基于分块的 inode 与多设备的 Superblock 扩展" + +#: ../../src/ondisk/chunked_format.md:11 3c83c9a49fd74248945cc6e5372d5ce7 +msgid "" +"The core superblock format is defined in {ref}`on_disk_superblock`. This " +"section lists the extended fields dedicated to chunk-based inode support " +"and multi-device addressing features." +msgstr "" +"核心 superblock 格式定义见 {ref}`on_disk_superblock`。本节列出专用于基于分块的 inode " +"支持与多设备寻址功能的扩展字段。" + +#: ../../src/ondisk/chunked_format.md 29f105120cad41c1a4ee6c9669770fc1 +#: a782145468f749ca9bef6b09e53869df a7e4adaaa3474ef58a5cf3bf2af0208d +#: b2c21e8582d84fad802f7f383efa371b fffd625231284819a0264232de4dba39 +msgid "Offset" +msgstr "偏移" + +#: ../../src/ondisk/chunked_format.md 2698695da6ab4c388f339577260aa0d0 +#: 5849287584bf4f13befec86765599e8a 5b6dda186db041a595e11d171d031a4a +#: 9e59053f3c144eada5f65d1af1250bac fe0028de31d34a2b8a78860bb64f9d38 +msgid "Size" +msgstr "大小" + +#: ../../src/ondisk/chunked_format.md 489f4d166a2948f5a1a10acd0f62cf62 +#: 63a9355129ed4b96ac118c586251f418 a93b46b9322b42dc8a9fcc0d84fd82fe +#: b37438e7b730498ea66c03b70fcf0ace c13954837c92457081d878a4e46006ad +msgid "Type" +msgstr "类型" + +#: ../../src/ondisk/chunked_format.md 1783d58083344da9849da0a5ffbb9f1f +#: 38c227a7b2234700a6fc8337931be5e0 4f3dfbdde8db48d4ba0c087b0164b466 +#: 808e30edf5ab4ff396d0b450f3409626 e42084bc43324f2ab14b90d4759dd165 +msgid "Name" +msgstr "名称" + +#: ../../src/ondisk/chunked_format.md 29e4b37caa804da5b423e344b197919c +#: 2c877a5721be40558befe59c62938145 5ef2ccde68de422ca4410f17eae20b12 +#: 8139dd24ef2148e4bf928d912c9f5aa7 d8765e33e2744585b31b214c839018ec +#: e2d1e957c05c44baac5811169e077690 +msgid "Description" +msgstr "描述" + +#: ../../src/ondisk/chunked_format.md cf0f6a3acfb4453f81c602442ec1c0df +msgid "0x50" +msgstr "0x50" + +#: ../../src/ondisk/chunked_format.md 15ecddc1dc8b459ea6bec48870a54165 +#: 2f62bb7f61b24b9d88f63b7595cb7e05 4412d67b72794f86ad57fd019a07a529 +#: 96719399f1194db8bba72559cfb09260 bb66564899ff45e4a92859e1e7ae8de8 +#: c86147dd022d49f49ae7df6ff47b73c6 cfea939420084277a23506b1a195b3d4 +msgid "4" +msgstr "4" + +#: ../../src/ondisk/chunked_format.md 1cd9379c30fa4e87acd9626c6aeed88e +#: 890bda121aa545f6a59549db98c4aa01 8eae8459085b4cd1bfb6350d1afd137b +#: 94daed3a9fd641558637f5f9466dd240 b023158bbaa349d594235c1cf4afd1fe +#: e67522e223e74385b599c966014ea536 +msgid "`u32`" +msgstr "`u32`" + +#: ../../src/ondisk/chunked_format.md 3fb9d209790942aab5fcbe3c13850555 +msgid "`feature_incompat`" +msgstr "`feature_incompat`" + +#: ../../src/ondisk/chunked_format.md 168558b811bf4c9391b142a2b06c7c5d +msgid "" +"`EROFS_FEATURE_INCOMPAT_CHUNKED_FILE` enables chunk-based inodes. " +"`EROFS_FEATURE_INCOMPAT_DEVICE_TABLE` enables the device table described " +"in {ref}`device_table`" +msgstr "" +"`EROFS_FEATURE_INCOMPAT_CHUNKED_FILE` 启用基于分块的 " +"inode。`EROFS_FEATURE_INCOMPAT_DEVICE_TABLE` 启用 {ref}`device_table` 中描述的设备表。" + +#: ../../src/ondisk/chunked_format.md b2ecd684b67b4e3b895a9f731e4d08c6 +msgid "0x56" +msgstr "0x56" + +#: ../../src/ondisk/chunked_format.md 429fbb851cc44c97add421bb84389053 +#: 77a9a352bbbf426490c66951c73013c9 7b157aded4a04258a6a2ab0459aacf61 +#: cf97e7b0cc114d70be9ee730acb1cd3e e43a2705a8fa4775855c76b1008ef9d5 +msgid "2" +msgstr "2" + +#: ../../src/ondisk/chunked_format.md 46f943fbd7824f34845912eec781d989 +#: 5b785a4aa64d4b94b427c80d8f6791c3 71076b323b194452bc909e1876295df6 +#: ee91ea891d60416aa215f64157470358 fcc38334b5984e81a4d1e7f6be3ce383 +msgid "`u16`" +msgstr "`u16`" + +#: ../../src/ondisk/chunked_format.md eda9efa1e91f4748af86c55078789a43 +msgid "`extra_devices`" +msgstr "`extra_devices`" + +#: ../../src/ondisk/chunked_format.md 40d2e9eb97c64e07bf653cc91d1793cd +msgid "" +"Number of extra devices in addition to the primary one. Valid when " +"`EROFS_FEATURE_INCOMPAT_DEVICE_TABLE` is set" +msgstr "" +"除主设备外的额外设备数量。仅在设置了 `EROFS_FEATURE_INCOMPAT_DEVICE_TABLE` 时有效。" + +#: ../../src/ondisk/chunked_format.md 566b9ebf380a4412a2ad1d669d2d1b35 +msgid "0x58" +msgstr "0x58" + +#: ../../src/ondisk/chunked_format.md db2e1c55935740508162cc04ec3d7b4c +msgid "`devt_slotoff`" +msgstr "`devt_slotoff`" + +#: ../../src/ondisk/chunked_format.md 4a72ee95d5e54046b20638119b0e2459 +msgid "" +"Starting slot number of the device table on the primary device. The byte " +"offset is `devt_slotoff * 128`. Valid when " +"`EROFS_FEATURE_INCOMPAT_DEVICE_TABLE` is set" +msgstr "" +"主设备上设备表的起始槽位号。字节偏移量为 `devt_slotoff * 128`。仅在设置了 " +"`EROFS_FEATURE_INCOMPAT_DEVICE_TABLE` 时有效。" + +#: ../../src/ondisk/chunked_format.md:21 4f68183a6ad742bbb35ee06f73c73601 +msgid "Inode Fields for Chunked Inodes" +msgstr "基于分块的 inode 字段" + +#: ../../src/ondisk/chunked_format.md:23 12672ce3c81c46f4a438eebd352b0eef +msgid "" +"The full compact and extended inode layouts are defined in " +"{ref}`on_disk_inodes`. For chunk-based inodes, both inode variants share " +"the same feature-specific fields:" +msgstr "" +"完整的 compact 与 extended inode 布局定义见 {ref}`on_disk_inodes`。对于基于分块的 inode,两种 " +"inode 变体共享相同的特性专用字段:" + +#: ../../src/ondisk/chunked_format.md 256dd106d9404370b22ab088aaab60d4 +#: 764dff8607a34041a21017e5eae04196 822c54866d0d48f8b87aa7f6d0a705d5 +#: e71bbd18e42444259cdd83e1504a818d +msgid "0x00" +msgstr "0x00" + +#: ../../src/ondisk/chunked_format.md 344f6be0fe9a4e3990f4e0862de86c0f +msgid "`i_format`" +msgstr "`i_format`" + +#: ../../src/ondisk/chunked_format.md 6aaf91d4654b44a3804a5a60780c4451 +msgid "" +"Inode format hints; `EROFS_INODE_CHUNK_BASED` (4) is used for chunked " +"inode mode" +msgstr "" +"inode 格式提示;`EROFS_INODE_CHUNK_BASED` (4) 用于分块 inode 模式。" + +#: ../../src/ondisk/chunked_format.md 1c1ca64b34944046bc103f792dc74475 +msgid "0x10" +msgstr "0x10" + +#: ../../src/ondisk/chunked_format.md a07295d0f6b64cc9b112b76dc363a57d +msgid "`i_u`" +msgstr "`i_u`" + +#: ../../src/ondisk/chunked_format.md 93127662e8304e9ba1a065bfa981c0f5 +msgid "Chunk info summary described below" +msgstr "分块信息摘要,详见下文" + +#: ../../src/ondisk/chunked_format.md:32 9ad2bdab75514e4e80716fec388a65b8 +msgid "Inode Data Layout for Chunked Inodes" +msgstr "基于分块的 inode 数据布局" + +#: ../../src/ondisk/chunked_format.md:34 a9bf774289734e06b5676b5d0e2eb502 +msgid "" +"The following new data layout of an inode is encoded in bits 1–3 of " +"`i_format`." +msgstr "" +"inode 的以下新数据布局编码在 `i_format` 的位 1–3 中。" + +#: ../../src/ondisk/chunked_format.md:36 adc27051171e408783199193b10cc8d8 +msgid "`EROFS_INODE_CHUNK_BASED` (4)" +msgstr "`EROFS_INODE_CHUNK_BASED` (4)" + +#: ../../src/ondisk/chunked_format.md:38 75ac85568c424345820b83ababb0f519 +msgid "" +"The entire inode data is split into fixed-size chunks, each occupying " +"consecutive physical blocks. Requires " +"`EROFS_FEATURE_INCOMPAT_CHUNKED_FILE`. `i_u` encodes a chunk info summary" +" and an array of per-chunk address entries follows the inode body." +msgstr "" +"整个 inode 数据被切分为固定大小的分块,每一块占用连续的物理块。需要 " +"`EROFS_FEATURE_INCOMPAT_CHUNKED_FILE`。`i_u` 编码一个分块信息摘要,每个分块的地址项数组紧跟在 inode " +"主体之后。" + +#: ../../src/ondisk/chunked_format.md:43 6167ad00fea3494dafebf5a060ca4530 +msgid "Chunk-based Structures" +msgstr "基于分块的结构" + +#: ../../src/ondisk/chunked_format.md:45 68d808a05afb4c4e969a8b816788ca18 +msgid "" +"When the data layout is `EROFS_INODE_CHUNK_BASED`, the `i_u` field (4 " +"bytes at inode offset 0x10) is interpreted as a chunk info summary:" +msgstr "" +"当数据布局为 `EROFS_INODE_CHUNK_BASED` 时,`i_u` 字段(inode 偏移 0x10 处的 4 " +"字节)被解释为分块信息摘要:" + +#: ../../src/ondisk/chunked_format.md:48 8e9388edb27643dba41577e1d261e0cc +msgid "Chunk Info Summary" +msgstr "分块信息摘要" + +#: ../../src/ondisk/chunked_format.md 9ffe9e4789164758a14ad3422797b5d3 +msgid "Bits" +msgstr "位" + +#: ../../src/ondisk/chunked_format.md d5ff7d2c31684385b7b8c59fe0d8960d +msgid "Width" +msgstr "宽度" + +#: ../../src/ondisk/chunked_format.md 55b385b8759841ac99bf6ff4b4e3ee20 +msgid "0–4" +msgstr "0–4" + +#: ../../src/ondisk/chunked_format.md 28f6546f34a54f9f9c1baaf97715a64f +#: a66bad3365da482dbbb0ebdbe6ecca4d +msgid "5" +msgstr "5" + +#: ../../src/ondisk/chunked_format.md a78e65fd9e1e4244bad0dd5295a6628e +msgid "`chunkbits`: chunk size = `2^(blkszbits + chunkbits)`" +msgstr "`chunkbits`: chunk size = `2^(blkszbits + chunkbits)`" + +#: ../../src/ondisk/chunked_format.md 362061087c7349bf95dfd07650ced928 +#: 94096795f5444eefb971694769e9d853 +msgid "1" +msgstr "1" + +#: ../../src/ondisk/chunked_format.md 53a99f40e34649ed8d2b5798534894d8 +msgid "`EROFS_CHUNK_FORMAT_INDEXES`: entry format selector (see below)" +msgstr "`EROFS_CHUNK_FORMAT_INDEXES`:条目格式选择器(见下文)" + +#: ../../src/ondisk/chunked_format.md 16d86da28be647bc86f85d882d765bc8 +msgid "6" +msgstr "6" + +#: ../../src/ondisk/chunked_format.md 12c34ac01467461389c1fe92a89fdcd6 +#: a367670d89c14fe8bc6a42abf18366c7 f791254ed6954a59b670ce91adf96d27 +msgid "48-bit layout specific; ignored for basic chunk-based inodes" +msgstr "48 位布局专用;基本基于分块的 inode 忽略此项。" + +#: ../../src/ondisk/chunked_format.md bc6740153a0e46f8937b6ed89434eff7 +msgid "7–31" +msgstr "7–31" + +#: ../../src/ondisk/chunked_format.md ce7659249b924cc78d7870e453345d65 +msgid "25" +msgstr "25" + +#: ../../src/ondisk/chunked_format.md 4d853d6ba64044c1a531dad832701c23 +#: e451c8a74b8445feb4f711c4efdd2c5f +msgid "Reserved; must be 0" +msgstr "保留;必须为 0" + +#: ../../src/ondisk/chunked_format.md:57 76977f15c82b4e58946870f6ff42696b +msgid "" +"Per-chunk extent entries are stored immediately after the core on-disk " +"inode and the inode xattr region. The number of entries is `⌈i_size / " +"chunk_size⌉`." +msgstr "" +"每个分块的 extent 项紧挨核心 on-disk inode 与 inode xattr 区域之后存储。条目数量为 `⌈i_size / " +"chunk_size⌉`。" + +#: ../../src/ondisk/chunked_format.md:60 35d4155d24604583b51902b4d448da63 +msgid "Chunk Entry Formats" +msgstr "分块条目格式" + +#: ../../src/ondisk/chunked_format.md:62 a067323ac8a145c090a759cee292a83b +msgid "" +"The `EROFS_CHUNK_FORMAT_INDEXES` bit in the chunk info summary selects " +"one of two per-chunk entry formats:" +msgstr "" +"分块信息摘要中的 `EROFS_CHUNK_FORMAT_INDEXES` 位用于选择两种每分块条目格式之一:" + +#: ../../src/ondisk/chunked_format.md:66 afeec0759aed4e2da68f1253cce32893 +msgid "Block Map Entry (4 bytes)" +msgstr "块映射条目(4 字节)" + +#: ../../src/ondisk/chunked_format.md:68 fd2e2105ef954ef392f6fed5700b41ec +msgid "" +"When `EROFS_CHUNK_FORMAT_INDEXES` is not set, each chunk is described by " +"a single 32-bit block address entry." +msgstr "" +"当未设置 `EROFS_CHUNK_FORMAT_INDEXES` 时,每个分块由一个 32 位块地址条目描述。" + +#: ../../src/ondisk/chunked_format.md:71 e510d28f491842caa061c231595cdd0f +msgid "" +"Without a device table, this entry is a primary-device block address. " +"With `EROFS_FEATURE_INCOMPAT_DEVICE_TABLE`, it is interpreted in the " +"unified address space and can resolve to either the primary or an extra " +"device." +msgstr "" +"无设备表时,该条目为主设备块地址。启用 `EROFS_FEATURE_INCOMPAT_DEVICE_TABLE` " +"后,它在统一地址空间中解析,可定位到主设备或某个额外设备。" + +#: ../../src/ondisk/chunked_format.md 727c8a586f8743e3a7e176d085e7756f +#: afd95a93160540eeb441e62248124792 +msgid "`startblk`" +msgstr "`startblk`" + +#: ../../src/ondisk/chunked_format.md 9213c24de1ce479d98b766e9c9c183f9 +msgid "Starting block address of this chunk" +msgstr "该分块的起始块地址" + +#: ../../src/ondisk/chunked_format.md:79 1108c5143d714109852497d9cb05ab12 +msgid "Chunk Index Entry (8 bytes)" +msgstr "分块索引条目(8 字节)" + +#: ../../src/ondisk/chunked_format.md:81 d5cec1cb5e6e458db0e34ef9c2ecbf01 +msgid "" +"When `EROFS_CHUNK_FORMAT_INDEXES` is set, each chunk is described by an " +"8-byte record that supports multi-device addressing." +msgstr "" +"当设置了 `EROFS_CHUNK_FORMAT_INDEXES` 时,每个分块由一个支持多设备寻址的 8 字节记录描述。" + +#: ../../src/ondisk/chunked_format.md 20775d07eb4a404e90e2817e3ef67a65 +#: ffe08513bbe241cea2b54df451aec4c9 +msgid "_dontcare_" +msgstr "_dontcare_" + +#: ../../src/ondisk/chunked_format.md cd2326ec4c1148528fc3bc4bb964d4d7 +msgid "0x02" +msgstr "0x02" + +#: ../../src/ondisk/chunked_format.md 6534e46f8c3c499cb743bfe85a07be06 +msgid "`device_id`" +msgstr "`device_id`" + +#: ../../src/ondisk/chunked_format.md 99364bb0c79042cdab2fa7b7d30d1204 +msgid "" +"Device selector. `0` uses unified-address-space resolution; non-zero " +"values directly select extra devices" +msgstr "" +"设备选择器。`0` 使用统一地址空间解析;非零值直接选择额外设备。" + +#: ../../src/ondisk/chunked_format.md 556cdd1521964785ae22a72de798bec0 +msgid "0x04" +msgstr "0x04" + +#: ../../src/ondisk/chunked_format.md f9c3a1a0354e466789aa8471f027080d +msgid "32-bit starting block address; interpretation depends on `device_id`" +msgstr "32 位起始块地址;具体含义取决于 `device_id`" + +#: ../../src/ondisk/chunked_format.md:90 683242bbf32f4527b478b6a4459fb780 +msgid "" +"When `device_id` is `0`, `startblk` is interpreted exactly like a " +"{ref}`Block Map Entry (4 bytes) `: " +"it is an absolute block address in the unified address space. When " +"`device_id` is non-zero, it directly selects an extra device and " +"`startblk` is interpreted as a block address on that device. See {ref" +"}`block-address-resolution-for-chunk-based-inodes`." +msgstr "" +"当 `device_id` 为 `0` 时,`startblk` 的解析方式与 {ref}`块映射条目(4 " +"字节)` 完全相同:它是统一地址空间中的绝对块地址。当 `device_id` " +"非零时,它直接选择一个额外设备,而 `startblk` 被解析为该设备上的块地址。详见 " +"{ref}`block-address-resolution-for-chunk-based-inodes`。" + +#: ../../src/ondisk/chunked_format.md:98 065480ae230149d3b335c2b7109b8284 +msgid "Multi-device Support" +msgstr "多设备支持" + +#: ../../src/ondisk/chunked_format.md:101 14551c26460b46cb9cefd10f8cd252f3 +msgid "Device Table" +msgstr "设备表" + +#: ../../src/ondisk/chunked_format.md:103 73f65761090e469fb4ab8e6ad8549500 +msgid "This section applies when `EROFS_FEATURE_INCOMPAT_DEVICE_TABLE` is set." +msgstr "本节适用于设置了 `EROFS_FEATURE_INCOMPAT_DEVICE_TABLE` 的情况。" + +#: ../../src/ondisk/chunked_format.md:105 84d7a35af65c41c78cacaac3cb06bc24 +msgid "" +"When `EROFS_FEATURE_INCOMPAT_DEVICE_TABLE` is set, the `extra_devices` " +"superblock field gives the number of additional block devices. They are " +"described by an array of 128-byte device slot records stored on the " +"primary device. The first record begins at byte offset `devt_slotoff * " +"128`." +msgstr "" +"当设置了 `EROFS_FEATURE_INCOMPAT_DEVICE_TABLE` 时,superblock 的 `extra_devices` " +"字段给出额外块设备的数量。它们由存储在主设备上的一组 128 字节设备槽位记录描述。第一条记录起始于字节偏移量 `devt_slotoff * 128` " +"处。" + +#: ../../src/ondisk/chunked_format.md:110 fd2c788ac2e743ffbe9b22d63e4cb9a8 +msgid "Each record contains:" +msgstr "每条记录包含:" + +#: ../../src/ondisk/chunked_format.md c373d168af1e4636b0a5e006953065ba +msgid "64" +msgstr "64" + +#: ../../src/ondisk/chunked_format.md 38f4c758cf6a49f285e6690bf3a7bfc8 +#: 755a45fd8ac84bba927d39c4badf559c b2e02d2db7a7416cb9e3afd5d072a002 +msgid "`u8[]`" +msgstr "`u8[]`" + +#: ../../src/ondisk/chunked_format.md 911cabf71ce1427088a5aef93cd8bce9 +msgid "`tag`" +msgstr "`tag`" + +#: ../../src/ondisk/chunked_format.md f281f6233af542089f75827ce4f2291a +msgid "User-specific identifier: The kernel never parses it in any form" +msgstr "用户专用标识符:内核不会以任何形式解析它。" + +#: ../../src/ondisk/chunked_format.md 0e5f73d10f3d440bafca672da9873374 +msgid "0x40" +msgstr "0x40" + +#: ../../src/ondisk/chunked_format.md cb34b48f19f64ea386964c0720bb7d7e +msgid "`blocks`" +msgstr "`blocks`" + +#: ../../src/ondisk/chunked_format.md a7dc4fa0fb154446af7ffbaef314b597 +msgid "32-bit total block count of this device" +msgstr "该设备的 32 位总块数" + +#: ../../src/ondisk/chunked_format.md 113464577e974c9bb17eed9ad588144c +msgid "0x44" +msgstr "0x44" + +#: ../../src/ondisk/chunked_format.md fb19988a204043a9b3f98e7a18db8619 +msgid "`uniaddr`" +msgstr "`uniaddr`" + +#: ../../src/ondisk/chunked_format.md 6b7c8f5a4df94ac5adb9187b1753bce5 +msgid "32-bit unified starting block address of this device" +msgstr "该设备的 32 位统一起始块地址" + +#: ../../src/ondisk/chunked_format.md 2949c15d65c2408ba54cf41faf71073a +msgid "0x48" +msgstr "0x48" + +#: ../../src/ondisk/chunked_format.md 281849d0c0b347e7a9bef10632b0fe39 +msgid "0x4C" +msgstr "0x4C" + +#: ../../src/ondisk/chunked_format.md 61dbd6e0da74435a84d63761a1917e69 +msgid "52" +msgstr "52" + +#: ../../src/ondisk/chunked_format.md 62ee090128d3490dabe7c74c640bcb76 +msgid "_reserved_" +msgstr "_reserved_" + +#: ../../src/ondisk/chunked_format.md:121 816e93af51c54409ae5fbc6bdbb1820c +msgid "Block Address Resolution for Chunk-based Inodes" +msgstr "基于分块的 inode 块地址解析" + +#: ../../src/ondisk/chunked_format.md:123 e5f443780a2047eb88691f2482ab4c4e +msgid "Chunk Index Entry" +msgstr "分块索引条目" + +#: ../../src/ondisk/chunked_format.md:125 b07ad0302f3b4ddd97e0f1a0119a65d0 +msgid "" +"When the chunk index entry format is used, `device_id` controls how " +"`startblk` is interpreted:" +msgstr "" +"当使用分块索引条目格式时,`device_id` 决定 `startblk` 的解析方式:" + +#: ../../src/ondisk/chunked_format.md:128 1b756787c26e4f568e9cac78791c7f42 +msgid "" +"`device_id = 0`: `startblk` is an absolute block address in the unified " +"address space; see {ref}`Block Map Entry ` for details." +msgstr "" +"`device_id = 0`:`startblk` 是统一地址空间中的绝对块地址;详见 {ref}`块映射条目 " +"`。" + +#: ../../src/ondisk/chunked_format.md:131 8b7453c741254b8585fa48e4ad5ca5f5 +msgid "" +"`device_id = N` (1 ≤ N ≤ `extra_devices`): `startblk` is a block address " +"on extra device N, whose record begins at byte offset `(devt_slotoff + N " +"- 1) * 128` on the primary device." +msgstr "" +"`device_id = N`(1 ≤ N ≤ `extra_devices`):`startblk` 是额外设备 N " +"上的块地址,其记录在主设备上起始于字节偏移量 `(devt_slotoff + N - 1) * 128` 处。" + +#: ../../src/ondisk/chunked_format.md:136 70ed8afefe2a4752b14d198b1c7c2f77 +msgid "Block Map Entry" +msgstr "块映射条目" + +#: ../../src/ondisk/chunked_format.md:138 5ecb878d328d4ff69a4071f2d5e7f1d9 +msgid "" +"The simple block map entry format has no `device_id` field. Instead, " +"`startblk` is an absolute block address in the unified address space, and" +" the reader uses `uniaddr` from the device table to identify the target " +"device: it finds the slot `i` whose range `[uniaddr[i], uniaddr[i] + " +"blocks[i])` contains `startblk`, then derives the intra-device block " +"address as `startblk − uniaddr[i]`. Chunk index entries with `device_id =" +" 0` use this same interpretation." +msgstr "" +"简单块映射条目格式没有 `device_id` 字段。相反,`startblk` 是统一地址空间中的绝对块地址,读取器使用设备表中的 `uniaddr` " +"来确定目标设备:找到满足范围 `[uniaddr[i], uniaddr[i] + blocks[i])` 包含 `startblk` 的槽位 " +"`i`,然后将设备内块地址推导为 `startblk − uniaddr[i]`。`device_id = 0` 的分块索引条目采用相同的解析方式。" diff --git a/src/_locale/zh_CN/LC_MESSAGES/ondisk/core_ondisk.po b/src/_locale/zh_CN/LC_MESSAGES/ondisk/core_ondisk.po new file mode 100644 index 0000000..de8248c --- /dev/null +++ b/src/_locale/zh_CN/LC_MESSAGES/ondisk/core_ondisk.po @@ -0,0 +1,1332 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2018-2026, EROFS filesystem developers +# This file is distributed under the same license as the EROFS package. +# FIRST AUTHOR , 2026. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: EROFS 0.1\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2026-07-05 05:03+0800\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language: zh_CN\n" +"Language-Team: zh_CN \n" +"Plural-Forms: nplurals=1; plural=0;\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.10.3\n" + +#: ../../src/ondisk/core_ondisk.md:1 e8e74c8810cf48ce9eabbf721cf97841 +msgid "Core On-disk Format" +msgstr "核心磁盘格式" + +#: ../../src/ondisk/core_ondisk.md:3 801ec5e0c645465781aa09f33e80b30e +msgid "Overview" +msgstr "概览" + +#: ../../src/ondisk/core_ondisk.md:5 1304f1a9f32b4fd485d3b767a440484a +msgid "" +"The EROFS core on-disk format is designed to be **as simple as " +"possible**, since one of the basic use cases of EROFS is as a drop-in " +"replacement for " +"[tar](https://pubs.opengroup.org/onlinepubs/007908799/xcu/tar.html) or " +"[cpio](https://pubs.opengroup.org/onlinepubs/007908799/xcu/cpio.html):" +msgstr "EROFS 核心磁盘格式的设计目标是**尽可能简单**,因为 EROFS 的一个基本用例就是作为 [tar](https://pubs.opengroup.org/onlinepubs/007908799/xcu/tar.html) 或 [cpio](https://pubs.opengroup.org/onlinepubs/007908799/xcu/cpio.html) 的直接替代品:" + +#: ../../src/ondisk/core_ondisk.md:10 454ac45b08674a509698f7deda8dcb44 +msgid "![EROFS core on-disk format](../_static/erofs_core_format.svg)" +msgstr "![EROFS 核心磁盘格式](../_static/erofs_core_format.svg)" + +#: ../../src/ondisk/core_ondisk.md:10 939e273600f046c5b372c9dd2d40f951 +msgid "EROFS core on-disk format" +msgstr "EROFS 核心磁盘格式" + +#: ../../src/ondisk/core_ondisk.md:12 ee42a75e49304a2e8533c4ccec0aa1a8 +msgid "The format design principles are as follows:" +msgstr "该格式的设计原则如下:" + +#: ../../src/ondisk/core_ondisk.md:14 979a1e8b658842f0b28e06f98fcbbd5f +msgid "" +"Data (except for _inline data_) is always block-based; metadata is not " +"strictly block-based." +msgstr "数据(除 _inline data_ 外)始终以块为单位存储;元数据则不一定严格按块存储。" + +#: ../../src/ondisk/core_ondisk.md:16 1047382fdbdb42efa37c6c036f58de33 +msgid "" +"There are **no centralized inode or directory tables**. These are not " +"suitable for image incremental updates, metadata flexibility, and " +"extensibility. It is up to users to determine whether inodes or " +"directories are arranged one by one or not." +msgstr "**不存在集中式的 inode 或 directory table**。这不利于镜像增量更新、元数据灵活性及可扩展性。inode 和 directory 是否逐个排列,由用户自行决定。" + +#: ../../src/ondisk/core_ondisk.md:21 6bdcd962088d411ebc6eaaa7ace44d01 +msgid "" +"I/O amplification from **extra metadata access** should be as small as " +"possible." +msgstr "因**额外元数据访问**导致的 I/O 放大应尽可能小。" + +#: ../../src/ondisk/core_ondisk.md:24 a72537642fbf436cb6b130c0ddcd61a0 +msgid "" +"There are _only **three** on-disk components to form a full filesystem " +"tree_: superblock, inodes, and directory entries." +msgstr "构成完整文件系统树的磁盘组件_只有**三个**:superblock、inode 和 directory entry。" + +#: ../../src/ondisk/core_ondisk.md:27 6537bbf53a3f4e169adce3e415608e2b +msgid "" +"Note that only the superblock needs to be kept at a fixed offset, as " +"mentioned below." +msgstr "请注意,如下文所述,只有 superblock 需要保持在固定偏移处。" + +#: ../../src/ondisk/core_ondisk.md:29 ebc58450658f4ff0bd36c70df274be4b +msgid "Conformance to Core Format" +msgstr "核心格式合规性" + +#: ../../src/ondisk/core_ondisk.md:31 08c9a5a315094eb0af4ce4e2f34e0d77 +msgid "" +"An EROFS image conforms to the core on-disk format if and only if **all**" +" of the following conditions are met:" +msgstr "当且仅当满足以下**全部**条件时,EROFS 镜像才符合核心磁盘格式:" + +#: ../../src/ondisk/core_ondisk.md:34 077867e415cc48bcb377cd191396bafc +msgid "" +"The `is_compressed` field (offset 0x54, 2 bytes) in the superblock is " +"**0**." +msgstr "superblock 中的 `is_compressed` 字段(偏移 0x54,2 字节)为 **0**。" + +#: ../../src/ondisk/core_ondisk.md:35 1ca3bb2d006f47258e0de78eda765cab +msgid "" +"All bits in `feature_compat` and `feature_incompat`, except those listed " +"in the [Feature Flags](#feature-flags) section below, are **0**." +msgstr "`feature_compat` 和 `feature_incompat` 中,除下文 [Feature Flags](#feature-flags) 列出的位外,其余位均为 **0**。" + +#: ../../src/ondisk/core_ondisk.md:38 de3fc61242434a50911e65514e4f199b +msgid "" +"An image that does not meet these conditions uses one or more optional " +"features described in separate feature-specific documents. Note that the " +"core on-disk format has always been supported since Linux 5.4; thus, the " +"48-bit layout is not part of the core on-disk format (for example), and " +"not all users need 48-bit block addressing." +msgstr "不符合这些条件的镜像使用了单独特性文档中描述的一项或多项可选特性。请注意,核心磁盘格式自 Linux 5.4 起始终受支持;因此,48-bit 布局不是核心磁盘格式的一部分(举例而言),并非所有用户都需要 48-bit 块寻址。" + +#: ../../src/ondisk/core_ondisk.md:45 f2583f1dbeb64b34a9ce30400968b22b +msgid "Superblock" +msgstr "Superblock" + +#: ../../src/ondisk/core_ondisk.md:47 5e7af6cd36ba45b2b890c42907588412 +msgid "" +"The EROFS superblock is located at a fixed absolute offset of **1024 " +"bytes**. Its base size is 128 bytes. When `sb_extslots` is non-zero, the " +"total superblock size is `128 + sb_extslots * 16` bytes. The first 1024 " +"bytes are unused, which allows for support of other advanced formats " +"based on EROFS, as well as the installation of x86 boot sectors and other" +" oddities." +msgstr "EROFS superblock 位于固定的绝对偏移 **1024 字节**处。其基础大小为 128 字节。当 `sb_extslots` 非零时,superblock 总大小为 `128 + sb_extslots * 16` 字节。前 1024 字节未使用,以便支持基于 EROFS 的其他高级格式,以及安装 x86 boot sector 等其他特殊用途。" + +#: ../../src/ondisk/core_ondisk.md:53 7eb8a97776434fa0b959238ff13a1575 +msgid "Field Definitions" +msgstr "字段定义" + +#: ../../src/ondisk/core_ondisk.md ../../src/ondisk/core_ondisk.md:126 +#: ../../src/ondisk/core_ondisk.md:268 01f234a72cf74a1ebbe96f1cfbe65710 +#: 11baa79287ee41e9877994d03f084d3c a051fa1a5b034db7af306ea7125b44b0 +#: af9a9c78543f441eac200b0d641f5978 e6612677e9be4e77a528cdc767b53688 +msgid "Offset" +msgstr "偏移" + +#: ../../src/ondisk/core_ondisk.md ../../src/ondisk/core_ondisk.md:126 +#: ../../src/ondisk/core_ondisk.md:268 1fe3df4bf84847abaf9434f6591297b0 +#: 22a341927ec64f1cb3c3821249e887eb 2b8a41c62dce40b5a1d21eb7c4670ef2 +#: 8bcb913b71374c7d98f6eb9a9c1999f4 eb728c65142d4ad7a472542b8ad87248 +msgid "Size" +msgstr "大小" + +#: ../../src/ondisk/core_ondisk.md ../../src/ondisk/core_ondisk.md:126 +#: ../../src/ondisk/core_ondisk.md:268 2f7834030159466a92540aff42fe5276 +#: 67d1f2fb47a14edd8b5e7a2b7dc4f530 9dd4a13611cc46089298eb55b964cdd9 +#: fb433232eb5f436b807ef47c97e2dc35 +msgid "Type" +msgstr "类型" + +#: ../../src/ondisk/core_ondisk.md ../../src/ondisk/core_ondisk.md:126 +#: ../../src/ondisk/core_ondisk.md:228 ../../src/ondisk/core_ondisk.md:268 +#: 2befb1cede9f488891d87f6fcd27f030 306a21a974fc449cb491f56db852a553 +#: 643a3f507bac4d7b83371a65597809af 727baf76034147df9c8e1b68a4b96bc1 +#: b336830532b848be89137176ff817979 b6ac31cf63314f6f979a950742172c65 +msgid "Name" +msgstr "名称" + +#: ../../src/ondisk/core_ondisk.md ../../src/ondisk/core_ondisk.md:126 +#: ../../src/ondisk/core_ondisk.md:228 ../../src/ondisk/core_ondisk.md:268 +#: 13e86b80f02c42fe90967e1b9d78bd09 26e58fe2a08046de8c545a1e0b3432c0 +#: 30128af046ba4fb587388db29d7b3439 37bb2bca0b8242bf8148b25689648db7 +#: 6568998549a14f05b818b7927a2d8b44 a5e6404659b74113b1c0bc5d65809198 +#: b06c8c8df9274f3492e51929a89f6363 b2d3197745504cfc8d0762c77d659325 +msgid "Description" +msgstr "描述" + +#: ../../src/ondisk/core_ondisk.md ../../src/ondisk/core_ondisk.md:126 +#: ../../src/ondisk/core_ondisk.md:268 0bcdbe79bf3743b897eaaa31da5c3c17 +#: 3c25df12ca4a451c90b3451cfc5779e0 92e3195a78f34f3da813b166e58d7881 +#: d40940072c1243c6b93fe8c85c5b0ff5 +msgid "0x00" +msgstr "0x00" + +#: ../../src/ondisk/core_ondisk.md ../../src/ondisk/core_ondisk.md:126 +#: ../../src/ondisk/core_ondisk.md:268 0e53aa1957364f78bf15d898e7cbe807 +#: 25c5e0dae05c4cf394224751a8b64f73 27e03f448ff34de89e880a5d70103063 +#: 31363c09665a4ed5bea1391f7550127a 35c8b868848640c5a93cb228316e93ea +#: 3a27303fd5ef44b399d2a89423e223a4 3b003f4c2df043edbdd4c1b4e4becff9 +#: 464bfa395c054cf89b80bf50911595cf 51a444b9453e4638806d0f0b92dab494 +#: 58ec7b796d844426854bfafc62450a73 66d6860d7f5c4b859ccba4ced7fc9e35 +#: 68197736d01d4144859139617b14df7b 6cb937dfbf954ce09a219e4432045d7e +#: 83aea92db5d84b5aae6acbcb54d53096 856ebb05ac55448099bf35188d70a6ed +#: 9797a3237b38413e8c126601390a823f ad655f302c8048e8a486d9d51da51a69 +#: b847456285e24d09aec12e25bcedc44f bc6ad54205b14765bddbffa3111042ba +#: ca6a46c620a04fa7b98c67ddd18f27eb d21bf3d4163943d2adf09b81d78e1d73 +#: d478900467974207a3da59c31854e90d d5205bdac2ef4bc399952bc6c759ba90 +#: f5590b5f282244b3b4a4152f291f595a +msgid "4" +msgstr "4" + +#: ../../src/ondisk/core_ondisk.md ../../src/ondisk/core_ondisk.md:126 +#: 01738dca9eae48be8baa7cafe6193c4a 0a8864de2cdd42b8ae9a255f367026ac +#: 0e68068e947f4a1597a68513b17104e5 25e24461feca445a8a59721e59ec7e0f +#: 262e323c651744b9b95971be93465abf 3e242a4a2773484caf232f994d198f5c +#: 3f210df5ce8b4835b91abfd51d5c1374 4c03a8dd112a46a3b4cf621f9ceaf7ac +#: 639220e3218049e0948bed682332b259 73612b0e8e774dd0a33fa97f4300a934 +#: 7afe28cae294441e91e501dc65f06fd8 aa5aee8d7a6647deb7dd5f11ecf1cc79 +#: aa753c9972bf4bb7ae5f68644bbac0a4 b3a22a0f4d5440d5a93075c86504bcec +#: bffc7e41ca8e473ebb38581565dcc6c1 c292c0630cdf424a819ca509cae9bb3d +#: dbf066b5d2744363994c07bde2b189a9 f16a27dab37c4b42a28910e17fc5498d +#: f5a2e042d13b451798fd654e32a4d066 fcf58f3b0c7943f0914890f8aabb99f4 +msgid "`u32`" +msgstr "`u32`" + +#: ../../src/ondisk/core_ondisk.md 8b6a3f2572b144c98595fef30fbcf861 +msgid "`magic`" +msgstr "`magic`" + +#: ../../src/ondisk/core_ondisk.md 79029d5f9ffe496e96e26a267dfa63a5 +msgid "Magic signature: `0xE0F5E1E2`" +msgstr "Magic 签名:`0xE0F5E1E2`" + +#: ../../src/ondisk/core_ondisk.md ../../src/ondisk/core_ondisk.md:126 +#: 030893b8905f4098afe677b09b2640b4 2105dd02ff3f47afb0ec71c4ed45f8f8 +#: ea006afb243644d195da1c7c5e40212f +msgid "0x04" +msgstr "0x04" + +#: ../../src/ondisk/core_ondisk.md d0d6b6ef7c5e4408921992b1a86f7d6d +msgid "`checksum`" +msgstr "`checksum`" + +#: ../../src/ondisk/core_ondisk.md a220040cb0fc48928266d61584c210b8 +msgid "CRC32-C checksum of the superblock block; see {ref}`superblock-checksum`" +msgstr "superblock 块的 CRC32-C checksum;参见 {ref}`superblock-checksum`" + +#: ../../src/ondisk/core_ondisk.md ../../src/ondisk/core_ondisk.md:126 +#: ../../src/ondisk/core_ondisk.md:268 1466410e21b049cfb7e078df370748c1 +#: 33ebd523bb2248578f326a054cf809ff ac013e9780234612adb6963ff984e5e6 +#: da364e156d1949a695834b8d4434f1b0 +msgid "0x08" +msgstr "0x08" + +#: ../../src/ondisk/core_ondisk.md ed0cc840e468401faf2982af491c4182 +msgid "`feature_compat`" +msgstr "`feature_compat`" + +#: ../../src/ondisk/core_ondisk.md a9582c6f1dc444ccb40e10f0ee51ebdf +msgid "Compatible feature flags; see {ref}`feature-flags`" +msgstr "兼容特性标志;参见 {ref}`feature-flags`" + +#: ../../src/ondisk/core_ondisk.md ../../src/ondisk/core_ondisk.md:126 +#: 0ad9839ffbe44d41b9953d453e82d7c0 d4aa3abd21de4b188e404b238681325f +msgid "0x0C" +msgstr "0x0C" + +#: ../../src/ondisk/core_ondisk.md ../../src/ondisk/core_ondisk.md:126 +#: ../../src/ondisk/core_ondisk.md:268 2808d29aefbf4132b3ce3d05de9c1f05 +#: 46e835b1f1fb466a80a2e843aaae2c99 4dadd843d20c492daf4da7ed496cd7b3 +#: 562e9b434e3d400b9348ba3f77364a26 6591bcd0b49545ef9bce0d18495880a5 +#: 80fd9948e3c144ca9b2f07a011cccac4 a0c233c3e2c14ae9910a568b1176b251 +#: b26acb6bc44f4ef2ad0c7882bd4c530f d19c955c8940470ebfdb24bc7dbc8a76 +#: e9860bfeae944d7480b9121cf1a88346 +msgid "1" +msgstr "1" + +#: ../../src/ondisk/core_ondisk.md ../../src/ondisk/core_ondisk.md:268 +#: 15edb8fef62240c8b8cbd86731d92d7b 64f01c93bf94435688ec808dcf18c406 +#: 68625c1c141843ca976089ed43dbc8ba 8cdf471ae8f1441fa7b9b0930f692a33 +#: 970efcd8380448ad98dc9ec11bb4bb6b dda339bbb8b64ab8bd334b4154644a3c +#: e735cc539ec54be5ade02f9ac27ed29c +msgid "`u8`" +msgstr "`u8`" + +#: ../../src/ondisk/core_ondisk.md e2d1fa7140ba400dba5bf54e03fc5cc7 +msgid "`blkszbits`" +msgstr "`blkszbits`" + +#: ../../src/ondisk/core_ondisk.md e89d15051bd44911912f9fb63ca7cd28 +msgid "Block size = `2^blkszbits`; minimum 9" +msgstr "块大小 = `2^blkszbits`;最小为 9" + +#: ../../src/ondisk/core_ondisk.md 728a603464b74046bf4de0fcf0850599 +msgid "0x0D" +msgstr "0x0D" + +#: ../../src/ondisk/core_ondisk.md 98a074446f3a45969ccd203c9f042a64 +msgid "`sb_extslots`" +msgstr "`sb_extslots`" + +#: ../../src/ondisk/core_ondisk.md ea52292c284a4689a408a98e7e6e8231 +msgid "Number of 16-byte superblock extension slots" +msgstr "16 字节 superblock 扩展槽数量" + +#: ../../src/ondisk/core_ondisk.md c40d13cef56e4ac990eb0768acdf5336 +msgid "0x0E" +msgstr "0x0E" + +#: ../../src/ondisk/core_ondisk.md ../../src/ondisk/core_ondisk.md:126 +#: ../../src/ondisk/core_ondisk.md:268 1537b128537846bf8ac408320227d3d0 +#: 494c586268774956896fc102e977e8cc 63ea37b3577f443d815814e30950f71e +#: 733a6362bdb44016beaacca72809e310 73a91a3687384c9d98d0e651edbf880a +#: 7532f77a66f247f2bf8e3b68b5d364f2 77002b84872447b19a5be0b374f1c67c +#: 93e5622fd49a4aba8b523a5f5816ac32 ae978d7dcbd5462badc1c5415a4fe239 +#: bd0588ff49fc476cba7f99a0314507af bd25c27c153042cd8776279c35dd4084 +#: c145b4a09fe94ed295c413729fdc96f0 de19ec2a27c848f6b214fe2e97151952 +#: f806bdfdd4114748a4c0e5361f9706e8 fd705e3f795e4f90886f62680b84c85b +msgid "2" +msgstr "2" + +#: ../../src/ondisk/core_ondisk.md ../../src/ondisk/core_ondisk.md:126 +#: ../../src/ondisk/core_ondisk.md:268 004b1c67119944ec9c248c1202656ecc +#: 02b098eeb1804adaba54bae56594b2ad 0b094e2c95f34ddc8b3620e4633bb362 +#: 2452f7f1f67243d783c57328776bef80 3a83e08f41924542b37774aee968be36 +#: 4a843e16684946c988b767559305f113 585bb64295f94f2faacfe45c86ce61c4 +#: 6a376827b7f64dd19be4a8426b8af0ca 7ebe97f90b724df4945e173c778c259f +#: a74f3992682a4dd3a5303c3c15144079 ca423fcf6b7a49e99af0bf50607a1847 +#: e5d87861c9b34d839ac522d0ee31d33b f6a03b07cd5c47e7b0c32bc93ce50ea1 +#: f809d097926846ae973d68cac11208f7 +msgid "`u16`" +msgstr "`u16`" + +#: ../../src/ondisk/core_ondisk.md 5c229012a77d4a26aa12571a2db06772 +msgid "`rootnid_2b`" +msgstr "`rootnid_2b`" + +#: ../../src/ondisk/core_ondisk.md 1ac74e1877a24826a22f2518f1690241 +msgid "Root directory NID" +msgstr "根目录 NID" + +#: ../../src/ondisk/core_ondisk.md ../../src/ondisk/core_ondisk.md:126 +#: 31e973eac3914137915f7822dadeb4cc c464ca4e9b8b4e48b4bdbf04502c265a +#: e65fe2c15ffc4ddeaf135737d787642d +msgid "0x10" +msgstr "0x10" + +#: ../../src/ondisk/core_ondisk.md ../../src/ondisk/core_ondisk.md:126 +#: ../../src/ondisk/core_ondisk.md:268 0df3b078744a4c15bdf9b8086122d89d +#: 5ae044cbdece4959b796ac9c15701890 75310d9bd3ac48948dc3599b44dd591f +#: c0129eb194734b219d960b51ea557a1d e10299cf19d34149872a82ec7a530d7d +#: f791c005926c44c990ff9f7a9b3a0dd0 f978d7bfa06e4d6db9c765422f20f9ba +msgid "8" +msgstr "8" + +#: ../../src/ondisk/core_ondisk.md ../../src/ondisk/core_ondisk.md:126 +#: ../../src/ondisk/core_ondisk.md:268 3fd2c7b4fe0045ef9090f25f0d8220f8 +#: 41877eb9ecee41b895b767ca035750e4 575fed602b634034b5296e5b13bebe47 +#: 5dc1f85ed6394461b3b38bd6cbdbfb5a 9438549224014a3ab9fbc28a2b08c509 +#: 98e8d7cf8e604bff8e06bce753294d85 +msgid "`u64`" +msgstr "`u64`" + +#: ../../src/ondisk/core_ondisk.md b93239b676c6400aacec6f17ad318687 +msgid "`inos`" +msgstr "`inos`" + +#: ../../src/ondisk/core_ondisk.md c62d6e62299c4ffebe183a0d8d7e44e7 +msgid "Total inode count; see {ref}`blocks-and-inos-fields`" +msgstr "inode 总数;参见 {ref}`blocks-and-inos-fields`" + +#: ../../src/ondisk/core_ondisk.md ../../src/ondisk/core_ondisk.md:126 +#: 099395f1ebe34f26a4dd6cd4b77fac66 d84dc7aeb2c649728ce5b1a447031b39 +#: e4f426838132450cab82ec5eaff11f4c +msgid "0x18" +msgstr "0x18" + +#: ../../src/ondisk/core_ondisk.md db0376e4f1dc421bb20d4a2f2b5a99c4 +msgid "`epoch`" +msgstr "`epoch`" + +#: ../../src/ondisk/core_ondisk.md 9d4b11bf24ec4890a57c885585f09857 +msgid "Filesystem creation time, seconds since UNIX epoch" +msgstr "文件系统创建时间,自 UNIX epoch 起的秒数" + +#: ../../src/ondisk/core_ondisk.md ../../src/ondisk/core_ondisk.md:126 +#: 2477913b5586455a8f0ee27141892faf 715baf9bd6d640aa9c73e6d0c2735199 +msgid "0x20" +msgstr "0x20" + +#: ../../src/ondisk/core_ondisk.md afa717725db34b5fa96b19f8c1e7be52 +msgid "`fixed_nsec`" +msgstr "`fixed_nsec`" + +#: ../../src/ondisk/core_ondisk.md 91261dcaee904e12a81cf16bf817edba +msgid "" +"Nanoseconds component shared by all compact inodes; see {ref}`mtime-in-" +"compact-inodes`" +msgstr "所有 compact inode 共享的纳秒分量;参见 {ref}`mtime-in-compact-inodes`" + +#: ../../src/ondisk/core_ondisk.md 06456699d034478baa06f431ef726084 +msgid "0x24" +msgstr "0x24" + +#: ../../src/ondisk/core_ondisk.md 986eb386b47c4b9cbfee352c88c28f6b +msgid "`blocks`" +msgstr "`blocks`" + +#: ../../src/ondisk/core_ondisk.md b52879305d4b46bea8ad26e6858785bc +msgid "Total block count; see {ref}`blocks-and-inos-fields`" +msgstr "块总数;参见 {ref}`blocks-and-inos-fields`" + +#: ../../src/ondisk/core_ondisk.md ../../src/ondisk/core_ondisk.md:126 +#: 4c0e3ae78a8249b4bff636ba96d8bcd8 9677f7f295544765bf71ed602b7b0602 +msgid "0x28" +msgstr "0x28" + +#: ../../src/ondisk/core_ondisk.md 91d42a4822d2463eaa115a06520cadc0 +msgid "`meta_blkaddr`" +msgstr "`meta_blkaddr`" + +#: ../../src/ondisk/core_ondisk.md e1c5f61b0ff548909487c33a11be0c6e +msgid "Start block address to specify the inode-metadata zone" +msgstr "指定 inode-metadata 区域的起始块地址" + +#: ../../src/ondisk/core_ondisk.md ../../src/ondisk/core_ondisk.md:126 +#: 83c6ad950d684d798e45a9638b2281ce 985f232c35bd402c9b44cc745e1caff7 +msgid "0x2C" +msgstr "0x2C" + +#: ../../src/ondisk/core_ondisk.md 1ac6950aa73d44dfb2e4e9810e8d7078 +msgid "`xattr_blkaddr`" +msgstr "`xattr_blkaddr`" + +#: ../../src/ondisk/core_ondisk.md b5868c2483824258911fece5d107518c +msgid "Start block address to specify the extended attribute zone" +msgstr "指定 extended attribute 区域的起始块地址" + +#: ../../src/ondisk/core_ondisk.md ../../src/ondisk/core_ondisk.md:126 +#: 74c5ec4764534f7f863dceffcb2f20ee d4f72a1c84b24d2db967ff97b743566c +msgid "0x30" +msgstr "0x30" + +#: ../../src/ondisk/core_ondisk.md ../../src/ondisk/core_ondisk.md:126 +#: 13bcc2b56bf04796a03dae312904c7ab 54627411cec44b6f81d4fe4f7f310ee0 +#: a10cf815631f42b6a22ea52bdc6cd49b +msgid "16" +msgstr "16" + +#: ../../src/ondisk/core_ondisk.md ../../src/ondisk/core_ondisk.md:126 +#: 055fdf849a8841b2ad3c44aa6535d9e5 10e0813677b7450f9cc9cb79db871089 +#: 6196e4233fcd4958a7d4817c42e7352a 6d38b53db5b64aa2ad7a1926886ad77e +#: d900a6caac314990a7a0ab7fca04e950 d9cb0cbfff5c4336a4cea3818a7a7a2a +msgid "`u8[]`" +msgstr "`u8[]`" + +#: ../../src/ondisk/core_ondisk.md db45a8c12806471dbfb967e8073a621d +msgid "`uuid`" +msgstr "`uuid`" + +#: ../../src/ondisk/core_ondisk.md 879e8546a13d44cb92ada1e91ecac586 +msgid "128-bit UUID for the volume" +msgstr "卷 128-bit UUID" + +#: ../../src/ondisk/core_ondisk.md 0403960af9d24eda8057196705219836 +msgid "0x40" +msgstr "0x40" + +#: ../../src/ondisk/core_ondisk.md 579ce742c5b24b34b6708048c4a75cc0 +msgid "`volume_name`" +msgstr "`volume_name`" + +#: ../../src/ondisk/core_ondisk.md 7da9384780de466c9d69ebb6c98d47f5 +msgid "Filesystem label (not null-terminated if 16 bytes)" +msgstr "文件系统卷标(若长度为 16 字节则不以空字符结尾)" + +#: ../../src/ondisk/core_ondisk.md 90236978147a4219af002a6d941d68db +msgid "0x50" +msgstr "0x50" + +#: ../../src/ondisk/core_ondisk.md d069688bb9f04392b7de8b8385bbacd8 +msgid "`feature_incompat`" +msgstr "`feature_incompat`" + +#: ../../src/ondisk/core_ondisk.md 0b2fba8b44f5476090d5de53f68e39e3 +msgid "Incompatible feature flags; see {ref}`feature-flags`" +msgstr "不兼容特性标志;参见 {ref}`feature-flags`" + +#: ../../src/ondisk/core_ondisk.md cde2a655b7074437b12764a52445b20f +msgid "0x54" +msgstr "0x54" + +#: ../../src/ondisk/core_ondisk.md e86796c2c64f4c298e7ff3ad6355b283 +msgid "`is_compressed`" +msgstr "`is_compressed`" + +#: ../../src/ondisk/core_ondisk.md 31d5769287b34171a3ce58abad6a009e +msgid "0 for non-compressed images, any non-zero value for compressed images" +msgstr "非压缩镜像为 0,压缩镜像为任意非零值" + +#: ../../src/ondisk/core_ondisk.md f79da4985f8a4eeb9e9720557432782f +msgid "0x56" +msgstr "0x56" + +#: ../../src/ondisk/core_ondisk.md 05ca62305c4e4e78a54269c202d7b9cf +#: 191c8bf35a4d4bf482b4089eb777fe09 611c70e1cb7f48ac8bad07ac291f786f +#: 7f8be47a0eb34e5fa2cba9ae0b5ed7fc b0bc6e967b6f4bf285e582f97a214616 +msgid "_dontcare_" +msgstr "_dontcare_" + +#: ../../src/ondisk/core_ondisk.md 6ab38e029a25436981d7f7010faa1d10 +msgid "External device support specific; ignored in core format" +msgstr "外部设备支持专用;核心格式中忽略" + +#: ../../src/ondisk/core_ondisk.md e2c124342b154dc99bb5726ce9d12128 +msgid "0x5A" +msgstr "0x5A" + +#: ../../src/ondisk/core_ondisk.md 46a36cc14db94ae6a943de342a6a23eb +msgid "`dirblkbits`" +msgstr "`dirblkbits`" + +#: ../../src/ondisk/core_ondisk.md a583eea543e446b3a249f6905a1af6d4 +msgid "" +"Directory block size = `2^(blkszbits + dirblkbits)`; strictly 0 in the " +"core format" +msgstr "Directory block 大小 = `2^(blkszbits + dirblkbits)`;核心格式中严格为 0" + +#: ../../src/ondisk/core_ondisk.md 4cdbe2fc03864895b7fd40a461aa19c1 +msgid "0x5B" +msgstr "0x5B" + +#: ../../src/ondisk/core_ondisk.md ../../src/ondisk/core_ondisk.md:268 +#: 166711f11a5d49ce8947eebb5f9fedd3 19186d2c82c5455a94b4903862e50906 +msgid "5" +msgstr "5" + +#: ../../src/ondisk/core_ondisk.md 8bcccc77d894423893973501acaa2a43 +#: c7529ee8e3f54eafa99ac78cc56c6303 +msgid "Xattr specific; ignored in core format" +msgstr "Xattr 专用;核心格式中忽略" + +#: ../../src/ondisk/core_ondisk.md 220e115bd3614f13a5574f85634ba386 +msgid "0x60" +msgstr "0x60" + +#: ../../src/ondisk/core_ondisk.md 1de1cda4c70c418cb06dd76b743753cf +msgid "Compression specific; ignored in core format" +msgstr "压缩专用;核心格式中忽略" + +#: ../../src/ondisk/core_ondisk.md 13e88e34291a4db0a9dbe35e347beb25 +msgid "0x68" +msgstr "0x68" + +#: ../../src/ondisk/core_ondisk.md ../../src/ondisk/core_ondisk.md:126 +#: ../../src/ondisk/core_ondisk.md:268 3cbaec4832e54d09bc79d55edacadc80 +#: 62ed4954c87f4f698c228f90b622201d 7147f99a630447c2b7799587906cfc09 +#: 9d7f70ad919d4809a726bbbdf2f5163b a19304d717444ea99d22aeb154bd92ce +#: a1b770ab2c64455d82ad262825e890a4 a6b56c91aca0457abed0d6558d477a83 +#: bd9be8555fd243b0aca8743a0cb0d6ee c1e8c62e21ad4633864c4fd7fb81c9b6 +#: cbe5b715bdb749e0bd3e94a14465f61d +msgid "_reserved_" +msgstr "_reserved_" + +#: ../../src/ondisk/core_ondisk.md ../../src/ondisk/core_ondisk.md:126 +#: ../../src/ondisk/core_ondisk.md:268 00451c6fcf7a49c3a2f2bd55baec00c8 +#: 0f32c378425f45c98b07ef2c5d61060c 77208653ffe6403cbd8255930d3a3c49 +#: 7e143ff3abdd4fbabec584793f483e78 b39282864af241c19e7a6ef8261f650b +#: d15c64737e1f4ab181c88fd50ea7fca9 e0be668f68c047daad23e9bda049556d +#: fe321f8233c447c2af5ab17dc0232b96 +msgid "Reserved; must be 0" +msgstr "保留;必须为 0" + +#: ../../src/ondisk/core_ondisk.md be581e72cbe84adbb8820bd88805d802 +msgid "0x69" +msgstr "0x69" + +#: ../../src/ondisk/core_ondisk.md 0bec370ae0514805b1b18833692ea2bb +msgid "0x6A" +msgstr "0x6A" + +#: ../../src/ondisk/core_ondisk.md 7dd8ece524d04c24afb031d85bd5dbb2 +msgid "0x6C" +msgstr "0x6C" + +#: ../../src/ondisk/core_ondisk.md b59d586ff8b04820a457ebc2d0f25481 +msgid "12" +msgstr "12" + +#: ../../src/ondisk/core_ondisk.md ../../src/ondisk/core_ondisk.md:126 +#: 1b6a54ef074c43d38e624eb18e49cdbb 7a08aeb6a35a42c6a817cc01f36a17a9 +#: 7b76ee39f94f48e8b7609fd0181edff6 +msgid "48-bit layout specific; ignored in core format" +msgstr "48-bit 布局专用;核心格式中忽略" + +#: ../../src/ondisk/core_ondisk.md dded841aaacc4a9bb2621be4d578c1f9 +msgid "0x78" +msgstr "0x78" + +#: ../../src/ondisk/core_ondisk.md:83 105bccf38d3e4b7ea5e1977af1fb59df +msgid "Note the difference between _reserved_ and _dontcare_ fields:" +msgstr "请注意 _reserved_ 与 _dontcare_ 字段的区别:" + +#: ../../src/ondisk/core_ondisk.md:84 ec2bb54335e340d3a1ba6fd8c996cb32 +msgid "" +"**_reserved_**: Users must not use these fields, and they must be filled " +"with `0` to comply with the supported features or reserve for future use." +msgstr "**_reserved_**:用户不得使用这些字段,必须填入 `0`,以符合所支持特性要求或为将来保留。" + +#: ../../src/ondisk/core_ondisk.md:86 3c3fd918451d4870a3396c84897c7928 +msgid "" +"**_dontcare_**: Users can safely use these for other purposes as long as " +"the corresponding incompatible feature flag is not set." +msgstr "**_dontcare_**:只要未设置相应的不兼容特性标志,用户即可安全地将其用于其他用途。" + +#: ../../src/ondisk/core_ondisk.md:89 2ecdb488c61b48ed8216d2bf4e7fcd28 +msgid "Magic Number" +msgstr "Magic Number" + +#: ../../src/ondisk/core_ondisk.md:91 486d39ee29344ef8baab8f0196541d60 +msgid "" +"The magic number at offset 0x00 must be `0xE0F5E1E2` (little-endian). A " +"reader must reject any image whose first four bytes at offset 1024 do not" +" match this value." +msgstr "偏移 0x00 处的 magic number 必须为 `0xE0F5E1E2`(小端序)。读取器必须拒绝任何在偏移 1024 处前 4 字节不匹配该值的镜像。" + +#: ../../src/ondisk/core_ondisk.md:95 c313269df7f64f1189a920c1c379cfe4 +msgid "Superblock Checksum" +msgstr "Superblock Checksum" + +#: ../../src/ondisk/core_ondisk.md:97 0016b03771fd48b7bfc6ae732406e9fd +msgid "" +"When `EROFS_FEATURE_COMPAT_SB_CHKSUM` is set, the `checksum` field " +"contains a CRC32-C digest. The digest is computed over the byte range " +"`[1024, 1024 + block_size)`, with the four bytes of the `checksum` field " +"itself treated as zero during computation." +msgstr "当设置 `EROFS_FEATURE_COMPAT_SB_CHKSUM` 时,`checksum` 字段包含一个 CRC32-C 摘要。摘要计算的字节范围为 `[1024, 1024 + block_size)`,计算时 `checksum` 字段本身的 4 字节按零处理。" + +#: ../../src/ondisk/core_ondisk.md:101 1fc62a9d6d1940faa9ede1cfa0dfbd92 +msgid "For example, when `blkszbits` is 12 (block size is 4 KiB):" +msgstr "例如,当 `blkszbits` 为 12(块大小为 4 KiB)时:" + +#: ../../src/ondisk/core_ondisk.md 765fed8e2de14f1784770651718227f6 +msgid "Checksum covered" +msgstr "是否覆盖校验和" + +#: ../../src/ondisk/core_ondisk.md ../../src/ondisk/core_ondisk.md:126 +#: ../../src/ondisk/core_ondisk.md:268 2e27be0ecd9b4294ace6edfc654085ff +#: 443021a2f5c64e2b81b296e5e738c390 d3d5ca7be4ed49589861fe4024857990 +msgid "0" +msgstr "0" + +#: ../../src/ondisk/core_ondisk.md 0ab5729193884992a88c1c0acb11a28f +#: b82e4c408fa549edb1e4cb5cda42d07a +msgid "1024" +msgstr "1024" + +#: ../../src/ondisk/core_ondisk.md 54ced29e9f6f4780a8b2644029410dc6 +msgid "Padding" +msgstr "填充" + +#: ../../src/ondisk/core_ondisk.md f23da42bc9e246b4aba6a5363d3123ae +msgid "No" +msgstr "否" + +#: ../../src/ondisk/core_ondisk.md 5864e115df05476b9f5f74807080ea84 +msgid "Magic number" +msgstr "Magic number" + +#: ../../src/ondisk/core_ondisk.md 67c956302c8648b49c2ef545c4fd523a +#: 9d7e7f60e2f44e96aaa6f3fa4825910e e591e7fa95234e8e90d2854b8697c0ef +msgid "Yes" +msgstr "是" + +#: ../../src/ondisk/core_ondisk.md 85c7eefc14fe4584abe726c7d11ca8a2 +msgid "1028" +msgstr "1028" + +#: ../../src/ondisk/core_ondisk.md 02bc4a037dc346c799b8626c8a5f31e0 +msgid "Checksum field in superblock, filled with zero" +msgstr "superblock 中的 checksum 字段,计算时置零" + +#: ../../src/ondisk/core_ondisk.md e7edde6509b945d889031bd05330ee35 +msgid "1032" +msgstr "1032" + +#: ../../src/ondisk/core_ondisk.md d1fc6b9d50bc4d1db501ce212e437e99 +msgid "3064" +msgstr "3064" + +#: ../../src/ondisk/core_ondisk.md c90d87df2c23477f8b1df97401f079a3 +msgid "Remaining bytes in the filesystem block" +msgstr "文件系统块中的剩余字节" + +#: ../../src/ondisk/core_ondisk.md:110 e7a568f21f254465bd10638d6625c66d +msgid "" +"**Tip:** Some implementations (e.g., `java.util.zip.CRC32C`) apply a " +"final bit-wise inversion. If the superblock checksum does not match, try " +"inverting it." +msgstr "**提示:**某些实现(例如 `java.util.zip.CRC32C`)会应用最终按位取反。若 superblock checksum 不匹配,请尝试取反。" + +#: ../../src/ondisk/core_ondisk.md:114 e551475697984f66a419fb4af60a5d7f +msgid "Feature Flags" +msgstr "Feature Flags" + +#: ../../src/ondisk/core_ondisk.md:116 c4b0021fb85c4e2f8140aac2540010a7 +msgid "`feature_compat` — Compatible Feature Flags" +msgstr "`feature_compat` —— 兼容特性标志" + +#: ../../src/ondisk/core_ondisk.md:118 f6160ff0c4124c22ae0a5a75ac739003 +msgid "" +"A mount implementation that does not recognise a bit in `feature_compat` " +"may still mount the filesystem without loss of correctness." +msgstr "若 mount 实现无法识别 `feature_compat` 中的某位,仍可挂载文件系统且不损失正确性。" + +#: ../../src/ondisk/core_ondisk.md a01bbd968f8946aa820fcd12972455b1 +msgid "Bit mask" +msgstr "位掩码" + +#: ../../src/ondisk/core_ondisk.md f3dc8b15e1d84f0f98c270269c079806 +msgid "`0x00000001`" +msgstr "`0x00000001`" + +#: ../../src/ondisk/core_ondisk.md 7240185bce3b4360ba821308d6438f82 +msgid "`EROFS_FEATURE_COMPAT_SB_CHKSUM`" +msgstr "`EROFS_FEATURE_COMPAT_SB_CHKSUM`" + +#: ../../src/ondisk/core_ondisk.md 46edb92234f64f30af4a4bb64e05520f +msgid "Superblock CRC32-C checksum is present; see {ref}`superblock-checksum`" +msgstr "存在 superblock CRC32-C checksum;参见 {ref}`superblock-checksum`" + +#: ../../src/ondisk/core_ondisk.md 8c5797e75dbe4d7595bbd94a82c1030c +msgid "`0x00000002`" +msgstr "`0x00000002`" + +#: ../../src/ondisk/core_ondisk.md 387e1df6dd334c5ea1a5e6a6215cacb0 +msgid "`EROFS_FEATURE_COMPAT_MTIME`" +msgstr "`EROFS_FEATURE_COMPAT_MTIME`" + +#: ../../src/ondisk/core_ondisk.md afc99004e287422e9d3ac67c785387f3 +msgid "Per-inode mtime is stored in extended inodes" +msgstr "每个 inode 的 mtime 存储在 extended inode 中" + +#: ../../src/ondisk/core_ondisk.md:127 c009af569e8c4cebaacf6284590044a2 +msgid "" +"For new filesystem builders, it is recommended to always set " +"`EROFS_FEATURE_COMPAT_MTIME`, since it indicates that all inode " +"timestamps record modification time (mtime) rather than change time " +"(ctime)." +msgstr "对于新的文件系统构建工具,建议始终设置 `EROFS_FEATURE_COMPAT_MTIME`,因为它表示所有 inode 时间戳记录的是修改时间(mtime)而非变更时间(ctime)。" + +#: ../../src/ondisk/core_ondisk.md:132 b90dfbadf8b04be8aecfa0d7d01f5733 +msgid "`feature_incompat` — Incompatible Feature Flags" +msgstr "`feature_incompat` —— 不兼容特性标志" + +#: ../../src/ondisk/core_ondisk.md:134 6d8169cb9e0c4d088fd7b22e8621343f +msgid "" +"A runtime implementation that doesn't implement any feature implied by a " +"bit in `feature_incompat` must refuse to mount the entire filesystem." +msgstr "若运行时实现未实现 `feature_incompat` 中某位所暗示的任何特性,则必须拒绝挂载整个文件系统。" + +#: ../../src/ondisk/core_ondisk.md:137 824643eeb6b7470f96a331abdf4ad653 +msgid "" +"The core on-disk format defines no incompatible feature flags. A non-zero" +" `feature_incompat` value indicates one or more non-core feature " +"extensions." +msgstr "核心磁盘格式未定义任何不兼容特性标志。非零的 `feature_incompat` 值表示存在一个或多个非核心特性扩展。" + +#: ../../src/ondisk/core_ondisk.md:141 2cbe3a7c7c5c40b896a38538dfabf529 +msgid "`blocks` and `inos` Fields" +msgstr "`blocks` 与 `inos` 字段" + +#: ../../src/ondisk/core_ondisk.md:143 6192db948c1f498da9131f038e8efb90 +msgid "" +"The `blocks` and `inos` fields are primarily intended for `statvfs(3)` " +"reporting. For dynamically generated EROFS filesystems, these fields can " +"be set to `0`." +msgstr "`blocks` 和 `inos` 字段主要用于 `statvfs(3)` 报告。对于动态生成的 EROFS 文件系统,这些字段可设为 `0`。" + +#: ../../src/ondisk/core_ondisk.md:147 42135f37995c47cc98876a9c010ec9aa +msgid "" +"Implementations should **not** use the `blocks` field to validate whether" +" a block address or NID is valid. Such checks are unnecessary; malicious " +"block addresses or NIDs will simply result in -EIO or reading corrupted " +"(meta)data without causing any real harmful behaviors. Furthermore, a " +"maliciously crafted image can easily bypass bounds checking by modifying " +"the `blocks` field accordingly, making such validation meaningless." +msgstr "实现**不应**使用 `blocks` 字段来验证块地址或 NID 是否有效。此类检查没有必要;恶意的块地址或 NID 只会导致 -EIO 或读取损坏的(元)数据,而不会造成任何真正的危害。此外,恶意构造的镜像可以通过相应修改 `blocks` 字段轻易绕过边界检查,使此类验证失去意义。" + +#: ../../src/ondisk/core_ondisk.md:155 570f29d16dd146879018e12bd70bd868 +msgid "Inodes" +msgstr "Inodes" + +#: ../../src/ondisk/core_ondisk.md:157 225bf150a52b4998829661276a73eb2d +msgid "" +"Each on-disk inode must be aligned to a **32-byte inode slot** boundary, " +"which is set to be kept in line with the compact inode size. Given a NID " +"`nid`, its inode can be located in O(1) time by computing the absolute " +"byte offset as follows:" +msgstr "每个磁盘 inode 必须与 **32 字节 inode slot** 边界对齐,这与 compact inode 大小保持一致。给定 NID `nid`,可通过以下方式在 O(1) 时间内计算其绝对字节偏移来定位 inode:" + +#: ../../src/ondisk/core_ondisk.md:165 e495d78da21a49b889e784f0133512b5 +msgid "" +"The NIDs for the root directory and special-purpose inodes are stored in " +"the superblock. Valid inode sizes are either **32 bytes** (compact) or " +"**64 bytes** (extended), distinguished by bit 0 of the `i_format` field." +msgstr "根目录和特殊用途 inode 的 NID 存储在 superblock 中。有效 inode 大小为 **32 字节**(compact)或 **64 字节**(extended),由 `i_format` 字段的第 0 位区分。" + +#: ../../src/ondisk/core_ondisk.md:169 52c2e67389384ed0b1c2d7a14fe20993 +msgid "Compact Inode (32 bytes)" +msgstr "Compact Inode(32 字节)" + +#: ../../src/ondisk/core_ondisk.md:171 4a645281acdd4a8690b25f8036f10c32 +msgid "" +"Defined as [`struct " +"erofs_inode_compact`](https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/fs/erofs/erofs_fs.h):" +msgstr "定义见 [`struct erofs_inode_compact`](https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/fs/erofs/erofs_fs.h):" + +#: ../../src/ondisk/core_ondisk.md:126 dc68bda22d9d4883b93814ca126bd40b +#: dea6433d606043c9a90a876b32692df2 +msgid "`i_format`" +msgstr "`i_format`" + +#: ../../src/ondisk/core_ondisk.md:126 8e8d834903d6451a88a15afb568123c3 +#: f6acfbee79a24d3ba5fd491760d3b115 +msgid "Inode format hints; see {ref}`i_format-field`" +msgstr "Inode 格式提示;参见 {ref}`i_format-field`" + +#: ../../src/ondisk/core_ondisk.md:126 41f0ab37ecf448948725ff0134795e3a +#: a52a2a666e29492cb01745b360e8ba42 +msgid "0x02" +msgstr "0x02" + +#: ../../src/ondisk/core_ondisk.md:126 7b61100b20dc4127bbfb2e5f4414cbc1 +#: e46e0cedf48a43d582d2dbbf9cd0e272 +msgid "Xattr specific; must be 0 if no xattrs" +msgstr "Xattr 专用;若无 xattr 必须为 0" + +#: ../../src/ondisk/core_ondisk.md:126 3b12e511d0754f5aa6cf95f4ab743973 +#: fa963dc1b7634174aea6a93502f134fc +msgid "`i_mode`" +msgstr "`i_mode`" + +#: ../../src/ondisk/core_ondisk.md:126 a143e9762ff04e338986518ddcda44f4 +#: abb3ad089d8c4cff9c42320603176abd +msgid "File type and permission bits" +msgstr "文件类型与权限位" + +#: ../../src/ondisk/core_ondisk.md:126 eabcc171f5c2419cb91caf4b63d71b3e +#: ff840c0a77c04e65a4342cbf33e62053 +msgid "0x06" +msgstr "0x06" + +#: ../../src/ondisk/core_ondisk.md:126 3a61da0c16054b2ca9a3a3e2855e6692 +#: 9d6341bc35d24a499d70b111bae77483 +msgid "`i_nlink`" +msgstr "`i_nlink`" + +#: ../../src/ondisk/core_ondisk.md:126 4a3659648cbe41b9bc1dabe98ca69f23 +msgid "Hard link count" +msgstr "硬链接计数" + +#: ../../src/ondisk/core_ondisk.md:126 dfafe7022a5e45c58e2174dee861fa14 +#: f8d0b67453bc44749acb19798de91f42 +msgid "`i_size`" +msgstr "`i_size`" + +#: ../../src/ondisk/core_ondisk.md:126 128d5263d9914f36b4c17840a56f347c +msgid "File size in bytes (32-bit)" +msgstr "文件大小,以字节为单位(32 位)" + +#: ../../src/ondisk/core_ondisk.md:126 2918854ed4024b31af7d5af66cf0da01 +#: a3db12861daa4670b525bb24a357d931 +msgid "`i_u`" +msgstr "`i_u`" + +#: ../../src/ondisk/core_ondisk.md:126 4459d6f1ee8d45488c09855008ebfc9a +#: 80075537d56543c4b984bf78e1e84524 +msgid "Union; see {ref}`i_u-union`" +msgstr "联合体;参见 {ref}`i_u-union`" + +#: ../../src/ondisk/core_ondisk.md:126 819bd052e3104a508cc9f0a231dfe480 +#: 94c4706c4c4649b8a09cb4cdc3936333 +msgid "0x14" +msgstr "0x14" + +#: ../../src/ondisk/core_ondisk.md:126 12228635a0924a888b023c2a45a26b44 +#: aa24dfa022b8475a85fd8d73a76f9c08 +msgid "`i_ino`" +msgstr "`i_ino`" + +#: ../../src/ondisk/core_ondisk.md:126 ddc28e2e5cd14c25b7728d1a1ecfcc17 +#: e468766d90c84b81b8cad3fac6aeaee4 +msgid "Inode serial number for 32-bit `stat(2)` compatibility" +msgstr "用于兼容 32 位 `stat(2)` 的 inode 序列号" + +#: ../../src/ondisk/core_ondisk.md:126 0bd2c2195c6a4af083c2d1adddabfc82 +#: cc5e4f9e019a4a06babe88119e8bc8fc +msgid "`i_uid`" +msgstr "`i_uid`" + +#: ../../src/ondisk/core_ondisk.md:126 c9b120a9510c440ab31b3e3ce81e1d27 +msgid "Owner UID (16-bit)" +msgstr "所有者 UID(16 位)" + +#: ../../src/ondisk/core_ondisk.md:126 2bcf846a6a0e4d2992d631149aa83676 +msgid "0x1A" +msgstr "0x1A" + +#: ../../src/ondisk/core_ondisk.md:126 38c81fdca9384520b11a129946e62927 +#: f58e831c224f44758eac9aa651d510bd +msgid "`i_gid`" +msgstr "`i_gid`" + +#: ../../src/ondisk/core_ondisk.md:126 cf00e967f8064aa581e6c2eb270a8b36 +msgid "Owner GID (16-bit)" +msgstr "所有者 GID(16 位)" + +#: ../../src/ondisk/core_ondisk.md:126 3051b911a23a4ec0a4ccaaccd5afb6ab +#: cabfc743a10c4bd488d12660d17d28bc +msgid "0x1C" +msgstr "0x1C" + +#: ../../src/ondisk/core_ondisk.md:188 cd7e3e20512647f0a8f5100c7f77a027 +msgid "Modification Time in Compact Inodes" +msgstr "Compact Inode 中的修改时间" + +#: ../../src/ondisk/core_ondisk.md:190 aebd941f72ed4424b035a9598388ecc6 +msgid "" +"Due to space constraints, compact inodes cannot store a full 64-bit per-" +"inode timestamp, let alone an additional nanosecond field. Consequently, " +"when the 48-bit layout extension is unused, the effective timestamp for " +"all compact inodes is `(epoch, fixed_nsec)`, which has been the case " +"since Linux 5.4." +msgstr "由于空间限制,compact inode 无法存储完整的 64-bit 单 inode 时间戳,更无法额外存储纳秒字段。因此,当未使用 48-bit 布局扩展时,所有 compact inode 的有效时间戳为 `(epoch, fixed_nsec)`,自 Linux 5.4 起一直如此。" + +#: ../../src/ondisk/core_ondisk.md:195 1ec1c5304b204e2b8e832d1cdb870be4 +msgid "Extended Inode (64 bytes)" +msgstr "Extended Inode(64 字节)" + +#: ../../src/ondisk/core_ondisk.md:197 eccf25d651474dea99eb5583e8ab3b21 +msgid "" +"Defined as [`struct " +"erofs_inode_extended`](https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/fs/erofs/erofs_fs.h):" +msgstr "定义见 [`struct erofs_inode_extended`](https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/fs/erofs/erofs_fs.h):" + +#: ../../src/ondisk/core_ondisk.md:126 b26f7ac865a64be29dec8ce0e2f707f3 +msgid "File size in bytes (64-bit)" +msgstr "文件大小,以字节为单位(64 位)" + +#: ../../src/ondisk/core_ondisk.md:126 61788e3cf19249d19ded333f33737d4c +msgid "Owner UID (32-bit)" +msgstr "所有者 UID(32 位)" + +#: ../../src/ondisk/core_ondisk.md:126 c35570ec37cd4cd991172794b7e295be +msgid "Owner GID (32-bit)" +msgstr "所有者 GID(32 位)" + +#: ../../src/ondisk/core_ondisk.md:126 5e4689a11f55438d8bfe6d0064ccdadd +msgid "`i_mtime`" +msgstr "`i_mtime`" + +#: ../../src/ondisk/core_ondisk.md:126 ffd85ec4a62a461bbae55c0405c32b2a +msgid "Modification time, seconds since UNIX epoch" +msgstr "修改时间,自 UNIX epoch 起的秒数" + +#: ../../src/ondisk/core_ondisk.md:126 91d4f0a0acc0473db0950d3c245e4492 +msgid "`i_mtime_nsec`" +msgstr "`i_mtime_nsec`" + +#: ../../src/ondisk/core_ondisk.md:126 b6e5b392885341bdb9fb38bfd411c744 +msgid "Nanoseconds component of `i_mtime`" +msgstr "`i_mtime` 的纳秒分量" + +#: ../../src/ondisk/core_ondisk.md:126 eeafb9fbe11447dcb43e669ef3023106 +msgid "Hard link count (32-bit)" +msgstr "硬链接计数(32 位)" + +#: ../../src/ondisk/core_ondisk.md:216 5c21b6062e384848a46662e4033ce11f +msgid "`i_format` Field" +msgstr "`i_format` 字段" + +#: ../../src/ondisk/core_ondisk.md:218 bb0203cc165c4f75969de9a423dc6804 +msgid "" +"The `i_format` field is present at offset 0x00 in both inode variants and" +" encodes layout metadata:" +msgstr "`i_format` 字段位于两种 inode 变体的偏移 0x00 处,用于编码布局元数据:" + +#: ../../src/ondisk/core_ondisk.md:126 72995b3549284db7aef05708d06bb3da +msgid "Bits" +msgstr "位" + +#: ../../src/ondisk/core_ondisk.md:126 2f05da7f4c2f4aac828d8cd4fc8588dd +msgid "Width" +msgstr "宽度" + +#: ../../src/ondisk/core_ondisk.md:126 c2df9dbf320044ad86d5db76456d8c68 +msgid "Inode version: 0 = compact (32-byte), 1 = extended (64-byte)" +msgstr "Inode 版本:0 = compact(32 字节),1 = extended(64 字节)" + +#: ../../src/ondisk/core_ondisk.md:126 a5721f8320e54c8b80baa9ff9522197d +msgid "1–3" +msgstr "1–3" + +#: ../../src/ondisk/core_ondisk.md:126 ../../src/ondisk/core_ondisk.md:268 +#: 810738a158bc4d34ae1125f819472664 8f7b8ff1d53f411bae2a277e1b13b3fe +msgid "3" +msgstr "3" + +#: ../../src/ondisk/core_ondisk.md:126 158c4b7d9d334ac88d37eb629682164d +msgid "" +"Data layout: values 0–4 are defined; 5–7 are reserved. See " +"{ref}`inode_data_layouts`" +msgstr "数据布局:0–4 为已定义值,5–7 为保留值。参见 {ref}`inode_data_layouts`" + +#: ../../src/ondisk/core_ondisk.md:126 46de5e9df3d748aa91d51e7a35140c9f +msgid "5–15" +msgstr "5–15" + +#: ../../src/ondisk/core_ondisk.md:126 3e43a4f995044932ac37881d51a88d2f +msgid "11" +msgstr "11" + +#: ../../src/ondisk/core_ondisk.md:229 0a35dcca95784250b8e324c6592b784c +msgid "" +"When bits 1–3 contain reserved values (5–7), the inode uses an " +"unsupported data layout. Implementations must reject such inodes and " +"return an appropriate error (e.g., \"not supported\"). This typically " +"indicates a maliciously crafted or corrupted image." +msgstr "当第 1–3 位包含保留值(5–7)时,该 inode 使用了不支持的数据布局。实现必须拒绝此类 inode 并返回适当的错误(例如“not supported”)。这通常表示镜像被恶意构造或已损坏。" + +#: ../../src/ondisk/core_ondisk.md:236 73d459ce60b74ead9763017dbe88b96c +msgid "`i_u` Union" +msgstr "`i_u` 联合体" + +#: ../../src/ondisk/core_ondisk.md:238 ce1c3e8afc7347b6963cb5226453382a +msgid "" +"The `i_u` field (4 bytes at offset 0x10) is interpreted based on the data" +" layout:" +msgstr "`i_u` 字段(偏移 0x10 处的 4 字节)根据数据布局进行解释:" + +#: ../../src/ondisk/core_ondisk.md:228 ec7b0946957b4432b02d4c5a641ad50c +msgid "Applicable when" +msgstr "适用情况" + +#: ../../src/ondisk/core_ondisk.md:228 d4e7e0d4d1b04f63ba30f06ab26a6502 +msgid "`i_u.startblk`" +msgstr "`i_u.startblk`" + +#: ../../src/ondisk/core_ondisk.md:228 4851724315b846a8a4c05540823caa7d +msgid "Flat inodes" +msgstr "Flat inode" + +#: ../../src/ondisk/core_ondisk.md:228 407808ba7d4a467da86347072972e2e3 +msgid "Starting block number" +msgstr "起始块号" + +#: ../../src/ondisk/core_ondisk.md:228 fc1b33a6749248d9b4c675ccadaabbea +msgid "`i_u.rdev`" +msgstr "`i_u.rdev`" + +#: ../../src/ondisk/core_ondisk.md:228 a358e00b41b844478e7ac60114d1eaa7 +msgid "Character/block device inodes" +msgstr "字符/块设备 inode" + +#: ../../src/ondisk/core_ondisk.md:228 ec95ab0911834279bfc3dac27e6d708b +msgid "Device ID" +msgstr "设备 ID" + +#: ../../src/ondisk/core_ondisk.md:246 16d88bb594ba4d3bb1bd56e384336d9b +msgid "Inode Data Layouts" +msgstr "Inode 数据布局" + +#: ../../src/ondisk/core_ondisk.md:248 b42107aaef8642af862e41413ceb7072 +msgid "" +"The data layout of an inode is encoded in bits 1–3 of `i_format`. The " +"core format defines two flat layouts." +msgstr "inode 的数据布局编码在 `i_format` 的第 1–3 位中。核心格式定义了两种 flat 布局。" + +#: ../../src/ondisk/core_ondisk.md:251 6dac1858df5b4a91b81ffb2e9043b722 +msgid "`EROFS_INODE_FLAT_PLAIN` (0)" +msgstr "`EROFS_INODE_FLAT_PLAIN` (0)" + +#: ../../src/ondisk/core_ondisk.md:253 ../../src/ondisk/core_ondisk.md:260 +#: 8cc3ad402a504f9b90d2c41f161c84c2 c85a1870dadf4889a1a6000df659c7ad +msgid "`i_u` is interpreted as `startblk` (the 32-bit starting block address)." +msgstr "`i_u` 被解释为 `startblk`(32 位起始块地址)。" + +#: ../../src/ondisk/core_ondisk.md:255 2a206c8df7f24e6594c6bc9fa7c7e530 +msgid "" +"The inode's data lies in consecutive blocks starting from that address, " +"occupying `ceil(i_size / block_size)` consecutive blocks." +msgstr "inode 的数据从该地址开始存放在连续块中,占用 `ceil(i_size / block_size)` 个连续块。" + +#: ../../src/ondisk/core_ondisk.md:258 eea16d39a11b4402974611bbccbfb82a +msgid "`EROFS_INODE_FLAT_INLINE` (2)" +msgstr "`EROFS_INODE_FLAT_INLINE` (2)" + +#: ../../src/ondisk/core_ondisk.md:262 a153c3f2d9d147abbfafb96fab4b75b3 +msgid "" +"The inode's data lies in consecutive blocks starting from that address, " +"except for the tail part (`i_size % block_size`) that is inlined in the " +"block immediately following the inode metadata. If `i_size` is small " +"enough that the entire content fits in the inline tail, there are no " +"preceding blocks and `i_u` is a don't-care field." +msgstr "inode 的数据从该地址开始存放在连续块中,但尾部(`i_size % block_size`)内联在 inode 元数据之后的块中。若 `i_size` 足够小,整个内容都能放入内联尾部,则不存在前置块,且 `i_u` 为 don't-care 字段。" + +#: ../../src/ondisk/core_ondisk.md:269 a49e135218d64fc3bd91c7a5364c15e8 +msgid "" +"This layout is not allowed if the tail inode data block cannot be inlined" +" (e.g., if inlining the tail data would cause the inode to cross a " +"physical block boundary)." +msgstr "如果尾部 inode 数据块无法内联,则不允许使用此布局(例如,内联尾部数据会导致 inode 跨越 physical block 边界)。" + +#: ../../src/ondisk/core_ondisk.md:275 fdb356a79f764742b5f9fb2e98a1d248 +msgid "Directories" +msgstr "Directories" + +#: ../../src/ondisk/core_ondisk.md:277 40442dda62864989be2daefc53e258e6 +msgid "" +"All on-disk directories are organized in the form of **directory blocks**" +" of size `2^(blkszbits + dirblkbits)`. `dirblkbits` is strictly 0 for " +"now." +msgstr "所有磁盘 directory 都以大小为 `2^(blkszbits + dirblkbits)` 的 **directory block** 形式组织。目前 `dirblkbits` 严格为 0。" + +#: ../../src/ondisk/core_ondisk.md:280 7c2bce74487648bebdae3f83a8e8e1d2 +msgid "Directory Block Structure" +msgstr "Directory Block 结构" + +#: ../../src/ondisk/core_ondisk.md:282 bcfcc9de7c5844559f867e576f1a8715 +msgid "Each directory block is divided into two contiguous regions:" +msgstr "每个 directory block 分为两个连续区域:" + +#: ../../src/ondisk/core_ondisk.md:284 26d9d9dd7ad84d35881e6a57fc00eb77 +msgid "" +"An array of fixed-size directory entry records starting from the " +"beginning of the block." +msgstr "从块起始位置开始的固定大小 directory entry 记录数组。" + +#: ../../src/ondisk/core_ondisk.md:286 6d516d8cf411443781d2ceffc1bc7df5 +msgid "Variable-length filename strings following the directory entry array." +msgstr "紧跟 directory entry 数组之后的变长文件名字符串。" + +#: ../../src/ondisk/core_ondisk.md:288 4fd05d2238a94be5a7b7efe46d0a54d8 +msgid "" +"The `nameoff` field of the **first** entry in a block indicates the total" +" number of directory entries in that block:" +msgstr "块中**第一个**条目的 `nameoff` 字段表示该块中 directory entry 的总数:" + +#: ../../src/ondisk/core_ondisk.md:295 4dc0e717875b441590870571a9d25f42 +msgid "" +"All entries within a directory block, including `.` and `..`, are stored " +"in strict **lexicographic (byte-value ascending) order** to enable an " +"improved prefix binary search algorithm." +msgstr "directory block 中的所有条目(包括 `.` 和 `..`)都按严格的**字典序(字节值升序)**存储,以便实现改进的前缀二分搜索算法。" + +#: ../../src/ondisk/core_ondisk.md:299 7fc7d53d86b84a069a81a0a5d368958a +msgid "Directory Entry Record" +msgstr "Directory Entry 记录" + +#: ../../src/ondisk/core_ondisk.md:301 723ef642f6424feaa6af2b0972cb34f7 +msgid "" +"Defined as [`struct " +"erofs_dirent`](https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/fs/erofs/erofs_fs.h):" +msgstr "定义见 [`struct erofs_dirent`](https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/fs/erofs/erofs_fs.h):" + +#: ../../src/ondisk/core_ondisk.md:268 cd7a35d7af564022ab22f2526105ebd0 +msgid "`nid`" +msgstr "`nid`" + +#: ../../src/ondisk/core_ondisk.md:268 070a034a70d44eabb11d0339fa62a9b3 +msgid "Node number of the target inode" +msgstr "目标 inode 的节点号" + +#: ../../src/ondisk/core_ondisk.md:268 6e00b701624a412aab4b30f63eee6357 +msgid "`nameoff`" +msgstr "`nameoff`" + +#: ../../src/ondisk/core_ondisk.md:268 12a3b929819c4e35a2875b9a7dfa554b +msgid "Byte offset of the filename within this directory block" +msgstr "文件名在该 directory block 内的字节偏移" + +#: ../../src/ondisk/core_ondisk.md:268 3e572ec459a048708f1275b633b3e583 +msgid "0x0A" +msgstr "0x0A" + +#: ../../src/ondisk/core_ondisk.md:268 db718f3aee89421a935ebbebdcc1c40f +msgid "`file_type`" +msgstr "`file_type`" + +#: ../../src/ondisk/core_ondisk.md:268 7936417429ee43768c3558c11c425eca +msgid "File type code (see below)" +msgstr "文件类型代码(见下文)" + +#: ../../src/ondisk/core_ondisk.md:268 ae9dfc94df1e4fde88aeb3884cf26081 +msgid "0x0B" +msgstr "0x0B" + +#: ../../src/ondisk/core_ondisk.md:310 d59c73d16477432c90f75a235024137d +msgid "`file_type` Values" +msgstr "`file_type` 取值" + +#: ../../src/ondisk/core_ondisk.md:268 5b5228308614444dba807c4797b6df21 +msgid "Value" +msgstr "值" + +#: ../../src/ondisk/core_ondisk.md:268 960d51602bf843b2b878441b258247c6 +msgid "Constant" +msgstr "常量" + +#: ../../src/ondisk/core_ondisk.md:268 fdeb675c37de4f58bff3834eb416c495 +msgid "POSIX type" +msgstr "POSIX 类型" + +#: ../../src/ondisk/core_ondisk.md:268 46d66c22ccb94b24846ed29962cfa711 +msgid "`EROFS_FT_UNKNOWN`" +msgstr "`EROFS_FT_UNKNOWN`" + +#: ../../src/ondisk/core_ondisk.md:268 b2803a49645c45498ff3b5b753f269a2 +msgid "Unknown" +msgstr "未知" + +#: ../../src/ondisk/core_ondisk.md:268 a2f703f07c5e4afebfa437b2f0c6e7e5 +msgid "`EROFS_FT_REG_FILE`" +msgstr "`EROFS_FT_REG_FILE`" + +#: ../../src/ondisk/core_ondisk.md:268 c47ce705e85e4738b37bf7649965e6f3 +msgid "Regular file" +msgstr "普通文件" + +#: ../../src/ondisk/core_ondisk.md:268 6f83d24672df415b814badbbf11df077 +msgid "`EROFS_FT_DIR`" +msgstr "`EROFS_FT_DIR`" + +#: ../../src/ondisk/core_ondisk.md:268 781a42a401414726aa2219dc7497e198 +msgid "Directory" +msgstr "目录" + +#: ../../src/ondisk/core_ondisk.md:268 5b5b277d52744ed59eb1b5aaa880538c +msgid "`EROFS_FT_CHRDEV`" +msgstr "`EROFS_FT_CHRDEV`" + +#: ../../src/ondisk/core_ondisk.md:268 46e42cb60c2f438bbf860a403830c49c +msgid "Character device" +msgstr "字符设备" + +#: ../../src/ondisk/core_ondisk.md:268 94682a5e90a34bdc9641832133bdb09b +msgid "`EROFS_FT_BLKDEV`" +msgstr "`EROFS_FT_BLKDEV`" + +#: ../../src/ondisk/core_ondisk.md:268 b8f0eb2d561245a081e22e499a1e9850 +msgid "Block device" +msgstr "块设备" + +#: ../../src/ondisk/core_ondisk.md:268 c6511214742c45a2939e555a13f37a1a +msgid "`EROFS_FT_FIFO`" +msgstr "`EROFS_FT_FIFO`" + +#: ../../src/ondisk/core_ondisk.md:268 e8ad8cab198e4be1bdf1d87a2a016856 +msgid "FIFO" +msgstr "FIFO" + +#: ../../src/ondisk/core_ondisk.md:268 bccdbbc3c60c425b967938ec297fb445 +msgid "6" +msgstr "6" + +#: ../../src/ondisk/core_ondisk.md:268 070b0464c1774e60bd05a15f92dc3314 +msgid "`EROFS_FT_SOCK`" +msgstr "`EROFS_FT_SOCK`" + +#: ../../src/ondisk/core_ondisk.md:268 0771072f3ef34e98b1b3772173b6090b +msgid "Socket" +msgstr "套接字" + +#: ../../src/ondisk/core_ondisk.md:268 2f8291c9e5ed482398889589a6ed7143 +msgid "7" +msgstr "7" + +#: ../../src/ondisk/core_ondisk.md:268 0d9c75e3185b496280a7846d84fe52de +msgid "`EROFS_FT_SYMLINK`" +msgstr "`EROFS_FT_SYMLINK`" + +#: ../../src/ondisk/core_ondisk.md:268 fc8ff606f6374434bac8b1323eda4710 +msgid "Symbolic link" +msgstr "符号链接" + +#: ../../src/ondisk/core_ondisk.md:323 a6a0e94051d64ef69c93db9eb0d18a13 +msgid "Filename Encoding" +msgstr "Filename 编码" + +#: ../../src/ondisk/core_ondisk.md:325 61276b282c7b48b0956e141d7c250f9f +msgid "" +"Filenames are not null-terminated (`\\0`) except for the last one in each" +" directory block. For each directory block, if the last filename doesn't " +"reach up to the end of the block, the remaining bytes must start with " +"`0x00`." +msgstr "除每个 directory block 中的最后一个文件名外,文件名不以空字符(`\\0`)结尾。对于每个 directory block,若最后一个文件名未延伸至块末尾,则剩余字节必须以 `0x00` 开头。" + +#: ../../src/ondisk/core_ondisk.md:329 aca6101ecb72408898c354544674699b +msgid "So the length of entry `i` is derived as:" +msgstr "因此,条目 `i` 的长度按如下方式推导:" + +#: ../../src/ondisk/core_ondisk.md:331 af43ff5179764f08ac3fc67815a3d4ca +msgid "For all entries except the last: `nameoff[i+1] − nameoff[i]`." +msgstr "对于除最后一个以外的所有条目:`nameoff[i+1] − nameoff[i]`。" + +#: ../../src/ondisk/core_ondisk.md:332 23d65912f729485f9efabf50832816a4 +msgid "" +"For the last entry in the block: `strnlen(filename, block_end − " +"nameoff[last])`." +msgstr "对于块中最后一个条目:`strnlen(filename, block_end − nameoff[last])`。" + +#: ../../src/ondisk/core_ondisk.md:334 2d16092b5a334693ada702c50ece3783 +msgid "No character encoding is mandated; UTF-8 is recommended." +msgstr "不强制要求字符编码;推荐使用 UTF-8。" + +#: ../../src/ondisk/core_ondisk.md:338 7811b00eb43b4c5d8661f5eb655b7f84 +msgid "" +"Other alternative forms (e.g., `Eytzinger order`) were also considered " +"(that is why there was once " +"[.*_classic](https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/fs/erofs/namei.c?h=v5.4#n90)" +" naming). Here are some reasons those forms were not supported:" +msgstr "也曾考虑过其他替代形式(例如 `Eytzinger order`),这也是曾经有过 [.*_classic](https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/fs/erofs/namei.c?h=v5.4#n90) 命名方式的原因)。以下是这些形式未被支持的一些原因:" + +#: ../../src/ondisk/core_ondisk.md:342 f2b864c3bc4345608f8f09941eb426b8 +msgid "" +"Filenames are variable-sized strings, which makes `Eytzinger order` " +"harder to utilize unless `namehash` is also introduced, but that " +"complicates the overall implementation and expands directory sizes." +msgstr "文件名是变长字符串,除非同时引入 `namehash`,否则很难利用 `Eytzinger order`,但这会使整体实现复杂化并增大 directory 大小。" + +#: ../../src/ondisk/core_ondisk.md:346 fd3834bdeaca4b568301c27f759d7c27 +msgid "" +"It is harder to keep filenames and directory entries in the same " +"directory block (especially _large directories_) to minimize I/O " +"amplification." +msgstr "难以将文件名和 directory entry 保持在同一个 directory block 中(尤其是_大目录_),从而最小化 I/O 放大。" + +#: ../../src/ondisk/core_ondisk.md:349 e4835c1c03d24653bcfcf29c2cbabbbf +msgid "" +"`readdir(3)` would be impacted too if strict alphabetical order were " +"required." +msgstr "若要求严格按字母顺序排列,`readdir(3)` 也会受到影响。" + +#: ../../src/ondisk/core_ondisk.md:351 0f0d26f681784c288b220f3c68f50b83 +msgid "" +"If there are better ideas to resolve these, the on-disk definition could " +"be updated in the future." +msgstr "若有更好的方案解决这些问题,未来可对磁盘定义进行更新。" + diff --git a/src/_locale/zh_CN/LC_MESSAGES/ondisk/index.po b/src/_locale/zh_CN/LC_MESSAGES/ondisk/index.po new file mode 100644 index 0000000..689c98e --- /dev/null +++ b/src/_locale/zh_CN/LC_MESSAGES/ondisk/index.po @@ -0,0 +1,114 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2018-2026, EROFS filesystem developers +# This file is distributed under the same license as the EROFS package. +# FIRST AUTHOR , 2026. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: EROFS 0.1\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2026-07-05 05:03+0800\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language: zh_CN\n" +"Language-Team: zh_CN \n" +"Plural-Forms: nplurals=1; plural=0;\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.10.3\n" + +#: ../../src/ondisk/index.md:2 ba3bcb240f3440878fbbcda2bb049c5c +msgid "EROFS On-disk Format" +msgstr "EROFS 磁盘格式" + +#: ../../src/ondisk/index.md:4 412f1ea16c4a4d1d8a49ca1e291dc293 +msgid "" +"EROFS uses a flexible, hierarchical, block-aligned on-disk layout that is" +" built with the following goals:" +msgstr "" +"EROFS 采用灵活、分层、块对齐的磁盘布局," +"其设计目标如下:" + +#: ../../src/ondisk/index.md:7 c604eb1e787641bbb21498c904bf81e5 +msgid "" +"DMA- and mmap-friendly, block-aligned data to maximize runtime " +"performance on all kinds of storage devices;" +msgstr "" +"支持 DMA 和 mmap 的、块对齐的数据,以在各类存储设备上" +"最大化运行时性能;" + +#: ../../src/ondisk/index.md:9 bdc678e5296b4fef88822437cb3d4b5c +msgid "" +"A simple core on-disk format that is easy to parse and has zero " +"unnecessary metadata redundancy for archive use unlike other generic " +"filesystems, ideal for data auditing and accessing remote untrusted data;" +msgstr "" +"一种简洁的核心磁盘格式,易于解析,且不像其他通用文件系统那样" +"为归档用途保留任何不必要的元数据冗余," +"非常适合数据审计和访问远程不可信数据;" + +#: ../../src/ondisk/index.md:12 ec9e362c850c4b3284b5c5ee5ea079eb +msgid "" +"Advanced on-disk features like compression (compressed inodes and " +"metadata compression) are completely optional and aren’t mixed with the " +"core design: you can use them only when needed." +msgstr "" +"压缩之类的高级磁盘特性(包括压缩 inode 与元数据压缩)完全可选," +"且不与核心设计混杂:仅在需要时使用。" + +#: ../../src/ondisk/index.md:16 672b443616b74da3a0250c8d2e999670 +msgid "" +"The entire filesystem tree is built from just three core on-disk " +"structures:" +msgstr "整个文件系统树仅由三种核心磁盘结构构成:" + +#: ../../src/ondisk/index.md:18 05b34717ae984999a3b81562263a8291 +msgid "" +"**Superblock** — located at a fixed offset of 1024 bytes; the only " +"structure at a fixed position in the filesystem." +msgstr "" +"**Superblock** — 位于 1024 字节的固定偏移处,是文件系统中唯一" +"处于固定位置的结构。" + +#: ../../src/ondisk/index.md:20 53ebed62fc264965a337d8cf781fe425 +msgid "" +"**Compact/Extended inodes** — per regular file, device, symlink, or " +"directory; addressed in O(1) time via a simple NID-to-offset formula." +msgstr "" +"**Compact/Extended inodes** — 每个普通文件、设备、符号链接或目录各一个;" +"通过简单的 NID-to-offset 公式以 O(1) 时间寻址。" + +#: ../../src/ondisk/index.md:22 194d0d28be2c472882c10ae18a9efbb0 +msgid "" +"**Directory entries** — 12-byte records, sorted lexicographically by " +"filename at the beginning of each directory block (each data block of a " +"directory inode)." +msgstr "" +"**Directory entries** — 12 字节记录,按文件名字典序排序," +"位于每个目录块(即目录 inode 的每个数据块)的开头。" + +#: ../../src/ondisk/index.md:25 56f9b1bb639f4e729adcd93657a3822e +msgid "Optional features extend this foundation without breaking the core design:" +msgstr "可选特性在不破坏核心设计的前提下扩展了这一基础:" + +#: ../../src/ondisk/index.md:27 bfed7ff8e78144f0b1d0d34555383f5b +msgid "" +"**{doc}`Extended attributes (xattrs) `** support per-inode " +"metadata. Several mechanisms — including a shared xattr pool, long prefix" +" tables, and a per-inode Bloom filter — keep storage overhead low even " +"when xattrs are used extensively." +msgstr "" +"**{doc}`扩展属性(xattrs)`** 支持 per-inode 元数据。" +"包括共享 xattr 池、长前缀表和 per-inode Bloom filter 在内的多种机制," +"即使在大量使用 xattrs 时也能保持较低的存储开销。" + +#: ../../src/ondisk/index.md:31 9740471db2d343c999bab7f60302af79 +msgid "" +"**{doc}`Chunk-based layout `** splits large files into " +"fixed-size, independently-addressed chunks, enabling cross-file " +"deduplication and multi-device storage." +msgstr "" +"**{doc}`分块布局 `** 将大文件拆分为固定大小、独立寻址的块," +"从而实现跨文件去重与多设备存储。" diff --git a/src/_locale/zh_CN/LC_MESSAGES/ondisk/xattrs.po b/src/_locale/zh_CN/LC_MESSAGES/ondisk/xattrs.po new file mode 100644 index 0000000..76d51a8 --- /dev/null +++ b/src/_locale/zh_CN/LC_MESSAGES/ondisk/xattrs.po @@ -0,0 +1,759 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2018-2026, EROFS filesystem developers +# This file is distributed under the same license as the EROFS package. +# FIRST AUTHOR , 2026. +# +msgid "" +msgstr "" +"Project-Id-Version: EROFS 0.1\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2026-07-05 05:03+0800\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language: zh_CN\n" +"Language-Team: zh_CN \n" +"Plural-Forms: nplurals=1; plural=0;\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.10.3\n" + +#: ../../src/ondisk/xattrs.md:2 a1d240cbae634fc2bc67a7dbf9b1a1a1 +msgid "Extended Attributes (Xattrs)" +msgstr "扩展属性(Xattrs)" + +#: ../../src/ondisk/xattrs.md:4 30535274ff3b4b4e9ac073de694b4d68 +msgid "" +"EROFS supports Extended Attributes ([xattr(7)](https://man7.org/linux" +"/man-pages/man7/xattr.7.html)) which are `name:value` pairs associated " +"permanently with inodes since the initial Linux 5.4 version." +msgstr "EROFS 自最初的 Linux 5.4 " +"版本起就支持扩展属性([xattr(7)](https://man7.org/linux/man-pages/man7/xattr.7.html))," +"即与 inodes 永久关联的 `name:value` 对。" + +#: ../../src/ondisk/xattrs.md:9 7e57bcb4f0bf46b99e062548a027b67d +msgid "Superblock Fields for Xattr Support" +msgstr "支持 Xattr 的 Superblock 字段" + +#: ../../src/ondisk/xattrs.md:11 e378949bb6db4d4597d5dd8c852a0f06 +msgid "" +"The core superblock format is defined in {ref}`on_disk_superblock`. This " +"section lists the extended fields dedicated to the xattr features." +msgstr "核心 superblock 格式在 {ref}`on_disk_superblock` 中定义。本节列出专用于 xattr " +"功能的扩展字段。" + +#: ../../src/ondisk/xattrs.md 34d453faab4a4743b16858da33ce4564 +#: 3506d57a51014d66af76122158c51adc 366c54e2c3c04aa686fc96a52d096691 +#: 9c55038797d644ae89c1a8f3dd839bdd d690d58265a449b68f4cfee01c89d9fd +msgid "Offset" +msgstr "偏移" + +#: ../../src/ondisk/xattrs.md 615e9b7b16cf4aa7b074cf3ff173eecb +#: 6e1f6cb77ed34e1881f95a9c62d3b464 bbc6dbc5348d4edea2f0f57912e4696b +#: c6216a99e16e400fa27537e3b15b8335 e0cf962fef5244f6b09a0423a77dbe4c +msgid "Size" +msgstr "大小" + +#: ../../src/ondisk/xattrs.md 06dfa0d90574420b82dc190ce08c1d75 +#: 2fc2d005c3924d518a61faf74ddbc027 549ab465ac554408a04aae9910e1b1d2 +#: 8bf2a8a99bbb49bdb27a65a93d8b098d 945bbb04df8647e9af3549d69445f0e0 +msgid "Type" +msgstr "类型" + +#: ../../src/ondisk/xattrs.md 1029689a613540cba59ed7eeed65eb2d +#: 551c180e159a4f91b45a1ce16d853a8c 68dd2865f7994eb78bc90666528c625c +#: 73e081e15a5d4e7f979ad0e9adde104c bd6c9ca2a50e4061ad84655700aa23dc +#: e6952a09802345dda6bfc745e161a443 fdda8b250de84a4484400c88261accc4 +msgid "Name" +msgstr "名称" + +#: ../../src/ondisk/xattrs.md 04121c787ffc498aad061a54217f1f53 +#: 2a91faf3e2ac48bfbec8727368736c5e 6ad8df132b234011b7713304f89a915e +#: 8970a9a33f354aebbe904b9eeecafe28 91cc8e806a0f4e1ab7f669ef2b73656a +#: d4b454085f3c4a6b973a42f7c3cf9c82 e42a4d1ab19b4d54ba80d309b228a187 +msgid "Description" +msgstr "描述" + +#: ../../src/ondisk/xattrs.md 7042148e377649a5993603a72ff9994d +msgid "0x08" +msgstr "0x08" + +#: ../../src/ondisk/xattrs.md 5a49d21c01c64736809688a2df334e4f +#: 824faaa3f9124022aa0024c91fe40da1 969018bf3beb492c8bfdd35a21b712df +#: 99439f1d3bd2421aa141dab6a1f56613 b673726040444449869221d1951af269 +#: da4c59c5fef143479cc2e7293d8a7894 +msgid "4" +msgstr "4" + +#: ../../src/ondisk/xattrs.md 5d24833e891c4a9ab335ce2284aa88fc +#: 6371e8a77cfb4df1a886d8418d061a07 91c248ec91a24a3e9fce060f5210aa2f +#: d165d7989bf0424683dc5047e6c10c36 f971a263f1cc455990a1830c6352b186 +msgid "`u32`" +msgstr "`u32`" + +#: ../../src/ondisk/xattrs.md 15c7867ee4404f4b9dd11c5a4bab89ae +msgid "`feature_compat`" +msgstr "`feature_compat`" + +#: ../../src/ondisk/xattrs.md 4f5bf6fbae8d4ebf9f97f7574b44cda3 +msgid "Compatible feature flags; see {ref}`xattr_feature_flags`" +msgstr "兼容特性标志;参见 {ref}`xattr_feature_flags`" + +#: ../../src/ondisk/xattrs.md 53ad7396b55a4e2387f22bed888826fb +msgid "0x2C" +msgstr "0x2C" + +#: ../../src/ondisk/xattrs.md 656c018acabd447c9915e27cd234804e +msgid "`xattr_blkaddr`" +msgstr "`xattr_blkaddr`" + +#: ../../src/ondisk/xattrs.md f0e4d43a25574715b139250809b26338 +msgid "Start block address of the shared xattr area; see {ref}`shared_xattr_area`" +msgstr "共享 xattr 区域的起始块地址;参见 {ref}`shared_xattr_area`" + +#: ../../src/ondisk/xattrs.md 88ca10faa9ac4169810e68f5c90296aa +msgid "0x50" +msgstr "0x50" + +#: ../../src/ondisk/xattrs.md b9460ca8ef064723bb7d988203ce928a +msgid "`feature_incompat`" +msgstr "`feature_incompat`" + +#: ../../src/ondisk/xattrs.md b9289364dd164d3fa99687c31e908c5d +msgid "Incompatible feature flags; see {ref}`xattr_feature_flags`" +msgstr "不兼容特性标志;参见 {ref}`xattr_feature_flags`" + +#: ../../src/ondisk/xattrs.md 7b1334ca74de4cb1832909918c66cf2a +msgid "0x5B" +msgstr "0x5B" + +#: ../../src/ondisk/xattrs.md 12c24a51549f427dad369f1bd68a83fa +#: 321a17031e064c21ac93ff959e7a6832 3c9f9f8d233f45a19e02a3e7b2c7a798 +#: 6109aab4f78f474a810b6d63b0fe31ee 62e84d2802a244b991e5baf83d78b089 +#: 8f792adbde2242f78538b65ceaa35dc7 a72e36bf7b4949bdb8585758c65b6026 +#: f3af551748754aeeac78d7fd9eb2fa23 +msgid "1" +msgstr "1" + +#: ../../src/ondisk/xattrs.md 38c5685df4924ab08ed42ef6aaceabdd +#: 609584b6568c4eb6b4f425982b6f6ea3 6b229f5450364f7e9b220f99c637ca4d +#: cb7472036aef406daaee2790ac16c8ac cfda5176d5b146738433a6ae7e015621 +#: e4c0c600ab724cfa9af1fc3ab66dfdc8 fce4eb3edfed44ee89d86cc1216d3656 +msgid "`u8`" +msgstr "`u8`" + +#: ../../src/ondisk/xattrs.md a82299611a75411fb36647e9aa72b674 +msgid "`xattr_prefix_count`" +msgstr "`xattr_prefix_count`" + +#: ../../src/ondisk/xattrs.md a5c2fde6cea54db3a028be52cdfac804 +msgid "" +"Number of long xattr name prefixes; valid when " +"`EROFS_FEATURE_INCOMPAT_XATTR_PREFIXES` is set; see " +"{ref}`long_xattr_prefixes`" +msgstr "长 xattr 名称前缀的数量;仅在设置了 `EROFS_FEATURE_INCOMPAT_XATTR_PREFIXES` 时有效;参见 " +"{ref}`long_xattr_prefixes`" + +#: ../../src/ondisk/xattrs.md f0c52869441246e1b81aba46e703b425 +msgid "0x5C" +msgstr "0x5C" + +#: ../../src/ondisk/xattrs.md d7f273af2f454b03b8808b2990158886 +msgid "`xattr_prefix_start`" +msgstr "`xattr_prefix_start`" + +#: ../../src/ondisk/xattrs.md e86b49d318d841ddbfbce0179b6bd568 +msgid "" +"Location of the long xattr prefix table; valid when " +"`EROFS_FEATURE_INCOMPAT_XATTR_PREFIXES` is set; see " +"{ref}`long_xattr_prefixes`" +msgstr "长 xattr 前缀表的位置;仅在设置了 `EROFS_FEATURE_INCOMPAT_XATTR_PREFIXES` 时有效;参见 " +"{ref}`long_xattr_prefixes`" + +#: ../../src/ondisk/xattrs.md 687c5994dab14206b710344003a81475 +msgid "0x60" +msgstr "0x60" + +#: ../../src/ondisk/xattrs.md 05c69e731a8f45d6a1927e0020b433bd +#: 7cb7e8fe93e442c885f4ce7c04d37092 +msgid "8" +msgstr "8" + +#: ../../src/ondisk/xattrs.md 350a6a44cb3a49dab68e8711092476be +#: 478d42e4ebd44a838acb9cdf86f38d57 +msgid "`u64`" +msgstr "`u64`" + +#: ../../src/ondisk/xattrs.md 9b65a933c9b5459ebd504b268e4824be +msgid "`packed_nid`" +msgstr "`packed_nid`" + +#: ../../src/ondisk/xattrs.md b395a06789424a1fb367cc372b348f1d +msgid "" +"Packed inode NID. Relevant when long xattr prefixes are embedded in the " +"packed inode's data region" +msgstr "打包 inode NID。当长 xattr 前缀嵌入在打包 inode 的数据区域中时相关" + +#: ../../src/ondisk/xattrs.md e8a1b7dd267b4b89b6201946a778e6c2 +msgid "0x68" +msgstr "0x68" + +#: ../../src/ondisk/xattrs.md 1eacbc1a702b45c4ab7ced7c89a705e3 +msgid "`xattr_filter_reserved`" +msgstr "`xattr_filter_reserved`" + +#: ../../src/ondisk/xattrs.md a0de9aa8408647859dedf6d4814bd818 +msgid "Must be 0 for the xattr Bloom filter to operate; see {ref}`xattr_filter`" +msgstr "xattr Bloom 过滤器正常工作必须置为 0;参见 {ref}`xattr_filter`" + +#: ../../src/ondisk/xattrs.md a0de9a13fb504743b70ed5652dfa1a05 +msgid "0x69" +msgstr "0x69" + +#: ../../src/ondisk/xattrs.md 7e1735ec4f74410992155002351dffde +msgid "`ishare_xattr_prefix_id`" +msgstr "`ishare_xattr_prefix_id`" + +#: ../../src/ondisk/xattrs.md 527d607dc02f4cefbc7274519d31d072 +msgid "" +"Long-prefix table index used by image-share xattrs; valid when both " +"`EROFS_FEATURE_COMPAT_ISHARE_XATTRS` and " +"`EROFS_FEATURE_INCOMPAT_XATTR_PREFIXES` are set; see " +"{ref}`image_share_xattrs`" +msgstr "镜像共享 xattr 使用的长前缀表索引;仅在同时设置了 `EROFS_FEATURE_COMPAT_ISHARE_XATTRS` 和 " +"`EROFS_FEATURE_INCOMPAT_XATTR_PREFIXES` 时有效;参见 {ref}`image_share_xattrs`" + +#: ../../src/ondisk/xattrs.md 2a731d8c506644b8ae47cf53960e237e +msgid "0x80" +msgstr "0x80" + +#: ../../src/ondisk/xattrs.md 457ec9c5bda1409fa8b3712c3f51fe72 +msgid "`metabox_nid`" +msgstr "`metabox_nid`" + +#: ../../src/ondisk/xattrs.md b2640970c14843ed9f4f9a307bb6ddc7 +msgid "" +"Metabox inode NID. Relevant when shared xattrs or long xattr prefixes are" +" stored in the metabox inode's data region" +msgstr "Metabox inode NID。当共享 xattr 或长 xattr 前缀存储在 metabox inode 的数据区域中时相关" + +#: ../../src/ondisk/xattrs.md:27 cd0d4ee279cb4983bb224e5f6e19649e +msgid "Xattr Feature Flags" +msgstr "Xattr 特性标志" + +#: ../../src/ondisk/xattrs.md:29 c81568dab25f4f18bd6e473585028465 +msgid "" +"The following superblock feature bits are directly relevant to xattr " +"support." +msgstr "以下 superblock 特性位与 xattr 支持直接相关。" + +#: ../../src/ondisk/xattrs.md:31 c094d7b5706b43429cf22ab9f0f0ba97 +msgid "`feature_compat` Bits" +msgstr "`feature_compat` 位" + +#: ../../src/ondisk/xattrs.md 60002d60b3ca48eda1ee1ea2e6fd5e57 +#: c1c254dbc3e944cf8fbbd05b4b678cf0 +msgid "Bit mask" +msgstr "位掩码" + +#: ../../src/ondisk/xattrs.md 7dbc11c8cc4b4f8fbfe8c48b412f5a58 +msgid "`0x00000004`" +msgstr "`0x00000004`" + +#: ../../src/ondisk/xattrs.md 705976ce6e9c469784efc6d4451e35b8 +msgid "`EROFS_FEATURE_COMPAT_XATTR_FILTER`" +msgstr "`EROFS_FEATURE_COMPAT_XATTR_FILTER`" + +#: ../../src/ondisk/xattrs.md 566c7f992c824dfe8a81dfc043699c71 +msgid "Enables the per-inode xattr Bloom filter described in {ref}`xattr_filter`" +msgstr "启用 {ref}`xattr_filter` 中描述的 per-inode xattr Bloom 过滤器" + +#: ../../src/ondisk/xattrs.md e6b72528a16c404cb008f3deed97cefb +msgid "`0x00000008`" +msgstr "`0x00000008`" + +#: ../../src/ondisk/xattrs.md 14ca56c4f2f549bd8cb7b37b5281e7ac +msgid "`EROFS_FEATURE_COMPAT_SHARED_EA_IN_METABOX`" +msgstr "`EROFS_FEATURE_COMPAT_SHARED_EA_IN_METABOX`" + +#: ../../src/ondisk/xattrs.md 795622ddafd045099e8d16f57f1490fb +msgid "" +"Stores the shared xattr area in the metabox inode's decoded data region " +"instead of at `xattr_blkaddr`" +msgstr "将共享 xattr 区域存储在 metabox inode 的解码数据区域中,而不是 `xattr_blkaddr` 处" + +#: ../../src/ondisk/xattrs.md 8f531f23ea6949178ecb0a1b8cbeb0a5 +msgid "`0x00000010`" +msgstr "`0x00000010`" + +#: ../../src/ondisk/xattrs.md 9a28158386c04c618a7cb6996976a874 +msgid "`EROFS_FEATURE_COMPAT_PLAIN_XATTR_PFX`" +msgstr "`EROFS_FEATURE_COMPAT_PLAIN_XATTR_PFX`" + +#: ../../src/ondisk/xattrs.md 3b945a2d71c24c948c79d7846008ae1a +msgid "" +"Stores the long xattr prefix table as a standalone region; valid when " +"`EROFS_FEATURE_INCOMPAT_XATTR_PREFIXES` is set; see " +"{ref}`long_xattr_prefixes`" +msgstr "将长 xattr 前缀表存储为独立区域;仅在设置了 `EROFS_FEATURE_INCOMPAT_XATTR_PREFIXES` " +"时有效;参见 {ref}`long_xattr_prefixes`" + +#: ../../src/ondisk/xattrs.md cf00f0c41e924bc38bfde44ac477cc7c +msgid "`0x00000020`" +msgstr "`0x00000020`" + +#: ../../src/ondisk/xattrs.md a74e75b9d4a04a66b7fa0f8030744979 +msgid "`EROFS_FEATURE_COMPAT_ISHARE_XATTRS`" +msgstr "`EROFS_FEATURE_COMPAT_ISHARE_XATTRS`" + +#: ../../src/ondisk/xattrs.md c5f4a5536c574bb3b8dce562434b0da4 +msgid "" +"Enables image-share xattrs. `ishare_xattr_prefix_id` is valid only when " +"this bit and `EROFS_FEATURE_INCOMPAT_XATTR_PREFIXES` are both set; see " +"{ref}`image_share_xattrs`" +msgstr "启用镜像共享 xattr。`ishare_xattr_prefix_id` 仅在此位与 " +"`EROFS_FEATURE_INCOMPAT_XATTR_PREFIXES` 均设置时有效;参见 {ref}`image_share_xattrs`" + +#: ../../src/ondisk/xattrs.md:40 0800e29fff014036a0dcc6a7c7fffbcd +msgid "`feature_incompat` Bits" +msgstr "`feature_incompat` 位" + +#: ../../src/ondisk/xattrs.md 954d0249d6ac42daa75dddfd0ff17030 +msgid "`0x00000040`" +msgstr "`0x00000040`" + +#: ../../src/ondisk/xattrs.md c0d35c4bfcbf48518e5fbf093c3f90f2 +msgid "`EROFS_FEATURE_INCOMPAT_XATTR_PREFIXES`" +msgstr "`EROFS_FEATURE_INCOMPAT_XATTR_PREFIXES`" + +#: ../../src/ondisk/xattrs.md fa817d039d0848f3992ea5d79cb71ce3 +msgid "" +"Enables the long xattr prefix table described in " +"{ref}`long_xattr_prefixes`" +msgstr "启用 {ref}`long_xattr_prefixes` 中描述的长 xattr 前缀表" + +#: ../../src/ondisk/xattrs.md:47 e8d81ad29164490bb40f9624c9dea463 +msgid "Inode Fields for Xattr Support" +msgstr "支持 Xattr 的 Inode 字段" + +#: ../../src/ondisk/xattrs.md:49 0dbce39333fb4e6e8379437849a94f19 +msgid "" +"The full compact and extended inode layouts are defined in " +"{ref}`on_disk_inodes`. For xattr support, both inode variants share the " +"same feature-specific field:" +msgstr "完整的紧凑型和扩展型 inode 布局在 {ref}`on_disk_inodes` 中定义。为支持 xattr,两种 inode " +"变体共享同一个特性专用字段:" + +#: ../../src/ondisk/xattrs.md 4aa5affd400a4faf9525223b53e5afb2 +#: 6cfc11e8ebf0467eb68e496655468f4a ed6e5f4ce510434ba5857658e3948ae9 +msgid "0x02" +msgstr "0x02" + +#: ../../src/ondisk/xattrs.md 1a8fb81e816743249fad3560a274d360 +#: 4dda795d175b41a1a6e93290324d75c7 82699dd62d0d426f8050a8bf79c67821 +#: 8d1070f301e641bda08cc6f5ca831830 +msgid "2" +msgstr "2" + +#: ../../src/ondisk/xattrs.md 10da573a909e4017957e895733e8ed11 +#: 3ab2364a10954419b227d7a6f767b87d ee735f0043ad440b8921c30419405282 +msgid "`u16`" +msgstr "`u16`" + +#: ../../src/ondisk/xattrs.md e20aa09748c640e886eaec25619f88ec +msgid "`i_xattr_icount`" +msgstr "`i_xattr_icount`" + +#: ../../src/ondisk/xattrs.md c6f69367c22041d5ab2a2bf60653320a +msgid "" +"When non-zero, the inline xattr region size is `(i_xattr_icount - 1) * 4 " +"+ 12` bytes" +msgstr "非零时,内联 xattr 区域大小为 `(i_xattr_icount - 1) * 4 + 12` 字节" + +#: ../../src/ondisk/xattrs.md:56 e295671f9dc44be499fb126b8b85f523 +msgid "Two storage classes exist:" +msgstr "存在两种存储类别:" + +#: ../../src/ondisk/xattrs.md:58 aebeadcde7f1433a95f5ed48c5308abd +msgid "" +"**Inline xattrs**: stored directly in the metadata block immediately " +"following the inode body (and any inline data tail). They are private to " +"the inode and encoded as a sequence of xattr entry records within the " +"inline xattr region described by `i_xattr_icount`." +msgstr "**内联 xattr**:直接存储在紧接 inode 主体(以及任何内联数据尾部)之后的元数据块中。它们专属于该 inode,并在 " +"`i_xattr_icount` 所描述的内联 xattr 区域内编码为一系列 xattr 条目记录。" + +#: ../../src/ondisk/xattrs.md:62 ea39cc7ab7574920824455a2caaec1e6 +msgid "" +"**Shared xattrs**: stored once in the global shared xattr area. An inode " +"references a shared entry through a 4-byte index stored immediately after" +" the fixed 12-byte inline xattr header. Multiple inodes that carry an " +"identical xattr (same name and value) can reference the same shared " +"entry, avoiding redundant per-inode copies." +msgstr "**共享 xattr**:在全局共享 xattr 区域中只存储一次。inode 通过存放在固定 12 字节内联 xattr 头部之后的 " +"4 字节索引来引用共享条目。多个携带相同 xattr(名称和值均相同)的 inode 可以引用同一个共享条目,从而避免每个 inode 重复拷贝。" + +#: ../../src/ondisk/xattrs.md:68 003367827f844a95a8fc7899491bc49f +msgid "" +"To further reduce storage overhead for xattrs whose names share a common " +"prefix (for example `trusted.overlay.*` or `security.ima.*`), EROFS " +"supports a long xattr prefix table " +"(`EROFS_FEATURE_INCOMPAT_XATTR_PREFIXES`). Each prefix entry records a " +"`base_index` that refers to one of the standard short namespace prefixes " +"and an additional infix string. An xattr entry whose `e_name_index` " +"selects a long prefix stores only the suffix that follows the full " +"reconstructed prefix, rather than repeating the prefix in every entry." +msgstr "为了进一步降低名称具有共同前缀的 xattr 所占用的存储空间(例如 `trusted.overlay.*` 或 " +"`security.ima.*`),EROFS 支持长 xattr " +"前缀表(`EROFS_FEATURE_INCOMPAT_XATTR_PREFIXES`)。每个前缀条目记录一个指向标准短命名空间前缀之一的 " +"`base_index`,以及一个额外的中缀字符串。当某个 xattr 条目的 `e_name_index` " +"选择了一个长前缀时,它只存储完整重建前缀之后的后缀,而无需在每个条目中重复该前缀。" + +#: ../../src/ondisk/xattrs.md:77 b979dd318b6247c9bf57e3f9ef2ca9aa +msgid "Inline Xattr Region Layout" +msgstr "内联 Xattr 区域布局" + +#: ../../src/ondisk/xattrs.md:79 e29aad4d7a0240fd8b833c82026e525f +msgid "" +"The inline xattr region immediately follows the inode body (at a 4-byte " +"aligned offset). Its total size is `(i_xattr_icount - 1) * 4 + 12` bytes," +" where 12 is the fixed size of the inline xattr body header. The region " +"is structured as:" +msgstr "内联 xattr 区域紧接 inode 主体之后(按 4 字节对齐的偏移)。其总大小为 `(i_xattr_icount - 1) * " +"4 + 12` 字节,其中 12 是内联 xattr 主体头部的固定大小。该区域结构如下:" + +#: ../../src/ondisk/xattrs.md:83 5b4464e3b0ee4a45820998759b3b0b0a +msgid "The {ref}`inline_xattr_body_header` (12 bytes, fixed)." +msgstr "{ref}`inline_xattr_body_header`(12 字节,固定)。" + +#: ../../src/ondisk/xattrs.md:84 b9276d41aa0748189d7dc89ff77e6477 +msgid "`h_shared_count` × 4-byte shared xattr index values." +msgstr "`h_shared_count` 个 4 字节共享 xattr 索引值。" + +#: ../../src/ondisk/xattrs.md:85 06358528ee094203a4c97b467d9a5db8 +msgid "Zero or more {ref}`xattr_entry_record` (inline entries)." +msgstr "零个或多个 {ref}`xattr_entry_record`(内联条目)。" + +#: ../../src/ondisk/xattrs.md:88 537621d4a9594f4eb4034d105e499c3f +msgid "Inline Xattr Body Header" +msgstr "内联 Xattr 主体头部" + +#: ../../src/ondisk/xattrs.md 2a8465782bba401797d5cb7cb733df96 +#: 376eafead45e494193bd0fdd100a4adb cade5d3a87f84ee1976e4170b5247b27 +msgid "0x00" +msgstr "0x00" + +#: ../../src/ondisk/xattrs.md 8d166e69b8264956a14c2a64e1e26bb7 +msgid "`h_name_filter`" +msgstr "`h_name_filter`" + +#: ../../src/ondisk/xattrs.md dc5b369795c64824b9bec3eec1b0998f +msgid "" +"Inverted Bloom filter over xattr names; valid when " +"`EROFS_FEATURE_COMPAT_XATTR_FILTER` is set; see {ref}`Xattr Filter " +"`" +msgstr "针对 xattr 名称的反向 Bloom 过滤器;仅在设置了 `EROFS_FEATURE_COMPAT_XATTR_FILTER` " +"时有效;参见 {ref}`Xattr 过滤器 `" + +#: ../../src/ondisk/xattrs.md 5788913779d24633bc0c48faeb76b554 +msgid "0x04" +msgstr "0x04" + +#: ../../src/ondisk/xattrs.md 36a372e8333e4c1383f1bba829261757 +msgid "`h_shared_count`" +msgstr "`h_shared_count`" + +#: ../../src/ondisk/xattrs.md d2228ac8e59f4a69be5dff827564fcc7 +msgid "Number of shared xattr index entries" +msgstr "共享 xattr 索引条目的数量" + +#: ../../src/ondisk/xattrs.md 316aaad507834563b21e783b7a14224e +msgid "0x05" +msgstr "0x05" + +#: ../../src/ondisk/xattrs.md 8ad7d22b260e4b4d979efbf1cfea3a75 +msgid "7" +msgstr "7" + +#: ../../src/ondisk/xattrs.md 8f7d53305fd74860979280320a6bc090 +msgid "`u8[]`" +msgstr "`u8[]`" + +#: ../../src/ondisk/xattrs.md 8f77087ff6b7479b8e3ef5f8c10abf46 +msgid "_reserved_" +msgstr "_reserved_" + +#: ../../src/ondisk/xattrs.md ec0fbf5ab9bd4c768fd323ebcda05a54 +msgid "Reserved; must be 0" +msgstr "保留;必须为 0" + +#: ../../src/ondisk/xattrs.md:97 5f832abd0e0e4d53a33e56e142ada97e +msgid "Xattr Entry Record" +msgstr "Xattr 条目记录" + +#: ../../src/ondisk/xattrs.md:99 b5c356e2f188424293bd7bb986ed380b +msgid "Each inline or shared xattr entry has the following layout:" +msgstr "每个内联或共享 xattr 条目都具有以下布局:" + +#: ../../src/ondisk/xattrs.md beddea78986f4748833c0c5ff3a3d9cd +msgid "`e_name_len`" +msgstr "`e_name_len`" + +#: ../../src/ondisk/xattrs.md cca1b1fc1b4649a58007e7c9e9a5256d +msgid "Length of the name suffix in bytes" +msgstr "名称后缀的字节长度" + +#: ../../src/ondisk/xattrs.md 782606f5bec447cba08ffb537f33f010 +msgid "0x01" +msgstr "0x01" + +#: ../../src/ondisk/xattrs.md f2d603200efb4c73b48d87be10d758c5 +msgid "`e_name_index`" +msgstr "`e_name_index`" + +#: ../../src/ondisk/xattrs.md d7c7cfb08adb4504adf26f43d574d76b +msgid "Namespace index (maps to a prefix string); see below" +msgstr "命名空间索引(映射到前缀字符串);见下文" + +#: ../../src/ondisk/xattrs.md faebc795363d445f91ca87f24769c6d8 +msgid "`e_value_size`" +msgstr "`e_value_size`" + +#: ../../src/ondisk/xattrs.md 6fda9cf9bb3748d4b58e9e8c5b49ae36 +msgid "Length of the value in bytes" +msgstr "值的字节长度" + +#: ../../src/ondisk/xattrs.md:107 d06e61f9e0ce430bbefeef6cdceb130b +msgid "" +"Immediately following the 4-byte xattr entry header: `e_name_len` bytes " +"of name suffix, then `e_value_size` bytes of value. The entire entry " +"(header + name + value) is padded to a 4-byte boundary." +msgstr "紧随 4 字节 xattr 条目头部之后:先是 `e_name_len` 字节的名称后缀,然后是 `e_value_size` " +"字节的值。整个条目(头部 + 名称 + 值)填充到 4 字节边界。" + +#: ../../src/ondisk/xattrs.md:112 956c01c43dd34740babf3b6e50c09473 +msgid "`e_name_index` Namespace Mapping" +msgstr "`e_name_index` 命名空间映射" + +#: ../../src/ondisk/xattrs.md:114 20509c2e820343b2aa9d0e6fa44e2fd4 +msgid "" +"Rather than storing the full namespace prefix string in every entry, " +"EROFS encodes the xattr namespace prefix as a 1-byte index. Bit 7 of " +"`e_name_index` is the `EROFS_XATTR_LONG_PREFIX` flag. When set, the lower" +" 7 bits index into the long xattr name prefix table (see " +"{ref}`long_xattr_prefixes`). When clear, the full byte selects one of the" +" built-in short namespace prefixes:" +msgstr "为了避免在每个条目中存储完整的命名空间前缀字符串,EROFS 将 xattr 命名空间前缀编码为 1 " +"字节索引。`e_name_index` 的第 7 位是 `EROFS_XATTR_LONG_PREFIX` 标志。置位时,低 7 位索引到长 " +"xattr 名称前缀表(参见 {ref}`long_xattr_prefixes`)。清零时,整个字节选择某个内置短命名空间前缀:" + +#: ../../src/ondisk/xattrs.md 9a305e8f3f474e81bb1f746a6d5110d0 +msgid "Value" +msgstr "值" + +#: ../../src/ondisk/xattrs.md 23bdf4595d1244bfa30c470c25e2870b +msgid "Prefix" +msgstr "前缀" + +#: ../../src/ondisk/xattrs.md 413c5e34b40946768cf84331e8053271 +msgid "`user.`" +msgstr "`user.`" + +#: ../../src/ondisk/xattrs.md 663e882697b34cc8a0438d2bfcd4c64f +msgid "`system.posix_acl_access`" +msgstr "`system.posix_acl_access`" + +#: ../../src/ondisk/xattrs.md 829ece1799c74843bfd47b8b221c0cab +msgid "3" +msgstr "3" + +#: ../../src/ondisk/xattrs.md 668bfccf7c1847538e2deef4207358a6 +msgid "`system.posix_acl_default`" +msgstr "`system.posix_acl_default`" + +#: ../../src/ondisk/xattrs.md bc7266ffdab8438db5c4b600aed3fd05 +msgid "`trusted.`" +msgstr "`trusted.`" + +#: ../../src/ondisk/xattrs.md f5c74f12cc534372879cbdcb00037507 +msgid "6" +msgstr "6" + +#: ../../src/ondisk/xattrs.md e13233bba50a46848b36ed745559250b +msgid "`security.`" +msgstr "`security.`" + +#: ../../src/ondisk/xattrs.md:129 bad9fdd55f0c44fd8dd80f6baa6eb02f +msgid "Shared Xattr Area" +msgstr "共享 Xattr 区域" + +#: ../../src/ondisk/xattrs.md:131 0471e7729c514ffe9acd2f2f9702a989 +msgid "" +"Normally, the shared xattr area begins at block address `xattr_blkaddr`. " +"Each shared entry is an xattr entry record stored contiguously in this " +"area. An inode references a shared entry by its 32-bit index, stored in " +"the inline xattr region immediately after the 12-byte inline xattr " +"header. The index is a byte offset within the shared area divided by 4." +msgstr "通常情况下,共享 xattr 区域起始于块地址 `xattr_blkaddr`。每个共享条目都是连续存储在该区域中的 xattr " +"条目记录。inode 通过存放在内联 xattr 区域中 12 字节内联 xattr 头部紧后方的 32 " +"位索引来引用共享条目。该索引是共享区域内字节偏移量除以 4 的结果。" + +#: ../../src/ondisk/xattrs.md:137 8fe1a984e41a4d9a858e7c48a6c18f48 +msgid "" +"When `EROFS_FEATURE_COMPAT_SHARED_EA_IN_METABOX` is set, the shared xattr" +" pool is stored in the metabox inode's decoded data region rather than at" +" `xattr_blkaddr`." +msgstr "当设置了 `EROFS_FEATURE_COMPAT_SHARED_EA_IN_METABOX` 时,共享 xattr 池存储在 " +"metabox inode 的解码数据区域中,而不是 `xattr_blkaddr` 处。" + +#: ../../src/ondisk/xattrs.md:141 58829b3901b242dc8e4d71b9617552fd +msgid "Long Xattr Name Prefixes" +msgstr "长 Xattr 名称前缀" + +#: ../../src/ondisk/xattrs.md:143 8d74644ffea94efabdbd5eeb69c48117 +msgid "This section applies when `EROFS_FEATURE_INCOMPAT_XATTR_PREFIXES` is set." +msgstr "本节适用于设置了 `EROFS_FEATURE_INCOMPAT_XATTR_PREFIXES` 的情况。" + +#: ../../src/ondisk/xattrs.md:145 1367362d32d24878bb7825666a07b81a +msgid "" +"When this feature is set, a table of `xattr_prefix_count` prefix entries " +"is present; see {ref}`xattr_prefix_table_placement` for where that table " +"is stored. Each entry has the following fixed header, padded together " +"with the variable-length `infix` payload to a 4-byte boundary:" +msgstr "当设置了该特性时,会存在一个包含 `xattr_prefix_count` 个前缀条目的表;该表的存储位置参见 " +"{ref}`xattr_prefix_table_placement`。每个条目都有以下固定头部,并与可变长度的 `infix` 负载一起填充到 4 " +"字节边界:" + +#: ../../src/ondisk/xattrs.md 122e52a160cf416eb54681985c58749c +msgid "`size`" +msgstr "`size`" + +#: ../../src/ondisk/xattrs.md 8c1844654a4f4290b737ebb6296342f0 +msgid "" +"Byte length of the following content: `base_index` plus the variable-" +"length `infix` payload" +msgstr "后续内容的字节长度:`base_index` 加上可变长度的 `infix` 负载" + +#: ../../src/ondisk/xattrs.md 6287c4de10ff42cc928f04d4518714cc +msgid "`base_index`" +msgstr "`base_index`" + +#: ../../src/ondisk/xattrs.md 767b0460f5c54b228097fe6b17f0a2e1 +msgid "" +"Built-in short namespace prefix index (see {ref}`e_name_index-namespace-" +"mapping`)" +msgstr "内置短命名空间前缀索引(参见 {ref}`e_name_index-namespace-mapping`)" + +#: ../../src/ondisk/xattrs.md:155 89ef0dedca1841bf9649c1ffe2862041 +msgid "" +"The variable-length `infix` bytes begin at offset `0x03`. Their length is" +" `size - 1`, and they are not null-terminated." +msgstr "可变长度的 `infix` 字节从偏移 `0x03` 开始。其长度为 `size - 1`,且不以空字符结尾。" + +#: ../../src/ondisk/xattrs.md:158 6f1adf788eb94d229ca0f781dae5ef02 +msgid "" +"The full reconstructed prefix is the concatenation of the short prefix " +"indicated by `base_index` and the `infix` bytes. An xattr entry using a " +"long prefix stores only the name suffix after the reconstructed prefix; " +"`e_name_len` counts only those suffix bytes." +msgstr "完整重建前缀是 `base_index` 所指示的短前缀与 `infix` 字节的拼接。使用长前缀的 xattr " +"条目仅存储重建前缀之后的名称后缀;`e_name_len` 只统计这些后缀字节。" + +#: ../../src/ondisk/xattrs.md:163 a287c2cb674a4b3491afeffa53e8848f +msgid "" +"For example, an xattr named `trusted.overlay.opaque` can be represented " +"with `base_index = 4` (`trusted.`) and `infix = \"overlay.\"`, yielding " +"the full prefix `trusted.overlay.`; the stored name suffix is `opaque` " +"with `e_name_len = 6`." +msgstr "例如,名为 `trusted.overlay.opaque` 的 xattr 可以表示为 `base_index = " +"4`(`trusted.`)和 `infix = "overlay."`,从而得到完整前缀 `trusted.overlay.`;存储的名称后缀为 " +"`opaque`,且 `e_name_len = 6`。" + +#: ../../src/ondisk/xattrs.md:168 f257fa695c674c7e9a1d0d8ac871a049 +msgid "Prefix Table Placement" +msgstr "前缀表位置" + +#: ../../src/ondisk/xattrs.md:170 32c8857258e749698db7b54683a9fc26 +msgid "" +"The xattr prefix table start offset is recorded in `xattr_prefix_start`. " +"The table may be:" +msgstr "xattr 前缀表的起始偏移记录在 `xattr_prefix_start` 中。该表可能:" + +#: ../../src/ondisk/xattrs.md:172 7a1e3741925649e6b5584bd363483e23 +msgid "" +"embedded in the metabox or packed inode's data region when " +"`EROFS_FEATURE_COMPAT_PLAIN_XATTR_PFX` is not set; or" +msgstr "在 `EROFS_FEATURE_COMPAT_PLAIN_XATTR_PFX` 未设置时嵌入 metabox 或打包 inode " +"的数据区域中;或" + +#: ../../src/ondisk/xattrs.md:173 e9030167887f417fa1415ad70dae485d +msgid "" +"stored in a standalone region when `EROFS_FEATURE_COMPAT_PLAIN_XATTR_PFX`" +" is set." +msgstr "在 `EROFS_FEATURE_COMPAT_PLAIN_XATTR_PFX` 设置时存储于独立区域中。" + +#: ../../src/ondisk/xattrs.md:176 d0cd2bcf8cf94533807ad29ef7c97698 +msgid "Xattr Filter" +msgstr "Xattr 过滤器" + +#: ../../src/ondisk/xattrs.md:178 3706646e987349dc999f70563daef0c7 +msgid "This section applies when `EROFS_FEATURE_COMPAT_XATTR_FILTER` is set." +msgstr "本节适用于设置了 `EROFS_FEATURE_COMPAT_XATTR_FILTER` 的情况。" + +#: ../../src/ondisk/xattrs.md:180 58f940095df74aa6a3b5f4342a3789a5 +msgid "" +"When this feature is set, `h_name_filter` in the inline xattr body header" +" holds a 32-bit inverted Bloom filter over the inode's xattr names. Each " +"bit position corresponds to one hash bucket:" +msgstr "当设置了该特性时,内联 xattr 主体头部中的 `h_name_filter` 保存一个针对该 inode 的 xattr 名称的 " +"32 位反向 Bloom 过滤器。每个位位置对应一个哈希桶:" + +#: ../../src/ondisk/xattrs.md:184 6617b17253dc43ecba26cdc1b72c34e7 +msgid "" +"A bit value of **1** guarantees that no xattr present on this inode " +"hashes to that bucket, so the queried name is **definitely absent**." +msgstr "位值为 **1** 保证该 inode 上没有任何 xattr 会散列到该桶,因此查询的名称**肯定不存在**。" + +#: ../../src/ondisk/xattrs.md:186 6d50c0413dee4d549c89b8cdc0ec3b93 +msgid "" +"A bit value of **0** means a matching xattr **may exist** and a full scan" +" is required." +msgstr "位值为 **0** 表示匹配的 xattr**可能存在**,需要进行完整扫描。" + +#: ../../src/ondisk/xattrs.md:189 60a935914d774445869144e1a9da3cad +msgid "" +"When `xattr_filter_reserved` in the superblock is non-zero, the Bloom " +"filter is disabled unconditionally for all inodes in the image." +msgstr "当 superblock 中的 `xattr_filter_reserved` 非零时,Bloom 过滤器将对镜像中所有 inode " +"无条件禁用。" + +#: ../../src/ondisk/xattrs.md:193 782d483087714fd49b1819ba0c8e9488 +msgid "Image-share Xattrs" +msgstr "镜像共享 Xattrs" + +#: ../../src/ondisk/xattrs.md:195 73a8dcde6a734d31a51b5d54c38001c0 +msgid "" +"This section applies when both `EROFS_FEATURE_COMPAT_ISHARE_XATTRS` and " +"`EROFS_FEATURE_INCOMPAT_XATTR_PREFIXES` are set." +msgstr "本节适用于同时设置了 `EROFS_FEATURE_COMPAT_ISHARE_XATTRS` 和 " +"`EROFS_FEATURE_INCOMPAT_XATTR_PREFIXES` 的情况。" + +#: ../../src/ondisk/xattrs.md:198 7a8f44be288f49acb1862e4b23c5d7ee +msgid "" +"When these features are set, the superblock field " +"`ishare_xattr_prefix_id` is valid and identifies an entry in the long " +"xattr prefix table. Regular files may carry an xattr whose name equals " +"the prefix identified by `ishare_xattr_prefix_id` (i.e. `e_name_index` " +"selects that entry and `e_name_len` is 0) and whose value is a SHA-256 " +"content fingerprint in the form `sha256:`." +msgstr "当这些特性设置后,superblock 字段 `ishare_xattr_prefix_id` 有效,并标识长 xattr " +"前缀表中的一个条目。普通文件可以携带一个 xattr,其名称等于 `ishare_xattr_prefix_id` 所标识的前缀(即 " +"`e_name_index` 选择该条目且 `e_name_len` 为 0),其值为形如 `sha256:` 的 " +"SHA-256 内容指纹。" + +#: ../../src/ondisk/xattrs.md:204 7458b7a83f0646389d6b6aa07fbeb4d2 +msgid "" +"This convention enables tools to identify files with identical content " +"across different EROFS images by comparing these fingerprints." +msgstr "这一约定使工具能够通过比较这些指纹,识别不同 EROFS 镜像中具有相同内容的文件。" + diff --git a/src/_locale/zh_CN/LC_MESSAGES/roadmap.po b/src/_locale/zh_CN/LC_MESSAGES/roadmap.po new file mode 100644 index 0000000..390e42f --- /dev/null +++ b/src/_locale/zh_CN/LC_MESSAGES/roadmap.po @@ -0,0 +1,120 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) 2018-2026, EROFS filesystem developers +# This file is distributed under the same license as the EROFS package. +# FIRST AUTHOR , 2026. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: EROFS 0.1\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2026-07-05 05:03+0800\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language: zh_CN\n" +"Language-Team: zh_CN \n" +"Plural-Forms: nplurals=1; plural=0;\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.10.3\n" + +#: ../../src/roadmap.md:1 76e294ecac904978bc6a1d97d2061d41 +msgid "🗺 Roadmap" +msgstr "🗺 路线图" + +#: ../../src/roadmap.md:3 a862c1f9b5774947b4cd0c18b3812847 +msgid "" +"Note that items marked with **\\[GSoC\\]** are also intended for Google " +"Summer of Code (GSoC) projects." +msgstr "" +"请注意,标有 **\\[GSoC\\]** 的项目也面向 Google " +"Summer of Code (GSoC) 项目。" + +#: ../../src/roadmap.md:6 0c3f700f9f0c4a8faac9924755096c14 +msgid "Linux Kernel" +msgstr "Linux 内核" + +#: ../../src/roadmap.md:8 f946c1d0a1c5466b9d760ff9878dab67 +msgid "" +"[EROFS page cache sharing across different " +"filesystems](https://lwn.net/Articles/984092);" +msgstr "" +"[跨不同文件系统的 EROFS page cache 共享]" +"(https://lwn.net/Articles/984092);" + +#: ../../src/roadmap.md:10 c7dee7b5588f4c80941fabe8ee9d5c4a +msgid "" +"[Preliminary EROFS Rust in-kernel adaption (EXPERIMENTAL, program for " +"students)](https://lore.kernel.org/r/20240916135634.98554-1-toolmanp@tlmp.cc);" +msgstr "" +"[EROFS Rust 内核适配初步方案(实验性,面向学生项目)]" +"(https://lore.kernel.org/r/20240916135634.98554-1-toolmanp@tlmp.cc);" + +#: ../../src/roadmap.md:12 1938d9f0e5354ae8bb31a12cd571553f +msgid "Userspace tools (erofs-utils)" +msgstr "用户空间工具(erofs-utils)" + +#: ../../src/roadmap.md:14 f3588788802f4f3588487ee13c42e6d7 +msgid "Stabilize liberofs APIs;" +msgstr "稳定 liberofs API;" + +#: ../../src/roadmap.md:16 704b6d30f62345ffa10891fde4dd84a4 +msgid "" +"**\\[GSoC\\]** Multi-threaded decompression;" +msgstr "" +"**\\[GSoC\\]** 多线程解压;" + +#: ../../src/roadmap.md:18 cd5f0d7071394ff2825d191efd57ca6c +msgid "Fanotify on-demand loading support (using fanotify pre-content hooks);" +msgstr "Fanotify 按需加载支持(使用 fanotify pre-content hooks);" + +#: ../../src/roadmap.md:20 a9f202d6b89d454695796c7b49baa1f5 +msgid "" +"Rebuild improvements (including incremental updates " +"[\\[1\\]](https://git.kernel.org/xiang/erofs-utils/c/7550a30c332c))." +msgstr "" +"Rebuild 改进(包括增量更新 " +"[\\[1\\]](https://git.kernel.org/xiang/erofs-utils/c/7550a30c332c))。" + +#: ../../src/roadmap.md:22 aa1a308dc07645359afd6cc69ecb1015 +msgid "Containers" +msgstr "容器" + +#: ../../src/roadmap.md:24 21bdf8713ee94991be335fda004ef1df +msgid "" +"[(containerd) EROFS Support and " +"Improvements](https://github.com/containerd/containerd/issues/11340);" +msgstr "" +"[(containerd) EROFS 支持与改进]" +"(https://github.com/containerd/containerd/issues/11340);" + +#: ../../src/roadmap.md:26 a044f799fcaf4f899a3eb77bc23329cf +msgid "" +"[(Kata Containers) EROFS Snapshotter Support in Kata](https://github.com" +"/kata-containers/kata-containers/issues/11163);" +msgstr "" +"[(Kata Containers) Kata 中的 EROFS Snapshotter 支持](https://github.com" +"/kata-containers/kata-containers/issues/11163);" + +#: ../../src/roadmap.md:28 a0ef46cc76404122b1f82373a5f15017 +msgid "" +"[(gVisor) EROFS Snapshotter " +"Support](https://docs.google.com/document/d/1JBBIAqEPwJHGOqML9wcEyZhKicfo9pWZOkahn31AfPs)." +msgstr "" +"[(gVisor) EROFS Snapshotter 支持]" +"(https://docs.google.com/document/d/1JBBIAqEPwJHGOqML9wcEyZhKicfo9pWZOkahn31AfPs)。" + +#: ../../src/roadmap.md:30 6974026ca9ba4a4c974c31e003a6bf2d +msgid "Miscellaneous items" +msgstr "其他事项" + +#: ../../src/roadmap.md:32 91ccbdb8623847ffaf0a161938ba658a +msgid "" +"**\\[GSoC\\]** Porting EROFS to BSD Kernels." +msgstr "" +"**\\[GSoC\\]** 将 EROFS 移植到 BSD 内核。" diff --git a/src/_templates/article-header-buttons.html b/src/_templates/article-header-buttons.html new file mode 100644 index 0000000..a139911 --- /dev/null +++ b/src/_templates/article-header-buttons.html @@ -0,0 +1,16 @@ +{% from "macros/buttons.html" import render_funcs with context %} + +
+{%- for button in header_buttons -%} +{% set btype = button.get("type") %} +{% set bopts = button.copy() %} +{% set _ = bopts.pop("type") %} +{{ render_funcs[btype](**bopts) }} +{%- endfor -%} + +{#- Extra theme buttons #} +{% include "language-switcher.html" %} +{% include "theme-switcher.html" %} +{% include "search-button.html" %} +{% include "toggle-secondary-sidebar.html" %} +
diff --git a/src/_templates/language-switcher.html b/src/_templates/language-switcher.html new file mode 100644 index 0000000..78c680f --- /dev/null +++ b/src/_templates/language-switcher.html @@ -0,0 +1,21 @@ +{# Simple language switcher for local side-by-side builds. + Assumes English is at build/html/ and Chinese at build/html_zh/. + Adjust the prefix when deploying to a different URL scheme. +#} +{% set depth = pagename.count('/') %} +{% set up = '../' * (depth + 1) %} +{% if language and language.startswith("zh") %} + {% set other_label = "English" %} + {% set other_url = up + "html/" + pagename + ".html" %} +{% else %} + {% set other_label = "中文" %} + {% set other_url = up + "html_zh/" + pagename + ".html" %} +{% endif %} + + + + {{ other_label }} + diff --git a/src/conf.py b/src/conf.py index 16dc511..7bc49d1 100644 --- a/src/conf.py +++ b/src/conf.py @@ -26,6 +26,14 @@ templates_path = ['_templates'] +# -- Internationalization + +language = 'en' +locale_dirs = ['_locale'] +gettext_uuid = True +gettext_location = True +gettext_compact = False + # -- Options for HTML output html_static_path = ["_static"] From db9134c24e8bc0b533d0f0d2b1a9fbfa76be3eec Mon Sep 17 00:00:00 2001 From: Chen Miao Date: Sun, 5 Jul 2026 12:28:52 +0800 Subject: [PATCH 3/4] docs: preserve localized homepage buttons Signed-off-by: Chen Miao --- src/_static/language-labels.css | 11 +++++++++++ src/conf.py | 1 + src/index.md | 21 ++++----------------- 3 files changed, 16 insertions(+), 17 deletions(-) create mode 100644 src/_static/language-labels.css diff --git a/src/_static/language-labels.css b/src/_static/language-labels.css new file mode 100644 index 0000000..2fa36d6 --- /dev/null +++ b/src/_static/language-labels.css @@ -0,0 +1,11 @@ +.erofs-label-zh { + display: none; +} + +html[lang^="zh"] .erofs-label-en { + display: none; +} + +html[lang^="zh"] .erofs-label-zh { + display: inline; +} diff --git a/src/conf.py b/src/conf.py index 7bc49d1..d811ded 100644 --- a/src/conf.py +++ b/src/conf.py @@ -37,6 +37,7 @@ # -- Options for HTML output html_static_path = ["_static"] +html_css_files = ["language-labels.css"] html_theme = 'sphinx_book_theme' #html_theme = 'sphinx_rtd_theme' diff --git a/src/index.md b/src/index.md index 3668416..30557ce 100644 --- a/src/index.md +++ b/src/index.md @@ -17,23 +17,10 @@ available since Linux 5.4. It is currently maintained by an open-source community from all over the world, and is still [under active development](roadmap.md). -````{div} sd-d-flex-row -```{button-ref} install -:ref-type: doc -:color: primary -:class: sd-rounded-pill sd-mr-3 - -Get Started -``` - -```{button-ref} faq -:ref-type: doc -:color: secondary -:class: sd-rounded-pill - -FAQ -``` -```` + --- From d4fb522dc9a8ab5b9f8b055cc6bf719a68f7fc3f Mon Sep 17 00:00:00 2001 From: Chen Miao Date: Sun, 5 Jul 2026 12:31:41 +0800 Subject: [PATCH 4/4] docs: build localized docs in CI Signed-off-by: Chen Miao --- .github/workflows/build_ci.yml | 6 ++++-- .readthedocs.yaml | 5 +++++ src/_templates/language-switcher.html | 20 +++++++++++++------- src/conf.py | 6 ++++++ 4 files changed, 28 insertions(+), 9 deletions(-) diff --git a/.github/workflows/build_ci.yml b/.github/workflows/build_ci.yml index 414b6ed..fc2a8c5 100644 --- a/.github/workflows/build_ci.yml +++ b/.github/workflows/build_ci.yml @@ -18,11 +18,13 @@ jobs: run: | pip install -r requirements.txt - name: Build HTML documentation - run: make html + run: make html-en html-zh - name: Upload artifact if: ${{ github.event_name == 'pull_request' }} uses: actions/upload-artifact@v4 with: name: erofs-docs-pr-${{ github.event.pull_request.number }} - path: build/html/ + path: | + build/html/ + build/html_zh/ retention-days: 7 diff --git a/.readthedocs.yaml b/.readthedocs.yaml index 9a8ca96..9ca6ad2 100644 --- a/.readthedocs.yaml +++ b/.readthedocs.yaml @@ -9,6 +9,11 @@ build: os: ubuntu-22.04 tools: python: "3.11" + jobs: + build: + html: + - LANGUAGE_SWITCHER_MODE=root sphinx-build -b html src $READTHEDOCS_OUTPUT/html + - LANGUAGE_SWITCHER_MODE=root sphinx-build -D language=zh_CN -b html src $READTHEDOCS_OUTPUT/html/html_zh # Build documentation with Sphinx sphinx: diff --git a/src/_templates/language-switcher.html b/src/_templates/language-switcher.html index 78c680f..aa0a670 100644 --- a/src/_templates/language-switcher.html +++ b/src/_templates/language-switcher.html @@ -1,15 +1,21 @@ -{# Simple language switcher for local side-by-side builds. - Assumes English is at build/html/ and Chinese at build/html_zh/. - Adjust the prefix when deploying to a different URL scheme. -#} {% set depth = pagename.count('/') %} -{% set up = '../' * (depth + 1) %} +{% set side_by_side_up = '../' * (depth + 1) %} +{% set root_up = '../' * depth %} +{% set root_from_translation_up = '../' * (depth + 1) %} {% if language and language.startswith("zh") %} {% set other_label = "English" %} - {% set other_url = up + "html/" + pagename + ".html" %} + {% if language_switcher_mode == "root" %} + {% set other_url = root_from_translation_up + pagename + ".html" %} + {% else %} + {% set other_url = side_by_side_up + "html/" + pagename + ".html" %} + {% endif %} {% else %} {% set other_label = "中文" %} - {% set other_url = up + "html_zh/" + pagename + ".html" %} + {% if language_switcher_mode == "root" %} + {% set other_url = root_up + "html_zh/" + pagename + ".html" %} + {% else %} + {% set other_url = side_by_side_up + "html_zh/" + pagename + ".html" %} + {% endif %} {% endif %}