git-annex-sim(1) General Commands Manual git-annex-sim(1)

git-annex-sim - شبیه‌سازی جابجایی داده‌ها میان خوشه‌های مخازن

git annex sim start [my.sim]

git annex sim command

git annex sim show

git annex sim end

git annex sim run my.sim

این دستور رفتار git-annex را در شبکه‌ای از مخازن شبیه‌سازی می‌کند، و مشخص می‌سازد که با توجه به پیکربندی محتوای ترجیحی (preferred content)، تعداد رونوشت‌ها (numcopies)، سطح اعتماد (trust level) و غیره، کدام فایل‌ها به کدام مخازن خواهند رسید.

ورودی شبیه‌سازی یک فایل sim یا دستورات sim است که پس از شروع شبیه‌سازی اجرا می‌شوند. این دستورات به شکل git annex sim command هستند، به‌طوری‌که دستور دقیقاً با همان قالبی که در فایل sim به کار می‌رود نوشته می‌شود (فهرست دستورات sim را در ادامه مشاهده کنید). برای نمونه، git annex sim step 1 شبیه‌سازی را یک گام به جلو می‌برد.

شبیه‌سازی حین اجرا گزارش وقایعی (log) را نگه‌داری می‌کند که حاوی تمامی ورودی‌های شبیه‌سازی، اقدامات انجام‌شده و همچنین نتایج شبیه‌سازی است. از دستور git-annex sim show برای نمایش این گزارش وقایع استفاده کنید. این کار امکان اجرای مجدد همان شبیه‌سازی در آینده و نیز تحلیل نتایج شبیه‌سازی را فراهم می‌آورد.

برای پایان دادن به شبیه‌سازی و پاک‌سازی، از دستور git annex sim end استفاده کنید.

جهت سهولت کار، برای اجرای یک شبیه‌سازی از روی یک فایل و سپس خاتمه دادن به آن، از دستور git-annex sim run استفاده کنید. اگر مشکلی در اجرای شبیه‌سازی رخ دهد، پیش از متوقف شدن به نمایش درخواهد آمد.

توجه داشته باشید که قطع کردن این دستور در حین اجرا ممکن است شبیه‌سازی را در وضعیتی ناسازگار باقی بگذارد. همچنین اجرای هم‌زمان چندین دستور sim نیز ممکن است همین وضعیت را ایجاد کند، اگرچه اجرای دستور git annex sim visit هم‌زمان با اجرای دیگر دستورات sim کاملاً ایمن است.

این فایل متنی برای پیکربندی شبیه‌سازی و همچنین گزارش نتایج آن به کار می‌رود. هر خط از این فایل به شکل یک دستور و به دنبال آن پارامترهای آن دستور است. خطوطی که با «#» یا «--» آغاز می‌شوند، توضیحات (کامنت) به شمار می‌روند.

در اینجا نمونه‌ای از یک فایل sim آمده است:

# افزودن مخازن به شبیه‌سازی و اتصال آن‌ها به‌عنوان ریموت
init foo
init bar
connect foo <-> bar
# افزودن یک ریموت ویژه
initremote baz
connect foo -> baz <- bar
# پیکربندی مخازن
numcopies 2
group foo client
wanted foo standard
group bar archive
wanted bar standard
wanted baz include=*.mp3
# افزودن فایل‌های ضمیمه‌شده در درخت کاری به شبیه‌سازی،
# گویی به‌تازگی به مخزن foo اضافه شده‌اند
addtree foo include=*.mp3
addtree foo include=*.jpg
addtree foo include=bigfiles/
# افزودن فایل‌های ضمیمه‌شده شبیه‌سازی‌شده
add bigfile 100gb bar
add hugefile 10tb foo
# اجرای شبیه‌سازی به مدت ۱۰ گام به جلو
step 10
# حذف ریموت bar از foo و بررسی این‌که آیا فایل جدید اضافه‌شده به foo به bar می‌رسد
disconnect foo -> bar
add foo.mp3 2mb foo
step 5

این مجموعه کاملی از دستوراتی است که می‌توانند هم در فایل sim استفاده شوند و هم در حین اجرای شبیه‌سازی به git annex sim داده شوند.

یک مخزن شبیه‌سازی‌شده را مقداردهی اولیه کرده و نامی به آن اختصاص می‌دهد که در شبیه‌سازی استفاده خواهد شد.
یک ریموت ویژه شبیه‌سازی‌شده را مقداردهی اولیه می‌کند.
استفاده از یک مخزن موجود در شبیه‌سازی، همراه با پیکربندی‌های فعلی آن (سطح اعتماد، گروه‌ها، محتوای ترجیحی و الزامی، حداکثر اندازه (maxsize)، و پیکربندی groupwanted گروه‌های آن).
به این مخزن برای مقاصد شبیه‌سازی یک نام اختصاص می‌یابد. مخزن مورد استفاده را می‌توان با نام ریموت، uuid و غیره مشخص کرد؛ به عنوان مثال: use myrepo here
دستور شل مشخص‌شده را در داخل مخزن شبیه‌سازی‌شده اجرا می‌کند و منتظر خروج آن می‌ماند.
هنگامی که هیچ دستور شلی مشخص نشده باشد، یک شل تعاملی اجرا می‌شود.
این دستور در یک مخزن git اجرا می‌شود که شاخه git-annex آن حاوی وضعیت آن مخزن شبیه‌سازی‌شده است. این امر امکان اجرای هر یک از دستورات git-annex مانند git-annex whereis را جهت بررسی وضعیت شبیه‌سازی فراهم می‌کند. باید از اعمال هرگونه تغییر در وضعیت git-annex خودداری نمایید.
افزودن یک اتصال میان دو یا چند مخزن. فلش نشان‌دهنده جهت اتصال است و می‌تواند دوطرفه نیز باشد. به عنوان مثال، connect foo -> bar باعث می‌شود bar یک ریموت برای foo باشد، در حالی که connect foo <-> bar هر کدام را به ریموت دیگری تبدیل می‌کند. زنجیره‌ای از اتصالات می‌تواند به چندین مخزن گسترش یابد، مانند: connect foo -> bar -> baz -> foo
اتصالات میان مخازن را حذف می‌کند.
برای نمونه، disconnect foo -> bar باعث می‌شود foo دیگر bar را به عنوان ریموت در نظر نگیرد.
فایل‌های ضمیمه‌شده (annexed) را از مخزن git به شبیه‌سازی اضافه کرده و آن‌ها را در مخزن مشخص‌شده حاضر (موجود) می‌سازد.
عبارت (expression) یک عبارت محتوای ترجیحی است (به git-annex-preferred-content(1) مراجعه کنید) که مشخص می‌کند کدام فایل‌های ضمیمه‌شده باید افزوده شوند. در حالی که افزودن تمام یا تعداد زیادی از فایل‌ها از این روش ممکن است، توجه داشته باشید که معمولاً شبیه‌سازی تعداد اندکی از فایل‌ها که ویژگی‌های خاص مورد نظر شما را دارند بسیار بهینه‌تر خواهد بود.
هنگام اجرا در یک زیرپوشه از مخزن، تنها فایل‌های موجود در آن زیرپوشه برای افزودن در نظر گرفته می‌شوند.
از این دستور می‌توان برای فایل‌های یکسان بیش از یک‌بار استفاده کرد تا چندین مخزن در شبیه‌سازی شامل همان فایل‌ها باشند.
یک فایل ضمیمه‌شده شبیه‌سازی‌شده با نام فایل و اندازه مشخص ایجاد می‌کند که در مخزن یا مخازن تعیین‌شده حاضر (موجود) است.
اندازه را می‌توان با استفاده از هر یک از واحدهای مرسوم، مانند «10mb» یا «3.3terabytes» مشخص کرد.
نام فایل نمی‌تواند شامل فاصله (فاصله خالی) باشد.
این دستور فایلی را در نمایه (index) ثبت مرحله‌ای (stage) می‌کند تا بتوان از دستورات استاندارد git-annex برای بررسی وضعیت فایل ضمیمه‌شده شبیه‌سازی‌شده استفاده کرد. اگر فایلی ضمیمه‌شده با همان نام از قبل وجود داشته باشد، با فایل جدید بازنویسی می‌شود.
توجه داشته باشید که شبیه‌سازی، افزودن فایل‌های دارای تعارض به مخازن مختلف را پوشش نمی‌دهد. فایل‌های درون شبیه‌سازی در تمامی مخازن شبیه‌سازی‌شده یکسان هستند.
چندین فایل ضمیمه‌شده شبیه‌سازی‌شده را با اندازه‌های تصادفی در بازه میان minsize و maxsize اضافه می‌کند.
نام‌گذاری فایل‌ها با ترکیب شماره (که از ۱ آغاز می‌شود و تا N افزایش می‌یابد) با یک پسوند (suffix) انجام می‌گیرد.
به عنوان مثال:
addmulti 100 testfile.jpg 100kb 10mb foo
این کار فایل‌هایی به نام‌های «1testfile.jpg»، «2testfile.jpg» و غیره اضافه می‌کند.
توجه داشته باشید که افزودن تعداد زیادی فایل به شبیه‌سازی می‌تواند سرعت آن را کاهش داده و حافظه زیادی مصرف کند.
شبیه‌سازی را به این تعداد گام به جلو می‌برد.
در هر گام از شبیه‌سازی، یک فایل با توجه به پیکربندی محتوای ترجیحی و سایر تنظیمات، یا منتقل (transferred) و یا رهاسازی (dropped) می‌شود.
اگر طبق پیکربندی جاری فایل دیگری برای انتقال یا رهاسازی باقی نمانده باشد، پیامی مبنی بر به پایداری رسیدن (stabilized) شبیه‌سازی نمایش داده خواهد شد.
این دستور همچنین اجرای git pull و git push را در صورت لزوم در هر مخزن شبیه‌سازی می‌کند تا کارهای بیشتری برای انجام پیدا کند.
شبیه‌سازی را به این تعداد گام به جلو می‌برد، با این انتظار که تا آن مرحله به پایداری برسد.
اگر شبیه‌سازی پایدار نشود، دستور با وضعیت خروج غیرصفر خارج خواهد شد.
دریافت فایل‌های مورد نیاز مخزن از ریموت را شبیه‌سازی می‌کند.
رهاسازی فایل‌هایی که مخزن نیازی به آن‌ها ندارد را شبیه‌سازی می‌کند، در صورتی که بتواند وجود تعداد رونوشت‌های کافی روی ریموت‌ها را تأیید کند.
رهاسازی فایل‌هایی از ریموت که خود ریموت نیازی به آن‌ها ندارد را شبیه‌سازی می‌کند، در صورتی که بتواند وجود تعداد رونوشت‌های کافی را تأیید کند.
ارسال فایل‌های مورد نیاز ریموت به آن را توسط مخزن شبیه‌سازی می‌کند.
ارسال (push) شاخه git-annex به ریموت توسط مخزن را شبیه‌سازی می‌کند.
دریافت (pull) شاخه git-annex از ریموت توسط مخزن را شبیه‌سازی می‌کند.
معادل git-annex-pull(1) را با ترکیب اقدامات gitpull، getwanted و dropunwanted شبیه‌سازی می‌کند.
معادل git-annex-push(1) را با ترکیب اقدامات sendwanted، dropunwantedfrom و gitpush شبیه‌سازی می‌کند.
معادل git-annex-sync(1) را با ترکیب اقدامات gitpull، getwanted، sendwanted، dropunwanted و gitpush شبیه‌سازی می‌کند.
اجرای هم‌روند دو اقدام را شبیه‌سازی می‌کند. اگرچه شبیه‌سازی در واقعیت تنها یک رویداد را در هر لحظه شبیه‌سازی می‌کند، اما هنگامی که هر یک از اقدامات بر روی چندین فایل اثر می‌گذارند، رویدادها به‌صورت تصادفی درهم‌آمیخته (interleaved) می‌شوند.
هر تعداد اقدام را می‌توان به این صورت ترکیب نمود.
به عنوان مثال:
action foo dropunwanted while action bar getwanted foo
در این مثال، ممکن است bar قبل از این‌که foo فایلی را رهاسازی کند، آن را دریافت کند یا نکند.
بذر تصادفی (random seed) را روی عددی مشخص تنظیم می‌کند. استفاده از این دستور باید نتایج شبیه‌سازی را قطعی و تکرارپذیر (deterministic) کند. فایل خروجی sim همواره شامل بذر تصادفی است، از این رو می‌توان از آن برای بازپخش شبیه‌سازی استفاده نمود.
وضعیت مورد انتظار شبیه‌سازی را در این نقطه نشان می‌دهد. مخزن باید حاوی محتوای این فایل باشد. اگر چنین نباشد، عدم تطابق در خروجی خطای استاندارد اعلام می‌شود و دستور git-annex sim در نهایت با کد خطای غیرصفر خارج خواهد شد.
این مورد با پیشرفت شبیه‌سازی به فایل sim خروجی اضافه می‌شود.
وضعیت مورد انتظار شبیه‌سازی را در این نقطه نشان می‌دهد. مخزن نباید حاوی محتوای این فایل باشد. اگر فایل وجود داشته باشد، عدم تطابق در خروجی خطای استاندارد اعلام می‌شود و دستور git-annex sim در نهایت با کد خطای غیرصفر خارج خواهد شد.
این مورد با پیشرفت شبیه‌سازی به فایل sim خروجی اضافه می‌شود.
تعداد رونوشت‌های مورد نظر را تنظیم می‌کند. این دستور معادل git-annex-numcopies(1) است.
توجه داشته باشید که سایر پیکربندی‌هایی که numcopies را تعیین می‌کنند، مانند فایل‌های ‎.gitattributes‎، در شبیه‌سازی اعمال نمی‌شوند.
حداقل تعداد رونوشت‌ها را تعیین می‌کند. این دستور معادل git-annex-mincopies(1) است.
سطح اعتماد مخزن را مشخص می‌کند. این دستور معادل git-annex-trust(1)، git-annex-untrust(1) و موارد مشابه است.
محتوای ترجیحی یک مخزن را پیکربندی می‌کند. این دستور معادل git-annex-wanted(1) است.
محتوای الزامی یک مخزن را پیکربندی می‌کند. این دستور معادل git-annex-required(1) است.
عبارت groupwanted را پیکربندی می‌کند. این دستور معادل git-annex-groupwanted(1) است.
محتوای ترجیحی یک مخزن را بر روی یک عبارت تصادفی تنظیم می‌کند که از ترکیب گزینشی از عبارت‌های ارائه‌شده با عملگرهای «and»، «or» و «not» ایجاد می‌شود.
به عنوان مثال، randomwanted foo exclude=*.x include=*.x largerthan=100kb ممکن است عبارتی مانند exclude=*.x or not largerthan=100kb and include=*.x یا عبارتی نظیر include=*.x and exclude=*.x تولید کند.
محتوای الزامی یک مخزن را بر روی یک عبارت تصادفی تنظیم می‌کند.
عبارت groupwanted را بر روی یک عبارت تصادفی تنظیم می‌کند.
یک مخزن را به یک گروه اضافه می‌کند. این دستور معادل git-annex-group(1) است.
یک مخزن را از یک گروه حذف می‌کند. این دستور معادل git-annex-ungroup(1) است.
متادیتای (فراداده) فایل شبیه‌سازی‌شده را تغییر می‌دهد. این عبارت دقیقاً با همان قالب گزینه --set در دستور git-annex-metadata نوشته می‌شود. به عنوان مثال: metadata foo year=2025
حداکثر اندازه یک مخزن را پیکربندی می‌کند. این دستور معادل git-annex-maxsize(1) است.
تنظیم «rebalance on» معادل ارسال گزینه --rebalance به git-annex است. تنظیم «rebalance off» این اثر را خنثی می‌کند.
به عنوان مثال:
maxsize foo 1tb
rebalance on
step 100
rebalance off
شبیه‌سازی یک مخزن به‌عنوان یک گره (نود) از یک خوشه، که می‌توان با نام مشخص‌شده به آن ارجاع داد.
به‌جای اینکه درگاه خوشه (cluster gateway) به‌عنوان یک موجودیت جداگانه شبیه‌سازی شود، هرگونه اتصال به یک گره خوشه با آن نام، به‌منزله دسترسی به آن مخزن از طریق همان درگاه خوشه تلقی می‌گردد.
از آنجا که یک درگاه خوشه از تمامی تغییراتی که از طریق آن بر روی گره‌ها اعمال می‌شود آگاه است، هر مخزنی که به یکی از گره‌های خوشه متصل باشد فوراً از تغییرات ایجادشده از طریق آن گره مطلع خواهد شد، بدون آنکه نیازی به شبیه‌سازی git pull باشد.
برای شبیه‌سازی مخزنی که گره بیش از یک خوشه است، یا پشت چندین درگاه در یک خوشه مشترک قرار دارد، از این دستور استفاده کنید تا چندین نام به آن داده شود.

همچنین می‌توان از گزینه‌های git-annex-common-options(1) نیز استفاده کرد.

ابزار git-annex شامل مجموعه‌ای از فایل‌های sim است، در:

https://git-annex.branchable.com/sims

git-annex(1)

git-annex-test(1)

Joey Hess <id@joeyh.name>