CRIU(8) CRIU Manual CRIU(8)



نام (NAME)
criu - ایجاد چک‌پوینت و بازیابی در فضای کاربری (checkpoint/restore in userspace)



خلاصه دستور (SYNOPSIS)

criu command [option ...]



توضیحات (DESCRIPTION)

ابزار criu برنامه‌ای برای ایجاد چک‌پوینت و بازیابی برنامه‌های در حال اجرا است. این کار با ذخیره وضعیت آن‌ها در قالب مجموعه‌ای از فایل‌ها (دستور dump را ببینید) و ساخت فرآیندهای معادل از روی آن فایل‌ها (دستور restore را ببینید) انجام می‌پذیرد. عملیات بازیابی می‌تواند در زمانی دیگر، بر روی سیستمی دیگر، یا هر دو حالت انجام شود.



گزینه‌ها (OPTIONS)

بیشتر فلگ‌های طولانی را می‌توان با پیشوند no- برای نقیض کردن گزینه به کار برد (برای نمونه: --isplay-stats و --0-isplay-stats).



گزینه‌های عمومی (Common options)

گزینه‌های عمومی برای هر دستور قابل اعمال هستند.

-v[v...], --

افزایش میزان خروجی (پُرگویی) نسبت به سطح پیش‌فرض. در حالت گزینه کوتاه، می‌توان از چند v استفاده کرد که هر کدام سطح پُرگویی را یک واحد افزایش می‌دهد.

-vnum, --

تنظیم سطح پُرگویی روی num. هرچه مقدار سطح بالاتر باشد، خروجی بیشتری تولید خواهد شد.

سطوح زیر در دسترس هستند:

•-v0 بدون خروجی؛
•-v1 فقط خطاها؛
•-v2 موارد فوق به همراه هشدارها (این سطح پیش‌فرض است)؛
•-v3 موارد فوق به همراه پیام‌های اطلاعاتی و برچسب‌های زمانی؛
•-v4 موارد فوق به همراه جزئیات کامل اشکال‌زدایی (debug).

--onfig file

ارسال یک فایل پیکربندی مشخص به criu.

--0-efault-onfig

غیرفعال‌سازی پردازش و پارس فایل‌های پیکربندی پیش‌فرض.

--idfile
file

نوشتن شناسه فرآیند (pid) وظیفه ریشه، سرویس یا page-server در یک file.

-o, --

نوشتن پیام‌های ثبت وقایع (لاگ) درون یک file.

--isplay-ats

در حین عملیات dump و همچنین restore، ابزار criu آماری مانند زمان مورد نیاز برای dump یا بازیابی فرآیند، یا تعداد صفحات ثبت‌شده یا بازیابی‌شده را جمع‌آوری می‌کند. این اطلاعات همواره در فایل‌های stats-dump و stats-restore ذخیره می‌شوند و با ابزار crit(1) قابل مشاهده‌اند. گزینه --isplay-ats این اطلاعات را در انتهای عملیات روی کنسول چاپ می‌کند.

-D, --images-ir path

استفاده از path به عنوان دایرکتوری پایه برای جستجوی مجموعه‌های فایل‌های تصویر.

--ream

ذخیره/بازیابی تصاویر با استفاده از criu-image-streamer. برای راهنمای دقیق استفاده به https://github.com/checkpoint-restore/criu-image-streamer مراجعه فرمایید.

--rev-images-ir
path

استفاده از path به عنوان دایرکتوری والد برای جستجوی مجموعه‌های فایل‌های تصویر. این گزینه برای dumpهای افزایشی کاربرد دارد.

-W, --216

استفاده از دایرکتوری dir برای قرار دادن فایل‌های لاگ، pidfileها و داده‌های آماری. در صورت عدم تعیین، path مربوط به گزینه -D استفاده خواهد شد.

--lose fd

بستن توصیف‌گر فایل fd پیش از انجام هر اقدامی.

-L, --r path

مسیر به دایرکتوری پلاگین‌ها.

--\nable-

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

نکته: این گزینه کاملاً ایمن نیست و با مسئولیت خودتان از آن استفاده کنید. شناسایی خودکار مانت سیستم فایل فرض می‌کند نقطه مانت می‌تواند با mount(src, mountpoint, flags, options) بازیابی شود. هنگام استفاده، انتظار می‌رود dump همواره موفق شود، اما در صورت نادرست بودن مفروضات بازیابی، ممکن است restore با شکست روبرو شود. این گزینه با --\xternal dev سازگار نیست.

--ction-ript script

افزودن یک اسکریپت اقدام خارجی برای اجرا در مراحلی مشخص. متغیر محیطی CRTOOLS_SCRIPT_ACTION در دسترس اسکریپت خواهد بود تا نوع اقدام در حال اجرا را مشخص کند و مقدار آن می‌تواند یکی از موارد زیر باشد:

pre-dump

اجرا پیش از آغاز یک dump

post-dump

اجرا پس از تکمیل یک dump

pre-restore

اجرا پیش از آغاز یک restore

post-restore

اجرا پس از تکمیل یک restore

pre-resume

اجرا در حالتی که تمامی فرآیندها و منابع بازیابی شده‌اند اما تسک‌ها متوقف مانده و منتظر دستور نهایی اجرا هستند. این مرحله نباید ناموفق شود.

post-resume

فراخوانی در پایان کار، هنگامی که همه چیز بازیابی شده و فرآیندها اجرا را از سر گرفته‌اند.

network-lock

اجرا برای قفل کردن شبکه در یک فضای نام شبکه هدف

network-unlock

اجرا برای باز کردن قفل شبکه در یک فضای نام شبکه هدف

setup-namespaces

اجرا به محض ساخته شدن تسک ریشه همراه با فضاهای نام الزامی. توجه داشته باشید این مرحله زودهنگام بازیابی است که در آن هنوز به جز خود فضاهای نام چیزی بازیابی نشده است.

post-setup-namespaces

فراخوانی پس از پیکربندی فضاهای نام

orphan-pts-master

فراخوانی پس از باز شدن و رفع قفل pty اصلی (master). این هوک تنها در حالت RPC قابل استفاده است و پیام اعلان حاوی توصیف‌گر فایل مربوط به pty مستر است.

query-ext-files

فراخوانی پس از متوقف شدن درخت فرآیند و قفل شدن شبکه. این هوک تنها در حالت RPC کاربرد دارد. پاسخ اعلان حاوی شناسه‌های فایلی است که باید به فهرست فایل‌های خارجی اضافه شوند.

--nprivileged

این گزینه به criu اعلام می‌کند که محدودیت‌های ناشی از اجرا به عنوان کاربر غیرریشه را بپذیرد. اجرای برنامه در حالت غیرریشه مستلزم آن است که criu حداقل دارای قابلیت CAP_SYS_ADMIN یا CAP_CHECKPOINT_RESTORE باشد. برای جزئیات اجرای غیرریشه، بخش NON-ROOT را مطالعه فرمایید.

-V, --

چاپ نسخه برنامه و خروج.

-h, --

چاپ راهنمای دستورات و خروج.



pre-dump

انجام فرآیند پیش‌تخلیه (pre-dump) که طی آن criu یک اسنپ‌شات از تغییرات حافظه نسبت به pre-dump قبلی ثبت می‌کند. توجه داشته باشید که در طول این فرآیند، criu همچنین کش fsnotify را می‌سازد که فرآیند restore را تسریع می‌بخشد. دستور pre-dump حداقل به گزینه -t نیاز دارد (بخش dump در ادامه را ببینید). علاوه بر این، گزینه‌های page-server نیز قابل تعیین هستند.

--rack-m

فعال‌سازی ردیاب تغییرات حافظه درون کرنل. در صورت عدم ارسال این گزینه، ردیاب حافظه به صورت ضمنی فعال خواهد شد.

--re-ump-de=mode

دو حالت mode برای کارکرد الگوریتم پیش‌تخلیه وجود دارد. حالت splice مبتنی بر انگل (parasite) است، در حالی که حالت read بر پایه فراخوانی سیستمی process_vm_readv عمل می‌کند. حالت read در مقایسه با حالت splice زمان انجماد (frozen time) کوتاه‌تر و فشار حافظه کمتری ایجاد می‌نماید. پیش‌فرض حالت splice است.



dump

انجام عملیات ایجاد چک‌پوینت (checkpoint).

-t, --ree pid

ایجاد چک‌پوینت از کل درخت فرآیند از مبدأ شناسه pid.

-R, ---unning

باقی گذاشتن تسک‌ها در حالت اجرا پس از چک‌پوینت، به جای کشتن آن‌ها. این گزینه خطرناک بوده و تنها در صورتی باید استفاده شود که کاملاً از پیامدهای آن آگاه باشید.

توجه داشته باشید اگر تسکی پس از چک‌پوینت به اجرا ادامه دهد، ممکن است اتصالات TCP را تغییر داده، فایل‌ها را حذف کند یا اقدامات خطرناک دیگری انجام دهد. بنابراین criu نمی‌تواند تضمین کند که عملیات restore بعدی با موفقیت انجام شود. در اغلب موارد با استفاده از این گزینه، اسنپ‌شات سیستم فایل باید دست‌کم به کمک اسکریپت اقدام post-dump تهیه شود.

به بیان دیگر، جز در موارد واقعاً ضروری از این گزینه استفاده نکنید.

-s, ---opped

باقی گذاشتن تسک‌ها در حالت متوقف‌شده (stopped) پس از چک‌پوینت، به جای کشتن آن‌ها.

--\xternal type[id]:value

تخلیه نمونه‌ای از یک منبع خارجی. ساختار کلی عبارت است از type منبع، به همراه id منبع (درون براکت) و value اختیاری (همراه با دونقطه در ابتدا). انواع منابع پشتیبانی‌شده عبارتند از: mnt, dev, file, tty, unix. نحو به نوع منبع وابسته است. برای بازیابی منابع خارجی، بسته به نوع منبع از --\xternal یا --inherit-fd استفاده می‌شود.

--\xternal mnt[mountpoint]:name

تخلیه یک bind mount خارجی با ارجاع mountpoint، و ذخیره آن در تصویر تحت شناسه name.

--\xternal mnt[]:flags

تخلیه کلیه bind mountهای خارجی با تشخیص خودکار آن‌ها. پرچم‌های اختیاری flags می‌توانند شامل m برای تخلیه مانت‌های master خارجی، یا s برای تخلیه مانت‌های مشترک (shared) خارجی باشند (رفتار پیش‌فرض لغو عملیات در صورت یافتن چنین مانت‌هایی است). در صورت عدم ارائه flags، دونقطه اختیاری است.

--\xternal dev[major/minor]:name

اجازه تخلیه یک فضای نام مانت که دستگاه بلوکی واقعی در آن مانت شده است. دستگاه بلوکی با شماره‌های major و minor خود شناخته شده و criu اطلاعات آن را با شناسه name در تصویر ذخیره می‌کند.

--\xternal file[mnt_id:inode]

تخلیه یک فایل خارجی، یعنی فایل بازی که از فضای نام مانت جاری قابل تفکیک و دسترسی نیست و بدون این گزینه قابل تخلیه نمی‌باشد. فایل با mnt_id (میدانی از /proc/pid/fdinfo/N) و inode (طبق خروجی stat(2)) شناسایی می‌شود.

--\xternal tty[rdev:dev]

تخلیه TTY خارجی، شناسایی‌شده با فیلدهای st_rdev و st_dev بازگردانده‌شده از stat(2).

--\xternal unix[id]

اعلام به criu مبنی بر اینکه قطع بودن یک انتهای جفت سوکت UNIX (ساخته‌شده با socketpair(2)) با شناسه id بلامانع است.

--\xternal net[inode]:name

علامت‌گذاری فضای نام شبکه به عنوان خارجی و عدم گنجاندن آن در چک‌پوینت. برچسب name می‌تواند با --inherit-fd در هنگام بازیابی برای تعیین توصیف‌گر فایل فضای نام شبکه از پیش پیکربندی‌شده به کار رود.

--\xternal pid[inode]:name

علامت‌گذاری فضای نام PID به عنوان خارجی. این گزینه بعداً می‌تواند برای بازیابی فرآیند درون یک فضای نام PID موجود استفاده شود. برچسب name می‌تواند برای انتساب فضای نام PID دیگر در حین بازیابی به کمک --inherit-fd استفاده گردد.

--

استفاده از cgroup freezer برای جمع‌آوری فرآیندها.

--nage-groups

جمع‌آوری cgroupها درون تصویر تا بعداً بازیابی شوند. بدون این گزینه، criu پیکربندی cgroupهای مرتبط با تسک را ذخیره نمی‌کند.

--group-rops
spec

تعیین کنترل‌کننده‌ها و مشخصه‌های آن‌ها برای ذخیره‌سازی درون فایل تصویر. ابزار criu مشخصاتی پیش‌فرض برای کنترل‌کننده‌های رایج دارد، اما از آنجا که هسته می‌تواند کنترل‌کننده‌های جدید اضافه کند یا مشخصات آن‌ها را تغییر دهد، این گزینه امکان تطابق با کرنل را فراهم می‌سازد.

آرگومان spec مشخصات کنترل‌کننده و ویژگی‌ها را در ساختار ساده YAML شرح می‌دهد:

"c1":
 - "strategy": "merge"
 - "properties": ["a", "b"]
"c2":
 - "strategy": "replace"
 - "properties": ["c", "d"]

که در آن c1 و c2 نام کنترل‌کننده‌ها و a، b، c و d مشخصات آن‌ها هستند.

به فرمت نقل‌قول‌ها، فاصله‌ها و سطرهای جدید توجه کنید. مقدار strategy تعیین می‌کند در صورتی که کنترل‌کننده از قبل به صورت توکار وجود داشته باشد چه اقدامی صورت گیرد: criu می‌تواند مقادیر را merge (ادغام) یا replace (جایگزین) کند.

برای نمونه، خط فرمان برای ساختار فوق چنین خواهد بود:

--cgroup-props "

--group-rops-

مشابه --group-rops،
با این تفاوت که مشخصات از فایل file خوانده می‌شود.

--group-ump-ontroller name

تخلیه کنترل‌کننده دارای نام name به تنهایی، و نادیده گرفتن هر کنترل‌کننده دیگری که به‌طور خودکار کشف شده است (معمولاً از طریق /proc). این گزینه زمانی مفید است که بخواهید criu برخی کنترل‌کننده‌ها را نادیده بگیرد.

--group-yard path

به جای تلاش برای مانت کردن cgroupها در CRIU، مسیری به دایرکتوری دارای yard از پیش ایجاد شده cgroup ارائه دهید. این گزینه در صورتی که تمایلی به اعطای دسترسی CAP_SYS_ADMIN به CRIU نداشته باشید کاربرد دارد. برای هر مانت cgroup باید دقیقاً یک پوشه وجود داشته باشد. اگر تنها یک کنترل‌کننده در این مانت باشد، نام پوشه همان نام کنترل‌کننده خواهد بود. اگر چندین کنترل‌کننده همراه هم مانت شده باشند، نام پوشه باید آن‌ها را با کاما جدا کند.

برای نمونه، اگر /proc/cgroups چنین باشد:

#subsys_name hierarchy num_cgroups enabled
cpu          1         1           1
devices      2         2           1
freezer      2         2           1

می‌توانید yard مربوط به cgroup را با دستورات زیر بسازید:

mkdir private_yard
cd private_yard
mkdir cpu
mount -t cgroup -o cpu none cpu
mkdir devices,freezer
mount -t cgroup -o devices,freezer none devices,freezer

--cp-\stablished

ایجاد چک‌پوینت از اتصالات برقرارشده TCP.

--cp-lose

عدم تخلیه وضعیت یا مسدودسازی اتصالات برقرارشده TCP (از جمله اتصالاتی که برقرار بوده‌اند اما اکنون بسته‌اند). این گزینه زمانی مفید است که قصد بازیابی اتصالات TCP وجود ندارد.

--ip-in-

نادیده گرفتن اتصالات در حال برقراری (in-flight) در پروتکل TCP. اگر هر اتصال TCP که هنوز به‌طور کامل برقرار نشده است پیدا شود، criu این اتصالات را نادیده می‌گیرد و خطا صادر نمی‌کند. انتظار می‌رود پشته TCP در سمت کلاینت اتصال مجدد را مدیریت کند.

--\vasive-evices

استفاده از هر مسیر دیگری به فایل دستگاه در صورتی که مسیر اصلی در دسترس نباشد.

--age-rver

ارسال صفحات حافظه به سرور صفحه (دستور page-server را ببینید).

--

اجبار به تحلیل نام‌ها برای دیده‌بان‌های inotify و fsnotify.

--uto-edup

حذف داده‌های تکراری قدیمی در تصاویر صفحات مربوط به dump قبلی. این گزینه متضمن حالت dump افزایشی است (دستور pre-dump را ببینید).

-l, --

تخلیه قفل‌های فایل. لازم است اطمینان حاصل شود که تمام کاربران قفل‌های فایل در dump لحاظ شده‌اند، بنابراین استفاده از این گزینه تنها برای کانتینرهای محصوری امن است که قفل‌های آن‌ها در خارج از درخت فرآیند نگه داشته نشده باشند.

--

پیوند زدن مجدد فایل‌های پیوندزدوده‌شده (unlinked) در صورت امکان (سیستم فایل را در حین restore تغییر می‌دهد).

--imeout number

تنظیم محدودیت زمانی به ثانیه برای جمع‌آوری تسک‌ها در حین عملیات dump. مهلت زمانی پیش‌فرض ۱۰ ثانیه است.

--ost-t size

تنظیم حداکثر اندازه فایل حذف‌شده جهت نگه‌داری درون تصویر. به صورت پیش‌فرض تا ۱ مگابایت مجاز است. با این گزینه می‌توان از قرار دادن فایل‌های حذف‌شده حجیم درون تصاویر خودداری کرد. آرگومان size می‌تواند دارای پسوندهای K، M یا G (کیلو، مگا یا گیگابایت) باشد.

--ost-

فعال‌سازی بهینه‌سازی مبتنی بر fiemap ioctl که تعداد فراخوانی‌های سیستمی را هنگام ایجاد چک‌پوینت از فایل‌های روح (ghost) با پراکندگی بالا کاهش می‌دهد. این گزینه به طور پیش‌فرض فعال است و می‌توان با --0-ost-

-j, --ell-job

اجازه تخلیه جاب‌های خط فرمان (shell jobs). این گزینه ایجاب می‌کند که تسک بازیابی‌شده، شناسه نشست (session) و شناسه گروه فرآیند را از خود criu به ارث ببرد. همچنین اجازه مهاجرت اتصال تکی tty خارجی را می‌دهد (برای مهاجرت برنامه‌هایی مانند top). در صورت استفاده در دستور dump، باید در دستور restore نیز درج گردد.

--pu-ap [cap[,cap...]]

تعیین قابلیت‌های CPU برای نوشتن در فایل تصویر. آرگومان فهرستی جداشده با کاما از موارد زیر است:
•none نادیده گرفتن کلی قابلیت‌ها؛ نه تصویری ساخته می‌شود و نه بررسی در حین بازیابی انجام می‌گیرد؛
•fpu بررسی سازگاری ماژول FPU؛
•ins بررسی اینکه آیا CPU از تمام دستورالعمل‌های الزامی پشتیبانی می‌کند یا خیر؛
•cpu بررسی تطابق دقیق قابلیت‌های پردازنده؛
•all برای تمام موارد فوق.

به صورت پیش‌فرض این گزینه روی fpu و ins تنظیم است.

--group-oot [controller:]/newroot

تغییر ریشه کنترل‌کننده‌ای که قرار است تخلیه شود. به طور پیش‌فرض criu همه مسیرهای زیر محل تسک‌ها را تخلیه می‌کند. اما اگر یک کانتینر تسک‌هایش را به زیرشاخه cgroup پایین‌تر منتقل کند، دسترسی‌ها روی دایرکتوری‌های بالاتر حفظ نمی‌شود که این گزینه مشکل را رفع می‌کند.

--ges

انجام عملیات dump بدون نوشتن مستقیم صفحات حافظه درون فایل‌های تصویر و آماده‌سازی برای پاسخ به درخواست‌های صفحه از طریق شبکه. در این حالت فرض می‌شود دیمن lazy-pages متصل شده و صفحات را به صورت تنبل به فضای آدرس فرآیند بازیابی‌شده تزریق خواهد کرد.

--

تعیین روش اعتبارسنجی فایل‌های باز، تا اطمینان حاصل شود نسخه فایل بازیابی‌شده با نسخه زمان dump یکسان است.

حالت mode می‌تواند یکی از موارد زیر باشد:

filesize

بررسی صریح اندازه فایل در تمامی اوقات. سریع‌ترین و سبک‌ترین بررسی است.

buildid

اعتبارسنجی فایل‌های ELF با شناسه build-ID آن‌ها. در صورت عدم دریافت build-ID، روش chksm-first استفاده می‌شود (پیش‌فرض).

--0twork-de]

تعیین روش مورد استفاده برای قفل و باز کردن قفل شبکه. قفل کردن باعث دور ریختن بسته‌های TCP بین مرحله dump و restore می‌شود تا از ارسال بسته RST توسط کرنل جلوگیری به عمل آید.

حالت mode می‌تواند یکی از موارد زیر باشد:

iptables

استفاده از قوانین iptables برای دور ریختن بسته‌ها (پیش‌فرض).

nftables

استفاده از قوانین nftables برای دور ریختن بسته‌ها.

skip

عدم قفل کردن شبکه. اگر از --cp-close استفاده نشود، شبکه باید از خارج قفل شود.

--llow-probes

اجازه dump هنگامی که uprobes vma حضور دارد. در صورت استفاده در dump، این گزینه در زمان بازیابی نیز الزامی است.
یک uprobes vma به‌طور خودکار توسط هسته پس از تحریک یک uprobe ایجاد
می‌شود. این نگاشت حتی پس از حذف uprobe نیز پاک نمی‌شود. بنابراین حتی اگر
فرآیندی در گذشته دارای uprobes بوده و اکنون حذف شده باشد، این گزینه
همچنان لازم است زیرا criu راهی برای تشخیص وجود uprobe فعال ندارد.
هنگام استفاده از این گزینه در بازیابی، مطمئن شوید که uprobeهای فعال روی فرآیند
هنوز فعال باشند؛ در غیر این صورت با رسیدن اجرا به نقطه uprobe، سیگنال
SIGTRAP ارسال خواهد شد.
برای نمونه، اگر uprobe روی تابع foo از فرآیند p_bar تنظیم شده باشد و دست‌کم
یک بار اجرا شود، هسته نگاشت uprobes vma را ایجاد می‌کند. پس از dump اگر uprobe
حذف شود، با رسیدن به تابع foo سیگنال SIGTRAP به p_bar ارسال شده و در صورت
عدم مدیریت سیگنال، برنامه کرش خواهد کرد.



restore

بازیابی فرآیندهایی که قبلاً از آن‌ها چک‌پوینت تهیه شده است.

--inherit-fd fd[N]:resource

به ارث بردن یک توصیف‌گر فایل. این گزینه به criu امکان می‌دهد از توصیف‌گر فایل از قبل باز N برای بازیابی منبع مشخص‌شده با resource استفاده کند. از این گزینه می‌توان برای بازیابی منابع خارجی تخلیه‌شده با گزینه‌های --\xternal نوع file، tty، pid و unix استفاده کرد.

آرگومان resource می‌تواند یکی از موارد زیر باشد:

•tty[rdev:dev]
•pipe[inode]
•socket[inode*]*
•file[mnt_id:inode]
•path/to/file

توجه داشته باشید براکت‌های مورد استفاده در این آرگومان عینی (literal) بوده و معمولاً باید در شل اسکیپ شوند.

-d, --estore-etached

جدا شدن خود criu (حالت detached) به محض تکمیل عملیات بازیابی.

-s, ---opped

باقی گذاشتن تسک‌ها در حالت متوقف‌شده (stopped) پس از بازیابی (به جای از سرگیری اجرای آن‌ها).

-S, --estore-bling

بازیابی تسک ریشه به عنوان یک sibling (هم‌سطح)؛ تنها در ترکیب با --estore-etached معنی دارد.

--

نوشتن فایل‌های لاگ جداگانه برای هر pid.

-r, --oot path

تغییر سیستم فایل ریشه به path (هنگام اجرا درون یک فضای نام مانت). این گزینه برای بازیابی یک فضای نام مانت الزامی است. دایرکتوری path باید یک نقطه مانت باشد و والد آن نباید روی آن مانت شده باشد.

--\xternal type[id]:value

بازیابی نمونه‌ای از یک منبع خارجی. ساختار عمومی عبارت است از type منبع، به همراه id منبع (درون براکت) و value اختیاری (همراه با دونقطه در ابتدا). انواع منابع پشتیبانی‌شده عبارتند از: mnt, dev, veth, macvlan. برای بازیابی منابع خارجی در ارتباط با توصیف‌گرهای باز فایل (نظیر آنچه با گزینه‌های --\xternal نوع file، tty و unix تخلیه شده‌اند)، باید از گزینه --inherit-fd استفاده شود.

--\xternal mnt[name]:mountpoint

بازیابی یک bind mount خارجی با ارجاع name در تصویر، و bind-mount کردن آن از mountpoint میزبان به نقطه مانت مناسب.

--\xternal mnt[]

بازیابی کلیه bind mountهای خارجی (تخلیه‌شده به کمک تشخیص خودکار).

--\xternal dev[name]:/dev/path

بازیابی یک دستگاه مانت خارجی، مشخص‌شده با شناسه name در تصویر، با استفاده از دستگاه بلوکی موجود /dev/path.

--\xternal veth[inner_dev]:outer_dev@bridge

تنظیم نام دستگاه بیرونی VETH (متناظر با inner_dev بازیابی‌شده) به outer_dev. در صورت تعیین @bridge، دستگاه outer_dev به آن بریج متصل می‌شود. در صورت عدم استفاده از گزینه، outer_dev توسط هسته تولید خواهد شد.

--\xternal macvlan[inner_dev]:outer_dev

هنگام بازیابی تصویری حاوی دستگاه MacVLAN، این گزینه باید برای تعیین اینکه inner_dev بازیابی‌شده به کدام outer_dev (یک دستگاه شبکه موجود در فضای نام CRIU) متصل شود استفاده گردد.

-J, --join-0 NS:{PID|NS_FILE}[,EXTRA_OPTS]

بازیابی درخت فرآیند درون یک فضای نام موجود. فضای نام می‌تواند در قالب PID یا مسیر NS_FILE مشخص شود (مانند: --join-ns net:12345 یا --join-ns net:/foo/bar). مقادیر پشتیبانی‌شده برای NS عبارتند از: ipc, net, time, user, و uts. این گزینه از پیوستن به فضای نام PID پشتیبانی نمی‌کند، اما این کار با استفاده از --\xternal و --inherit-fd مقدور است. مقدار EXTRA_OPTS اختیاری است و می‌تواند برای تعیین UID و GID برای فضای نام کاربر استفاده شود.

--nage-groups [mode]

بازیابی پیکربندی cgroupهای مرتبط با تسک از روی تصویر. کنترل‌کننده‌ها همواره به شیوه خوش‌بینانه بازیابی می‌شوند؛ اگر از قبل در سیستم موجود باشند مجدداً استفاده شده و در غیر این صورت ایجاد خواهند شد.

حالت mode می‌تواند یکی از موارد زیر باشد:

none

عدم بازیابی مشخصه‌های cgroup و الزام به وجود قبلی cgroup در زمان restore.

props

بازیابی مشخصه‌های cgroup و الزام به وجود قبلی cgroup در سیستم.

soft

بازیابی مشخصه‌های cgroup تنها در صورتی که cgroup توسط criu ایجاد شده باشد، در غیر این صورت مشخصات بازیابی نمی‌شوند (پیش‌فرض).

full

همواره تمامی cgroupها و مشخصه‌های آن‌ها را بازیابی کن.

strict

بازیابی تمام cgroupها و مشخصات آن‌ها از صفر، با الزام به عدم وجود قبلی آن‌ها در سیستم.

ignore

نادیده گرفتن کامل cgroupها و وانمود به عدم وجود آن‌ها.

--group-yard path

به جای تلاش برای مانت cgroupها در CRIU، مسیری به دایرکتوری yard مربوط به cgroup که از قبل ساخته شده است ارائه دهید. برای توضیحات تکمیلی بخش dump را ببینید.

--group-oot [controller:]/newroot

تغییر cgroup ریشه‌ای که کنترل‌کننده درون آن نصب خواهد شد. عدم ذکر کنترل‌کننده یعنی ریشه برای تمام کنترل‌کننده‌های نامشخص اعمال می‌شود.

--cp-\stablished

بازیابی اتصالات برقرارشده TCP که قبلاً تخلیه شده‌اند. این گزینه ایجاب می‌کند که شبکه در فاصله بین dump و restore قفل شده باشد تا طرف دیگر اتصال صرفاً نوعی تأخیر حس کند.

--cp-lose

بازیابی سوکت‌های متصل TCP در حالت بسته.

--

تطابق میان نام‌های داخلی و بیرونی دستگاه‌های veth.

-l, --

بازیابی قفل‌های فایل از روی تصویر.

--

تعیین پروفایل LSM برای استفاده در طول بازیابی. مقدار type می‌تواند apparmor یا selinux باشد.

--

تعیین کانتکست مانت جدید در هنگام بازیابی. این گزینه اطلاعات کانتکست مانت موجود را با مقدار تعیین‌شده جایگزین می‌کند. مانت‌های بدون گزینه context= تغییر نخواهند کرد.

اگر یک نقطه مانت با گزینه‌ای مانند:

context="system_u:object_r:container_file_t:s0:c82,c137"

چک‌پوینت شده باشد، می‌توان آن را با:

--lsm-mount-context "system_u:object_r:container_file_t:s0:c204,c495"

تغییر داد تا نقطه مانت با context= جدید بازیابی شود. این قابلیت در صورت استفاده از selinux و لزوم تغییر برچسب‌ها در حین بازیابی (مثلاً بازیابی کانتینر درون یک پاد موجود) بسیار مفید است.

--uto-edup

به محض بازیابی یک صفحه، آن صفحه از فایل تصویر سوراخ و پاک (punch out) می‌شود.

-j, --ell-job

بازیابی جاب‌های خط فرمان (به ارث بردن نشست و شناسه گروه فرآیند از criu).

--pu-ap [cap[,cap...]]

تعیین قابلیت‌های الزامی CPU روی پردازنده‌ای که فرآیند روی آن در حال بازیابی است. برای نقیض کردن یک قابلیت، پیشوند ^ به کار می‌رود. این گزینه ایجاب می‌کند که --pu-cap در دستور dump نیز ارسال شده باشد، به جز در مورد fpu. آرگومان cap می‌تواند مقادیر زیر باشد:

all

الزام به وجود تمامی قابلیت‌ها (پیش‌فرض در صورت ذکر بدون آرگومان، امن‌ترین حالت).

cpu

الزام به تطابق کامل تمام قابلیت‌های پردازنده موجود در تصویر با پردازنده زمان اجرا.

fpu

الزام به وجود FPU سازگار (پیش‌فرض در صورت عدم درج گزینه در خط فرمان).

ins

الزام به سازگاری در سطح دستورالعمل‌های پردازنده.

none

نادیده گرفتن قابلیت‌ها (خطرناک‌ترین حالت، رفتار وابسته به پیاده‌سازی است).

--192

نادیده گرفتن بی‌صدا و رد شدن از بازیابی مقادیر sysctl که در سیستم موجود نیستند. این گزینه اجازه بازیابی روی هسته‌های قدیمی‌تر یا پیکربندی‌های بدون برخی گزینه‌ها را می‌دهد.

--ges

بازیابی فرآیندها بدون پر کردن کل محتوای حافظه در ابتدای کار. زیرساخت مورد نیاز برای بارگذاری صفحات حافظه به صورت درخواستی یا در پس‌زمینه فراهم می‌شود. نیازمند اجرای دیمن lazy-pages است.

--

تعیین روش مورد استفاده برای اعتبارسنجی فایل‌های باز. مقادیر filesize یا buildid هستند.

--ip-

رد کردن بررسی مجوزهای فایل (r/w/x برای u/g/o) هنگام بازیابی.

--llow-probes

الزامی هنگام dump با این گزینه. برای جزئیات به این گزینه در بخش dump مراجعه کنید.



check

بررسی اینکه آیا هسته از ویژگی‌های مورد نیاز criu برای تخلیه و بازیابی یک درخت فرآیند پشتیبانی می‌کند یا خیر.

سه دسته پشتیبانی هسته وجود دارد: دستور criu check همواره ویژگی‌های دسته ۱ را بررسی می‌کند مگر آنکه --

Category 1

کاملاً الزامی. ویژگی‌هایی مانند پشتیبانی از /proc/PID/map_files، نظارت بر سوکت NETLINK_SOCK_DIAG، /proc/sys/kernel/ns_last_pid و غیره.

Category 2

تنها در موارد خاص الزامی است. ویژگی‌هایی مانند ریمپ AIO، /dev/net/tun و مواردی که تنها در صورت استفاده فرآیند از آن‌ها الزامی می‌شوند.

Category 3

آزمایشی. ویژگی‌هایی مانند task-diag که برای مقاصد آزمایشی (بیشتر حین توسعه) به کار می‌روند.

اگر هیچ خطا یا هشداری وجود نداشته باشد، criu عبارت "Looks good." را چاپ کرده و کد خروج آن 0 خواهد بود.

فقدان یک ویژگی دسته ۱ باعث چاپ "Does not look good." شده و کد خروج غیرصفر خواهد بود.

فقدان ویژگی‌های دسته‌های ۲ و ۳ باعث چاپ "...Looks good but" شده و کد خروج غیرصفر خواهد بود.

بدون هیچ گزینه‌ای، criu check ویژگی‌های دسته ۱ را بررسی می‌کند. با گزینه‌های زیر می‌توان این رفتار را تغییر داد:

--\xtra

بررسی پشتیبانی هسته از ویژگی‌های دسته ۲.

--\xperimental

بررسی پشتیبانی هسته از ویژگی‌های دسته ۳.

--ll

بررسی پشتیبانی هسته از ویژگی‌های دسته‌های ۱، ۲ و ۳.

--

بررسی یک ویژگی مشخص. اگر name برابر با list باشد، فهرستی از نام‌های معتبر ویژگی‌های هسته چاپ خواهد شد.



page-server

راه‌اندازی criu در حالت سرور صفحه (page server mode).

--aemon

اجرای سرور صفحه به عنوان دیمن (فرآیند پس‌زمینه).

--atus-

نوشتن \0 در FD و بستن آن به محض آماده شدن page-server برای رسیدگی به درخواست‌ها. این گزینه امکان عدم دیمن‌سازی فرآیند و دریافت کد خروج در انتها را می‌دهد. نباید هم‌زمان با --aemon استفاده شود.

--ddress address

آدرس IP یا نام میزبان page server.

--ort
number

شماره پورت page server.

--s-cket
fd

استفاده از توصیف‌گر فایل ارائه‌شده به عنوان سوکت برای اتصالات ورودی (در این حالت address و port نادیده گرفته می‌شوند). برای رهگیری ترافیک یا افزودن رمزنگاری و احراز هویت مناسب است.

--ges

ارائه حافظه تخلیه‌شده محلی به یک دیمن راه دور lazy-pages. در این حالت سرور صفحه امکان درخواست صفحات حافظه به ترتیب تصادفی را می‌دهد.

--ls-acert file

تعیین مسیر فایل گواهی مرجع صدور گواهی (CA) معتمد برای اعتبارسنجی گواهی کلاینت یا سرور در قالب PEM.

--ls-acrl file

تعیین مسیر فایل فهرست ابطال گواهی (CRL) در قالب PEM.

--ls-ert file

تعیین مسیر فایل حاوی گواهی X.509 در قالب PEM جهت ارائه به موجودیت راه دور.

--ls-y file

تعیین مسیر فایل حاوی کلید خصوصی TLS در قالب PEM.

--ls

استفاده از TLS برای برقراری ارتباطات امن راه دور.



lazy-pages

راه‌اندازی criu در حالت دیمن lazy-pages.

دیمن lazy-pages مسئولیت مدیریت صفحه‌بندی درخواستی در سطح کاربر برای فرآیندهای بازیابی‌شده را بر عهده دارد. این دیمن اطلاعات لازم برای پر کردن صفحات حافظه را از restore و دایرکتوری چک‌پوینت دریافت می‌کند و صفحات درخواست‌نشده را در پس‌زمینه تزریق می‌نماید.



exec

اجرای یک فراخوانی سیستمی درون کانتکست تسک مقصد. این قابلیت منسوخ شده است؛ لطفاً به جای آن از Compel استفاده نمایید.



service

راه‌اندازی criu در حالت دیمن RPC، که در آن criu روی سوکت به دستورات RPC گوش می‌دهد. این حالت برای مواردی مناسب است که خود دیمن با دسترسی کاربر ارشد (ریشه) اجرا می‌شود اما کلاینت‌ها دسترسی ممتاز ندارند.



dedup

آغاز فرآیند حذف داده‌های تکراری در pagemap، که در آن criu کلیه فایل‌های pagemap را اسکن کرده و تعداد ورودی‌ها را با استفاده از ارجاعات تصویر والد به حداقل می‌رساند.



cpuinfo dump

واکشی ویژگی‌های پردازنده فعلی و نوشتن آن‌ها در یک فایل تصویر.



cpuinfo check

واکشی ویژگی‌های پردازنده فعلی (پردازنده‌ای که criu روی آن اجرا می‌شود) و آزمایش سازگاری آن‌ها با موارد موجود در یک فایل تصویر.



فایل‌های پیکربندی (CONFIGURATION FILES)

ابزار Criu از فایل‌های پیکربندی برای پرهیز از درج مکرر گزینه‌ها در خط فرمان پشتیبانی می‌کند. یک فایل پیکربندی مشخص را می‌توان با گزینه "--onfig file" ارسال کرد. اگر فایلی مشخص نشود، فایل‌های پیکربندی پیش‌فرض /etc/criu/default.conf و $HOME/.criu/default.conf (در صورت وجود) پردازش خواهند شد. همچنین اگر متغیر محیطی CRIU_CONFIG_FILE تنظیم شده باشد، پردازش می‌گردد.

گزینه‌های ارسال‌شده به CRIU از طریق CLI، RPC یا فایل پیکربندی با ترتیب زیر ارزیابی می‌شوند:

•apply_config(/etc/criu/default.conf)
•apply_config($HOME/.criu/default.conf)
•apply_config(CRIU_CONFIG_FILE)
•apply_config(--onfig file)
•apply_config(CLI) یا apply_config(RPC)
•apply_config(RPC configuration file) (تنها در حالت RPC)

پردازش فایل‌های پیکربندی پیش‌فرض را می‌توان در صورت نیاز با "--0-efault-onfig" غیرفعال کرد. فایل‌های پیکربندی با گزینه‌های خط فرمان ادغام شده و امکان بازنویسی گزینه‌ها را فراهم می‌کنند.



نحو فایل‌های پیکربندی (Configuration file syntax)

کامنت‌ها با علامت '#' پشتیبانی می‌شوند و ادامه خط نادیده گرفته می‌شود. گزینه‌ها همانند گزینه‌های خط فرمان بدون پیشوند '--' هستند (یک گزینه در هر سطر همراه با آرگومان مربوطه که با فاصله جدا شده است). آرگومان‌ها را می‌توان در صورت نیاز درون جفت‌گیومه قرار داد. استفاده از دستورات در فایل پیکربندی مجاز نیست.

نمونه‌ای از فایل پیکربندی برای نمایش نحو نگارش:

$ cat ~/.criu/default.conf
tcp-established
work-dir "/home/USERNAME/criu/my
# این یک کامنت است
no-restore-sibling   # این کامنت دیگری است



فایل‌های پیکربندی در حالت RPC (Configuration files in RPC mode)

ابزار criu نه تنها در حالت CLI بلکه در حالت RPC نیز فایل‌های پیکربندی را بررسی می‌کند. مقادیر فایل پیکربندی ابتدا ارزیابی می‌شوند، بدین معنا که هر گزینه‌ای که از طریق RPC تنظیم شود، تنظیمات فایل پیکربندی را رونویسی خواهد کرد.

کلاینت RPC همچنین می‌تواند یک فایل پیکربندی اضافی تعیین کند که پس از گزینه‌های RPC ارزیابی خواهد شد (از طریق "req.opts.config_file = /path/to/file"). مقادیر این فایل بر تمام گزینه‌های دیگر اولویت خواهد داشت. این کار می‌تواند منجر به رفتارهای ناخواسته در criu شود و تنها باید با احتیاط استفاده گردد.



کاربر غیرریشه (NON-ROOT)

ابزار criu می‌تواند به صورت غیرریشه با استفاده از قابلیت CAP_SYS_ADMIN یا با قابلیت CAP_CHECKPOINT_RESTORE (معرفی‌شده در هسته لینوکس 5.9) به کار گرفته شود. داشتن CAP_CHECKPOINT_RESTORE حداقل پیش‌نیاز است.

همچنین criu به قابلیت CAP_SYS_PTRACE یا مقدار 0 در /proc/sys/kernel/yama/ptrace_scope (مستندات ptrace(2) را ببینید) نیاز دارد تا بتواند فرآیند را جهت dump متوقف کند.

اجرای criu به عنوان غیرریشه محدودیت‌های متعددی دارد و بسته به فرآیند مد نظر ممکن است امکان‌پذیر نباشد.

علاوه بر CAP_CHECKPOINT_RESTORE، می‌توان قابلیت‌های بیشتری برای فعال‌سازی ویژگی‌های تکمیلی به criu اعطا کرد:

•CAP_NET_ADMIN
•CAP_SYS_CHROOT
•CAP_SETUID
•CAP_SYS_RESOURCE

توجه داشته باشید برای برخی عملیات، داشتن قابلیت در فضایی به جز فضای نام init (فضای نام ریشه/پیش‌فرض) کافی نیست. برای نمونه جهت خواندن symlinkها در proc/[pid]/map_files، داشتن CAP_CHECKPOINT_RESTORE در فضای نام init الزامی است.

صرف‌نظر از قابلیت‌ها، همواره استفاده از "--nprivileged" برای پذیرش محدودیت‌های criu در حالت غیرریشه الزامی است.



مثال‌ها (EXAMPLES)

برای ایجاد چک‌پوینت از برنامه‌ای با شناسه فرآیند 1234 و نوشتن تمام فایل‌های تصویر درون دایرکتوری checkpoint:

criu dump -D checkpoint -t 1234

برای بازیابی این برنامه همراه با جدا شدن criu:

criu restore -d -D checkpoint



نویسنده (AUTHOR)

تیم CRIU.



حق نشر (COPYRIGHT)

Copyright (C) 2011-2016, Parallels Holdings, Inc.

07/21/2026 criu 4.2.1