QEMU-IMG(1) QEMU QEMU-IMG(1)

qemu-img - ابزار مدیریت ایمیج‌های دیسک QEMU

qemu-img [standard options] command [command options]

دستور qemu-img به شما امکان می‌دهد ایمیج‌ها را به صورت آفلاین ایجاد، تبدیل و اصلاح کنید. این ابزار می‌تواند تمام قالب‌های ایمیج پشتیبانی‌شده توسط QEMU را مدیریت کند.

هشدار: هرگز از qemu-img برای تغییر ایمیج‌هایی که توسط یک ماشین مجازی در حال اجرا یا هر فرایند دیگری در حال استفاده هستند استفاده نکنید؛ این کار ممکن است ایمیج را تخریب کند. همچنین آگاه باشید که بررسی و پرس‌وجوی وضعیّت ایمیجی که توسط فرایند دیگری در حال تغییر است، ممکن است با وضعیّت ناهمگام مواجه شود.

گزینه‌های استاندارد:

نمایش این راهنما و خروج
نمایش اطلاعات نسخه و خروج
مشخص کردن گزینه‌های ردگیری (tracing).

[enable=]PATTERN

فعال‌سازی فوری رویدادهای منطبق با PATTERN (نام رویداد یا یک الگوی globbing). این گزینه تنها در صورتی در دسترس است که QEMU با یکی از backendهای ردگیری simple، log یا ftrace کامپایل شده باشد. برای تعیین چندین رویداد یا الگو، گزینهٔ -trace را چندین بار مشخص کنید.

برای چاپ فهرستی از نام‌های نقاط ردگیری (trace points) از -trace help استفاده کنید.

events=FILE

فعال‌سازی فوری رویدادهای فهرست‌شده در FILE. این فایل باید در هر خط شامل یک نام رویداد (همان‌طور که در فایل trace-events-all فهرست شده است) باشد؛ الگوهای globbing نیز پذیرفته می‌شوند. این گزینه تنها در صورتی در دسترس است که QEMU با یکی از backendهای ردگیری simple، log یا ftrace کامپایل شده باشد.

file=FILE

ثبت ردگیری‌های خروجی در FILE. این گزینه تنها در صورتی در دسترس است که QEMU با backend ردگیری simple کامپایل شده باشد.

دستورهای زیر پشتیبانی می‌شوند:

snapshot [--object OBJECTDEF] [-f FMT | --image-opts] [-U] [-q] [-l | -a SNAPSHOT | -c SNAPSHOT | -d SNAPSHOT] FILENAME

پارامترهای دستور:

FILENAME نام فایل یک ایمیج دیسک است.

FMT قالب ایمیج دیسک است. در اکثر موارد به طور خودکار حدس زده می‌شود. برای شرح قالب‌های دیسک پشتیبانی‌شده، بخش زیر را ببینید.

SIZE اندازهٔ ایمیج دیسک بر حسب بایت است. پسوندهای اختیاری k یا K (کیلوبایت، ۱۰۲۴)، M (مگابایت، 1024k)، G (گیگابایت، 1024M) و T (ترابایت، 1024G) پشتیبانی می‌شوند. b نادیده گرفته می‌شود.

OUTPUT_FILENAME نام فایل ایمیج دیسک مقصد است.

OUTPUT_FMT قالب مقصد است.

OPTIONS فهرستی از گزینه‌های مختص قالب است که با کاما از هم جدا شده‌اند و در ساختار name=value می‌باشند. برای مرور اجمالی گزینه‌های پشتیبانی‌شده توسط قالب مورد استفاده، از -o help استفاده کنید یا برای جزئیات به توضیحات قالب در زیر مراجعه نمایید.

SNAPSHOT_PARAM پارامتر مورد استفاده برای اسنپ‌شات داخلی است، ساختار آن به صورت 'snapshot.id=[ID],snapshot.name=[NAME]' یا '[ID_OR_NAME]' می‌باشد.

--object OBJECTDEF تعریف یک شیء قابل ایجاد توسط کاربر در QEMU است. برای شرح ویژگی‌های شیء به صفحه راهنمای qemu(1) مراجعه کنید. رایج‌ترین نوع شیء، یک secret است که برای ارائه گذرواژه‌ها و/یا کلیدهای رمزنگاری استفاده می‌شود.
مشخص می‌کند که پارامتر مبدأ FILENAME باید به‌صورت یک رشته کامل از گزینه‌ها تفسیر شود، نه صرفاً یک نام فایل ساده. این پارامتر با پارامتر -f ناسازگار است.
مشخص می‌کند که پارامتر(های) OUTPUT_FILENAME باید به‌صورت یک رشته کامل از گزینه‌ها تفسیر شوند، نه صرفاً یک نام فایل ساده. این پارامتر با پارامترهای -O ناسازگار است. در حال حاضر استفاده هم‌زمان از پارامتر -n برای صرف‌نظر از ایجاد ایمیج الزامی است. این محدودیت ممکن است در نسخه‌های بعدی برداشته شود.
در صورت تعیین شدن، qemu-img ایمیج را در حالت اشتراکی باز می‌کند و به سایر فرایندهای QEMU اجازه می‌دهد تا آن را در حالت نوشتن باز کنند. به عنوان مثال، این گزینه می‌تواند برای دریافت اطلاعات ایمیج (با زیردستور 'info') زمانی که ایمیج توسط یک مهمانِ در حال اجرا استفاده می‌شود، به کار رود. توجه داشته باشید که این کار ممکن است به دلیل تغییرات هم‌زمان فراداده و غیره، نتایج متناقضی ایجاد کند. این گزینه تنها هنگام باز کردن ایمیج‌ها در حالت فقط‌خواندنی مجاز است.
اطلاعات مربوط به فایل‌های پشتیبان را در یک زنجیره ایمیج دیسک برمی‌شمارد. برای توضیحات بیشتر به بخش زیر مراجعه کنید.
مشخص می‌کند که ایمیج مقصد باید فشرده‌سازی شود (تنها برای qcow/qcow2 و vmdk با زیرقالب streamOptimized).

برای qcow2، الگوریتم فشرده‌سازی را می‌توان با گزینه -o compression_type=... مشخص کرد (زیر را ببینید).

همراه با دستور یا بدون آن، راهنما را نشان می‌دهد و قالب‌های پشتیبانی‌شده را فهرست می‌کند.
نمایش نوار پیشرفت (تنها در دستورهای compare، convert و rebase). اگر گزینه -p برای دستوری که از آن پشتیبانی می‌کند استفاده نشود، پیشرفت زمانی گزارش می‌شود که فرایند یک سیگنال SIGUSR1 یا SIGINFO دریافت کند.
حالت بی‌صدا - هیچ خروجی‌ای چاپ نمی‌شود (به‌جز خطاها). در صورتی که هر دو گزینه -q و -p هم‌زمان استفاده شوند، نوار پیشرفتی وجود نخواهد داشت.
تعداد بایت‌های متوالی را مشخص می‌کند که باید تنها شامل صفر باشند تا qemu-img در حین تبدیل یک ایمیج خلوت (sparse) ایجاد کند. این مقدار به نزدیک‌ترین ۵۱۲ بایت به سمت پایین گرد می‌شود. می‌توانید از پسوندهای اندازه رایج مانند k برای کیلوبایت استفاده کنید.
حالت حافظه موقت (cache) را که باید با فایل (مقصد) استفاده شود، مشخص می‌کند. برای مقادیر مجاز، مستندات گزینه -drive cache=... در شبیه‌ساز را ببینید.
حالت حافظه موقت (cache) را که باید با فایل(های) مبدأ استفاده شود، مشخص می‌کند. برای مقادیر مجاز، مستندات گزینه -drive cache=... در شبیه‌ساز را ببینید.

پارامترهای زیردستور compare:

قالب ایمیج اول
قالب ایمیج دوم
حالت سخت‌گیرانه - شکست در صورت تفاوت در اندازه ایمیج یا تخصیص سکتور

پارامترهای زیردستور convert:

همچنین تمام نگاشت‌های بیتی پایا (persistent bitmaps) از بالاترین لایه مبدأ کپی شوند
صرف‌نظر از ایجاد حجم مقصد
تعداد کوروتین‌های موازی برای فرایند تبدیل
اجازه به نوشتن‌های نامرتب در مقصد. این گزینه کارایی را بهبود می‌بخشد، اما تنها برای دستگاه‌های از پیش تخصیص‌یافته مانند دستگاه‌های میزبان یا سایر دستگاه‌های بلوکی خام توصیه می‌شود.
تلاش برای استفاده از برون‌سپاری کپی (copy offloading) جهت انتقال داده‌ها از ایمیج مبدأ به مقصد. این گزینه در صورت دوردست بودن داده‌ها، مانند زیرساخت‌های NFS یا iSCSI، ممکن است کارایی را بهبود بخشد، اما سکتورهای صفر را به‌طور خودکار به ایمیج خلوت تبدیل نمی‌کند و بسته به پشتیبانی میزبان از دریافت اطلاعات تخصیص، ممکن است منجر به یک ایمیج مقصد کاملاً تخصیص‌یافته شود.
محدودیت نرخ برای فرایند تبدیل
تلاش برای نادیده گرفتن خطاهای I/O هنگام خواندن. خطاها همچنان چاپ خواهند شد، مگر اینکه در حالت بی‌صدا (-q) باشد. نواحی غیرقابل خواندن از مبدأ، به عنوان بخش‌های حاوی صفر در نظر گرفته می‌شوند.
فرض را بر این می‌گذارد که خواندن ایمیج مقصد همیشه صفر بازمی‌گرداند. این پارامتر با یک ایمیج مقصد که فایل پشتیبان دارد ناسازگار است. همچنین استفاده از پارامتر -n برای صرف‌نظر از ایجاد ایمیج الزامی است.

پارامترهای زیردستور dd:

اندازه بلوک را تعیین می‌کند
تعداد بلوک‌های ورودی را برای کپی مشخص می‌کند
فایل ورودی را مشخص می‌کند
فایل خروجی را مشخص می‌کند
skip=BLOCKS تعداد بلوک‌های ورودی که باید نادیده گرفته شوند را تعیین می‌کند

پارامترهای زیردستور snapshot:

نام snapshot برای ایجاد، اعمال یا حذف است
اعمال یک snapshot (بازگردانی دیسک به وضعیت ذخیره‌شده)
ایجاد یک snapshot
حذف یک snapshot
فهرست کردن تمام snapshotهای موجود در ایمیج داده‌شده (عملیات پیش‌فرض)

شرح دستور:

گزینه‌های مخصوص فرمت ایمیج (OPTIONS) را برای فایل ایمیج FILENAME اصلاح می‌کند. تمام فرمت‌های فایل از این عملیات پشتیبانی نمی‌کنند.

مجموعه گزینه‌هایی که می‌توان اصلاح کرد به فرمت ایمیج بستگی دارد، اما توجه داشته باشید که اصلاح رابطه زنجیره پشتیبان (backing chain) در عوض باید با qemu-img rebase انجام شود.

گزینه --force امکان انجام برخی عملیات‌های ناامن را می‌دهد. در حال حاضر برای -f luks، امکان پاک کردن آخرین کلید رمزنگاری و رونویسی روی یک کلید رمزنگاری فعال را فراهم می‌کند.

یک بنچمارک ورودی/خروجی (I/O) ترتیبی ساده روی ایمیج مشخص‌شده اجرا می‌کند. اگر -w مشخص شده باشد، یک آزمون نوشتن انجام می‌شود، در غیر این صورت یک آزمون خواندن انجام می‌گیرد.

در مجموع تعداد COUNT درخواست I/O انجام می‌شود که اندازه هر کدام BUFFER_SIZE بایت بوده و با DEPTH درخواست به صورت موازی اجرا می‌شوند. اولین درخواست از موقعیت تعیین‌شده با OFFSET شروع می‌شود، و هر درخواست بعدی موقعیت فعلی را به اندازه STEP_SIZE افزایش می‌دهد. اگر STEP_SIZE داده نشود، از BUFFER_SIZE به عنوان مقدار آن استفاده می‌شود.

اگر FLUSH_INTERVAL برای یک آزمون نوشتن مشخص شده باشد، هر زمان که تعداد درخواست‌های باقی‌مانده مضربی از FLUSH_INTERVAL باشد، صف درخواست تخلیه شده و قبل از انجام نوشتن‌های جدید، یک دستور flush صادر می‌شود. علاوه بر این، اگر --no-drain مشخص شده باشد، یک flush بدون تخلیه اولیه صف درخواست صادر می‌گردد.

اگر -i مشخص شود، گزینه AIO می‌تواند برای تعیین backendهای مختلف AIO استفاده شود: threads، native یا io_uring.

اگر -n مشخص شده باشد، در صورت امکان از backend بومی AIO استفاده می‌شود. در لینوکس، این گزینه تنها در صورتی کار می‌کند که -t none یا -t directsync نیز مشخص شده باشد.

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

یک یا چند تغییر روی بیت‌مپ‌های مانا (persistent bitmaps) در ایمیج دیسک FILENAME انجام می‌دهد. بیشتر عملیات‌ها نیاز دارند که BITMAP مشخص شود؛ --remove-all روی تمام بیت‌مپ‌ها عمل کرده و BITMAP را نمی‌پذیرد. تغییرات مختلف عبارتند از:

--add برای ایجاد BITMAP، فعال‌شده برای ثبت ویرایش‌های آینده.

--remove برای حذف BITMAP.

--remove-all برای حذف تمام بیت‌مپ‌ها.

--clear برای پاک‌سازی BITMAP.

--enable برای تغییر BITMAP جهت شروع ثبت ویرایش‌های آینده.

--disable برای تغییر BITMAP جهت توقف ثبت ویرایش‌های آینده.

--merge برای ادغام محتویات بیت‌مپ SOURCE در BITMAP.

گزینه‌های اضافی شامل -g است که یک GRANULARITY غیرپیش‌فرض را برای --add تنظیم می‌کند، و -b و -F که یک فایل مبدا جایگزین را برای تمام بیت‌مپ‌های SOURCE استفاده‌شده توسط --merge انتخاب می‌کنند.

برای مشاهده اینکه چه بیت‌مپ‌هایی در یک ایمیج موجود هستند، از qemu-img info استفاده کنید.

یک بررسی سازگاری روی ایمیج دیسک FILENAME انجام می‌دهد. این دستور می‌تواند خروجی را در قالب OFMT که یا human یا json است تولید کند. خروجی JSON شیئی از نوع QAPI با عنوان ImageCheck است.

اگر -r مشخص شود، qemu-img تلاش می‌کند هرگونه ناسازگاری یافت‌شده در طول بررسی را تعمیر کند. گزینه -r leaks فقط نشت‌های کلاستر را تعمیر می‌کند، در حالی که -r all تمام انواع خطاها را اصلاح می‌کند، هرچند با ریسک بالاتر انتخاب اصلاح اشتباه یا پنهان کردن خرابی‌هایی که قبلاً رخ داده است.

تنها فرمت‌های qcow2، qed، parallels، vhdx، vmdk و vdi از بررسی سازگاری پشتیبانی می‌کنند.

در صورتی که ایمیج هیچ ناسازگاری نداشته باشد، check با مقدار 0 خارج می‌شود. سایر کدهای خروج نشان‌دهنده نوع ناسازگاری یافت‌شده هستند یا اینکه خطای دیگری رخ داده است. جدول زیر تمام کدهای خروج زیردستور check را خلاصه می‌کند:

0
بررسی کامل شد، ایمیج (اکنون) سازگار است
1
بررسی به دلیل خطاهای داخلی کامل نشد
2
بررسی کامل شد، ایمیج خراب است
3
بررسی کامل شد، ایمیج کلاسترهای نشت‌کرده دارد، اما خراب نیست
63
بررسی‌ها توسط فرمت ایمیج پشتیبانی نمی‌شوند

اگر -r مشخص شده باشد، کدهای خروجی که وضعیت ایمیج را نشان می‌دهند به وضعیت پس از (تلاش برای) تعمیر آن اشاره دارند. به این معنا که یک اجرای موفق -r all صرف‌نظر از وضعیت قبلی ایمیج، کد خروج 0 را تولید خواهد کرد.

تغییرات ثبت‌شده در FILENAME را در ایمیج پایه یا فایل پشتیبان آن اعمال (commit) می‌کند. اگر فایل پشتیبان کوچک‌تر از snapshot باشد، اندازه فایل پشتیبان تغییر داده می‌شود تا هم‌اندازه snapshot شود. اگر snapshot کوچک‌تر از فایل پشتیبان باشد، فایل پشتیبان کوتاه (truncate) نخواهد شد. اگر می‌خواهید اندازه فایل پشتیبان با snapshot کوچک‌تر مطابقت داشته باشد، پس از انجام موفقیت‌آمیز عملیات commit می‌توانید با اطمینان خودتان آن را truncate کنید.

ایمیج FILENAME پس از موفقیت‌آمیز بودن عملیات خالی می‌شود. اگر بعداً به FILENAME نیازی ندارید و قصد رها کردن آن را دارید، می‌توانید با مشخص کردن پرچم -d از خالی کردن FILENAME صرف‌نظر کنید.

اگر زنجیره پشتیبان فایل ایمیج داده‌شده FILENAME بیش از یک لایه داشته باشد، فایل پشتیبانی که تغییرات در آن اعمال خواهند شد می‌تواند به صورت BASE مشخص شود (که باید بخشی از زنجیره پشتیبان FILENAME باشد). اگر BASE مشخص نشود، فایل پشتیبان مستقیم ایمیج بالایی (که همان FILENAME است) استفاده خواهد شد. توجه داشته باشید که پس از عملیات commit، تمام ایمیج‌های بین BASE و ایمیج بالایی نامعتبر خواهند شد و ممکن است هنگام خواندن داده‌های نامعتبر بازگردانند. به همین دلیل، -b متضمن -d است (به طوری که ایمیج بالایی معتبر باقی بماند).

حد نرخ برای فرآیند commit توسط -r مشخص می‌شود.

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

فرمت ایمیج‌ها به طور خودکار شناسایی می‌شود مگر اینکه آن را با گزینه -f (استفاده‌شده برای FILENAME1) و/یا -F (استفاده‌شده برای FILENAME2) مشخص کنید.

به طور پیش‌فرض، ایمیج‌هایی با اندازه‌های متفاوت یکسان در نظر گرفته می‌شوند در صورتی که ایمیج بزرگ‌تر در ناحیه پس از انتهای ایمیج دیگر، فقط شامل بخش‌های تخصیص‌نیافته و/یا صفر شده باشد. علاوه بر این، اگر هر بخشی در یک ایمیج تخصیص نیافته باشد و در ایمیج دوم فقط حاوی بایت‌های صفر باشد، برابر ارزیابی می‌شود. می‌توانید با مشخص کردن گزینه -s از حالت سخت‌گیرانه (Strict mode) استفاده کنید. هنگامی که compare در حالت سخت‌گیرانه اجرا می‌شود، در صورتی که اندازه ایمیج‌ها متفاوت باشد یا بخشی در یک ایمیج تخصیص یافته و در دیگری تخصیص نیافته باشد، با شکست مواجه می‌شود..sp به‌طور پیش‌فرض، compare یک پیام نتیجه چاپ می‌کند. این پیام اطلاعاتی مبنی بر یکسان بودن هر دو تصویر یا موقعیت اولین بایت متفاوت را نمایش می‌دهد. علاوه بر این، در صورتی که از حالت Strict استفاده شود، پیام نتیجه می‌تواند تفاوت در اندازه تصویر را نیز گزارش کند.

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

0
تصاویر یکسان هستند (یا راهنمای درخواستی چاپ شده است)
1
تصاویر با یکدیگر تفاوت دارند
2
خطا در باز کردن تصویر
3
خطا در بررسی تخصیص سکتور
4
خطا در خواندن داده‌ها
تصویر دیسک FILENAME یا اسنپ‌شات SNAPSHOT_PARAM را با استفاده از قالب OUTPUT_FMT به تصویر دیسک OUTPUT_FILENAME تبدیل می‌کند. این تصویر می‌تواند به‌صورت اختیاری فشرده شود (گزینه -c) یا از هر گزینه ویژه قالب مانند رمزنگاری (گزینه -o) استفاده کند.

تنها قالب‌های qcow و qcow2 از فشرده‌سازی پشتیبانی می‌کنند. فشرده‌سازی فقط‌خواندنی است؛ به این معنی که اگر یک سکتور فشرده بازنویسی شود، به‌صورت داده‌های غیرفشرده بازنویسی خواهد شد.

تبدیل تصویر همچنین برای دستیابی به تصویری با اندازه کوچک‌تر هنگام استفاده از قالب‌های با قابلیت رشد مانند qcow مفید است: سکتورهای خالی شناسایی شده و از تصویر مقصد حذف می‌شوند.

مقدار SPARSE_SIZE تعداد بایت‌های متوالی (پیش‌فرض 4k) را نشان می‌دهد که باید فقط حاوی صفر باشند تا qemu-img در حین تبدیل، یک تصویر تنک (sparse) بسازد. اگر SPARSE_SIZE برابر با 0 باشد، مبدأ برای سکتورهای تخصیص‌نیافته یا صفر پویش نخواهد شد و تصویر مقصد همیشه به‌طور کامل تخصیص می‌یابد.

می‌توانید از گزینه BACKING_FILE استفاده کنید تا تصویر خروجی حتماً به‌عنوان یک تصویر رونوشت در زمان نوشتن (copy-on-write) از تصویر پایه مشخص‌شده ساخته شود؛ BACKING_FILE باید محتوایی مشابه با تصویر پایه ورودی داشته باشد، اگرچه مسیر، قالب تصویر (مشخص‌شده با BACKING_FMT) و غیره ممکن است متفاوت باشند.

اگر یک نام مسیر نسبی مشخص شود، فایل پشتیبان نسبت به دایرکتوری حاوی OUTPUT_FILENAME جستجو می‌شود.

اگر گزینه -n مشخص شود، از ایجاد حجم مقصد صرف‌نظر خواهد شد. این گزینه برای قالب‌هایی مانند rbd در صورتی که حجم مقصد از پیش با گزینه‌های خاصی که از طریق qemu-img قابل ارائه نیستند ایجاد شده باشد، مفید است.

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

مقدار NUM_COROUTINES مشخص می‌کند که چه تعداد کوروتین (coroutine) در حین فرایند تبدیل به‌طور موازی کار کنند (پیش‌فرض 8 است).

استفاده از --bitmaps درخواست می‌کند که هر بیت‌مپ مانایی که در نسخه اصلی وجود دارد نیز به مقصد کپی شود. اگر هر یک از بیت‌مپ‌ها در مبدأ ناهمخوان باشد، فرایند تبدیل با شکست مواجه می‌شود مگر اینکه --skip-broken-bitmaps نیز برای کپی کردن تنها بیت‌مپ‌های همخوان مشخص شده باشد.

تصویر دیسک جدید FILE را با اندازه SIZE و در قالب FMT ایجاد می‌کند. بسته به قالب فایل، می‌توانید یک یا چند گزینه FMT_OPTS اضافه کنید که قابلیت‌های بیشتری از این قالب را فعال می‌کنند.

اگر گزینه BACKING_FILE مشخص شود، تصویر فقط تفاوت‌ها را نسبت به BACKING_FILE ثبت خواهد کرد. در این حالت نیازی به تعیین اندازه نیست. BACKING_FILE هرگز تغییر نخواهد کرد مگر اینکه از دستور مانیتور commit (یا qemu-img commit) استفاده کنید.

اگر یک نام مسیر نسبی مشخص شود، فایل پشتیبان نسبت به دایرکتوری حاوی FILE جستجو می‌شود.

توجه داشته باشید که فایل پشتیبانِ داده‌شده برای بررسی معتبر بودن باز خواهد شد. از گزینه -u برای فعال کردن حالت ناامن فایل پشتیبان استفاده کنید؛ بدین معنی که تصویر حتی در صورت عدم امکان باز شدن فایل پشتیبان مربوطه ایجاد خواهد شد. هنگامی که بخواهید از تصویری که بدین شیوه ایجاد شده استفاده کنید، باید یک فایل پشتیبان منطبق ساخته شود یا از گزینه‌های اضافی برای معتبر ساختن مشخصات فایل پشتیبان استفاده گردد.

اندازه را می‌توان با استفاده از گزینه SIZE به همراه -o نیز مشخص کرد؛ در این حالت نیازی به تعیین جداگانه آن نیست.

دستور dd از فایل INPUT به فایل OUTPUT کپی کرده و آن را از قالب FMT به قالب OUTPUT_FMT تبدیل می‌کند.

داده‌ها به‌طور پیش‌فرض با استفاده از بلوک‌های ۵۱۲ بایتی خوانده و نوشته می‌شوند، اما می‌توان با تعیین BLOCK_SIZE آن را تغییر داد. اگر count=BLOCKS مشخص شود، dd پس از خواندن BLOCKS بلوک ورودی، خواندن ورودی را متوقف می‌کند.

نحو اندازه شبیه به نحو اندازه در dd(1) است.

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

اگر یک تصویر دیسک دارای زنجیره‌ای از فایل‌های پشتیبان باشد، اطلاعات مربوط به هر تصویر دیسک در زنجیره را می‌توان با استفاده از گزینه --backing-chain به‌طور بازگشتی برشمرد.

برای مثال، اگر زنجیره‌ای از تصاویر مانند زیر داشته باشید:

base.qcow2 <- snap1.qcow2 <- snap2.qcow2

برای برشمردن اطلاعات مربوط به هر تصویر دیسک در زنجیره بالا، با شروع از بالا به سمت پایه، دستور زیر را اجرا کنید:

qemu-img info --backing-chain snap2.qcow2

این دستور می‌تواند خروجی را در قالب OFMT تولید کند که یا human است یا json. خروجی JSON یک شیء از نوع QAPI با عنوان ImageInfo است؛ به همراه --backing-chain، این خروجی آرایه‌ای از اشیاء ImageInfo خواهد بود.

گزینه --output=human اطلاعات زیر را گزارش می‌دهد (برای هر تصویر در زنجیره):

نام فایل تصویر
قالب تصویر
اندازه دیسک مهمان
میزان فضایی که فایل تصویر در سیستم‌فایل میزبان اشغال می‌کند (اگر این اطلاعات در دسترس نباشد، برای نمونه به دلیل نبود سیستم‌فایل، ممکن است به عنوان 0 نمایش داده شود)
اندازه کلاستر قالب تصویر، در صورت کاربرد
اینکه آیا تصویر رمزنگاری شده است یا خیر (فقط در صورت رمزنگاری بودن نمایش داده می‌شود)
اگر تصویر dirty باشد و در نوبت بعدی باز شدن در qemu نیاز به تعمیر خودکار داشته باشد، این مورد به‌صورت no نشان داده می‌شود.
نام فایل پشتیبان، در صورت وجود
قالب فایل پشتیبان، در صورتی که تصویر آن را تحمیل کند.TP Snapshot list فهرستی از تمام اسنپ‌شات‌های داخلی.
اطلاعات بیشتر که ساختار آن به قالب تصویر بستگی دارد. این بخش یک نمایش متنی از شیء متناظر QAPI از نوع ImageInfoSpecific* است (برای نمونه ImageInfoSpecificQCow2 برای تصویرهای qcow2).
محدودیت‌های بلوکی ورودی/خروجی (I/O) که QEMU برای تصویر شناسایی کرده است. این اطلاعات تنها در صورتی نمایش داده می‌شود که گزینهٔ --limits مشخص شده باشد.
متادادهٔ تصویر FILENAME و زنجیرهٔ فایل‌های پشتیبان آن را تخلیه (dump) می‌کند. به‌ویژه، این دستور وضعیت تخصیص هر سکتور از FILENAME را همراه با بالاترین فایلی در زنجیرهٔ فایل پشتیبان که آن را تخصیص داده است، استخراج می‌کند.

دو قالب خروجی امکان‌پذیر است. قالب پیش‌فرض (human) تنها ناحیه‌هایی از فایل را تخلیه می‌کند که مشخص شده غیرصفر هستند. بخش‌هایی از فایل که مشخصاً صفر هستند به‌طور کامل نادیده گرفته می‌شوند، و همین‌طور بخش‌هایی که در سراسر زنجیره تخصیص نیافته‌اند. خروجی qemu-img فایلی را مشخص می‌کند که داده‌ها از آن قابل خواندن هستند، به همراه آفست آن در فایل. هر خط شامل چهار فیلد خواهد بود که سه تای نخست، اعدادی در مبنای شانزده (هگزادسیمال) هستند. برای نمونه، نخستین خط از:

Offset          Length          Mapped to       File
0               0x20000         0x50000         /tmp/overlay.qcow2
0x100000        0x10000         0x95380000      /tmp/backing.qcow2

بدین معناست که 0x20000 (131072) بایت با شروع از آفست 0 در تصویر، در مسیر /tmp/overlay.qcow2 (باز شده با قالب raw) با شروع از آفست 0x50000 (327680) در دسترس است. داده‌هایی که فشرده، رمزگذاری‌شده، یا به هر شکل دیگری در قالب raw در دسترس نباشند، در صورت استفاده از قالب human با خطا مواجه می‌شوند. توجه داشته باشید که نام فایل‌ها می‌تواند حاوی خط جدید (newline) باشد، بنابراین تجزیهٔ این قالب خروجی در اسکریپت‌ها ایمن نیست.

قالب جایگزین json، آرایه‌ای از دیکشنری‌ها در قالب JSON را بازمی‌گرداند. این قالب حاوی اطلاعات مشابهی در فیلدهای start، length و offset خواهد بود؛ همچنین اطلاعات دقیق‌تر دیگری را نیز در بر می‌گیرد:

  • فیلد بولی data: مقدار true اگر سکتورها حاوی داده‌های واقعی باشند، مقدار false اگر سکتورها تخصیص نیافته باشند یا به‌صورت کلاسترهای بهینه‌شدهٔ تمام‌صفر (all-zero) ذخیره شده باشند
  • فیلد بولی zero: مقدار true اگر مشخص باشد که خواندن داده‌ها صفر برمی‌گرداند
  • فیلد بولی present: مقدار true اگر داده‌ها به زنجیرهٔ پشتیبان تعلق داشته باشند، مقدار false اگر rebase کردن زنجیرهٔ پشتیبان روی فایلی در عمق بیشتر سبب خوانده شدن داده‌ها از آن فایل عمیق‌تر شود؛
  • فیلد عدد صحیح depth: عمقی در زنجیرهٔ پشتیبان که داده در آن شناسایی شده است؛ برای نمونه، عمق 2 به فایل پشتیبانِ فایل پشتیبانِ FILENAME اشاره دارد.

در قالب JSON، فیلد offset اختیاری است؛ در مواردی که قالب human مدخل را حذف کند یا با خطا خارج شود، این فیلد وجود ندارد. اگر data برابر با false و فیلد offset موجود باشد، سکتورهای متناظر در فایل هنوز استفاده نشده‌اند، اما از پیش تخصیص یافته‌اند (preallocated).

برای اطلاعات بیشتر، به include/block/block.h در کد منبع QEMU مراجعه کنید.

حجم فایل مورد نیاز برای یک تصویر جدید را محاسبه می‌کند. این اطلاعات را می‌توان برای اندازه‌گیری مناسب حجم‌های منطقی (logical volumes) یا SAN LUNها برای تصویری که درون آن‌ها قرار خواهد گرفت، به کار برد. مقادیر گزارش‌شده تضمین می‌کنند که برای جا دادن تصویر به اندازهٔ کافی بزرگ باشند. دستور می‌تواند در قالب OFMT خروجی دهد که یا human است یا json. خروجی JSON شیئی از نوع QAPI با نام BlockMeasureInfo است.

اگر اندازهٔ N داده شود، مانند این عمل می‌کند که یک فایل تصویر خالی جدید با qemu-img create ایجاد شده باشد. اگر FILENAME مشخص شود، مانند تبدیل یک فایل تصویر موجود با qemu-img convert عمل می‌کند. قالب فایل جدید با OUTPUT_FMT مشخص شده و قالب فایل موجود با FMT تعیین می‌شود.

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

فیلدهای زیر گزارش می‌شوند:

required size: 524288
fully allocated size: 1074069504
bitmaps size: 0

فیلد required size حجم فایل تصویر جدید است. در صورتی که قالب تصویر از نمایش فشرده (compact representation) پشتیبانی کند، ممکن است از اندازهٔ دیسک مجازی کوچک‌تر باشد.

فیلد fully allocated size حجم فایل تصویر جدید در حالتی است که داده‌ها در تمامی سکتورها نوشته شده باشند. این مقدار، بیشینه اندازه‌ای است که فایل تصویر می‌تواند اشغال کند، به‌جز اسنپ‌شات‌های داخلی، bitmapهای dirty، داده‌های vmstate، و سایر ویژگی‌های پیشرفتهٔ قالب تصویر.

فیلد bitmaps size اندازهٔ اضافیِ لازم برای کپی کردن bitmapها از تصویر مبدأ، علاوه بر داده‌های قابل مشاهده برای سیستم مهمان (guest-visible) است؛ این خط اگر مبدأ یا مقصد فاقد پشتیبانی از bitmap باشند حذف می‌شود، یا اگر bitmapها پشتیبانی شوند اما چیزی برای کپی وجود نداشته باشد، برابر با 0 خواهد بود.

snapshot [--object OBJECTDEF] [-f FMT | --image-opts] [-U] [-q] [-l | -a SNAPSHOT | -c SNAPSHOT | -d SNAPSHOT] FILENAME
فهرست کردن، اعمال، ایجاد یا حذف اسنپ‌شات‌ها در تصویر FILENAME.
فایل پشتیبان (backing file) یک تصویر را تغییر می‌دهد. تنها قالب‌های qcow2 و qed از تغییر فایل پشتیبان پشتیبانی می‌کنند.

فایل پشتیبان به BACKING_FILE تغییر می‌یابد و (در صورتی که قالب تصویرِ FILENAME از این قابلیت پشتیبانی کند) قالب فایل پشتیبان به BACKING_FMT تغییر داده می‌شود. اگر BACKING_FILE به‌صورت "" (رشتهٔ خالی) مشخص شود، تصویر روی هیچ فایل پشتیبانی rebase می‌شود (یعنی مستقل از هرگونه فایل پشتیبان وجود خواهد داشت).

اگر یک نام مسیر نسبی داده شود، فایل پشتیبان نسبت به دایرکتوری حاوی FILENAME جستجو می‌شود.

آرگومان CACHE حالت کَش مورد استفاده برای FILENAME را مشخص می‌کند، در حالی که SRC_CACHE حالت کَش برای خواندن فایل‌های پشتیبان را تعیین می‌کند.

دو حالت متمایز وجود دارد که rebase می‌تواند در آن‌ها کار کند:

حالت امن (Safe mode)
این حالت پیش‌فرض است و عملیات واقعی rebase را انجام می‌دهد. فایل پشتیبان جدید ممکن است با فایل قدیمی متفاوت باشد و qemu-img rebase اطمینان حاصل می‌کند که محتوای قابل مشاهده برای مهمان (guest-visible) در FILENAME بدون تغییر بماند.

برای دستیابی به این مقصود، هر کلاستری که بین BACKING_FILE و فایل پشتیبان قدیمیِ FILENAME تفاوت داشته باشد، پیش از تغییر واقعی فایل پشتیبان، در FILENAME ادغام (merge) می‌شود. با تعیین گزینهٔ -c، کلاسترهایی که ادغام می‌شوند (و نه تمام تصویر FILENAME) هنگام نوشتن فشرده خواهند شد.

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

حالت ناامن (Unsafe mode)
در صورتی که گزینهٔ -u مشخص شده باشد، ابزار qemu-img از حالت ناامن استفاده می‌کند. در این حالت، تنها نام و قالب فایل پشتیبانِ FILENAME بدون هیچ‌گونه بررسی محتویات فایل تغییر داده می‌شود. کاربر باید مراقب باشد که فایل پشتیبان جدید را به‌درستی مشخص کند، در غیر این صورت محتوای قابل مشاهده برای مهمان در تصویر خراب خواهد شد.

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

می‌توانید از rebase برای انجام عملیات تفاضل ("diff") روی دو تصویر دیسک استفاده کنید. این قابلیت می‌تواند هنگامی مفید باشد که یک ماشین مهمان را کپی یا شبیه‌سازی (clone) کرده‌اید و می‌خواهید به یک تصویر کم‌حجم (thin image) مبتنی بر یک قالب یا تصویر پایه بازگردید..sp فرض کنید base.img از طریق کپی کردن به عنوان modified.img کلون شده است، و سیستم‌عامل مهمان modified.img اجرا شده به طوری که اکنون تغییراتی نسبت به base.img ایجاد شده است. برای ساخت یک ایمیج کم‌حجم (thin) به نام diff.qcow2 که تنها شامل تفاوت‌ها باشد، دستورات زیر را اجرا کنید:

qemu-img create -f qcow2 -b modified.img diff.qcow2
qemu-img rebase -b base.img diff.qcow2

در این نقطه، می‌توان modified.img را دور انداخت، زیرا base.img + diff.qcow2 حاوی همان اطلاعات است.

تغییر اندازه ایمیج دیسک به گونه‌ای که گویی با SIZE ساخته شده است.

پیش از استفاده از این دستور برای کوچک کردن (shrink) یک ایمیج دیسک، شما باید حتماً از ابزارهای سیستم فایل و پارتیشن‌بندی در داخل ماشین مجازی برای کاهش متناسب اندازه سیستم‌های فایل و پارتیشن‌های تخصیص‌یافته استفاده کنید. عدم انجام این کار منجر به از دست رفتن داده‌ها خواهد شد!

هنگام کوچک کردن ایمیج‌ها، گزینه --shrink باید ارائه شود. این به qemu-img اطلاع می‌دهد که کاربر از بین رفتن داده‌های فراتر از انتهای برش‌خورده‌ی ایمیج را تأیید می‌کند.

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

هنگام افزایش اندازه یک ایمیج، گزینه --preallocation می‌تواند برای مشخص کردن نحوه تخصیص ناحیه اضافی ایمیج روی میزبان استفاده شود. برای آگاهی از مقادیر مجاز، به توضیحات قالب در بخش نکات (NOTES) مراجعه کنید. استفاده از این گزینه ممکن است منجر به تخصیص فضایی کمی بیشتر از مقدار لازم شود.

قالب‌های فایل ایمیج پشتیبانی‌شده:

raw

قالب ایمیج دیسک خام (raw) (پیش‌فرض). این قالب این مزیت را دارد که ساده است و به‌راحتی به سایر شبیه‌سازها صادر می‌شود. اگر سیستم فایل شما از حفره‌ها یا holes پشتیبانی کند (برای مثال در ext2 یا ext3 در لینوکس یا NTFS در ویندوز)، تنها سکتورهای نوشته‌شده فضا را اشغال می‌کنند. برای اطلاع از اندازه واقعی استفاده‌شده توسط ایمیج از qemu-img info یا در یونیکس/لینوکس از ls -ls استفاده کنید.

گزینه‌های پشتیبانی‌شده:

حالت پیش‌تخصیص (مقادیر مجاز: off، falloc، full). حالت falloc با فراخوانی posix_fallocate() برای ایمیج فضا پیش‌تخصیص می‌دهد. حالت full با نوشتن داده‌ها روی ذخیره‌ساز زیرین، فضا را برای ایمیج پیش‌تخصیص می‌دهد. بسته به محل ذخیره‌سازی، این داده‌ها ممکن است صفر باشند یا نباشند.

qcow2

قالب ایمیج QEMU، همه‌کاره‌ترین قالب. از آن برای داشتن ایمیج‌های کوچک‌تر (مفید در صورتی که سیستم فایل شما از حفره‌ها پشتیبانی نمی‌کند، برای مثال در ویندوز)، رمزنگاری اختیاری AES، فشرده‌سازی مبتنی بر zlib یا zstd و پشتیبانی از چندین اسنپ‌شات ماشین مجازی استفاده کنید.

گزینه‌های پشتیبانی‌شده:

نسخه qcow2 مورد استفاده را تعیین می‌کند. compat=0.10 از قالب سنتی ایمیج استفاده می‌کند که توسط هر نسخه QEMU از 0.10 به بعد قابل خواندن است. compat=1.1 افزونه‌های قالب ایمیج را فعال می‌کند که تنها QEMU 1.1 و نسخه‌های جدیدتر آن را درک می‌کنند (این مقدار پیش‌فرض است). از جمله موارد دیگر، این شامل کلاسترهای صفر است که امکان copy-on-read بهینه را برای ایمیج‌های تنک فراهم می‌کند.
نام فایل ایمیج پایه (زیردستور create را ببینید)
قالب ایمیج مربوط به ایمیج پایه
این گزینه مشخص می‌کند که کدام الگوریتم فشرده‌سازی برای کلاسترهای فشرده‌شده روی ایمیج استفاده شود. توجه داشته باشید که تنظیم این گزینه هنوز باعث نمی‌شود که ایمیج واقعاً نوشتن‌های فشرده‌شده دریافت کند. این گزینه بیشتر به همراه گزینه -c در qemu-img convert استفاده می‌شود، اما می‌تواند با درایور فیلتر compress یا کارهای بلاک پشتیبان‌گیری با فشرده‌سازی فعال نیز استفاده شود.

مقادیر معتبر عبارتند از zlib و zstd. برای ایمیج‌هایی که از compat=0.10 استفاده می‌کنند، تنها فشرده‌سازی zlib در دسترس است.

اگر این گزینه روی on تنظیم شود، ایمیج با الگوریتم 128 بیتی AES-CBC رمزنگاری می‌شود.

استفاده از رمزنگاری در ایمیج‌های qcow و qcow2 طبق استانداردهای نوین رمزنگاری ناقص در نظر گرفته می‌شود و از چندین نقص طراحی رنج می‌برد:

  • رمز AES-CBC با بردارهای مقداردهی اولیه (IV) قابل پیش‌بینی بر اساس شماره سکتور استفاده می‌شود. این امر آن را در برابر حملات متن ساده انتخابی (chosen plaintext attacks) آسیب‌پذیر می‌کند که می‌تواند وجود داده‌های رمزگذاری‌شده را فاش سازد.
  • عبارت عبور کاربر مستقیماً به عنوان کلید رمزنگاری استفاده می‌شود. یک عبارت عبور ضعیف یا کوتاه، امنیت رمزنگاری را به خطر می‌اندازد.
  • در صورت لو رفتن یا به خطر افتادن عبارت عبور، هیچ راهی برای تغییر آن جهت محافظت از داده‌ها در ایمیج‌های qcow وجود ندارد. فایل‌ها باید کلون شوند و از یک عبارت عبور رمزنگاری متفاوت در فایل جدید استفاده شود. سپس فایل اصلی باید با برنامه‌ای مانند shred به‌صورت امن پاک شود، هرچند که حتی این روش هم با بسیاری از فناوری‌های ذخیره‌سازی مدرن ناکارآمد است.
  • بردارهای مقداردهی اولیه مورد استفاده برای رمزنگاری سکتورها، به جای سکتور فیزیکی میزبان، بر اساس شماره سکتور مجازی مهمان هستند. هنگامی که یک ایمیج دیسک دارای چندین اسنپ‌شات داخلی باشد، این بدان معناست که داده‌ها در چندین سکتور فیزیکی با همان بردار مقداردهی اولیه رمزنگاری می‌شوند. با حالت CBC، این موضوع در صورتی که مهاجم بتواند چندین سکتور رمزنگاری‌شده با IV یکسان و برخی داده‌های قابل پیش‌بینی را جمع‌آوری کند، احتمال حملات واترمارکینگ (watermarking attacks) را فراهم می‌کند. داشتن چندین ایمیج qcow2 با همان عبارت عبور نیز این نقطه ضعف را آشکار می‌کند زیرا عبارت عبور مستقیماً به عنوان کلید استفاده می‌شود.

بنابراین اکیداً توصیه می‌شود از رمزنگاری qcow / qcow2 استفاده نشود. به کاربران توصیه می‌شود از فناوری‌های رمزنگاری جایگزین مانند سیستم dm-crypt / LUKS در لینوکس استفاده کنند.

اندازه کلاستر qcow2 را تغییر می‌دهد (باید بین 512 و 2M باشد). اندازه‌های کلاستر کوچک‌تر می‌توانند حجم فایل ایمیج را بهینه‌تر کنند، در حالی که اندازه‌های کلاستر بزرگ‌تر عموماً عملکرد بهتری ارائه می‌دهند.
حالت پیش‌تخصیص (مقادیر مجاز: off، metadata، falloc، full). ایمیجی با فراداده‌های پیش‌تخصیص‌یافته در ابتدا بزرگ‌تر است، اما می‌تواند در زمانی که ایمیج نیاز به رشد دارد عملکرد را بهبود بخشد. پیش‌تخصیص‌های falloc و full شبیه همان گزینه‌ها در قالب raw هستند، اما فراداده‌ها را نیز تنظیم می‌کنند.
اگر این گزینه روی on تنظیم شود، به‌روزرسانی‌های شمارش ارجاع با هدف اجتناب از I/O فراداده و بهبود عملکرد به تعویق می‌افتد. این ویژگی به‌ویژه با cache=writethrough که به‌روزرسانی‌های فراداده را دسته‌ای انجام نمی‌دهد قابل توجه است. بده‌بستان این است که پس از فروپاشی (crash) میزبان، جدول‌های شمارش ارجاع باید بازسازی شوند؛ یعنی در باز شدن بعدی، یک qemu-img check -r all (به‌صورت خودکار) مورد نیاز است که ممکن است مدتی طول بکشد.

این گزینه تنها در صورتی فعال می‌شود که compat=1.1 مشخص شده باشد.

اگر این گزینه روی on تنظیم شود، COW را برای فایل غیرفعال می‌کند. این ویژگی تنها در btrfs معتبر است و روی سایر سیستم‌های فایل تأثیری ندارد.

سامانه فایل Btrfs هنگام میزبانی یک فایل ایمیج ماشین مجازی عملکرد پایینی دارد، و این موضوع زمانی که مهمان درون ماشین مجازی نیز از btrfs به عنوان سیستم فایل استفاده می‌کند تشدید می‌شود. خاموش کردن COW راهی برای کاهش این افت عملکرد است. به‌طور کلی دو روش برای خاموش کردن COW در btrfs وجود دارد:

  • غیرفعال کردن آن با مانت کردن از طریق nodatacow؛ در این صورت تمامی فایل‌های تازه‌ساخته‌شده به‌صورت NOCOW خواهند بود
  • برای یک فایل خالی، صفت فایلی NOCOW اضافه شود. این همان کاری است که این گزینه انجام می‌دهد. نکته: این گزینه فقط برای فایل‌های جدید یا خالی معتبر است. اگر فایلی از پیش موجود باشد که COW بوده و در حال حاضر دارای بلوک‌های داده است، نمی‌توان با تنظیم nocow=on آن را به NOCOW تغییر داد. می‌توان دستور lsattr filename را اجرا کرد تا بررسی شود آیا پرچم NOCOW تنظیم شده است یا خیر (حرف بزرگ 'C' پرچم NOCOW است).
نام فایلی که تمام داده‌های مهمان در آن ذخیره خواهد شد. در صورت استفاده از این گزینه، فایل qcow2 فقط حاوی فراداده‌های تصویر خواهد بود.

نکته: اگر نام فایل ارائه‌شده از قبل وجود داشته باشد، هنگام استفاده از این گزینه با qemu-img create داده‌ها از دست خواهند رفت؛ زیرا qemu-img فایل داده را از ابتدا ایجاد کرده و محتوای اصلی فایل را بازنویسی می‌کند. برای صرفاً به‌روزرسانی ارجاع جهت اشاره به فایل از پیش موجود، از qemu-img amend استفاده کنید.

اگر این گزینه روی on تنظیم شود، QEMU همیشه فایل داده خارجی را به‌عنوان یک تصویر خام (raw) مستقل و فقط‌خواندنی، سازگار نگه می‌دارد.

این کار با ارسال تمامی دسترسی‌های نوشتنِ فایل qcow2 به فایل داده raw، شامل آفست‌های آن‌ها انجام می‌شود. بنابراین، داده‌ای که روی گره qcow2 (یعنی برای سیستم مهمان) در یک آفست مشخص قابل مشاهده است، در همان آفست در فایل داده raw نیز قابل مشاهده خواهد بود. این امر منجر به یک تصویر raw فقط‌خواندنی می‌شود. نوشتن‌هایی که فراداده qcow2 را دور می‌زنند ممکن است باعث خرابی فراداده qcow2 شوند؛ زیرا این نوشتن‌های خارج از باند (out-of-band) ممکن است به ناهماهنگ شدن فراداده با تصویر raw منجر شوند.

اگر این گزینه روی off باشد، QEMU از فایل داده برای ذخیره داده‌ها به شیوه‌ای دلخواه استفاده خواهد کرد. محتوای فایل بدون فراداده qcow2 همراه آن معنایی نخواهد داشت. مکانی که داده در آن نوشته می‌شود، ارتباطی با آفست آن از دید مهمان نخواهد داشت، و برخی نوشتن‌ها (به‌ویژه نوشتن صفرها) ممکن است اصلاً به فایل داده هدایت نشوند، بلکه صرفاً با اصلاح فراداده qcow2 مدیریت شوند.

این گزینه تنها در صورتی می‌تواند فعال شود که data_file تنظیم شده باشد.

سایر

همچنین QEMU برای سازگاری با نسخه‌های قدیمی‌تر QEMU یا سایر هایپروایزرها، از قالب‌های فایل تصویر متنوع دیگری نیز پشتیبانی می‌کند؛ از جمله VMDK، VDI، VHD (vpc)، VHDX، qcow1 و QED. برای مشاهده فهرست کامل قالب‌های پشتیبانی‌شده به qemu-img --help مراجعه کنید. برای توضیحات دقیق‌تر درباره این قالب‌ها، به مستندات مرجع درایورهای بلوکی (block drivers) در QEMU مراجعه کنید.

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

Fabrice Bellard

2026, The QEMU Project Developers

August 28, 2026 11.1.1