| containers-storage(1) | General Commands Manual | containers-storage(1) |
نام (NAME)
containers-storage-zstd-chunked - تولید و کار با فرمت فشردهسازی تکهتکه zstd برای لایهها
توضیحات (DESCRIPTION)
قالب سنتی برای لایههای تصاویر کانتینر application/vnd.oci.image.layer.v1.tar+gzip ⟨https://github.com/opencontainers/image-spec/blob/main/layer.md#gzip-media-types⟩ است. اخیراً این استاندارد با zstd گسترش یافته است: application/vnd.oci.image.layer.v1.tar+zstd ⟨https://github.com/opencontainers/image-spec/blob/main/layer.md#zstd-media-types⟩ که یک قالب فشردهسازی مدرنتر و کارآمدتر است.
zstd:chunked گونهای از نوع رسانهای application/vnd.oci.image.layer.v1.tar+zstd است که از فریمهای قابلچشمپوشی zstd ⟨https://github.com/facebook/zstd/blob/dev/doc/zstd_compression_format.md#skippable-frames⟩ برای گنجاندن فرادادههای اضافی (بهویژه یک «فهرست مطالب») شامل SHA-256 و آفستهای تکههای جداگانه پروندهها استفاده میکند. علاوه بر این، تکهها بهصورت جداگانه فشرده میشوند. این امر به کلاینت امکان میدهد تنها محتوایی را که از قبل در اختیار ندارد با استفاده از درخواستهای دامنه HTTP بهطور پویا دریافت کند.
در زمان نگارش این سند، پشتیبانی از این ویژگی بهطور پیشفرض در کد فعال است.
میتوانید zstd:chunked را با اعمال تغییرات زیر در containers-storage.conf بهطور صریح فعال یا غیرفعال کنید:
[storage.options.pull_options] enable_partial_images = "true" | "false"
توجه داشته باشید که مقدار این فیلد باید یک «رشته بولی» (string bool) باشد و نمیتواند یک بولی بومی TOML باشد.
پیادهسازی (IMPLEMENTATION)
هر لایه دارای یک کلید «داده بزرگ» (big data) مرتبط به نام chunked-manifest-cache است که یک قالب باینری سفارشی مناسب برای ()mmap بوده و حاوی فراداده نمایه برای هر لایه همراه با خلاصه کامل sha256 هر پرونده به علاوه «تکهها»ی آن (همانطور که توسط zstd:chunked محاسبه شده) میباشد.
هنگامی که هر تصویری دریافت (pull) میشود، تمام لایههای موجود دیگر با استفاده از chunked-manifest-cache بررسی و اسکن میشوند تا مشخص شود آیا حاوی پروندهای با خلاصه مطابقتیافته هستند یا خیر. اگر چنین پروندهای یافت شود و use_hardlinks = "true" تنظیم شده باشد، پرونده دیگر پیوند سخت (hardlink) میشود؛ در غیر این صورت پیوند بازتابی (reflink) برقرار میگردد (در صورتی که توسط سامانه پرونده پشتیبانی شود، وگرنه یک رونوشت فیزیکی کامل ایجاد میشود). همچنین در صورت پیکربندی، تلاشی بر پایه بهترین تلاش (best-effort) برای فعالسازی fsverity روی پرونده انجام میشود (ببینید ⟨https://github.com/containers/storage/issues/2017⟩).
برای اطلاعات بیشتر، در حال حاضر پروندهای که بیشترین اطلاعات را دارد pkg/chunked/internal/compression.go است: ⟨https://github.com/containers/storage/blob/39d469c34c96db67062e25954bc9d18f2bf6dae3/pkg/chunked/internal/compression.go⟩ پیوند بالا برای پایداری یک پیوند دائمی است، اما حتماً تغییرات جدیدتر را نیز بررسی کنید.
استانداردسازی (STANDARDIZATION)
در حال حاضر این قالب فراتر از توضیحات و کدهای موجود در پیادهسازی مرجع، بهصورت رسمی استانداردسازی یا مستند نشده است.
اشکالات (BUGS)
پاورقیها (FOOTNOTES)
پروژه Containers Storage به فراگیر بودن، که از ارزشهای بنیادین متنباز است، متعهد میباشد. در این مخزن از اصطلاحات انتشار نقطه اتصال master و slave استفاده شده است. این نگارش مسألهساز و تفرقهانگیز تلقی میشود و باید تغییر یابد. با این حال، این اصطلاحات در حال حاضر در هسته لینوکس مورد استفاده هستند و در این زمان باید به همین شکل باقی بمانند. هنگامی که نگهدارندگان هسته لینوکس این کاربرد را اصلاح کنند، Containers Storage نیز بلافاصله از آن پیروی خواهد کرد.
| August 2024 |