CASYNC(1) casync CASYNC(1)

casync - ابزار سیستم همگام‌سازی و توزیع مبتنی بر محتوا

casync [OPTIONS...] make [ARCHIVE | ARCHIVE_INDEX | BLOB_INDEX] [PATH]
casync [OPTIONS...] extract [ARCHIVE | ARCHIVE_INDEX | BLOB_INDEX] [PATH]
casync [OPTIONS...] list [ARCHIVE | ARCHIVE_INDEX | DIRECTORY] [PATH]
casync [OPTIONS...] mtree [ARCHIVE | ARCHIVE_INDEX | DIRECTORY] [PATH]
casync [OPTIONS...] stat [ARCHIVE | ARCHIVE_INDEX | DIRECTORY] [PATH]
casync [OPTIONS...] digest [ARCHIVE | BLOB | ARCHIVE_INDEX | BLOB_INDEX | DIRECTORY] [PATH]
casync [OPTIONS...] mount [ARCHIVE | ARCHIVE_INDEX] PATH
casync [OPTIONS...] mkdev [BLOB | BLOB_INDEX] [NODE]
casync [OPTIONS...] gc BLOB_INDEX | ARCHIVE_INDEX ...

ابزار همگام‌سازی و توزیع داده‌ها با آدرس‌دهی مبتنی بر محتوا (Content-Addressable Data Synchronization Tool).

casync make [ARCHIVE | ARCHIVE_INDEX] [DIRECTORY]
casync make [BLOB_INDEX] FILE | DEVICE

این دستور یک بایگانی با پسوند .catar یا یک نمایه (index) با پسوند .caidx برای DIRECTORY داده‌شده، یا یک نمایه با پسوند .caibx برای FILE یا DEVICE بلوکی داده‌شده ایجاد می‌کند. نوع خروجی به صورت خودکار بر اساس پسوند فایل انتخاب می‌شود (این رفتار می‌تواند با --what= نادیده گرفته شود). تعیین DIRECTORY اختیاری است و در صورت عدم تعیین، دایرکتوری جاری استفاده خواهد شد.

هنگامی که یک فایل .caidx یا .caibx ایجاد می‌شود، یک دایرکتوری ذخیره‌سازی با پسوند .castr نیز ایجاد خواهد شد که به طور پیش‌فرض در همان دایرکتوری قرار دارد و نام آن default.castr خواهد بود مگر اینکه به صورت دیگری پیکربندی شود (گزینه --store= را ببینید).

متاداده‌های گنجانده‌شده در بایگانی توسط گزینه‌های --with-* و --without-* کنترل می‌شوند.

casync extract [ARCHIVE | ARCHIVE_INDEX] [DIRECTORY]
casync extract BLOB_INDEX FILE | DEVICE

این دستور محتوای یک بایگانی .catar یا نمایه .caidx را درون DIRECTORY مشخص‌شده، یا محتوای مشخص‌شده توسط BLOB_INDEX را درون FILE یا DEVICE بلوکی تعیین‌شده استخراج می‌کند. تعیین DIRECTORY اختیاری است و به طور پیش‌فرض دایرکتوری جاری استفاده خواهد شد.

متاداده‌های بازسازی‌شده از بایگانی توسط گزینه‌های --with-* و --without-* کنترل می‌شوند.

casync list [ARCHIVE | ARCHIVE_INDEX | DIRECTORY] [PATH]

این دستور تمام فایل‌ها و دایرکتوری‌های موجود در PATH را همان‌گونه که در ARCHIVE یا ARCHIVE_INDEX یا زیر DIRECTORY یافت می‌شوند، فهرست می‌کند. هر دو آرگومان اختیاری هستند؛ آرگومان اول به طور پیش‌فرض دایرکتوری جاری و آرگومان دوم به طور پیش‌فرض مسیر سطح بالا (ریشه) بایگانی (/) در نظر گرفته می‌شود.

خروجی شامل ماسک دسترسی و نام فایل‌ها است:

$ casync list /usr/share/doc/casync
drwxr-xr-x
-rw-r--r-- README.md
-rw-r--r-- TODO
casync mtree [ARCHIVE | ARCHIVE_INDEX | DIRECTORY] [PATH]

این دستور مشابه list است، اما اطلاعات مربوط به هر مدخل را در قالب کلید=مقدار (key=value) تعریف‌شده توسط BSD mtree(5) شامل می‌شود:

$ casync mtree /usr/share/doc/casync
. type=dir mode=0755 uid=0 gid=0 time=1500343585.721189650
README.md type=file mode=0644 size=7286 uid=0 gid=0 time=1498175562.000000000 sha256digest=af75eacac1f00abf6adaa7510a2c7fe00a4636daf9ea910d69d96f0a4ae85df4
TODO type=file mode=0644 size=2395 uid=0 gid=0 time=1498175562.000000000 sha256digest=316f11a03c08ec39f0328ab1f7446bd048507d3fbeafffe7c32fad4942244b7d
casync stat [ARCHIVE | ARCHIVE_INDEX | DIRECTORY] [PATH]

این دستور اطلاعات دقیق درباره فایل یا دایرکتوری PATH را همان‌گونه که در ARCHIVE یا ARCHIVE_INDEX یا زیر DIRECTORY یافت می‌شود، نمایش می‌دهد. هر دو آرگومان اختیاری هستند؛ آرگومان اول به طور پیش‌فرض دایرکتوری جاری و آرگومان دوم مسیر سطح بالا (/) است.

نمونه خروجی:

$ casync stat .
    File: .
    Mode: drwxrwxr-x
FileAttr: ----------
 FATAttr: ---
  Offset: 0
    Time: 2017-07-17 22:53:30.723304050
    User: zbyszek (1000)
   Group: zbyszek (1000)
casync digest [BLOB | BLOB_INDEX | DIRECTORY]
casync digest ARCHIVE | ARCHIVE_INDEX [PATH]

این دستور چکسام (checksum) فایل یا دایرکتوری، یا PATH داده‌شده را به صورتی که در ARCHIVE یا ARCHIVE_INDEX یافت می‌شود، محاسبه کرده و چاپ می‌کند. هر دو آرگومان اختیاری هستند؛ آرگومان اول به طور پیش‌فرض دایرکتوری جاری و آرگومان دوم به طور پیش‌فرض مسیر سطح بالای بایگانی (/) است.

مثال:

$ casync digest
d1698b0c4c27163284abea5d1e369b92e89dd07cb74378638849800e0406baf7
$ casync digest .
d1698b0c4c27163284abea5d1e369b92e89dd07cb74378638849800e0406baf7
casync mount [ARCHIVE | ARCHIVE_INDEX] PATH

این دستور بایگانی .catar یا نمایه .caidx مشخص‌شده را در PATH تعیین‌شده با استفاده از پروتکل FUSE سوار (mount) می‌کند.

casync mkdev [BLOB | BLOB_INDEX] [NODE]

این دستور یک گره دستگاه بلوکی NODE را با محتویات مشخص‌شده توسط BLOB_INDEX با پسوند .caibx یا صرفاً فایل یا دستگاه بلوکی BLOB با استفاده از پروتکل NBD ایجاد می‌کند.

مثال:

$ sudo casync -v mkdev README.md
Attached: /dev/nbd0
(in another terminal)
$ sudo head -n1 /dev/nbd0
# casync — Content Addressable Data Synchronizer

هنگامی که فرایند casync mkdev متوقف شود (kill شود)، دستگاه از بین می‌رود.

casync gc ARCHIVE_INDEX | BLOB_INDEX ...

این دستور تمامی قطعه‌ها (chunks) را که توسط هیچ‌یک از نمایه‌های مشخص‌شده استفاده نشده‌اند حذف می‌کند (می‌توان یک یا چند نمایه blob و archive را مشخص کرد). اگر گزینه --store تعیین نشده باشد، مخزن ذخیره‌سازی پیش‌فرض اولین نمایه استفاده خواهد شد.

این دستور را می‌توان برای پاک‌سازی و هرس کردن قطعات بلااستفاده از یک مخزن اشتراکی قطعات به کار برد.

گزینه‌های عمومی:

نمایش راهنمای مختصر
نمایش اطلاعات خلاصه نسخه
تنظیم سطح ثبت وقایع (debug، info، err)
نمایش وضعیت مختصر در حین اجرا
صرفاً چاپ مواردی که با gc حذف خواهند شد (بدون اعمال تغییرات)
مخزن اصلی قطعات (chunk store) برای استفاده
مخزن قطعات اضافی برای جستجوی قطعات در آن
حداقل/میانگین/حداکثر تعداد بایت‌ها در هر قطعه
انتخاب الگوریتم خلاصه/هش (sha512-256 یا sha256)
انتخاب الگوریتم فشرده‌سازی (zstd، xz یا gzip)
فایل یا دایرکتوری اضافی برای استفاده به عنوان بذر (seed)
دایرکتوری مورد استفاده به عنوان کش (حافظه نهان) رمزگذار
انتخاب خودکار دایرکتوری کش رمزگذار
حداکثر پهنای باند بر حسب بایت در ثانیه برای ارتباطات شبکه از راه دور
هنگام ایجاد بایگانی، فایل‌های دارای نشان nodump با پرچم +d دستور chattr(1) مستثنی نشوند
هنگام ایجاد بایگانی، سوارشدن‌های فرعی (submounts) مستثنی شوند
به فایل‌های .caexclude در درخت فایل‌ها اعتنا نشود
هنگام استخراج، از بذرها پیوند بازتابی (reflink) ایجاد نشود
هنگام استخراج، از بذرها پیوند سخت (hardlink) ایجاد شود
هنگام استخراج، فایل‌های کم‌پشت (sparse) ایجاد نشوند
پس از استخراج، فایل‌های موجود که در بایگانی فهرست نشده‌اند حذف نشوند
هنگام حذف فایل‌های موجود، پرچم +i (تغییرناپذیر یا immutable) دستور chattr(1) در زمان استخراج برداشته شود
هنگام استخراج، خروجی‌های از پیش موجود به طور ضمنی به عنوان بذر افزوده نشوند
فهرست‌گیری به صورت غیربازگشتی انجام شود
در صورت عدم وجود دایرکتوری محل سوار کردن (mount)، به طور خودکار ایجاد نشود
تغییر مکان شناسه‌های کاربری/گروهی (UID/GID)
محدود کردن UID/GID به یک دامنه مشخص

انتخاب‌گر ورودی/خروجی:

عملیات روی فایل بایگانی
عملیات روی فایل نمایه بایگانی
عملیات روی فایل داده خام (blob)
عملیات روی فایل نمایه داده خام (blob index)
عملیات روی دایرکتوری
چاپ فهرستی از مقادیر مجاز (و خروج از برنامه)

فعال‌سازی مجموعه‌های ویژگی‌های بایگانی:

ذخیره دقیق‌ترین و کامل‌ترین اطلاعات
ذخیره اطلاعات پایه یونیکس
ذخیره اطلاعات سیستم‌فایل FAT
ذخیره ویژگی‌های فایل chattr(1)
ذخیره ویژگی‌های فایل FAT
ذخیره داده‌های فایلی که بازیابی آن‌ها نیازمند دسترسی‌های ویژه است
ذخیره داده‌های فایلی که می‌توانند مجدداً از طریق 'casync mount' عرضه شوند

برای غیرفعال کردن (off) ویژگی‌های بایگانی، می‌توان از --without=… استفاده کرد، مانند --without=fat-attrs، --without=privileged و غیره. برای غیرفعال کردن تمامی ویژگی‌های اختیاری، می‌توان از --without=all استفاده کرد. (حالت مثبت --with=all منطقی نیست، زیرا برخی ویژگی‌ها با یکدیگر تداخل دارند. برای فعال‌سازی حداکثر مجموعه اطلاعات، از --with=best استفاده فرمایید.)

ویژگی‌های مجزای بایگانی:

ذخیره اطلاعات تقلیل‌یافته ۱۶ بیتی UID/GID
ذخیره اطلاعات کامل ۳۲ بیتی UID/GID
ذخیره نام‌های کاربری/گروهی
ذخیره برچسب‌های زمانی با دقت ۱ ثانیه
ذخیره برچسب‌های زمانی با دقت ۱ میکروثانیه (µs)
ذخیره برچسب‌های زمانی با دقت ۱ نانوثانیه (ns)
ذخیره برچسب‌های زمانی با دقت ۲ ثانیه
ذخیره پرچم فقط‌خواندنی به ازای هر فایل
ذخیره کامل مجوزهای دسترسی فایل یونیکس
ذخیره پیوندهای نمادین
ذخیره گره‌های دستگاه بلوکی و کاراکتری
ذخیره گره‌های لوله نام‌گذاری‌شده (FIFO)
ذخیره گره‌های سوکت سیستم‌فایل AF_UNIX
ذخیره پرچم فایل پنهان "hidden" در FAT
ذخیره پرچم فایل سیستمی "system" در FAT
ذخیره پرچم فایل بایگانی "archive" در FAT
ذخیره پرچم فایل فقط‌الحاقی "append-only"
ذخیره پرچم فایل غیرفعال‌سازی زمان دسترسی "disable access time"
ذخیره پرچم فایل فعال‌سازی فشرده‌سازی "enable compression"
ذخیره پرچم فایل غیرفعال‌سازی کپی هنگام نوشتن "disable copy-on-write"
ذخیره پرچم فایل غیرفعال‌سازی تخلیه "disable dumping"
ذخیره پرچم دایرکتوری همگام "synchronous"
ذخیره پرچم فایل تغییرناپذیر "immutable"
ذخیره پرچم فایل همگام "synchronous"
ذخیره پرچم فایل غیرفعال‌سازی فشرده‌سازی "disable compression"
ذخیره پرچم وراثت سهمیه پروژه "project quota inheritance"
ذخیره اطلاعات زیرحجم (subvolume) سامانه فایل btrfs
ذخیره ویژگی فقط‌خواندنی زیرحجم btrfs
ذخیره ویژگی‌های گسترش‌یافته فایل (xattrs)
ذخیره فهرست‌های کنترل دسترسی فایل (ACL)
ذخیره برچسب‌های فایل SElinux
ذخیره قابلیت‌های فایل (file capabilities)
ذخیره شناسه پروژه سهمیه‌بندی ext4/XFS

(و موارد مشابه: --without=16bit-uids، --without=32bit-uids، ...)

پارامترهای گوناگون --with= و --without= مجموعه دقیق متاداده‌های ذخیره‌شده در بایگانی یا بازیابی‌شده در هنگام استخراج را کنترل می‌کنند. این پرچم‌ها تنها در صورتی اعمال می‌شوند که casync در سطح سیستم فایل کار کند.

هنگام ایجاد یک بایگانی یا نمایه از درخت دایرکتوری سیستم‌فایل، برخی فایل‌ها و دایرکتوری‌ها به طور پیش‌فرض مستثنی می‌شوند و برخی دیگر را می‌توان به صورت اختیاری مستثنی کرد:

1.
فایل‌ها و دایرکتوری‌های سیستم‌فایل‌های API مجازی ارائه شده توسط هسته (یعنی procfs، sysfs، cgroupfs، devpts و... — به جز tmpfs/devtmpfs) بدون قید و شرط مستثنی می‌شوند.
2.
بسته به اینکه پیوندهای نمادین، گره‌های دستگاه، لوله‌های FIFO و سوکت‌ها با استفاده از --with= و --without= برای بایگانی‌سازی فعال شده باشند یا خیر، گره‌های فایل از این نوع مستثنی می‌شوند.
3.
به طور پیش‌فرض، فایل‌ها و دایرکتوری‌هایی با پرچم +d دستور chattr(1) مستثنی می‌شوند؛ با این حال این رفتار را می‌توان با --exclude-nodump=no غیرفعال کرد.
4.
به صورت اختیاری، در صورتی که --exclude-submounts=yes مشخص شده باشد، فایل‌ها و دایرکتوری‌های موجود در نقاط سوارشدن فرعی (submounts) درخت سیستم‌فایل مشخص‌شده مستثنی خواهند شد.
5.
به طور پیش‌فرض، هر فایل و دایرکتوری فهرست‌شده در فایل‌های .caexclude در سلسله‌مراتب فایل‌ها مستثنی می‌شود؛ با این حال بررسی و پردازش این فایل‌ها را می‌توان با --exclude-file=no غیرفعال کرد. این فایل‌ها عملکردی مشابه با مفهوم .gitignore در ابزار git دارند: آن‌ها به عنوان فایل متنی خوانده می‌شوند که هر خط آن یا خالی است / با # شروع می‌شود (که در این صورت تاثیری نداشته و می‌تواند برای نوشتن توضیحات به کار رود)، یا یک الگوی مسیر تطبیق نام (globbing) از فایل‌ها/دایرکتوری‌های نادیده‌گرفتنی را فهرست می‌کند. اگر خطی حاوی نویسه / نباشد، آن خط برای دایرکتوری محل قرارگیری فایل .caexclude و همچنین تمامی دایرکتوری‌های فرزند آن اعمال می‌شود. اگر شامل حداقل یک نویسه / باشد، کاملاً نسبت به دایرکتوری محل قرارگیری فایل .caexclude نسبی در نظر گرفته می‌شود. فایل‌های .caexclude ممکن است در هر دایرکتوری از درخت سیستم‌فایلی که بایگانی می‌شود قرار گیرند؛ با این وجود قرار دادن آن‌ها در دایرکتوری‌هایی که قبلاً توسط فایل‌های .caexclude بالاتر در درخت دایرکتوری برای مستثنی شدن علامت‌گذاری شده‌اند، بی‌اثر خواهد بود. هنگامی که یک خط با نویسه / پایان می‌یابد، صرفاً برای دایرکتوری‌ها اعمال می‌شود و شامل فایل‌های عادی یا سایر انواع گره‌های فایل نخواهد شد. اگر خطی با نویسه ! شروع شود، فایل‌های منطبق از شمول مستثنی‌سازی خارج می‌شوند؛ به این معنی که اثر سایر خطوط منطبق که با این علامت شروع نشده‌اند برای این فایل‌ها لغو می‌شود. خطوط دارای علامت ! بدون قید و شرط بر خطوط فاقد این علامت تقدم دارند. علاوه بر این، خطوطی که با ! شروع می‌شوند اثر الگوهای موجود در فایل‌های .caexclude در دایرکتوری‌های بالاتر درخت را نیز لغو می‌کنند.
August 12, 2026 1