| QEMU(1) | QEMU | QEMU(1) |
نام (NAME)
qemu - مستندات کاربری QEMU
خلاصه دستور (SYNOPSIS)
qemu-system-x86_64 [options] [disk_image]
توضیحات (DESCRIPTION)
شبیهساز سیستم رایانه شخصی (PC) در QEMU دستگاههای جانبی زیر را شبیهسازی میکند:
- پل میزبان PCI مدل i440FX و پل PCI به ISA مدل PIIX3
- کارت گرافیک Cirrus CLGD 5446 PCI یا کارت گرافیک ساختگی (dummy) با افزونههای Bochs VESA (سطح سختافزار، شامل تمام حالتهای غیراستاندارد).
- موشواره و صفحهکلید PS/2
- ۲ رابط PCI IDE با پشتیبانی از دیسک سخت و CD-ROM
- دیسک فلاپی
- آداپتورهای شبکه PCI و ISA
- درگاههای سریال
- کنترلکننده IPMI BMC، به صورت داخلی یا خارجی
- کارت صدای Creative SoundBlaster 16
- کارت صدای ENSONIQ AudioPCI ES1370
- کارت صدای سازگار با Intel 82801AA AC97 Audio
- کنترلکننده Intel HD Audio و کدک HDA
- تراشه سازگار با Adlib (OPL2) - Yamaha YM3812
- کارت صدای Gravis Ultrasound GF1
- کارت صدای سازگار با CS4231A
- بلندگوی داخلی رایانه (PC speaker)
- کنترلکننده USB از نوع PCI UHCI، OHCI، EHCI یا XHCI و یک هاب مجازی USB-1.1.
قابلیت SMP (چندپردازشی متقارن) با تعداد زیادی پردازنده مجازی (vCPU) پشتیبانی میشود (حد بالایی آن به پیکربندی بستگی دارد).
برنامه QEMU از بایوس رایانه (PC BIOS) پروژه Seabios و VGA BIOS تحت مجوز LGPL متعلق به Plex86/Bochs استفاده میکند.
برنامه QEMU از شبیهسازی YM3812 نوشتهشده توسط Tatsuyuki Satoh استفاده میکند.
برنامه QEMU از شبیهسازی GUS (به نام GUSEMU32 http://www.deinmeister.de/gusemu) نوشتهشده توسط Tibor "TS" Schütz استفاده میکند.
توجه داشته باشید که به طور پیشفرض، GUS خط وقفه IRQ(7) را با درگاههای موازی (parallel) به اشتراک میگذارد؛ بنابراین برای کارکرد درست GUS باید به QEMU اعلام شود که هیچ درگاه موازی نداشته باشد.
qemu-system-x86_64 dos.img -device gus -parallel none
یا به صورت جایگزین:
qemu-system-x86_64 dos.img -device gus,irq=5
یا هر وقفه (IRQ) آزاد دیگری.
تراشه CS4231A قطعهای است که در محصولات Windows Sound System و GUSMAX استفاده شده است.
دستگاه صوتی بلندگوی رایانه (PC speaker) را میتوان با استفاده از ویژگی ماشینی pcspk-audiodev پیکربندی کرد، به عنوان مثال:
qemu-system-x86_64 some.img -audiodev <backend>,id=<name> -machine pcspk-audiodev=<name>
از گزینههای مختص ماشین زیر پشتیبانی میکند:
- •
- x-south-bridge=PIIX3|piix4-isa (گزینهای آزمایشی برای انتخاب یک پل جنوبی (south bridge) مشخص. پیشفرض: PIIX3)
گزینهها (OPTIONS)
مورد disk_image یک تصویر دیسک سخت خام برای دیسک سخت IDE شمارهٔ 0 است. برخی از مقاصد نیازی به تصویر دیسک ندارند.
هنگام مواجهه با پارامترهای گزینهها به عنوان رشتههای دلخواه شامل ویرگول، مانند "file=my,file" و "string=a,b"، دو برابر کردن ویرگولها ضروری است. برای نمونه، "-fw_cfg name=z,string=a,,b" به صورت "-fw_cfg name=z,string=a,b" تجزیه خواهد شد.
گزینههای استاندارد (Standard options)
- -h
- نمایش راهنما و خروج
- -version
- نمایش اطلاعات نسخه و خروج
- -machine [type=]name[,prop=value[,...]]
- ماشین
شبیهسازیشده
را بر پایهٔ
نام انتخاب
میکند.
برای فهرست
کردن
ماشینهای
موجود از -machine
help استفاده
کنید.
برای معماریهایی که هدف آنها پشتیبانی از سازگاری مهاجرت زنده (live migration) بین نسخهها است، هر نسخه یک نوع ماشین دارای شماره نسخه جدید معرفی میکند. برای نمونه، نسخهٔ 2.8.0 انواع ماشین "pc-i440fx-2.8" و "pc-q35-2.8" را برای معماریهای x86_64/i686 معرفی کرد.
برای امکانپذیر ساختن مهاجرت زندهٔ سیستمهای مهمان از QEMU نسخهٔ 2.8.0 به QEMU نسخهٔ 2.9.0، نسخهٔ 2.9.0 باید از ماشینهای "pc-i440fx-2.8" و "pc-q35-2.8" نیز پشتیبانی کند. برای این که کاربران هنگام ارتقا و انجام مهاجرت زندهٔ ماشینهای مجازی بتوانند از چندین نسخهٔ میانی عبور کنند، انتشارهای جدید QEMU از انواع ماشین مربوط به نسخههای قبلی متعددی پشتیبانی میکنند.
ویژگیهای پشتیبانیشدهٔ ماشین عبارتند از:
- accel=accels1[:accels2[:...]]
- این گزینه برای فعالسازی یک شتابدهنده استفاده میشود. بسته به معماری مقصد، kvm، xen، hvf، nitro، nvmm، whpx، mshv یا tcg میتوانند در دسترس باشند. به طور پیشفرض، tcg استفاده میشود. اگر بیش از یک شتابدهنده مشخص شده باشد، در صورت شکست مقداردهی اولیهٔ شتابدهندهٔ قبلی، شتابدهندهٔ بعدی استفاده میشود.
- vmport=on|off|auto
- شبیهسازی درگاه IO مربوط به VMWare را برای vmmouse و غیره فعال میکند. مقدار auto تعیین میکند مقدار بر اساس accel و i8042 انتخاب شود. برای accel=xen یا i8042=off حالت پیشفرض off است، در غیر این صورت پیشفرض on میباشد.
- dump-guest-core=on|off
- حافظهٔ مهمان را در core dump میگنجاند. پیشفرض on است.
- mem-merge=on|off
- پشتیبانی از ادغام حافظه (memory merge) را فعال یا غیرفعال میکند. این ویژگی، در صورت پشتیبانی توسط میزبان، صفحات حافظهٔ یکسان را میان نمونههای ماشینهای مجازی حذف تکرار (de-duplicate) میکند (به طور پیشفرض فعال است).
- aes-key-wrap=on|off
- پشتیبانی از بستهبندی کلید AES (AES key wrapping) را در میزبانهای s390-ccw فعال یا غیرفعال میکند. این ویژگی کنترل میکند که آیا کلیدهای بستهبندی AES برای اجرای توابع رمزنگاری AES ساخته شوند یا خیر. پیشفرض on است.
- dea-key-wrap=on|off
- پشتیبانی از بستهبندی کلید DEA (DEA key wrapping) را در میزبانهای s390-ccw فعال یا غیرفعال میکند. این ویژگی کنترل میکند که آیا کلیدهای بستهبندی DEA برای اجرای توابع رمزنگاری DEA ساخته شوند یا خیر. پیشفرض on است.
- nvdimm=on|off
- پشتیبانی از NVDIMM را فعال یا غیرفعال میکند. پیشفرض off است.
- confidential-guest-support=<id>
- شیء پشتیبانی مهمان محرمانه (confidential guest support) برای استفاده. پیشفرض none است.
- memory-encryption=<id>
- نام مستعار confidential-guest-support است. استفاده از confidential-guest-support توصیه میشود.
- hmat=on|off
- پشتیبانی از ACPI Heterogeneous Memory Attribute Table (HMAT) را فعال یا غیرفعال میکند. پیشفرض off است.
- spcr=on|off
- پشتیبانی از ACPI Serial Port Console Redirection Table (SPCR) را فعال یا غیرفعال میکند. پیشفرض on است.
- aux-ram-share=on|off
- تخصیص RAM
کمکی مهمان
به عنوان یک
فایل
بینام (anonymous file)
که با یک
فرایند
خارجی قابل
اشتراکگذاری
است. این
گزینه برای
حافظهای
اعمال
میشود که
به عنوان
اثر جانبی
ایجاد
دستگاههای
مختلف
تخصیص
مییابد.
این مورد
برای memory-backend-objects
اعمال
نمیشود،
چه به صورت
صریح در خط
فرمان مشخص
شده باشد یا
به طور ضمنی
توسط
گزینهٔ خط
فرمان -m
ایجاد گردد.
پیشفرض off
است.
برای استفاده از حالت مهاجرت cpr-transfer، باید aux-ram-share=on را تنظیم کنید.
- memory-backend='id'
- جایگزینی
برای
گزینههای
قدیمی -mem-path و
mem-prealloc. امکان
استفاده از
یک memory backend را به
عنوان RAM
اصلی فراهم
میکند.
برای نمونه:
-object memory-backend-file,id=pc.ram,size=512M,mem-path=/hugetlbfs,prealloc=on,share=on -machine memory-backend=pc.ram -m 512M
یادداشت سازگاری مهاجرت:
- به عنوان شناسهٔ backend باید از مقدار 'default-ram-id' استفاده شود که توسط نوع ماشین اعلان میشود (از طریق دستور QMP به نام query-machines در دسترس است)، در صورتی که مهاجرت به/از QEMU قدیمی (<5.0) مورد انتظار باشد.
- برای انواع ماشین 4.0 و قدیمیتر، در صورتی که مهاجرت به/از QEMU قدیمی (<5.0) مد نظر باشد، کاربر باید از گزینهٔ پسزمینهٔ x-use-canonical-path-for-ramblock-id=off استفاده کند.
برای نمونه:
-object memory-backend-ram,id=pc.ram,size=512M,x-use-canonical-path-for-ramblock-id=off -machine memory-backend=pc.ram -m 512M
- cxl-fmw.0.targets.0=firsttarget,cxl-fmw.0.targets.1=secondtarget,cxl-fmw.0.size=size[,cxl-fmw.0.interleave-granularity=granularity]
- یک CXL Fixed Memory Window (CFMW)
تعریف
میکند.
در سند CXL 2.0 ECN: CEDT CFMWS & QTG _DSM شرح داده شده است.
آنها ناحیههایی از نشانیهای فیزیکی میزبان (Host Physical Addresses یا HPA) روی یک سیستم هستند که ممکن است در میان یک یا چند پل میزبان CXL به صورت درهمتنیده (interleaved) قرار گیرند. نرمافزار سیستم، دستگاههای خاصی را به این پنجرهها اختصاص میدهد و رمزگشاهای Host-managed Device Memory (HDM) پاییندستی را در root portها، درگاههای سوییچ و دستگاهها بهطور مناسب پیکربندی میکند تا پیش از فعال کردن دستگاههای حافظه، نیازهای درهمتنیدگی را برآورده سازد.
گزینهٔ targets.X=target نگاشت را به پلهای میزبان CXL فراهم میکند که میتوانند با id ارائهشده در مدخل -device شناسایی شوند. هنگامی که پنجرهٔ حافظهٔ ثابت نشاندهندهٔ حافظهٔ درهمتنیده باشد، چندین مدخل برای مشخص کردن همهٔ مقاصد مورد نیاز است. X نمایهٔ مقصد از 0 است.
گزینهٔ size=size اندازهٔ CFMW را تعیین میکند. این مقدار باید مضربی از 256MiB باشد. این ناحیه روی 256MiB همتراز خواهد شد، اما مکان آن به پلتفرم و پیکربندی وابسته است.
گزینهٔ interleave-granularity=granularity دانهبندی (granularity) درهمتنیدگی را تعیین میکند. پیشفرض 256 (بایت) است. فقط دانهبندیهای 256، 512، 1k، 2k، 4k، 8k و 16k پشتیبانی میشوند.
نمونه:
-machine cxl-fmw.0.targets.0=cxl.0,cxl-fmw.0.targets.1=cxl.1,cxl-fmw.0.size=128G,cxl-fmw.0.interleave-granularity=512
- sgx-epc.0.memdev=<memid>,sgx-epc.0.node=<numaid>
- یک بخش SGX EPC
تعریف
میکند..TP
smp-cache.0.cache=cachename,smp-cache.0.topology=topologylevel
تعریف
ویژگیهای
حافظه موقت
(کش) برای
سامانه SMP.
cache=cachename حافظه موقتی را مشخص میکند که ویژگیها بر روی آن اعمال خواهند شد. این فیلد ترکیبی از سطح حافظه موقت و نوع آن است. از l1d (کش داده L1)، l1i (کش دستورالعمل L1)، l2 (کش یکپارچه L2) و l3 (کش یکپارچه L3) پشتیبانی میکند.
topology=topologylevel سطح توپولوژی حافظه موقت را تنظیم میکند. سطوح توپولوژی پردازنده شامل core، module، cluster، die، socket، book، drawer و مقدار ویژه default را میپذیرد. اگر default تنظیم شود، توپولوژی حافظه موقت از مدل توپولوژی پیشفرض معماری پیروی خواهد کرد. اگر سطح توپولوژی دیگری تعیین شود، کش در سطح توپولوژی متناظر پردازنده به اشتراک گذاشته خواهد شد. برای نمونه، topology=core باعث میشود حافظه موقت توسط تمام ریسههای درون یک هسته به اشتراک گذاشته شود. برای کشهایی که مشخص نشدهاند، بهطور پیشفرض از سطح default استفاده خواهد شد.
مدل توپولوژی کش پیشفرض برای یک ماشین i386 PC به شرح زیر است: کشهای l1d، l1i و l2 به ازای هر core هستند، در حالی که کش l3 به ازای هر die است.
مثال:
-machine smp-cache.0.cache=l1d,smp-cache.0.topology=core,smp-cache.1.cache=l1i,smp-cache.1.topology=core
- -M
- همانند -machine.
- -cpu model
- انتخاب مدل پردازنده (-cpu help برای مشاهده فهرست و انتخاب ویژگیهای اضافی)
- -accel name[,prop=value[,...]]
- این گزینه برای فعالسازی یک شتابدهنده به کار میرود. بسته به معماری مقصد، ممکن است kvm، xen، hvf، nitro، nvmm، whpx، mshv یا tcg در دسترس باشند. بهطور پیشفرض، tcg استفاده میشود. اگر بیش از یک شتابدهنده مشخص شده باشد، در صورت عدم موفقیت در مقداردهی اولیه مورد قبلی، شتابدهنده بعدی به کار گرفته میشود.
- igd-passthru=on|off
- هنگامی که Xen در حال استفاده است، این گزینه تعیین میکند که آیا دستگاههای گرافیکی یکپارچه Intel میتوانند به صورت passthrough به میهمان واگذار شوند یا خیر (پیشفرض=off).
- kernel-irqchip=on|off|split
- پشتیبانی irqchip درون هسته KVM را کنترل میکند. حالت پیشفرض، شتابدهی کامل کنترلکنندههای وقفه است. در x86، حالت split irqchip سطح حمله هسته را کاهش میدهد، اما هزینهای بر کارایی وقفههای non-MSI تحمیل میکند. غیرفعال کردن کامل irqchip درون هسته به جز برای مقاصد اشکالزدایی توصیه نمیشود.
- kvm-shadow-mem=size
- اندازه shadow MMU در KVM را تعیین میکند.
- one-insn-per-tb=on|off
- شتابدهنده TCG را وادار میکند تا تنها یک دستورالعمل میهمان را در هر بلوک ترجمه (translation block) قرار دهد. این کار سرعت شبیهسازی را بسیار کاهش میدهد، اما در برخی شرایط مانند هنگام تلاش برای تحلیل گزارشهای تولیدشده با گزینه -d میتواند مفید باشد.
- split-wx=on|off
- استفاده از نگاشت مجزای w^x را برای بافر تولید کد TCG کنترل میکند. برخی از سیستمعاملها نیازمند فعال بودن این مورد هستند و در چنین حالتی مقدار پیشفرض آن on خواهد بود. در دیگر سیستمعاملها، پیشفرض off است، اما میتوان آن را برای آزمایش یا اشکالزدایی فعال کرد.
- tb-size=n
- اندازه (به مبیبایت یا MiB) حافظه موقت بلوک ترجمه TCG را کنترل میکند.
- thread=single|multi
- تعداد ریسههای TCG را کنترل میکند. هنگامی که TCG چندریسهای (multi-threaded) باشد، یک ریسه به ازای هر vCPU وجود خواهد داشت و در نتیجه از هستههای اضافی میزبان بهره میبرد. مقدار پیشفرض فعال بودن چندریسگی است؛ به شرطی که هر دو بخش پشتیبان (back-end) و جلویی (front-end) از آن پشتیبانی کنند و هیچ ویژگی ناسازگاری در TCG فعال نشده باشد (مانند icount/replay).
- dirty-ring-size=n
- هنگامی که شتابدهنده KVM استفاده میشود، اندازه بافر حلقوی صفحات کثیف به ازای هر vCPU (تعداد مدخلها برای هر vCPU) را کنترل میکند. این مقدار باید توانی از دو و برابر یا بزرگتر از 1024 باشد (اما همچنان کمتر از حداکثر مقداری که هسته پشتیبانی میکند). اگر نمیدانید کدام مقدار بهترین است، 4096 میتواند مقدار اولیه مناسبی باشد. این مقدار را روی 0 بگذارید تا این ویژگی غیرفعال شود. بهطور پیشفرض، این ویژگی غیرفعال است (dirty-ring-size=0). در صورت فعال بودن، KVM در عوض صفحات کثیف را در یک بیتمپ ثبت خواهد کرد.
- eager-split-size=n
- سرویس KVM ثبت تغییرات صفحات کثیف را در دانهبندی PAGE_SIZE پیادهسازی میکند و فعالسازی dirty-logging روی یک huge-page در وهله اول مستلزم خرد کردن آن به صفحاتی در اندازه PAGE_SIZE است. KVM در ARM این تقسیمبندی را بهطور پیشفرض به صورت تنبل (lazy) انجام میدهد. انجام تقسیم huge-page به صورت مشتاقانه (eager) مزایای کارایی دارد، بهویژه در شرایطی که هزینههای TLBI مرتبط با توالیهای break-before-make قابل توجه است و همچنین اگر بارهای کاری میهمان مبتنی بر خواندن زیاد باشند. اندازه در اینجا مشخص میکند که در هر نوبت چند صفحه خرد شود و باید یک اندازه بلوک معتبر باشد که به ترتیب 1GiB/2MiB/4KiB، 32MiB/16KiB و 512MiB/64KiB برای PAGE_SIZEهای 4KiB/16KiB/64KiB است. در مورد مشخص کردن اندازه بالاتر محتاط باشید زیرا روی حافظه تأثیر خواهد گذاشت. بهطور پیشفرض، این ویژگی غیرفعال است (eager-split-size=0).
- notify-vmexit=run|internal-error|disable,notify-window=n
- پشتیبانی از notify VM exit را در میزبان x86 فعال یا غیرفعال میکند و در صورت فعال بودن، پنجره اعلان مربوطه را برای راهاندازی VM exit تعیین میکند. گزینه run این قابلیت را فعال میکند. اگر خروج رخ دهد، کاری انجام نمیدهد و ادامه میدهد. گزینه internal-error ویژگی را فعال کرده و یک خطای داخلی ایجاد میکند. گزینه disable ویژگی را فعال نمیکند. این قابلیت میتواند مشکل گیر کردن پردازنده به دلیل باز نشدن پنجرههای رویداد برای یک مدت زمان مشخص (یعنی notify-window) را کاهش دهد. پیشفرض: notify-vmexit=run,notify-window=0.
- device=path
- مسیر گره دستگاه KVM را تعیین میکند. پیشفرض /dev/kvm است. با تنظیم این مقدار روی /dev/fdset/NN میتوان از این گزینه برای ارسال دستگاه KVM مورد استفاده از طریق یک توصیفگر فایل استفاده کرد.
- hyperv=on|off|auto
- برای بخش پشتیبان WHPX، تعیین میکند که آیا توابع روشنگری Hyper-V فعال شوند یا خیر. در x86_64، ویژگیهای Hyper-V بهطور پیشفرض روشن (on) هستند. در AArch64، آنها بهطور پیشفرض خاموش (off) هستند.
- -smp [[cpus=]n][,maxcpus=maxcpus][,drawers=drawers][,books=books][,sockets=sockets][,dies=dies][,clusters=clusters][,modules=modules][,cores=cores][,threads=threads]
- شبیهسازی
یک سامانه SMP
با 'n'
پردازنده
که در ابتدا
روی برد نوع
ماشین حضور
دارند. در
بردهایی که
از اتصال
گرم
پردازنده
پشتیبانی
میکنند،
پارامتر
اختیاری 'maxcpus'
میتواند
برای اضافه
کردن
پردازندههای
بیشتر در
زمان اجرا
تنظیم شود.
هنگامی که
هر دو
پارامتر
حذف شوند،
حداکثر
تعداد
پردازندهها
از روی
اعضای
توپولوژی
ارائهشده
محاسبه
خواهد شد و
تعداد
پردازندههای
اولیه با
حداکثر
تعداد
مطابقت
خواهد داشت.
هنگامی که
تنها یکی از
آنها داده
شود،
پارامتر
حذفشده با
مقدار
همتای خود
تنظیم
خواهد شد.
هر دو
پارامتر
میتوانند
مشخص شوند،
اما حداکثر
تعداد
پردازندهها
باید برابر
یا بزرگتر
از تعداد
اولیه
پردازندهها
باشد.
حاصلضرب
سلسلهمراتب
توپولوژی
پردازنده
باید برابر
با حداکثر
تعداد
پردازندهها
باشد. هر دو
پارامتر
مشمول حد
بالایی
هستند که
توسط نوع
ماشین
انتخابی
خاص تعیین
میشود.
برای کنترل گزارش اطلاعات توپولوژی پردازنده، مقادیر پارامترهای توپولوژی را میتوان مشخص کرد. ماشینها ممکن است تنها از زیرمجموعهای از پارامترها پشتیبانی کنند و ماشینهای مختلف ممکن است زیرمجموعههای پشتیبانیشده متفاوتی داشته باشند که بسته به ظرفیت اهداف پردازنده مربوطه متغیر است. بنابراین برای برد یک نوع ماشین خاص، یک سلسلهمراتب توپولوژی مورد انتظار را میتوان از طریق زیرگزینههای پشتیبانیشده تعریف کرد. پارامترهای پشتیبانینشده را نیز میتوان علاوه بر زیرگزینهها مشخص کرد، اما مقادیر آنها برای پردازش و تجزیه صحیح باید برابر با 1 قرار گیرد.
یا تعداد پردازندههای اولیه، یا حداقل یکی از پارامترهای توپولوژی باید مشخص شود. پارامترهای تعیینشده باید بزرگتر از صفر باشند؛ پیکربندی صریح مانند "cpus=0" مجاز نیست. مقادیر هر پارامتر حذفشده از روی پارامترهایی که مشخص شدهاند محاسبه خواهد شد.
برای نمونه، زیرگزینه زیر یک سلسلهمراتب توپولوژی پردازنده را (در مجموع ۲ سوکت روی ماشین، ۲ هسته به ازای هر سوکت، ۲ ریسه به ازای هر هسته) برای ماشینی که تنها از sockets/cores/threads پشتیبانی میکند تعریف میکند. برخی از اعضای گزینه را میتوان حذف کرد اما مقادیر آنها بهطور خودکار محاسبه خواهد شد:
-smp 8,sockets=2,cores=2,threads=2,maxcpus=8
زیرگزینه زیر یک سلسلهمراتب توپولوژی پردازنده (در کل ۲ سوکت روی ماشین، ۲ die در هر سوکت، ۲ ماژول در هر die، ۲ هسته در هر ماژول، ۲ ریسه در هر هسته) را برای ماشینهای PC که از sockets/dies/modules/cores/threads پشتیبانی میکنند تعریف میکند. برخی از اعضای این گزینه میتوانند حذف شوند اما مقادیر آنها بهطور خودکار محاسبه خواهد شد:
-smp 32,sockets=2,dies=2,modules=2,cores=2,threads=2,maxcpus=32
زیرگزینه زیر یک سلسلهمراتب توپولوژی CPU (در کل ۲ سوکت روی ماشین، ۲ کلاستر در هر سوکت، ۲ هسته در هر کلاستر، ۲ رشته در هر هسته) را برای ماشینهای ARM virt که از سوکتها/کلاسترها/هستهها/رشتهها پشتیبانی میکنند، تعریف میکند. برخی از اعضای این گزینه میتوانند حذف شوند اما مقادیر آنها بهطور خودکار محاسبه خواهند شد:
-smp 16,sockets=2,clusters=2,cores=2,threads=2,maxcpus=16
از نظر تاریخی، هنگام محاسبه مقادیر ناموجود، اولویت به درشتترین پارامترهای توپولوژی داده میشد (یعنی سوکتها بر هستهها، و هستهها بر رشتهها ترجیح داده میشدند)، با این حال، این رفتار ممکن است تغییر کند. پیش از نسخه 6.2، اولویت با سوکتها نسبت به هستهها و سپس رشتهها بود. از نسخه 6.2 به بعد، اولویت با هستهها نسبت به سوکتها و سپس رشتهها است.
برای نمونه، گزینه زیر یک برد ماشین با ۲ سوکتِ دارای ۱ هسته پیش از نسخه 6.2 و ۱ سوکتِ دارای ۲ هسته پس از نسخه 6.2 را تعریف میکند:
-smp 2
نکته: توپولوژی کلاستر تنها در صورتی در ACPI ایجاد شده و به سیستمعامل مهمان شناسانده میشود که بهصراحت در -smp مشخص شده باشد.
- -numa node[,mem=size][,cpus=firstcpu[-lastcpu]][,nodeid=node][,initiator=initiator]
- -numa node[,memdev=id][,cpus=firstcpu[-lastcpu]][,nodeid=node][,initiator=initiator]
- -numa dist,src=source,dst=destination,val=distance
- -numa cpu,node-id=node[,socket-id=x][,core-id=y][,thread-id=z]
- -numa hmat-lb,initiator=node,target=node,hierarchy=hierarchy,data-type=type[,latency=lat][,bandwidth=bw]
- -numa hmat-cache,node-id=node,size=size,level=level[,associativity=str][,policy=str][,line=size]
- یک گره NUMA را
تعریف کرده
و RAM و VCPUها را
به آن تخصیص
میدهد.
فاصله NUMA را
از یک گره
مبدا به یک
گره مقصد
تنظیم
میکند.
ویژگیهای
حافظه
ناهمگن ACPI را
برای
گرههای
دادهشده
تعیین
میکند.
تخصیص قدیمی VCPU از گزینه 'cpus' استفاده میکند که در آن firstcpu و lastcpu نمایانگر اندیسهای CPU هستند. هر گزینه 'cpus' یک بازه پیوسته از اندیسهای CPU را نشان میدهد (یا یک VCPU منفرد اگر lastcpu حذف شده باشد). مجموعهای ناپیوسته از VCPUها را میتوان با ارائه چندین گزینه 'cpus' مشخص کرد. اگر 'cpus' در تمام گرهها حذف شود، VCPUها بهطور خودکار بین آنها تقسیم میشوند.
برای نمونه، گزینه زیر VCPUهای ۰، ۱، ۲ و ۵ را به یک گره NUMA تخصیص میدهد:
-numa node,cpus=0-2,cpus=5
گزینه 'cpu' یک جایگزین جدید برای گزینه 'cpus' است که از ویژگیهای 'socket-id|core-id|thread-id' برای تخصیص اشیاء CPU به یک گره با استفاده از ویژگیهای ساختار توپولوژی CPU بهره میبرد. این مجموعه ویژگیها مختص هر ماشین است و به نوع ماشین/گزینههای 'smp' استفادهشده بستگی دارد. این اطلاعات را میتوان با دستور مانیتور 'hotpluggable-cpus' استعلام کرد. ویژگی 'node-id' گرهی را مشخص میکند که شیء CPU به آن تخصیص خواهد یافت؛ لازم است گره پیش از استفاده با گزینه 'cpu'، با گزینه 'node' اعلان شده باشد.
برای نمونه:
-M pc \ -smp 1,sockets=2,maxcpus=2 \ -numa node,nodeid=0 -numa node,nodeid=1 \ -numa cpu,node-id=0,socket-id=0 -numa cpu,node-id=1,socket-id=1
گزینه 'memdev' حافظه RAM را از یک دستگاه پشتیبان حافظه (memory backend device) معین به یک گره تخصیص میدهد. توصیه میشود به جای گزینه قدیمی 'mem' از گزینه 'memdev' استفاده شود؛ زیرا گزینه 'memdev' کارایی بهتر و کنترل بیشتری روی RAM پشتیبان فراهم میآورد (برای نمونه، پارامتر 'prealloc' در '-memory-backend-ram' تخصیص پیشاپیش حافظه را ممکن میسازد).
به دلایل سازگاری، گزینه قدیمی 'mem' در انواع ماشین 5.0 و قدیمیتر پشتیبانی میشود. توجه داشته باشید که 'mem' و 'memdev' مانعةالجمع هستند. اگر یک گره از 'memdev' استفاده کند، سایر گرهها نیز باید از گزینه 'memdev' استفاده کنند، و بالعکس.
کاربران باید حافظه تمام گرههای NUMA را با 'memdev' (یا گزینه قدیمی 'mem' در صورت موجود بودن) مشخص کنند. در QEMU 5.2، پشتیبانی از '-numa node' بدون تعیین حافظه حذف شد.
گزینه 'initiator' یک گزینه اضافی است که به یک گره NUMA آغازگر (initiator) اشاره میکند که بهترین کارایی (کمترین تاخیر یا بیشترین پهنای باند) را نسبت به این گره NUMA دارد. توجه داشته باشید که این گزینه تنها زمانی قابل تنظیم است که ویژگی 'hmat' ماشین روی 'on' تنظیم شده باشد.
مثال زیر ماشینی با ۲ گره NUMA ایجاد میکند؛ گره 0 دارای CPU است، گره 1 تنها دارای حافظه است و آغازگر آن گره 0 است. توجه داشته باشید که از آنجا که گره 0 دارای CPU است، بهطور پیشفرض آغازگر گره 0 خودِ آن است و باید خودِ آن باشد.
-machine hmat=on \ -m 2G,slots=2,maxmem=4G \ -object memory-backend-ram,size=1G,id=m0 \ -object memory-backend-ram,size=1G,id=m1 \ -numa node,nodeid=0,memdev=m0 \ -numa node,nodeid=1,memdev=m1,initiator=0 \ -smp 2,sockets=2,maxcpus=2 \ -numa cpu,node-id=0,socket-id=0 \ -numa cpu,node-id=0,socket-id=1
شناسههای source و destination نمایانگر شناسههای گره NUMA هستند. distance فاصله NUMA از source به destination است. فاصله از یک گره به خودش همیشه ۱۰ است. اگر به هر جفتی از گرهها فاصلهای اختصاص داده شود، باید به تمام جفتها فاصله داده شود. با این حال، هنگامی که فواصل برای هر جفت گره فقط در یک جهت داده شود، فواصل در جهت مخالف یکسان فرض میشوند. اما اگر حتی برای یک جفت گره، یک جفت فاصله نامتقارن تعیین شود، باید برای تمام جفت گرهها مقادیر فاصله برای هر دو جهت ارائه شود، حتی اگر متقارن باشند. هنگامی که یک گره از گره دیگر غیرقابل دسترس باشد، فاصله جفت را روی ۲۵۵ تنظیم کنید.
توجه داشته باشید که گزینه -numa هیچیک از منابع مشخصشده را تخصیص نمیدهد، بلکه صرفاً منابع موجود را به گرههای NUMA اختصاص میدهد. این بدان معناست که همچنان باید از گزینههای -m و -smp به ترتیب برای تخصیص RAM و VCPUها استفاده شود.
از 'hmat-lb' برای تنظیم اطلاعات تاخیر و پهنای باند محلی بودن سیستم (System Locality Latency and Bandwidth Information) بین گرههای NUMA آغازگر و هدف در جدول ویژگیهای حافظه ناهمگن ACPI (HMAT) استفاده کنید. گره NUMA آغازگر میتواند درخواستهای حافظه ایجاد کند و معمولاً دارای یک یا چند پردازنده است. گره NUMA هدف شامل حافظه آدرسپذیر است.
در گزینه 'hmat-lb'، مقادیر node شناسههای گره NUMA هستند. hierarchy سلسلهمراتب حافظه گره NUMA هدف است: اگر hierarchy برابر با 'memory' باشد، ساختار نمایانگر کارایی حافظه است؛ اگر hierarchy برابر با 'first-level|second-level|third-level' باشد، این ساختار نمایانگر کارایی تجمیعشده کَشهای جانبی حافظه (memory side caches) برای هر دامنه است. مقدار type در 'data-type' نوع داده نمایشدادهشده توسط این نمونه ساختار است: اگر 'hierarchy' برابر با 'memory' باشد، 'data-type' بیانگر تاخیر 'access|read|write' یا پهنای باند 'access|read|write' حافظه هدف است؛ اگر 'hierarchy' برابر با 'first-level|second-level|third-level' باشد، 'data-type' تاخیر برخورد (hit latency) از نوع 'access|read|write' یا پهنای باند برخورد (hit bandwidth) از نوع 'access|read|write' کَش جانبی حافظه هدف است.
مقدار lat مقدار تاخیر بر حسب نانوثانیه است. مقدار bw مقدار پهنای باند است؛ مقادیر و واحدهای ممکن NUM[M|G|T] هستند، به این معنی که مقدار پهنای باند برابر با NUM بایت بر ثانیه است (یا بسته به پسوند استفادهشده MiB/s ،GiB/s یا TiB/s). توجه داشته باشید که مقدار تاخیر یا پهنای باند برابر با 0، به این معنی است که اطلاعات تاخیر یا پهنای باند مربوطه ارائه نشده است..sp در گزینهٔ 'hmat-cache'، مقدار node-id شناسهٔ NUMA حافظهای است که به آن تعلق دارد. size اندازهٔ حافظهٔ پنهانِ سمتِ حافظه (memory side cache) بر حسب بایت است. level سطح حافظهٔ پنهان توصیفشده در این ساختار است؛ توجه داشته باشید که سطح حافظهٔ پنهان 0 نباید با گزینهٔ 'hmat-cache' استفاده شود. associativity میزان پیوستگی حافظهٔ پنهان (cache associativity) است، مقادیر ممکن عبارتند از: 'none/direct(direct-mapped)/complex(complex cache indexing)'. policy سیاست نوشتن (write policy) است. line اندازهٔ خط حافظهٔ پنهان بر حسب بایت است.
برای مثال، گزینههای زیر ۲ گره NUMA را توصیف میکنند. گره 0 دارای ۲ پردازنده (cpu) و یک ram است، گره 1 تنها یک ram دارد. پردازندههای گره 0 با تاخیر دسترسی (access-latency) ۵ نانوثانیه و پهنای باند دسترسی (access-bandwidth) ۲۰۰ مبیبایت بر ثانیه (200 MiB/s) به حافظه در گره 0 دسترسی دارند؛ پردازندههای گره NUMA شمارهٔ 0 با تاخیر دسترسی ۱۰ نانوثانیه و پهنای باند دسترسی ۱۰۰ مبیبایت بر ثانیه (100 MiB/s) به حافظه در گره NUMA شمارهٔ 1 دسترسی دارند. و دربارهٔ اطلاعات حافظهٔ پنهان سمت حافظه، هر دو گره NUMA شمارهٔ 0 و 1 دارای حافظهٔ پنهانِ حافظه با سطح 1، اندازهٔ 10KiB، سیاست write-back و اندازهٔ خط حافظهٔ پنهان ۸ بایت هستند:
-machine hmat=on \ -m 2G \ -object memory-backend-ram,size=1G,id=m0 \ -object memory-backend-ram,size=1G,id=m1 \ -smp 2,sockets=2,maxcpus=2 \ -numa node,nodeid=0,memdev=m0 \ -numa node,nodeid=1,memdev=m1,initiator=0 \ -numa cpu,node-id=0,socket-id=0 \ -numa cpu,node-id=0,socket-id=1 \ -numa hmat-lb,initiator=0,target=0,hierarchy=memory,data-type=access-latency,latency=5 \ -numa hmat-lb,initiator=0,target=0,hierarchy=memory,data-type=access-bandwidth,bandwidth=200M \ -numa hmat-lb,initiator=0,target=1,hierarchy=memory,data-type=access-latency,latency=10 \ -numa hmat-lb,initiator=0,target=1,hierarchy=memory,data-type=access-bandwidth,bandwidth=100M \ -numa hmat-cache,node-id=0,size=10K,level=1,associativity=direct,policy=write-back,line=8 \ -numa hmat-cache,node-id=1,size=10K,level=1,associativity=direct,policy=write-back,line=8
- -add-fd fd=fd,set=set[,opaque=opaque]
- افزودن یک توصیفگر فایل به یک مجموعهٔ fd. گزینههای معتبر عبارتند از:
- fd=fd
- این گزینه توصیفگر فایلی را تعیین میکند که یک نسخهٔ مضاعف (duplicate) از آن به مجموعهٔ fd اضافه میشود. توصیفگر فایل نمیتواند stdin، stdout یا stderr باشد.
- set=set
- این گزینه شناسهٔ مجموعهٔ fd را مشخص میکند که توصیفگر فایل باید به آن افزوده شود.
- opaque=opaque
- این گزینه یک رشته با قالب آزاد را تعیین میکند که میتواند برای توصیف fd به کار رود.
میتوانید یک ایمیج را با استفاده از توصیفگرهای فایل از پیش باز شده از یک مجموعهٔ fd باز کنید:
qemu-system-x86_64 \ -add-fd fd=3,set=2,opaque="rdwr:/path/to/file" \ -add-fd fd=4,set=2,opaque="rdonly:/path/to/file" \ -drive file=/dev/fdset/2,index=0,media=disk
- -set group.id.arg=value
- تنظیم پارامتر arg برای آیتم id از نوع group.
- -global driver.prop=value
- -global driver=driver,property=property,value=value
- تنظیم مقدار پیشفرض مشخصهٔ prop از درایور driver به value، برای مثال:
qemu-system-x86_64 -global ide-hd.physical_block_size=4096 disk-image.img
بهویژه، میتوانید از این گزینه برای تنظیم مشخصههای درایور برای دستگاههایی استفاده کنید که بهطور خودکار توسط مدل ماشین ساخته شدهاند. برای ایجاد دستگاهی که بهطور خودکار ساخته نمیشود و تنظیم مشخصهها روی آن، از -device استفاده کنید.
دستور -global driver.prop=value حالت کوتاهنویسی برای -global driver=driver,property=prop,value=value است. شیوهٔ نگارش کامل حتی زمانی که driver حاوی نقطه باشد نیز کار میکند.
- -boot [order=drives][,once=drives][,menu=on|off][,splash=sp_name][,splash-time=sp_time][,reboot-timeout=rb_timeout][,strict=on|off]
- ترتیب
درایوهای
راهاندازی
(boot order) را به
صورت
رشتهای از
حروف درایو
مشخص
میکند.
حروف درایو
معتبر به
معماری
مقصد بستگی
دارند.
معماری x86 PC از
این موارد
استفاده
میکند: a, b
(فلاپی ۱ و
۲)، c (نخستین
دیسک سخت)، d
(نخستین CD-ROM)، n-p
(بوت شبکه
یا Etherboot از
کارتهای
شبکهٔ ۱ تا
۴)؛
راهاندازی
از دیسک سخت
حالت
پیشفرض
است. برای
اعمال یک
ترتیب
راهاندازی
خاص تنها در
نخستین
راهاندازی،
آن را از
طریق once
مشخص کنید.
توجه داشته
باشید که
پارامتر order
یا once نباید
همراه با
مشخصهٔ bootindex
دستگاهها
استفاده
شود، زیرا
پیادهسازیهای
سفتافزار
(firmware) معمولاً
از هر دو
بهطور
همزمان
پشتیبانی
نمیکنند.
منوها/اعلانهای تعاملی راهاندازی را میتوان در صورت پشتیبانی سفتافزار/BIOS از طریق menu=on فعال کرد. حالت پیشفرض، راهاندازی غیرتعاملی است.
در صورتی که گزینهٔ splash=sp_name ارائه شده و menu=on باشد، میتوان تصویری زمینه (splash) را به bios فرستاد تا در صورت پشتیبانی سفتافزار/BIOS به صورت لوگو نمایش داده شود. در حال حاضر Seabios در سیستم X86 از آن پشتیبانی میکند. محدودیت: فایل تصویر splash میتواند یک فایل jpeg یا یک فایل BMP با ساختار 24 BPP (رنگ واقعی یا true color) باشد. تفکیکپذیری باید توسط حالت SVGA پشتیبانی شود، بنابراین اندازههای پیشنهادی عبارتند از 320x240، 640x480 و 800x640.
میتوان یک مهلت زمانی (timeout) به bios ارسال کرد؛ در این صورت اگر راهاندازی ناموفق باشد، سیستمعامل مهمان به مدت rb_timeout میلیثانیه مکث کرده و سپس مجدداً راهاندازی میشود. اگر مقدار rb_timeout برابر '-1' باشد، مهمان مجدداً راهاندازی نخواهد شد؛ qemu به طور پیشفرض مقدار '-1' را به bios ارسال میکند. در حال حاضر Seabios برای سیستم X86 از آن پشتیبانی میکند.
راهاندازی دقیق (strict boot) را در صورت پشتیبانی سفتافزار/BIOS از طریق strict=on فعال کنید. این مورد تنها زمانی اثر میگذارد که اولویت راهاندازی با گزینههای bootindex تغییر کرده باشد. حالت پیشفرض، راهاندازی غیردقیق است.
# ابتدا تلاش برای راهاندازی از شبکه، سپس از دیسک سخت qemu-system-x86_64 -boot order=nc # ابتدا راهاندازی از CD-ROM، بازگشت به ترتیب پیشفرض پس از راهاندازی مجدد qemu-system-x86_64 -boot once=d # راهاندازی همراه با تصویر لوگو به مدت ۵ ثانیه qemu-system-x86_64 -boot menu=on,splash=/root/boot.bmp,splash-time=5000
نکته: قالب موروثی '-boot drives' همچنان پشتیبانی میشود اما استفاده از آن توصیه نمیگردد، زیرا ممکن است در نسخههای آینده حذف شود.
- -m [size=]megs[,slots=n,maxmem=size]
- اندازهٔ
حافظهٔ RAM
راهاندازی
مهمان را به
megs مگابایت
تنظیم
میکند.
مقدار
پیشفرض 128 MiB
است. بهطور
اختیاری،
میتوان از
پسوند "M" یا
"G" به ترتیب
برای مشخص
کردن
مقادیر بر
حسب
مگابایت یا
گیگابایت
استفاده
کرد. جفت
اختیاری slots و
maxmem میتواند
برای تعیین
تعداد
شکافهای
حافظه با
قابلیت
اتصال حین
کار (hotpluggable) و
حداکثر
میزان
حافظه
استفاده
شود. توجه
داشته
باشید که maxmem
باید با
اندازهٔ
صفحه (page size)
همتراز
باشد.
برای مثال، خط فرمان زیر اندازهٔ RAM راهاندازی مهمان را به 1GiB تنظیم میکند، ۳ شکاف برای اتصال حین کار حافظهٔ اضافی ایجاد کرده و حداکثر حافظهای را که مهمان میتواند به آن دسترسی پیدا کند به 4GiB محدود میکند:
qemu-system-x86_64 -m 1G,slots=3,maxmem=4G
اگر slots و maxmem مشخص نشوند، قابلیت اتصال حین کار حافظه فعال نخواهد شد و RAM راهاندازی مهمان هرگز افزایش نخواهد یافت.
- -mem-path path
- تخصیص RAM مهمان از یک فایل موقتاً ایجاد شده در path.
- -mem-prealloc
- پیشتخصیص حافظه هنگام استفاده از -mem-path.
- -k language
- استفاده از
چیدمان
صفحهکلید
language (برای
مثال fr
برای زبان
فرانسوی).
این گزینه
تنها در
مواردی
نیاز است که
دریافت
کدهای کلید
خام PC (یا
همان raw PC keycodes)
آسان نباشد
(مثلاً در
رایانههای
Mac، با برخی
سرورهای X11
یا با یک
نمایشگر VNC
یا curses).
معمولاً
روی
میزبانهای
PC/Linux یا PC/Windows
نیازی به
استفاده از
آن ندارید.
چیدمانهای موجود عبارتند از:
ar de-ch es fo fr-ca hu ja mk no pt-br sv da en-gb et fr fr-ch is lt nl pl ru th de en-us fi fr-be hr it lv nl-be pt sl tr
پیشفرض en-us است.
- -audio [driver=]driver[,model=value][,prop=value[,...]]
- اگر گزینهٔ
model مشخص شده
باشد، -audio یک
میانبر
برای
پیکربندی
همزمان
سختافزار
صوتی مهمان
و بکاند
صوتی
میزبان
بهطور
یکجا است.
مدل
سختافزار
مهمان را
میتوان با
model=modelname تعیین
کرد. برای
دیدن فهرست
انواع
دستگاههای
در دسترس،
از model=help
استفاده
کنید.
دو مثال زیر دقیقاً یک کار را انجام میدهند تا نشان دهند چگونه -audio میتواند برای کوتاهتر کردن طول خط فرمان به کار رود:
qemu-system-x86_64 -audiodev pa,id=pa -device sb16,audiodev=pa qemu-system-x86_64 -audio pa,model=sb16
اگر گزینهٔ model مشخص نشود، -audio برای پیکربندی یک بکاند صوتی پیشفرض استفاده میشود که هر زمان ویژگی audiodev روی یک دستگاه یا ماشین تنظیم نشده باشد، استفاده خواهد شد. بهویژه، -audio none تضمین میکند که حتی برای ماشینهایی که دارای سختافزار صوتی تعبیهشده هستند نیز صدایی تولید نشود.
در هر دو حالت، گزینهٔ driver مشابه با گزینهٔ متناظر -audiodev در زیر است. برای فهرست کردن درایورهای موجود از driver=help استفاده کنید.
- -audiodev [driver=]driver,id=id[,prop=value[,...]]
- یک درایور
بکاند
صوتی جدید
که با id
شناسایی
میشود را
اضافه
میکند.
اگر هیچ بکاند صوتی مشخص نشود، QEMU تلاش میکند تا یک بکاند پیشفرض را انتخاب کند. گزینهٔ -display ممکن است بر اینکه کدام بکاند انتخاب شود تأثیر بگذارد.
ویژگیهای عمومی و ویژگیهای مخصوص درایور وجود دارند. برخی مقادیر را میتوان برای ورودی و خروجی به شکل متفاوتی تنظیم کرد؛ آنها با in|out. علامتگذاری شدهاند. میتوانید ویژگی ورودی را با in.prop و ویژگی خروجی را با out.prop تنظیم کنید. برای مثال:
-audiodev alsa,id=example,in.frequency=44110,out.frequency=8000 -audiodev alsa,id=example,out.channels=1 # leaves in.channels unspecified
نکته: اعتبارسنجی پارامترها ناقص شناخته شده است؛ در بسیاری از موارد مشخص کردن یک گزینهٔ نامعتبر باعث میشود QEMU پیام خطایی چاپ کرده و شبیهسازی را بدون صدا ادامه دهد.
گزینههای عمومی معتبر عبارتند از:
- id=identifier
- بکاند صوتی را شناسایی میکند.
- timer-period=period
- دورهٔ زمانی تایمر مورد استفاده توسط زیرسیستم صوتی را بر حسب میکروثانیه تنظیم میکند. مقدار پیشفرض 10000 (۱۰ میلیثانیه) است.
- in|out.mixing-engine=on|off
- استفاده از موتور میکس QEMU برای ترکیب همهٔ جریانها در داخل QEMU و تبدیل قالبهای صوتی در صورت عدم پشتیبانی توسط بکاند. هنگامی که خاموش (off) باشد، fixed-settings نیز باید خاموش باشد. توجه داشته باشید که غیرفعال کردن این گزینه به این معنی است که بکاند انتخابشده باید از چند جریان و قالبهای صوتی مورد استفاده توسط کارتهای مجازی پشتیبانی کند، در غیر این صورت هیچ صدایی دریافت نخواهید کرد. غیرفعال کردن این گزینه توصیه نمیشود مگر اینکه بخواهید از صدای 5.1 یا 7.1 استفاده کنید، زیرا موتور میکس تنها از صدای مونو و استریو پشتیبانی میکند. مقدار پیشفرض on است.
- in|out.fixed-settings=on|off
- استفاده از تنظیمات ثابت برای صدای میزبان. هنگامی که خاموش (off) باشد، بر اساس نحوهٔ باز شدن کارت صدا توسط مهمان تغییر خواهد کرد. در این حالت نباید frequency، channels یا format را مشخص کنید. مقدار پیشفرض on است.
- in|out.frequency=frequency
- بسامد (فرکانس) مورد استفاده هنگام بهکارگیری fixed-settings را مشخص میکند. پیشفرض 44100Hz است.
- in|out.channels=channels
- تعداد کانالهای مورد استفاده هنگام بهکارگیری fixed-settings را مشخص میکند. پیشفرض 2 (استریو) است.
- in|out.format=format
- قالب نمونه مورد استفاده هنگام استفاده از fixed-settings را مشخص میکند. مقادیر معتبر عبارتند از: s8، s16، s32، u8، u16، u32، f32. مقدار پیشفرض s16 است.
- in|out.voices=voices
- تعداد voiceهای مورد استفاده را مشخص میکند. پیشفرض 1 است.
- in|out.buffer-length=usecs
- اندازهٔ بافر را بر حسب میکروثانیه تنظیم میکند.
- -audiodev none,id=id[,prop=value[,...]]
- یک بکاند ساختگی (dummy) ایجاد میکند که تمام خروجیها را دور میریزد. این بکاند هیچ ویژگی خاص مربوط به بکاند ندارد.
- -audiodev alsa,id=id[,prop=value[,...]]
- یک بکاند
با استفاده
از ALSA ایجاد
میکند. این
بکاند
تنها روی Linux
در دسترس
است.
گزینههای مخصوص ALSA عبارتند از:
- in|out.dev=device
- دستگاه ALSA مورد استفاده برای ورودی و/یا خروجی را مشخص میکند. پیشفرض default است.
- in|out.period-length=usecs
- طول دوره (period length) را بر حسب میکروثانیه تنظیم میکند.
- in|out.try-poll=on|off
- تلاش برای استفاده از حالت poll با دستگاه. پیشفرض off است.
- threshold=threshold
- آستانه (بر حسب میکروثانیه) برای زمانی که بازپخش آغاز میشود. مقدار پیشفرض 0 است.
- -audiodev coreaudio,id=id[,prop=value[,...]]
- یک بکاند
با استفاده
از Core Audio شرکت Apple
ایجاد
میکند. این
بکاند
تنها روی Mac OS
موجود است و
تنها از
بازپخش
پشتیبانی
میکند.
گزینههای مخصوص Core Audio عبارتند از:
- in|out.buffer-count=count
- تعداد بافرها را تنظیم میکند.
- -audiodev dbus,id=id[,prop=value[,...]]
- یک بکاند D-Bus
ایجاد
میکند. این
بکاند
باید به
نمایشگر
مرتبط شود
(بهصورت -display
dbus,audiodev=id). (از
نسخهٔ 7.0)
گزینههای مخصوص D-Bus عبارتند از:
- nsamples
- تعداد نمونهها در هر خواندن/نوشتن (پیشفرض ۴۸۰، ۱۰ میلیثانیه در ۴۸ کیلوهرتز) (از نسخهٔ 10.0)
- -audiodev dsound,id=id[,prop=value[,...]]
- یک بکاند
با استفاده
از DirectSound شرکت Microsoft
ایجاد
میکند. این
بکاند
تنها روی Windows
در دسترس
است و تنها
از بازپخش
پشتیبانی
میکند.
گزینههای مخصوص DirectSound عبارتند از:
- latency=usecs
- افزودن تاخیر اضافی به میزان usecs میکروثانیه به بازپخش. مقدار پیشفرض 10000 (۱۰ میلیثانیه) است.
- -audiodev oss,id=id[,prop=value[,...]]
- یک بکاند
با استفاده
از OSS ایجاد
میکند. این
بکاند در
بیشتر
سیستمهای
شبهیونیکس
در دسترس
است.
گزینههای مخصوص OSS عبارتند از:
- in|out.dev=device
- نام فایل دستگاه OSS مورد استفاده را مشخص میکند. پیشفرض /dev/dsp است..TP in|out.buffer-count=count تعداد بافرها را مشخص میکند.
- in|out.try-poll=on|off
- تلاش برای استفاده از حالت poll در دستگاه. پیشفرض on است.
- try-mmap=on|off
- تلاش برای استفاده از دسترسی به دستگاه با نگاشت در حافظه (memory-mapped). پیشفرض off است.
- exclusive=on|off
- باز کردن دستگاه در حالت انحصاری (در این حالت vmix کار نخواهد کرد). پیشفرض off است.
- dsp-policy=policy
- سیاست زمانبندی را تنظیم میکند (عددی بین 0 و 10، که عدد کوچکتر به معنای تأخیر کمتر اما مصرف بیشتر پردازنده است). مقدار -1 را برای استفاده از اندازههای بافر مشخصشده توسط buffer و buffer-count به کار ببرید. این گزینه در صورت عدم دسترسی به OSS 4 نادیده گرفته میشود. پیشفرض 5 است.
- -audiodev pa,id=id[,prop=value[,...]]
- یک بکاند
با استفاده
از PulseAudio ایجاد
میکند. این
بکاند در
بیشتر
سیستمها
موجود است.
گزینههای ویژه PulseAudio عبارتند از:
- server=server
- کارگزار PulseAudio برای اتصال را مشخص میکند.
- in|out.name=sink
- استفاده از منبع/سینک (source/sink) مشخصشده برای ضبط/پخش صدا.
- in|out.latency=usecs
- تأخیر مورد نظر بر حسب میکروثانیه. کارگزار PulseAudio تلاش خواهد کرد این مقدار را رعایت کند، اما ممکن است تأخیر واقعی کمتر یا بیشتر باشد.
- -audiodev pipewire,id=id[,prop=value[,...]]
- یک بکاند
با استفاده
از PipeWire ایجاد
میکند. این
بکاند در
اکثر
سیستمها
در دسترس
است.
گزینههای ویژه PipeWire عبارتند از:
- in|out.latency=usecs
- تأخیر مورد نظر بر حسب میکروثانیه.
- in|out.name=sink
- استفاده از منبع/سینک (source/sink) مشخصشده برای ضبط/پخش صدا.
- in|out.stream-name
- نام جریان (stream) مربوط به PipeWire را مشخص میکند.
- -audiodev sdl,id=id[,prop=value[,...]]
- یک بکاند
با استفاده
از SDL ایجاد
میکند. این
بکاند در
اکثر
سیستمها
در دسترس
است، اما در
صورت امکان
بهتر است از
بکاند
بومی
پلتفرم خود
استفاده
کنید.
گزینههای ویژه SDL عبارتند از:
- in|out.buffer-count=count
- تعداد بافرها را مشخص میکند.
- -audiodev sndio,id=id[,prop=value[,...]]
- یک بکاند
با استفاده
از SNDIO ایجاد
میکند. این
بکاند در OpenBSD
و اکثر
سیستمهای
شبهیونیکس
دیگر در
دسترس است.
گزینههای ویژه Sndio عبارتند از:
- in|out.dev=device
- دستگاه sndio را برای ورودی و/یا خروجی مشخص میکند. پیشفرض default است.
- in|out.latency=usecs
- طول دوره (period length) مورد نظر را به میکروثانیه مشخص میکند.
- -audiodev spice,id=id[,prop=value[,...]]
- بکاَندی ایجاد میکند که صدا را از طریق SPICE ارسال مینماید. این بکاند نیازمند -spice است و در آن صورت بهطور خودکار انتخاب میشود؛ بنابراین معمولاً میتوانید از این گزینه صرفنظر کنید. این بکاند ویژگی اختصاصی ندارد.
- -audiodev wav,id=id[,prop=value[,...]]
- یک بکاند
ایجاد
میکند که
صدا را در
یک فایل WAV
مینویسد.
گزینههای ویژه این بکاند عبارتند از:
- path=path
- صدای ضبطشده را در فایل مشخصشده مینویسد. پیشفرض qemu.wav است.
- -device driver[,prop=value[,...]]
- افزودن
درایور
دستگاه.
عبارت prop=value
ویژگیهای
درایور را
مشخص
میکند.
ویژگیهای
معتبر به
نوع درایور
بستگی
دارند. برای
دریافت
راهنما در
مورد
درایورها و
ویژگیهای
موجود، از
-device help و -device driver,help
استفاده
کنید.
برخی درایورها عبارتند از:
- -device ipmi-bmc-sim,id=id[,prop=value[,...]]
- افزودن یک IPMI
BMC. این مورد
یک
شبیهسازی
از
پردازنده
رابط
مدیریت
سختافزار
است که
معمولاً
روی سیستم
فیزیکی
قرار دارد.
این دستگاه
یک watchdog و
امکان
بازنشانی (reset)
و کنترل
روشن/خاموش
(power control) سیستم را
فراهم
میآورد.
برای
کاربردی
بودن، باید
آن را به یک
رابط IPMI متصل
کنید.
آدرس اسلیو (slave address) برای پروتکل IPMI جهت استفاده در BMC. مقدار پیشفرض 0x20 است. این نشانی، آدرس BMC روی شبکه I2C کنترلکنندههای مدیریتی است. اگر مفهوم آن را نمیدانید، میتوانید با خیال راحت آن را نادیده بگیرید.
- id=id
- شناسه BMC برای رابطهایی که از این دستگاه استفاده میکنند.
- slave_addr=val
- تعریف آدرس اسلیو (slave) جهت استفاده برای BMC. پیشفرض 0x20 است.
- sdrfile=file
- فایل حاوی دادههای خام سوابق دادههای حسگر یا Sensor Data Records (SDR). مقدار پیشفرض none است.
- fruareasize=val
- اندازه ناحیه واحد قابل تعویض در محل یا Field Replaceable Unit (FRU). مقدار پیشفرض 1024 است.
- frudatafile=file
- فایل حاوی دادههای خام فهرست موجودی واحد قابل تعویض در محل (FRU). مقدار پیشفرض none است.
- guid=uuid
- مقدار GUID برای BMC در قالب استاندارد UUID. در صورت تنظیم، اجرای دستور "Get GUID" روی BMC آن را بازمیگرداند. در غیر این صورت "Get GUID" یک خطا باز خواهد گرداند.
- lan.channel=val
- شماره کانال برای کانال LAN ساختگی. میتواند 0 یا هر عدد صحیحی از 0x1 تا 0xb (شامل هر دو) باشد. اگر روی 0 تنظیم شود، کانال LAN غیرفعال میشود، در غیر این صورت کانال LAN روی شماره کانال مشخصشده فعال خواهد شد. مقدار پیشفرض 0 است.
- lan.ipaddr=addr
- نشانی ipv4 کانال شبکه محلی (LAN) مربوط به BMC.
- lan.ipsrc=val
- منبع نشانی ipv4 کانال شبکه محلی (LAN) مربوط به BMC. میتواند 0 (منبع نامشخص)، 1 (نشانی ایستا)، 2 (DHCP)، 3 (بایوس یا نرمافزار سیستم)، یا 4 (سایر منابع) باشد. پیشفرض 0 است.
- lan.macaddr=mac
- نشانی mac کانال شبکه محلی (LAN) مربوط به BMC.
- lan.netmask=mask
- ماسک زیرشبکه (subnet mask) پروتکل ipv4 برای کانال LAN مربوط به BMC.
- lan.defgw_ipaddr=addr
- نشانی ipv4 درگاه پیشفرض (default gateway) برای کانال LAN مربوط به BMC.
- lan.defgw_macaddr=mac
- نشانی mac درگاه پیشفرض برای کانال LAN مربوط به BMC.
- -device ipmi-bmc-extern,id=id,chardev=id[,slave_addr=val]
- افزودن
اتصال به یک
شبیهساز
خارجی IPMI BMC. به
جای
شبیهسازی
محلی BMC
مانند مورد
بالا، به یک
موجودیت
خارجی متصل
میشود که
سرویسهای
IPMI را ارائه
میدهد.
اتصال به یک شبیهساز خارجی BMC برقرار میگردد. در صورت استفاده از این حالت، اکیداً توصیه میشود از گزینه chardev با عنوان "reconnect-ms=" استفاده کنید تا در صورت قطعی، اتصال به شبیهساز مجدداً برقرار شود. توجه داشته باشید که در صورت عدم دقت کافی، این موضوع میتواند یک مخاطره امنیتی ایجاد کند، چرا که این رابط توانایی ارسال پالسهای ریست، وقفه ناپذیرفتنی (NMI) و خاموش کردن ماشین مجازی (VM) را دارد. بهترین کار این است که QEMU به شبیهساز خارجی در حال اجرا روی یک درگاه امن روی localhost متصل شود تا نه شبیهساز و نه QEMU در معرض شبکه خارجی قرار نگیرند..sp برای جزئیات بیشتر درباره رابط خارجی، فایل "lanserv/README.vm" را در کتابخانه OpenIPMI ببینید.
- -device isa-ipmi-kcs,bmc=id[,ioport=val][,irq=val]
- یک رابط KCS IPMI روی گذرگاه ISA اضافه میکند. این کار در صورت لزوم مدخلهای متناظر ACPI و SMBIOS را نیز میافزاید.
- bmc=id
- شناسه BMC برای اتصال، یکی از ipmi-bmc-sim یا ipmi-bmc-extern بالا.
- ioport=val
- آدرس I/O رابط را تعریف میکند. مقدار پیشفرض برای KCS برابر 0xca0 است.
- irq=val
- وقفهای که باید استفاده شود را تعریف میکند. پیشفرض 5 است. برای غیرفعال کردن وقفهها، این مقدار را روی 0 تنظیم کنید.
- -device isa-ipmi-bt,bmc=id[,ioport=val][,irq=val]
- مانند رابط KCS است، اما یک رابط BT را تعریف میکند. پورت پیشفرض 0xe4 و وقفه پیشفرض 5 است.
- -device pci-ipmi-kcs,bmc=id
- یک رابط KCS IPMI روی گذرگاه PCI اضافه میکند.
- bmc=id
- شناسه BMC برای اتصال، یکی از ipmi-bmc-sim یا ipmi-bmc-extern بالا.
- -device pci-ipmi-bt,bmc=id
- مانند رابط KCS است، اما یک رابط BT را روی گذرگاه PCI تعریف میکند.
- -device intel-iommu[,option=...]
- این مورد فقط توسط -machine q35 پشتیبانی میشود، که شبیهسازی Intel VT-d را درون سیستمعامل مهمان فعال میکند. این گزینه از موارد زیر پشتیبانی میکند:
- intremap=on|off (پیشفرض: auto)
- قابلیت نگاشت مجدد وقفه (interrupt remapping) را فعال میکند. این ویژگی برای فعالسازی کامل x2apic لازم است. در حال حاضر فقط از حالتهای kvm kernel-irqchip با مقادیر off یا split پشتیبانی میکند، در حالی که kernel-irqchip کامل هنوز پشتیبانی نمیشود. مقدار پیشفرض "auto" است که توسط حالت kernel-irqchip تعیین میشود.
- caching-mode=on|off (پیشفرض: off)
- حالت کش را برای دستگاه شبیهسازیشده VT-d فعال میکند. هنگامی که caching-mode فعال باشد، هر نگاشت بافر DMA مهمان، یک ابطال IOTLB از درایور IOMMU مهمان به دستگاه vIOMMU به شکل همگام ایجاد میکند. این گزینه برای کارکرد -device vfio-pci با دستگاه VT-d الزامی است، زیرا دستگاههای اختصاصیافته از میزبان نیازمند راهاندازی نگاشت DMA روی میزبان پیش از شروع DMA مهمان هستند.
- device-iotlb=on|off (پیشفرض: off)
- قابلیت device-iotlb را برای دستگاه شبیهسازیشده VT-d فعال میکند. تا کنون virtio/vhost باید تنها استفادهکننده واقعی از این پارامتر باشد که همراه با پیکربندی ats=on برای دستگاه به کار میرود.
- aw-bits=39|48 (پیشفرض: 39)
- عرض آدرس فضای آدرس IOVA را مشخص میکند. فضای آدرس برای جدولهای صفحه IOMMU سهسطحی دارای ۳۹ بیت عرض، و برای جدولهای صفحه IOMMU چهارسطحی دارای ۴۸ بیت عرض است.
لطفاً برای سناریوهای عمومی شبیهسازی VT-d در QEMU به صفحه ویکی نیز مراجعه کنید: https://wiki.qemu.org/Features/VT-d.
- -device virtio-iommu-pci[,option=...]
- این ویژگی تنها توسط -machine q35 (x86_64) و -machine virt (ARM) پشتیبانی میشود. این گزینه از موارد زیر پشتیبانی میکند:
- granule=val (مقادیر ممکن عبارتند از 4k، 8k، 16k، 64k و host؛ پیشفرض: host)
- دانه یا گرانول پیشفرضی که قرار است توسط virtio-iommu ارائه شود را مشخص میکند. در صورت تنظیم روی host، اندازه گرانول با اندازه صفحه میزبان مطابقت خواهد داشت.
- aw-bits=val (مقداری بین 32 و 64، پیشفرض به ماشین بستگی دارد)
- عرض آدرس فضای آدرس IOVA را مشخص میکند.
- -device arm-smmuv3,primary-bus=id[,option=...]
- این ویژگی فقط توسط -machine virt (ARM) پشتیبانی میشود.
- primary-bus=id
- یا مجتمع ریشه پیشفرض (pcie.0) یا یک مجتمع ریشه مبتنی بر pxb-pcie را میپذیرد.
- accel=on|off (پیشفرض: off)
- به مهمان امکان میدهد از قابلیتهای SMMUv3 میزبان برای شتاببخشی بهره ببرد. فعالسازی accel گذرگاه SMMUv3 میزبان را در حالت تو در تو (nested mode) پیکربندی میکند تا از گذر مستقیم (passthrough) دستگاه vfio-pci پشتیبانی کند.
گزینههای زیر در صورت عدم تنظیم دستی، به طور پیشفرض روی auto قرار خواهند گرفت. هنگامی که accel=on باشد و این ویژگیها روی auto تنظیم شوند، مقدار آنها از طریق IOMMU_GET_HW_INFO از قابلیتهای SMMUv3 میزبان استخراج میشود. با فعال بودن accel=on، حداقل به یک دستگاه vfio-pci با اتصال سرد (cold-plugged) نیاز است؛ اگر در زمان راهاندازی ماشین چنین دستگاهی موجود نباشد، QEMU لغو خواهد شد (abort).
اگر accel=off باشد، مقادیر auto به پیشفرضهای غیر شتابیافته ذکرشده در زیر حل میشوند.
- ril=on|off|auto (پیشفرض: auto)
- پشتیبانی از ابطال بازهای (Range Invalidation)، که به درایور SMMUv3 اجازه میدهد ورودیهای TLB را برای بازهای از IOVAها به طور همزمان باطل کند، به جای اینکه برای هر صفحه دستورات جداگانهای صادر نماید. باید با پشتیبانی ابطال بازهای SMMUv3 در میزبان مطابقت داشته باشد.
- •
- با accel=off، مقدار auto به 'on' حل میشود.
- ats=on|off|auto (پیشفرض: auto)
- پشتیبانی از سرویسهای ترجمه آدرس (Address Translation Services)، که به دستگاههای PCIe امکان میدهد ترجمههای آدرس را در TLB محلی خود ذخیره (cache) کرده و تأخیر را کاهش دهند. SMMUv3 میزبان برای فعال کردن این ویژگی در vIOMMU باید از ATS پشتیبانی کند.
- •
- با accel=off، مقدار auto به 'off' حل میشود.
- oas=val|auto (مقادیر پشتیبانیشده 44 و 48 هستند. پیشفرض: auto)
- اندازه آدرس خروجی (Output Address Size) را بر حسب بیت تنظیم میکند. مقدار تنظیمشده در اینجا باید کمتر یا مساوی با OAS پشتیبانیشده توسط SMMUv3 میزبان باشد، تا آدرسهای فیزیکی میانی (IPA) مصرفشده توسط SMMU میزبان برای ترجمه مرحله ۲ (stage-2) از بیشترین اندازه IPA پشتیبانیشده در میزبان تجاوز نکند.
- •
- با accel=off، مقدار auto به 44 حل میشود.
- ssidsize=val|auto (مقداری بین 0 و 20. پیشفرض: auto)
- اندازه شناسه Substream را بر حسب بیت تنظیم میکند. در صورت تنظیم روی مقداری غیر صفر، قابلیت PASID به vIOMMU اعلان شده و موارد کاربرد شتابیافته مانند آدرسدهی مجازی مشترک (SVA) پشتیبانی میشوند.
- •
- با accel=off، مقدار auto به 0 حل میشود.
- cmdqv=on|off|auto (پیشفرض: auto)
- مجازیسازی سختافزاری صف دستورات (CMDQV) را برای صف دستورات SMMUv3 فعال میکند. در حال حاضر فقط پیادهسازی NVIDIA Tegra241 CMDQV پشتیبانی میشود.
- با accel=on، مقدار auto به این معنی است که مقدار به طور خودکار از SMMU میزبان استخراج میشود.
- با accel=off، مقدار auto به 'off' حل میشود.
- -device amd-iommu[,option=...]
- شبیهسازی واحد مدیریت حافظه ورودی/خروجی (IOMMU) نوع AMD-Vi را فعال میکند. فقط با -machine q35 در دسترس است و از گزینههای زیر پشتیبانی میکند:
- dma-remap=on|off (پیشفرض: off)
- پشتیبانی از ترجمه آدرس DMA و بررسی مجوزهای دسترسی برای مهمانانی که دستگاههای عبوری (passthrough) را با استفاده از قالب جدول صفحه ورودی/خروجی AMD v1 به دامنههای صفحهبندی متصل میکنند. این ویژگی امکان کارکرد صحیح -device vfio-pci,... را با مهمانی که از قابلیت نگاشت مجدد DMA در vIOMMU استفاده میکند فراهم میسازد.
- intremap=on|off (پیشفرض: auto)
- عملکرد عمومی IOMMU مبتنی بر x86 که توسط دستگاه amd-iommu پیادهسازی شده است. قابلیت نگاشت مجدد وقفه را در مهمانان فعال میکند که برای فعال کردن پشتیبانی از x2apic نیز الزامی است. در حال حاضر فقط با kernel-irqchip=off|split در دسترس است؛ هنگام استفاده از هر یک از این حالتها به طور خودکار فعال میشود و با kernel-irqchip=on غیرفعال میگردد.
- xtsup=on|off (پیشفرض: off)
- جدول نگاشت مجدد وقفه از حالت x2apic پشتیبانی میکند و استفاده مهمان از قالب ۱۲۸ بیتی IRTE با فیلد مقصد ۳۲ بیتی را ممکن میسازد. برای پشتیبانی از مسیریابی وقفهها به vCPUهایی با شناسه APIC بزرگتر از 0xff الزامی است. -name name نام ماشین مهمان را تنظیم میکند. این نام در عنوان پنجرهی SDL نمایش داده خواهد شد. این نام همچنین برای سرور VNC استفاده میشود. علاوه بر این، میتواند به صورت اختیاری نام فرآیند اصلی قابل مشاهده در لینوکس را تعیین کند. نامگذاری ریسههای مجزا نیز برای کمک به اشکالزدایی در لینوکس قابل فعالسازی است.
- -uuid uuid
- تنظیم UUID سیستم.
گزینههای دستگاه بلوکی (Block device options)
گزینههای مدیریت دستگاه بلوکی QEMU تاریخچهای طولانی دارند و همگام با گسترش مجموعه ویژگیها و پیچیدگی لایهی بلوکی، چندین بازنگری را پشت سر گذاشتهاند. بسیاری از راهنماهای برخط QEMU اغلب به گزینههای قدیمیتر و منسوخشده ارجاع میدهند که میتواند موجب سردرگمی شود.
صریحترین روش برای توصیف دیسکها، استفاده از ترکیب -device برای مشخص کردن دستگاه سختافزاری و -blockdev برای توصیف backend است. دستگاه تعیین میکند که سیستم مهمان چه چیزی را میبیند و backend توصیف میکند که QEMU دادهها را چگونه مدیریت مینماید. این تنها رابط با پایداری تضمینشده برای توصیف دستگاههای بلوکی است و به همین جهت برای ابزارهای مدیریتی و اسکریپتنویسی توصیه میشود.
گزینه -drive دستگاه و backend را در یک گزینه خط فرمان واحد ترکیب میکند که کاربرپسندتر است. با این حال هیچ تضمینی برای پایداری این رابط وجود ندارد، گرچه برخی از مدلهای بردهای قدیمی هنوز برای کار با فرمهای مدرن blockdev نیازمند بهروزرسانی هستند.
گزینههای قدیمیتر مانند -hda اساساً ماکروهایی هستند که به گزینههای -drive برای رابطهای گوناگون درایو بسط مییابند. فرمهای اولیه فرضیات بسیاری را از روزهایی که QEMU یک رایانه شخصی قدیمی (legacy PC) را شبیهسازی میکرد با خود به همراه دارند؛ استفاده از آنها برای پیکربندیهای مدرن توصیه نمیشود.
- -fda file
- -fdb file
- استفاده از file به عنوان تصویر فلاپی دیسک 0/1 (فصل Disk Images <#disk-images> را در System Emulation Users Guide ببینید).
- -hda file
- -hdb file
- -hdc file
- -hdd file
- استفاده از file به عنوان تصویر دیسک سخت 0، 1، 2 یا 3 در گذرگاه پیشفرض ماشین شبیهسازیشده (برای نمونه این در بیشتر ماشینهای x86 گذرگاه IDE است، اما در سایر معماریهای مقصد میتواند SCSI، virtio یا چیز دیگری باشد). همچنین فصل Disk Images <#disk-images> را در System Emulation Users Guide ببینید.
- -cdrom file
- استفاده از file به عنوان تصویر CD-ROM در گذرگاه پیشفرض ماشین شبیهسازیشده (که در x86 برابر با IDE1 master است، بنابراین نمیتوانید به طور همزمان از -hdc و -cdrom در آنجا استفاده کنید). در سیستمهایی که پشتیبانی میکنند، میتوانید با قرار دادن /dev/cdrom به عنوان نام فایل، از CD-ROM میزبان استفاده کنید.
- -blockdev option[,option[,option[,...]]]
- تعریف یک
گره درایور
بلوکی جدید.
برخی از
گزینهها
برای همه
درایورهای
بلوکی
اعمال
میشوند،
در حالی که
گزینههای
دیگر تنها
برای یک
درایور
بلوکی خاص
پذیرفته
میشوند.
برای
فهرستی از
گزینههای
عمومی و
گزینههای
رایجترین
درایورهای
بلوکی، به
موارد زیر
مراجعه
کنید.
گزینههایی که انتظار ارجاع به گره دیگری را دارند (مانند file) را میتوان به دو روش تعیین کرد. یا نام گره یک گره از قبل موجود را مشخص میکنید (file=node-name)، یا یک گره جدید را به صورت درونخطی تعریف کرده و گزینههای گره ارجاعشده را پس از یک نقطه اضافه مینمایید (file.filename=path,file.aio=native).
یک گره درایور بلوکی ایجاد شده با -blockdev میتواند با مشخص کردن نام گره آن برای ویژگی drive در یک آرگومان -device که یک دستگاه بلوکی را تعریف میکند، برای یک دستگاه مهمان استفاده شود.
- driver
- درایور بلوکی مورد استفاده برای گره دادهشده را مشخص میکند.
- node-name
- این گزینه
نام گره
درایور
بلوکی را
تعیین
میکند که
بعداً از
طریق آن
ارجاع داده
خواهد شد.
نام باید
یکتا باشد،
یعنی نباید
با نام یک
گره درایور
بلوکی دیگر
یا (در صورت
استفاده از
-drive) با شناسه
یک درایو
یکسان باشد.
اگر هیچ نام گرهی مشخص نشود، به طور خودکار تولید میشود. نام گره تولید شده برای قابل پیشبینی بودن طراحی نشده است و بین دفعات اجرای QEMU تغییر میکند. برای بالاترین سطح، باید یک نام گره صریح مشخص شود.
- read-only
- باز کردن
گره به صورت
فقطخواندنی.
تلاشهای
نوشتن
سیستم
مهمان با
شکست مواجه
خواهد شد.
توجه داشته باشید که برخی از درایورهای بلوکی، چه به طور کلی یا در پیکربندیهای خاص، تنها از دسترسی فقطخواندنی پشتیبانی میکنند. در این حالت، مقدار پیشفرض read-only=off کار نمیکند و گزینه باید به طور صریح مشخص شود.
- auto-read-only
- اگر auto-read-only=on تنظیم شود، ممکن است QEMU حتی در صورت درخواست read-only=off به حالت فقطخواندنی بازگردد، یا حتی در صورت نیاز بین حالتها جابجا شود؛ مثلاً بسته به اینکه آیا فایل تصویر قابل نوشتن است یا کاربری با دسترسی نوشتن به گره متصل است یا خیر.
- force-share
- سیستم قفل
کردن تصویر
در QEMU را با
وادار کردن
گره به
استفاده از
دسترسی
اشتراکی
ضعیفتر
برای
مجوزهایی
که معمولاً
درخواست
دسترسی
انحصاری
میکردند،
نادیده
میگیرد.
هنگامی که
احتمال باز
بودن
همزمان یک
فایل توسط
چندین
نمونه وجود
دارد (چه
این
فراخوانی QEMU
نمونه اول
باشد یا
دوم)، هر دو
نمونه باید
دسترسی
اشتراکی را
مجاز کنند
تا نمونه
دوم در باز
کردن فایل
موفق شود.
فعال کردن force-share=on نیازمند read-only=on است.
- cache.direct
- با تنظیم cache.direct=on میتوان از حافظه نهان صفحه (page cache) میزبان اجتناب کرد. این کار تلاش میکند تا ورودی/خروجی دیسک را مستقیماً به حافظه مهمان انجام دهد. QEMU ممکن است همچنان یک کپی داخلی از دادهها را انجام دهد.
- cache.no-flush
- در صورتی که یکپارچگی دادهها در هنگام خرابیهای سیستم میزبان برایتان اهمیتی ندارد، میتوانید از cache.no-flush=on استفاده کنید. این گزینه به QEMU اعلام میکند که هرگز نیازی به نوشتن دادهها بر روی دیسک ندارد و در عوض میتواند موارد را در حافظه نهان نگه دارد. در صورت بروز هرگونه مشکل، مانند قطع برق میزبان، قطع تصادفی اتصال فضای ذخیرهسازی و غیره، تصویر دیسک شما به احتمال بسیار زیاد غیرقابل استفاده خواهد شد.
- discard=discard
- مقدار discard یکی از گزینههای "ignore" (یا "off") یا "unmap" (یا "on") است و مشخص میکند که آیا درخواستهای discard (که به عنوان trim یا unmap نیز شناخته میشوند) نادیده گرفته شوند یا به سیستم فایل ارسال گردند. برخی از انواع ماشینها ممکن است از درخواستهای discard پشتیبانی نکنند.
- detect-zeroes=detect-zeroes
- مقدار detect-zeroes میتواند "off"، "on" یا "unmap" باشد و تبدیل خودکار عملیات سادهی نوشتن صفر توسط سیستمعامل به دستورات بهینهشده نوشتن صفر مخصوص درایور را فعال میکند. در صورتی که discard روی "unmap" تنظیم شده باشد، حتی میتوانید "unmap" را انتخاب کنید تا امکان تبدیل نوشتن صفر به عملیات unmap فراهم شود.
- Driver-specific options for file
- این درایور بلوکی در سطح پروتکل برای دسترسی به فایلهای معمولی است.
- filename
- مسیر فایل تصویر در سیستم فایل محلی
- aio
- مشخصکننده backend مربوط به AIO (شامل threads/native/io_uring، پیشفرض: threads)
- locking
- مشخص میکند که آیا فایل تصویر با قفلهای Linux OFD / POSIX محافظت میشود یا خیر. حالت پیشفرض در صورت موجود بودن، استفاده از رابط Linux Open File Descriptor است، در غیر این صورت هیچ قفلی اعمال نمیشود. (شامل auto/on/off، پیشفرض: auto)
مثال:
-blockdev driver=file,node-name=disk,filename=disk.img
- file
- ارجاع به یا تعریف گره راهانداز بلوکی منبع داده (به عنوان مثال یک گره راهانداز file)
مثال ۱:
-blockdev driver=file,node-name=disk_file,filename=disk.img -blockdev driver=raw,node-name=disk,file=disk_file
مثال ۲:
-blockdev driver=raw,node-name=disk,file.driver=file,file.filename=disk.img
- گزینههای ویژهٔ راهانداز برای qcow2
- این راهانداز بلوکی قالب تصویر برای تصاویر qcow2 است. معمولاً در بالای یک راهانداز بلوکی در سطح پروتکل مانند file قرار میگیرد.
- file
- ارجاع به یا تعریف گره راهانداز بلوکی منبع داده (به عنوان مثال یک گره راهانداز file)
- backing
- ارجاع به یا تعریف دستگاه بلوکی فایل پشتیبان (backing file) (پیشفرض از فایل تصویر گرفته میشود). فرستادن مقدار null در اینجا به منظور غیرفعال کردن فایل پشتیبانِ پیشفرض مجاز است.
- lazy-refcounts
- تعیین فعال بودن ویژگی شمارندههای مرجع تاخیری (lazy refcounts) (به صورت on/off؛ پیشفرض از فایل تصویر گرفته میشود)
- cache-size
- حداکثر اندازهٔ کل حافظههای پنهان جدول L2 و بلوک refcount بر حسب بایت (پیشفرض: مجموع l2-cache-size و refcount-cache-size)
- l2-cache-size
- حداکثر اندازهٔ حافظهٔ پنهان جدول L2 بر حسب بایت (پیشفرض: در صورت مشخص نشدن cache-size - مقدار 32M در پلتفرمهای لینوکس و 8M در پلتفرمهای غیر لینوکسی؛ در غیر این صورت، تا حد امکان بزرگ در محدودهٔ cache-size، ضمن در نظر گرفتن اندازهٔ درخواستی یا کمینهٔ حافظهٔ پنهان refcount)
- refcount-cache-size
- حداکثر اندازهٔ حافظهٔ پنهان بلوک refcount بر حسب بایت (پیشفرض: ۴ برابر اندازهٔ کلاستر؛ یا اگر cache-size مشخص شده باشد، بخشی از آن که برای حافظهٔ پنهان L2 استفاده نشده است)
- cache-clean-interval
- پاکسازی مدخلهای استفادهنشده در حافظههای پنهان L2 و refcount. این بازه زمانی بر حسب ثانیه است. مقدار پیشفرض در پلتفرمهای پشتیبانیشده ۶۰۰ و در پلتفرمهای دیگر ۰ است. تنظیم آن روی ۰ این قابلیت را غیرفعال میکند.
- pass-discard-request
- اینکه آیا درخواستهای discard به دستگاه qcow2 باید به منبع داده هدایت شوند یا خیر (on/off؛ پیشفرض: در صورت مشخص شدن discard=unmap مقدار on، در غیر این صورت off)
- pass-discard-snapshot
- اینکه آیا هنگام آزادسازی کلاسترها در فایل qcow2 بر اثر عملیات تصویر لحظهای (مانند حذف یک snapshot)، درخواستهای discard برای منبع داده ارسال شوند یا خیر (on/off؛ پیشفرض: on)
- pass-discard-other
- اینکه آیا در سایر مواردی که یک کلاستر آزاد میشود، درخواستهای discard برای منبع داده صادر شوند یا خیر (on/off؛ پیشفرض: off)
- discard-no-unref
- در صورت فعال بودن، کلاسترهای داده هنگامی که دیگر استفاده نمیشوند (مثلاً دور ریخته میشوند (discard) یا به کلاسترهای صفر تبدیل میشوند) همچنان از پیش تخصیصیافته باقی میمانند. طبق معمول، اینکه دادههای قدیمی دور ریخته شوند یا در سطح پروتکل (یعنی در فایل تصویر) نگهداری گردند، به تنظیمات گزینهٔ pass-discard-request بستگی دارد. نگهداشتن کلاسترها در وضعیت از پیش تخصیصیافته از قطعهقطعه شدن (fragmentation) فایل qcow2 جلوگیری میکند که در غیر این صورت بر اثر آزادسازی و تخصیص مجدد بعدی رخ میداد. گذشته از افت احتمالی کارایی، چنین قطعهقطعه شدنی میتواند به افزایش تخصیص کلاسترها پس از انتهای فایل تصویر منجر شود که نتیجهٔ آن رشد طول فیزیکی فایل تصویر بسیار فراتر از اندازهٔ دیسک مهمان (guest) خواهد بود. اگر اندازهٔ فایل تصویر اهمیت دارد (مثلاً هنگام ذخیرهٔ مستقیم تصاویر qcow2 روی دستگاههای بلوکی)، باید فعال کردن این گزینه را در نظر بگیرید.
- overlap-check
- تعیین اینکه کدام بررسیهای همپوشانی برای نوشتن روی تصویر انجام شوند (none/constant/cached/all؛ پیشفرض: cached). برای جزئیات یا کنترل دقیقتر به مستندات QAPI مربوط به blockdev-add مراجعه کنید.
مثال ۱:
-blockdev driver=file,node-name=my_file,filename=/tmp/disk.qcow2 -blockdev driver=qcow2,node-name=hda,file=my_file,overlap-check=none,cache-size=16777216
مثال ۲:
-blockdev driver=qcow2,node-name=disk,file.driver=http,file.filename=http://example.com/image.qcow2
- گزینههای ویژهٔ سایر راهاندازها
- لطفاً به مستندات QAPI مربوط به دستور QMP به نام blockdev-add مراجعه کنید.
- -drive option[,option[,option[,...]]]
- تعریف یک
درایو جدید.
این کار
شامل ایجاد
یک گره
راهانداز
بلوکی (سمت
backend) و همچنین
یک دستگاه
مهمان (guest device)
است، و
عمدتاً یک
میانبُر
برای تعریف
گزینههای
متناظر -blockdev و
-device محسوب
میشود.
دستور -drive تمام گزینههایی را که توسط -blockdev پذیرفته میشوند قبول میکند. علاوه بر این، گزینههای زیر را میشناسد:
- file=file
- این گزینه
مشخص
میکند چه
تصویر
دیسکی (فصل Disk
Images <#disk-images> در System Emulation Users Guide
را ببینید)
برای این
درایو
استفاده
شود. اگر
نام فایل
شامل
ویرگول
است، باید
آن را دو
بار تکرار
کنید (برای
مثال، "file=my,,file"
برای
استفاده از
فایل "my,file").
فایلهای خاص مانند دستگاههای iSCSI را میتوان با استفاده از URLهای ویژهٔ پروتکل مشخص کرد. برای اطلاعات بیشتر بخش مربوط به "Device URL Syntax" را ببینید.
- if=interface
- این گزینه مشخص میکند که درایو به کدام نوع رابط متصل است. انواع موجود عبارتند از: ide، scsi، sd، mtd، floppy، pflash، virtio، none.
- bus=bus,unit=unit
- این گزینهها با تعیین شماره گذرگاه (bus) و شناسهٔ واحد (unit id)، محل اتصال درایو را مشخص میکنند.
- index=index
- این گزینه با استفاده از یک نمایه (index) در فهرست اتصالات موجود از یک نوع رابط مشخص، محل اتصال درایو را تعیین میکند.
- media=media
- این گزینه نوع رسانه را مشخص میکند: disk یا cdrom.
- snapshot=snapshot
- مقدار snapshot
برابر "on" یا
"off" است و
حالت snapshot را
برای درایو
مشخصشده
کنترل
میکند (-snapshot
را ببینید)..TP
cache=cache مقدار cache
یکی از
مقادیر "none"،
"writeback"، "unsafe"،
"directsync" یا "writethrough"
است و نحوه
استفاده از
کَش میزبان
برای
دسترسی به
دادههای
بلوکی را
کنترل
میکند. این
یک
میانبُر
است که
گزینههای
cache.direct و cache.no-flush
(مانند آنچه
در -blockdev است) و
علاوه بر آن
cache.writeback را
تنظیم
میکند که
مقداری
پیشفرض
برای گزینه
write-cache
دستگاههای
بلوکی
مهمان
(مانند آنچه
در -device است)
فراهم
میآورد.
این
حالتها با
تنظیمات
زیر مطابقت
دارند:
cache.writeback cache.direct cache.no-flush writeback on off off none on on off writethrough off off off directsync off on off unsafe on off on حالت پیشفرض cache=writeback است.
- aio=aio
- مقدار aio یکی از گزینههای "threads"، "native" یا "io_uring" است و میان ورودی/خروجی (I/O) دیسک مبتنی بر pthread، Linux AIO محلی، یا رابط برنامهنویسی Linux io_uring انتخاب میکند.
- format=format
- مشخص میکند که به جای تشخیص خودکار قالب، کدام قالب دیسک استفاده شود. میتوان برای جلوگیری از تفسیر سرایند قالب غیرقابلاعتماد، از format=raw استفاده کرد.
- werror=action,rerror=action
- مشخص میکند که هنگام بروز خطاهای نوشتن و خواندن چه کنشی انجام شود. کنشهای معتبر عبارتند از: "ignore" (نادیده گرفتن خطا و تلاش برای ادامه کار)، "stop" (مکث QEMU)، "report" (گزارش خطا به مهمان)، "enospc" (مکث QEMU تنها در صورت پر بودن دیسک میزبان؛ در غیر این صورت گزارش خطا به مهمان). تنظیمات پیشفرض werror=enospc و rerror=report است.
- copy-on-read=copy-on-read
- گزینه copy-on-read به صورت "on" یا "off" است و تعیین میکند که آیا بخشهای خواندهشده از فایل پشتیبان (backing file) در فایل ایمیج کپی شوند یا خیر.
- bps=b,bps_rd=r,bps_wr=w
- محدودیتهای نرخ پهنای باند را بر حسب بایت بر ثانیه، چه برای همه انواع درخواستها و چه منحصراً برای خواندن یا نوشتن، مشخص میکند. مقادیر کوچک میتوانند منجر به اتمام مهلت زمانی (timeout) یا قفل شدن سیستم مهمان شوند. حداقل مقدار امن برای دیسکها 2 MiB/s است.
- bps_max=bm,bps_rd_max=rm,bps_wr_max=wm
- جهشها (bursts) را بر حسب بایت بر ثانیه، چه برای همه انواع درخواستها یا فقط برای خواندن یا نوشتن مشخص میکند. جهشها به ورودی/خروجی مهمان اجازه میدهند تا به طور موقت بالاتر از حد مجاز اوج بگیرد.
- iops=i,iops_rd=r,iops_wr=w
- محدودیتهای نرخ درخواست را بر حسب تعداد درخواست در ثانیه، چه برای همه انواع درخواستها یا فقط برای خواندن یا نوشتن مشخص میکند.
- iops_max=bm,iops_rd_max=rm,iops_wr_max=wm
- جهشها را بر حسب تعداد درخواست در ثانیه، چه برای همه انواع درخواستها یا فقط برای خواندن یا نوشتن مشخص میکند. جهشها به ورودی/خروجی مهمان اجازه میدهند تا به طور موقت فراتر از حد مجاز اوج بگیرد.
- iops_size=is
- باعث میشود که هر is بایت از یک درخواست، به عنوان یک درخواست جدید برای محدودسازی iops محاسبه شود. از این گزینه برای جلوگیری از دور زدن محدودیتهای iops توسط مهمان از طریق ارسال درخواستهای کمتر اما بزرگتر استفاده کنید.
- group=g
- پیوستن به یک گروه سهمیهبندی محدودسازی با نام g. تمام درایوهایی که عضو یک گروه هستند، محاسبات سهمیه آنها با یکدیگر انجام میشود. از این گزینه برای جلوگیری از دور زدن محدودیتها توسط مهمان با استفاده از چندین دیسک کوچک به جای یک دیسک بزرگ استفاده کنید.
به طور پیشفرض، حالت cache.writeback=on استفاده میشود. این حالت به محض قرار گرفتن دادهها در page cache میزبان، پایان نوشتن داده را اعلام میکند. تا زمانی که سیستمعامل مهمان مطمئن شود کَشهای دیسک را در مواقع لزوم به درستی تخلیه (flush) میکند، این وضعیت امن است. اگر سیستمعامل مهمان کَشهای ناپایدار نوشتن دیسک را به درستی مدیریت نکند و سیستم میزبان از کار بیفتد یا برق آن قطع شود، ممکن است دادههای مهمان آسیب ببینند.
برای چنین سیستمهای مهمانی، باید استفاده از cache.writeback=off را در نظر بگیرید. این به آن معناست که از page cache میزبان برای خواندن و نوشتن دادهها استفاده میشود، اما اعلان اتمام نوشتن تنها زمانی به مهمان ارسال خواهد شد که QEMU مطمئن شود هر نوشتن به طور کامل روی دیسک تخلیه (flush) شده است. توجه داشته باشید که این موضوع تأثیر چشمگیری بر کارایی دارد.
هنگام استفاده از گزینه -snapshot، همواره از کَشینگ ناامن (unsafe) استفاده میشود.
گزینه Copy-on-read از دسترسیهای مکرر به بخشهای یکسان در فایل پشتیبان جلوگیری میکند و هنگامی که فایل پشتیبان روی یک شبکه کُند قرار دارد، بسیار مفید است. به طور پیشفرض copy-on-read خاموش (off) است.
به جای -cdrom میتوانید از این دستور استفاده کنید:
qemu-system-x86_64 -drive file=file,index=2,media=cdrom
به جای -hda، -hdb، -hdc، -hdd میتوانید از دستورات زیر استفاده کنید:
qemu-system-x86_64 -drive file=file,index=0,media=disk qemu-system-x86_64 -drive file=file,index=1,media=disk qemu-system-x86_64 -drive file=file,index=2,media=disk qemu-system-x86_64 -drive file=file,index=3,media=disk
میتوانید یک ایمیج را با استفاده از توصیفکنندههای فایل (fd) از پیش بازشده از یک fd set باز کنید:
qemu-system-x86_64 \ -add-fd fd=3,set=2,opaque="rdwr:/path/to/file" \ -add-fd fd=4,set=2,opaque="rdonly:/path/to/file" \ -drive file=/dev/fdset/2,index=0,media=disk
qemu-system-x86_64 -drive file=file,if=ide,index=1,media=cdrom
اگر آرگومان "file=" را مشخص نکنید، یک درایو خالی تعریف میکنید:
qemu-system-x86_64 -drive if=ide,index=1,media=cdrom
بهجای -fda و -fdb، میتوانید از موارد زیر استفاده کنید:
qemu-system-x86_64 -drive file=file,index=0,if=floppy qemu-system-x86_64 -drive file=file,index=1,if=floppy
بهطور پیشفرض، رابط "ide" است و شاخص (index) بهطور خودکار افزایش مییابد:
qemu-system-x86_64 -drive file=a -drive file=b
به این صورت تفسیر میشود:
qemu-system-x86_64 -hda a -hdb b
- -mtdblock file
- استفاده از file بهعنوان ایمیج حافظه فلش روی بُرد (on-board).
- -sd file
- استفاده از file بهعنوان ایمیج کارت SecureDigital.
- -snapshot
- نوشتن روی
فایلهای
موقت
بهجای
فایلهای
ایمیج دیسک.
در این
حالت،
دادهها
روی ایمیج
خام دیسک
مورد
استفاده
شما
بازنویسی
نمیشوند.
با این حال
میتوانید
با فشردن C-a s
بازنویسی
را اجبار
کنید (فصل Disk Images
<#disk-images> در
راهنمای
کاربران
شبیهسازی
سیستم را
ببینید).
هشدار:
- -fsdev local,id=id,path=path,security_model=security_model [,writeout=writeout][,readonly=on][,fmode=fmode][,dmode=dmode][,max_xattr=max] [,throttling.option=value[,throttling.option=value[,...]]]
- -fsdev synth,id=id[,readonly=on][,max_xattr=max]
- تعریف یک دستگاه سیستمفایل جدید. گزینههای معتبر عبارتند از:
- local
- دسترسیها به سیستمفایل توسط QEMU انجام میشود.
- synth
- سیستمفایل ساختگی (synthetic)، که تنها توسط QTests استفاده میشود.
- id=id
- شناسه این دستگاه را مشخص میکند.
- path=path
- مسیر برونسپاری (export) را برای دستگاه سیستمفایل مشخص میکند. فایلهای زیر این مسیر در دسترس کلاینت 9p در سیستمعامل مهمان قرار خواهند گرفت.
- security_model=security_model
- مدل امنیتی مورد استفاده برای این مسیر برونسپاری را مشخص میکند. مدلهای امنیتی پشتیبانیشده عبارتند از "passthrough"، "mapped-xattr"، "mapped-file" و "none". در مدل امنیتی "passthrough"، فایلها با همان اعتبارسنجیهایی (credentials) ذخیره میشوند که در سیستم مهمان ایجاد شدهاند. این امر مستلزم اجرای QEMU با دسترسی ریشه (root) است. در مدل امنیتی "mapped-xattr"، برخی از ویژگیهای فایل مانند uid، gid، بیتهای حالت (mode bits) و مقصد پیوند بهصورت ویژگیهای فایل (xattr) ذخیره میشوند. برای "mapped-file" این ویژگیها در دایرکتوری پنهان .virtfs_metadata ذخیره میشوند. دایرکتوریهای برونسپاریشده توسط این مدل امنیتی نمیتوانند با سایر ابزارهای یونیکس تعامل داشته باشند. مدل امنیتی "none" مشابه passthrough است، با این تفاوت که سرور در صورت عدم موفقیت در تنظیم ویژگیهای فایل مانند مالکیت، خطایی گزارش نمیکند. مدل امنیتی تنها برای fsdriver از نوع local الزامی است.
- writeout=writeout
- این یک آرگومان اختیاری است. تنها مقدار پشتیبانیشده "immediate" است. این بدان معناست که از کش صفحه (page cache) میزبان برای خواندن و نوشتن دادهها استفاده خواهد شد، اما اعلان نوشتن تنها زمانی به مهمان ارسال میشود که ذخیرهسازی دادهها توسط زیرسیستم ذخیرهسازی گزارش شده باشد.
- readonly=on
- برونسپاری اشتراک 9p را بهصورت یک اتصال (mount) فقطخواندنی برای مهمانها فعال میکند. بهطور پیشفرض، دسترسی خواندن و نوشتن (read-write) اعطا میشود.
- fmode=fmode
- حالت (mode) پیشفرض را برای فایلهای تازه ایجادشده روی میزبان مشخص میکند. فقط با مدلهای امنیتی "mapped-xattr" و "mapped-file" کار میکند.
- dmode=dmode
- حالت (mode) پیشفرض را برای دایرکتوریهای تازه ایجادشده روی میزبان مشخص میکند. فقط با مدلهای امنیتی "mapped-xattr" و "mapped-file" کار میکند.
- throttling.bps-total=b,throttling.bps-read=r,throttling.bps-write=w
- محدودیتهای کنترل نرخ پهنای باند (throttling) را بر حسب بایت بر ثانیه، برای همه انواع درخواستها یا فقط برای خواندن یا نوشتن مشخص میکند.
- throttling.bps-total-max=bm,bps-read-max=rm,bps-write-max=wm
- جهشها (bursts) را بر حسب بایت بر ثانیه، برای همه انواع درخواستها یا فقط برای خواندن یا نوشتن مشخص میکند. جهشها به I/O سیستم مهمان اجازه میدهند تا بهطور موقت از حد مجاز فراتر رود.
- throttling.iops-total=i,throttling.iops-read=r, throttling.iops-write=w
- محدودیتهای نرخ درخواست را بر حسب درخواست بر ثانیه، برای همه انواع درخواستها یا فقط برای خواندن یا نوشتن مشخص میکند.
- throttling.iops-total-max=im,throttling.iops-read-max=irm, throttling.iops-write-max=iwm
- جهشها (bursts) را بر حسب درخواست بر ثانیه، برای همه انواع درخواستها یا فقط برای خواندن یا نوشتن مشخص میکند. جهشها به I/O سیستم مهمان اجازه میدهند تا بهطور موقت از حد مجاز فراتر رود.
- throttling.iops-size=is
- باعث میشود به ازای هر is بایت از یک درخواست، برای اهداف محدودسازی نرخ iops یک درخواست جدید محاسبه شود.
- max_xattr=max
- حداکثر تعداد FIDهای همروند xattr مجاز برای این برونسپاری را مشخص میکند. مقدار پیشفرض 1024 است. تنظیم روی 0 به معنای مجاز بودن تعداد نامحدود FIDهای xattr خواهد بود. این محدودیت با تعیین سقف برای تعداد FIDهای همزمان xattr، از حملات مصرف کامل حافظه میزبان (memory exhaustion) جلوگیری میکند.
گزینه -fsdev به همراه راهانداز دستگاه (driver) با نام "virtio-9p-..." استفاده میشود.
- -device virtio-9p-type,fsdev=id,mount_tag=mount_tag
- گزینههای راهانداز virtio-9p-... عبارتند از:
- type
- گونه مورد استفاده را مشخص میکند. مقادیر پشتیبانیشده بسته به نوع ماشین، "pci"، "ccw" یا "device" هستند.
- fsdev=id
- مقدار id مشخصشده به همراه گزینه -fsdev را تعیین میکند.
- mount_tag=mount_tag
- نام تگ مورد استفاده توسط مهمان برای متصل کردن (mount) این نقطه برونسپاری را مشخص میکند.
- -virtfs local,path=path,mount_tag=mount_tag ,security_model=security_model[,writeout=writeout][,readonly=on] [,fmode=fmode][,dmode=dmode][,multidevs=multidevs][,max_xattr=max].TP
- -virtfs synth,mount_tag=mount_tag[,max_xattr=max]
دستگاه
سیستمفایل
مجازی
جدیدی را
تعریف کرده
و با
استفاده از
virtio-9p-device (معروف
به 9pfs) در
دسترس
سیستمعامل
مهمان قرار
میدهد؛
این کار
بدین
معناست که
یک
دایرکتوری
مشخص روی
میزبان با
استفاده از
پروتکل
شبکهای 9P
برای
ارتباط
میان
میزبان و
مهمانها،
بهصورت یک
سیستمفایل
عبوری (pass-through)
مستقیماً
برای مهمان
قابل
دسترسی
میشود و
حتی در صورت
تمایل،
میتواند
بهطور
همزمان
میان چندین
مهمان به
اشتراک
گذاشته شود.
توجه داشته باشید که -virtfs در واقع تنها یک میانبُر کاربردی برای فرم تعمیمیافتهٔ آن یعنی -fsdev -device virtio-9p-pci است.
فرم کلی گزینههای سیستمفایل عبوری عبارت است از:
- local
- دسترسیها به سیستمفایل توسط QEMU انجام میشود.
- synth
- سیستمفایل ساختگی (synthetic)، که تنها توسط QTests استفاده میشود.
- id=id
- شناسهٔ دستگاه سیستمفایل را مشخص میکند.
- path=path
- مسیر اشتراکگذاری (export) را برای دستگاه سیستمفایل مشخص میکند. فایلهای زیر این مسیر در دسترس کلاینت 9p روی سیستم مهمان خواهند بود.
- security_model=security_model
- مدل امنیتی مورد استفاده برای این مسیر اشتراکگذاری را مشخص میکند. مدلهای امنیتی پشتیبانیشده عبارتند از "passthrough"، "mapped-xattr"، "mapped-file" و "none". در مدل امنیتی "passthrough"، فایلها با همان اطلاعات هویتی و اعتباری (credentials) که در مهمان ایجاد شدهاند ذخیره میشوند. این کار مستلزم اجرای QEMU بهعنوان کاربر ریشه (root) است. در مدل امنیتی "mapped-xattr"، برخی از ویژگیهای فایل مانند uid، gid، بیتهای حالت (mode bits) و مقصد پیوند بهعنوان ویژگیهای فایل ذخیره میشوند. در مورد "mapped-file" این ویژگیها در دایرکتوری پنهان .virtfs_metadata ذخیره میگردند. دایرکتوریهای به اشتراک گذاشتهشده با این مدل امنیتی نمیتوانند با سایر ابزارهای یونیکس تعامل داشته باشند. مدل امنیتی "none" مشابه passthrough است، با این تفاوت که در صورت عدم موفقیت در تنظیم ویژگیهای فایل مانند مالکیت، سرور خطایی گزارش نمیکند. مشخص کردن مدل امنیتی تنها برای fsdriver محلی (local) اجباری است.
- writeout=writeout
- این یک آرگومان اختیاری است. تنها مقدار پشتیبانیشده "immediate" است. بدین معنی که از حافظهٔ موقت صفحه (page cache) میزبان برای خواندن و نوشتن دادهها استفاده میشود، اما اعلان نوشتن تنها زمانی به مهمان ارسال خواهد شد که زیرسیستم ذخیرهسازی گزارش دهد دادهها نوشته شدهاند.
- readonly=on
- اشتراکگذاری 9p را بهصورت نقطهٔ اتصال فقطخواندنی (readonly mount) برای مهمانها فعال میکند. بهطور پیشفرض، دسترسی خواندن و نوشتن اعطا میشود.
- fmode=fmode
- حالت دسترسی پیشفرض (mode) را برای فایلهای تازه ایجادشده روی میزبان مشخص میکند. تنها با مدلهای امنیتی "mapped-xattr" و "mapped-file" کار میکند.
- dmode=dmode
- حالت دسترسی پیشفرض (mode) را برای دایرکتوریهای تازه ایجادشده روی میزبان مشخص میکند. تنها با مدلهای امنیتی "mapped-xattr" و "mapped-file" کار میکند.
- mount_tag=mount_tag
- نام برچسبی (tag) را مشخص میکند که مهمان برای سوار کردن (mount) این نقطه اشتراک استفاده خواهد کرد.
- max_xattr=max
- حداکثر تعداد FIDهای همزمان xattr مجاز برای این اشتراکگذاری را مشخص میکند. مقدار پیشفرض 1024 است. مقدار 0 را برای مجاز ساختن تعداد نامحدودی از FIDهای xattr تنظیم کنید. این محدودیت با ایجاد سقف برای تعداد FIDهای همزمان xattr، از حملات تخلیهٔ حافظهٔ میزبان (memory exhaustion) جلوگیری میکند.
- multidevs=remap|forbid|warn
- نحوهٔ
برخورد با
چندین
دستگاه را
که در همان
اشتراک 9p به
اشتراک
گذاشته
شدهاند
مشخص
میکند تا
از تداخل
شناسههای
فایل (file ID collisions) در
مهمان
جلوگیری
شود.
رفتارهای
پشتیبانیشده
عبارتند از
"remap"
(پیشفرض)،
"forbid" یا "warn".
remap : احتمال اینکه بیش از یک دستگاه با اشتراک 9p یکسان به اشتراک گذاشته شده باشد را در نظر میگیرد. بنابراین، شمارههای inode از میزبان به گونهای برای مهمان بازنگاشت میشوند که از تداخل شناسههای فایل در مهمان جلوگیری شود. بازنگاشت inodeها در چنین مواردی لازم است زیرا شناسههای اصلی دستگاه از میزبان هرگز به مهمان ارسال و آشکار نمیشوند. در عوض، تمام فایلهای به اشتراک گذاشته شده با virtfs همیشه شناسهٔ دستگاه یکسانی در مهمان دارند. بنابراین، دو فایل با شمارههای inode یکسان اما از دستگاههای در واقع متفاوت روی میزبان، در غیر این صورت باعث تداخل شناسههای فایل و در نتیجه رفتارهای نادرست بالقوه شدید در مهمان میشوند.
warn : ساختار virtfs 9p انتظار دارد تنها یک دستگاه با همان اشتراک به اشتراک گذاشته شود. با این حال اگر بیش از یک دستگاه از طریق همان اشتراک 9p به اشتراک گذاشته شده و قابل دسترس باشد، تنها یک پیام هشدار (یکبار) توسط qemu در سمت میزبان ثبت میشود. در این حالت هیچ اقدام دیگری برای جلوگیری از تداخل شناسههای فایل در مهمان انجام نمیشود. بنابراین این مسئله میتواند منجر به رفتارهای نادرست شدیدی مانند دسترسی به فایلهای اشتباه و خرابی دادهها در درخت به اشتراک گذاشته شده شود.
forbid : همانند "warn" فرض میکند که فقط یک دستگاه در همان اشتراک 9p به اشتراک گذاشته شده است، با این حال نه تنها یک پیام هشدار ثبت میکند، بلکه دسترسی به دستگاههای اضافی را در مهمان نیز رد میکند. البته توجه داشته باشید که "forbid" در حال حاضر تمام عملیاتهای ممکن دسترسی به فایل را مسدود نمیکند (بهعنوان مثال، ()readdir همچنان ورودیهایی از دستگاههای دیگر را بازمیگرداند).
- -iscsi
- پیکربندی پارامترهای نشست iSCSI.
- -usb
- فعالسازی شبیهسازی USB در انواع ماشینهایی که کنترلکنندهٔ میزبان USB داخلی (on-board) دارند (اگر بهطور پیشفرض فعال نباشد). توجه داشته باشید که کنترلکنندههای میزبان USB داخلی ممکن است از USB 3.0 پشتیبانی نکنند. در این صورت، در ماشینهای دارای PCI میتوان بهجای آن از -device qemu-xhci استفاده کرد.
- -usbdevice devname
- افزودن دستگاه USB با نام devname، و در صورت امکان و لزوم فعالسازی یک کنترلکنندهٔ USB داخلی (دقیقاً مانند روشی که از طریق -machine usb=on انجام میشود). توجه داشته باشید که این گزینه اصولاً تنها جهت راحتی کاربر در نظر گرفته شده است. کنترل دقیقتر را میتوان با انتخاب یک کنترلکنندهٔ میزبان USB (در صورت نیاز) و دستگاه USB مورد نظر از طریق گزینهٔ -device بهدست آورد. برای مثال، بهجای استفاده از -usbdevice mouse میتوان از -device qemu-xhci -device usb-mouse برای اتصال ماوس USB به یک کنترلکنندهٔ USB 3.0 استفاده کرد (حداقل در ماشینهایی که از PCI پشتیبانی میکنند و هنوز کنترلکنندهٔ USB بهطور پیشفرض در آنها فعال نشده است). برای جزئیات بیشتر، فصل مربوط به اتصال دستگاههای USB را در <#connecting-usb-devices> در راهنمای کاربران شبیهسازی سیستم (System Emulation Users Guide) ببینید. دستگاههای ممکن برای devname عبارتند از:
- braille
- دستگاه بریل (Braille). این گزینه از BrlAPI برای نمایش خروجی بریل روی یک دستگاه واقعی یا مجازی استفاده میکند (یعنی بهطور خودکار در کنار دستگاه USB با نام usb-braille، یک chardev متناظر با نام braille نیز میسازد).
- keyboard
- صفحهکلید استاندارد USB. در صورت فعال بودن، صفحهکلید PS/2 را (در صورت وجود) جایگزین خواهد کرد.
- mouse
- ماوس مجازی. در صورت فعال شدن، شبیهسازی ماوس PS/2 را جایگزین خواهد کرد.
- tablet
- دستگاه اشارهگر که از مختصات مطلق استفاده میکند (مانند صفحهنمایش لمسی). این بدان معناست که QEMU میتواند موقعیت ماوس را بدون نیاز به تسخیر (grab) اشارهگر گزارش دهد. همچنین در صورت فعال شدن، شبیهسازی ماوس PS/2 را جایگزین میکند.
- wacom-tablet
- تبلت USB واکام (Wacom PenPartner).
گزینههای نمایشگر
- -display type
- انتخاب نوع
نمایشگر
جهت
استفاده.
این کار
ممکن است بر
انتخاب
پسدانهٔ (backend)
صوتی
پیشفرض
نیز تأثیر
بگذارد.
از -display help برای فهرست کردن انواع نمایشگر موجود استفاده کنید. مقادیر معتبر برای type عبارتند از:
- spice-app[,gl=on|off]
- اجرای QEMU بهعنوان سرور Spice و راهاندازی برنامهٔ کلاینت پیشفرض Spice. سرور Spice کنسولهای سریال و مانیتورهای QEMU را تغییر مسیر (redirect) میدهد. (از نسخهٔ 4.0)
- dbus
- برونریزی
نمایشگر
روی
رابطهای D-Bus.
(از نسخهٔ 7.0)
اگر هیچ پسدانهٔ صوتی مشخص نشده باشد و پسدانهٔ نمایشگر dbus تعیین شده باشد، پسدانهٔ صوتی dbus بهطور پیشفرض استفاده میشود.
اتصال با نام "org.qemu" ثبت میشود (و در صورتی که این نام قبلاً در تصاحب دیگری باشد، در صف قرار میگیرد).
addr=<dbusaddr> : آدرس گذرگاه D-Bus برای اتصال.
p2p=yes|no : استفاده از اتصال همتا به همتا (peer-to-peer)، پذیرفتهشده از طریق add_client در QMP.
gl=on|off|core|es : استفاده از OpenGL برای رندر (رابط D-Bus بافر فریمها را با توصیفکنندههای فایل DMABUF به اشتراک میگذارد).
- sdl
- نمایش
خروجی
ویدیو از
طریق SDL
(معمولاً در
یک پنجرهٔ
گرافیکی
جداگانه؛
سایر
حالتها را
در مستندات
SDL ببینید).
پارامترهای
معتبر
عبارتند از:
grab-mod=<mods> : برای انتخاب کلیدهای تبدیلگر (modifier) بهمنظور تغییر وضعیت تسخیر ماوس در ترکیب با کلید "g" استفاده میشود. <mods> میتواند lshift-lctrl-lalt یا rctrl باشد.
gl=on|off|core|es : استفاده از OpenGL برای نمایش
show-cursor=on|off : اجبار به نمایش مکاننمای ماوس
window-close=on|off : امکان خروج از qemu با دکمهٔ بستن پنجره
- gtk
- نمایش خروجی ویدیو در یک پنجرهٔ GTK. این رابط منوهای کشویی و سایر عناصر رابط کاربری را برای پیکربندی و کنترل ماشین مجازی در زمان اجرا فراهم میکند. پارامترهای معتبر عبارتند از:
- clipboard=on|off (فعالسازی اشتراکگذاری کلیپبورد میان میزبان و مهمان،)
- پیشفرض "off" است
full-screen=on|off : شروع در حالت تمامصفحه
gl=on|off : استفاده از OpenGL برای نمایش
grab-on-hover=on|off : تسخیر ورودی صفحهکلید هنگام قرار گرفتن ماوس روی پنجره
- show-tabs=on|off (نمایش نوار زبانهها برای جابهجایی میان)
- رابطهای گرافیکی مختلف (مانند VGA و دستگاههای نویسهای کنسول مجازی) بهطور پیشفرض.
show-cursor=on|off : اجبار به نمایش مکاننمای ماوس
window-close=on|off : امکان خروج از qemu با دکمهٔ بستن پنجره
show-menubar=on|off : نمایش نوار منوی پنجرهٔ اصلی، پیشفرض "on" است
- zoom-to-fit=on|off (گسترش خروجی تصویر به اندازه پنجره،)
- پیشفرض "off" است
- curses[,charset=<encoding>]
- نمایش خروجی ویدیو از طریق curses. برای مدلهای دستگاه گرافیکی که از حالت متنی پشتیبانی میکنند، QEMU میتواند این خروجی را با استفاده از رابط curses/ncurses نمایش دهد. هنگامی که دستگاه گرافیکی در حالت گرافیکی است یا اگر دستگاه از حالت متنی پشتیبانی نکند، چیزی نمایش داده نمیشود. معمولاً فقط مدلهای دستگاه VGA از حالت متنی پشتیبانی میکنند. مجموعه نویسههای (charset) فونت استفادهشده توسط مهمان را میتوان با گزینهٔ charset مشخص کرد، مثلاً charset=CP850 برای رمزگذاری IBM CP850. مقدار پیشفرض CP437 است.
- cocoa
- نمایش خروجی ویدیو در یک پنجرهٔ Cocoa. فقط مخصوص Mac. این رابط منوهای کشویی و سایر عناصر رابط کاربری را برای پیکربندی و کنترل ماشین مجازی در زمان اجرا فراهم میکند. پارامترهای معتبر عبارتند از:
- full-grab=on|off (تسخیر تمام کلیدهای فشردهشده، شامل کلیدهای ترکیبی سیستم.)
- این کار نیازمند مجوزهای دسترسیپذیری (accessibility) است، زیرا رویدادهای کلید را بهطور سراسری تسخیر میکند. (پیشفرض: off) به https://support.apple.com/en-in/guide/mac-help/mh32356/mac مراجعه کنید.
- swap-opt-cmd=on|off (تعویض کلیدهای Option و Command تا کدهای کلید آنها)
- با موقعیتشان روی صفحهکلیدهای غیر Mac مطابقت پیدا کند و بتوانید از Meta/Super و Alt در جایی که انتظار دارید استفاده کنید. (پیشفرض: off)
show-cursor=on|off : اجبار به نمایش مکاننمای ماوس
left-command-key=on|off : غیرفعالسازی هدایت کلید فرمان (Command) چپ به سیستم میزبان
full-screen=on|off : شروع در حالت تمامصفحه
- zoom-to-fit=on|off (گسترش خروجی تصویر به اندازه پنجره،)
- پیشفرض "off" است
- egl-headless[,rendernode=<file>]
- برونسپاری تمام عملیات OpenGL به یک دستگاه DRI محلی. برای هرگونه نمایش گرافیکی، این نمایشگر باید با نمایشگرهای VNC یا SPICE جفت شود.
- vnc=<display>
- راهاندازی سرور VNC روی نمایشگر <display>
- none
- عدم نمایش خروجی ویدیو. سیستم مهمان همچنان یک کارت گرافیک شبیهسازیشده را خواهد دید، اما خروجی آن به کاربر QEMU نمایش داده نخواهد شد. این گزینه با گزینهٔ -nographic تفاوت دارد زیرا فقط روی خروجی ویدیو تأثیر میگذارد؛ -nographic مقصد دادههای درگاههای سریال و موازی را نیز تغییر میدهد. -nographic به طور معمول، اگر QEMU با پشتیبانی از پنجره گرافیکی کامپایل شده باشد، خروجیهایی مانند گرافیک مهمان، کنسول مهمان، و مانیتور QEMU را در یک پنجره نمایش میدهد. با این گزینه، میتوانید خروجی گرافیکی را به طور کامل غیرفعال کنید تا QEMU یک برنامه خط فرمانی ساده باشد. درگاه سریال شبیهسازیشده به کنسول هدایت شده و با مانیتور تسهیم (mux) میشود (مگر اینکه به طور صریح به جای دیگری هدایت شده باشد). بنابراین، همچنان میتوانید از QEMU برای اشکالزدایی هسته لینوکس به همراه یک کنسول سریال استفاده کنید. برای دریافت راهنما در مورد جابهجایی میان کنسول و مانیتور از C-a h استفاده کنید.
- -spice option[,option[,...]]
- پروتکل میزکار از راه دور spice را فعال میکند. گزینههای معتبر عبارتند از:
- port=<nr>
- تنظیم درگاه TCP که spice برای کانالهای متن ساده (plaintext) روی آن گوش میدهد.
- addr=<addr>
- تنظیم آدرس IP که spice روی آن گوش میدهد. پیشفرض هر آدرسی است.
- ipv4=on|off; ipv6=on|off; unix=on|off
- اجبار به استفاده از نسخه مشخصشده IP.
- password-secret=<secret-id>
- شناسه شیء secret حاوی گذرواژهای که برای احراز هویت به آن نیاز دارید را تنظیم میکند.
- sasl=on|off
- کلاینت را ملزم میکند تا برای احراز هویت با spice از SASL استفاده کند. انتخاب دقیق روش احراز هویتِ مورد استفاده، از طریق فایل پیکربندی SASL سیستم یا کاربر برای سرویس 'qemu' کنترل میشود. این فایل معمولاً در /etc/sasl2/qemu.conf یافت میشود. در صورت اجرای QEMU به عنوان یک کاربر بدون امتیاز، میتوان از متغیر محیطی SASL_CONF_PATH استفاده کرد تا مکانهای جایگزین را برای پیکربندی سرویس جستجو کند. اگرچه برخی از روشهای احراز هویت SASL میتوانند رمزنگاری دادهها را نیز فراهم کنند (مانند GSSAPI)، توصیه میشود که SASL همواره با تنظیمات 'tls' و 'x509' ترکیب شود تا استفاده از SSL و گواهیهای کارساز فعال گردد. این کار رمزنگاری دادهها را تضمین کرده و از به خطر افتادن اطلاعات احراز هویت جلوگیری میکند.
- disable-ticketing=on|off
- به کلاینت اجازه میدهد بدون احراز هویت متصل شود.
- disable-copy-paste=on|off
- غیرفعال کردن رونوشت و جایگذاری (copy paste) بین کلاینت و مهمان.
- disable-agent-file-xfer=on|off
- غیرفعال کردن انتقال فایل مبتنی بر spice-vdagent بین کلاینت و مهمان.
- tls-port=<nr>
- تنظیم درگاه TCP که spice برای کانالهای رمزگذاریشده روی آن گوش میدهد.
- x509-dir=<dir>
- تنظیم دایرکتوری فایلهای x509. نام فایلهای یکسانی مانند -vnc $display,x509=$dir را انتظار دارد.
- x509-key-file=<file>; x509-key-password=<file>; x509-cert-file=<file>; x509-cacert-file=<file>; x509-dh-key-file=<file>
- نام فایلهای x509 را میتوان به صورت جداگانه نیز پیکربندی کرد.
- tls-ciphers=<list>
- مشخص کردن اینکه از کدام رمزها (ciphers) استفاده شود.
- tls-channel=main|display|cursor|inputs|record|playback; plaintext-channel=main|display|cursor|inputs|record|playback
- اجبار کانال مشخصشده به استفاده با یا بدون رمزنگاری TLS. این گزینهها را میتوان چندین بار برای پیکربندی کانالهای متعدد مشخص کرد. از نام ویژه "default" میتوان برای تنظیم حالت پیشفرض استفاده کرد. برای کانالهایی که صراحتاً به یک حالت وادار نشدهاند، کلاینت spice مجاز است بسته به تمایل خود tls یا plaintext را برگزیند.
- image-compression=auto_glz|auto_lz|quic|glz|lz|off
- پیکربندی فشردهسازی تصویر (بدون اتلاف). پیشفرض auto_glz است.
- jpeg-wan-compression=auto|never|always; zlib-glz-wan-compression=auto|never|always
- پیکربندی فشردهسازی تصویر wan (با اتلاف برای پیوندهای کند). پیشفرض auto است.
- streaming-video=off|all|filter
- پیکربندی تشخیص جریان ویدیو. پیشفرض off است.
- agent-mouse=on|off
- فعال/غیرفعال کردن ارسال رویدادهای ماوس از طریق vdagent. پیشفرض on است.
- playback-compression=on|off
- فعال/غیرفعال کردن فشردهسازی جریان صوتی (با استفاده از celt 0.5.1). پیشفرض on است.
- seamless-migration=on|off
- فعال/غیرفعال کردن مهاجرت یکپارچه (seamless migration) در spice. پیشفرض off است.
- video-codec=<codec>
- تعیین کدک ترجیحی که کارساز Spice باید با رمزگذار Gstreamer استفاده کند. این گزینه تنها زمانی کاربرد دارد که gl=on مشخص شده باشد. اگر هیچ کدکی تعیین نشود، کدک gstreamer:h264 به عنوان پیشفرض استفاده خواهد شد. و برای حالتی که gl=off باشد، کدک پیشفرضِ مورد استفاده توسط کارساز Spice تعیین میشود.
- max-refresh-rate=rate
- تعیین حداکثر نرخ نوسازی (یا FPS) که درخواستهای رمزگذاری باید با آن به کارساز Spice ارسال شوند. پیشفرض 30 است.
- gl=on|off
- فعال/غیرفعال کردن بافتار OpenGL. پیشفرض off است.
- rendernode=<file>
- گره رندر DRM برای رندرینگ OpenGL. اگر مشخص نشود، اولین مورد دردسترس انتخاب خواهد شد. (از نسخه 2.9)
- -vga type
- انتخاب نوع کارت VGA برای شبیهسازی. مقادیر معتبر برای type عبارتند از:
- cirrus
- کارت گرافیک Cirrus Logic GD5446. تمام نسخههای Windows با شروع از Windows 95 باید این کارت گرافیک را شناخته و از آن استفاده کنند. برای عملکرد بهینه، از عمق رنگ ۱۶ بیتی در سیستمعامل مهمان و میزبان استفاده کنید. (این کارت پیش از QEMU 2.2 پیشفرض بود)
- std
- کارت VGA استاندارد با افزونههای Bochs VBE. اگر سیستمعامل مهمان شما از افزونههای VESA 2.0 VBE پشتیبانی میکند (مانند Windows XP) و میخواهید از حالتهای تفکیکپذیری بالا (>= 1280x1024x16) استفاده کنید، باید از این گزینه استفاده کنید. (این کارت از QEMU 2.2 پیشفرض است)
- vmware
- آداپتور سازگار با VMWare SVGA-II. اگر کارساز XFree86/XOrg به اندازه کافی جدید یا مهمان Windows دارای درایور این کارت دارید، از آن استفاده کنید.
- qxl
- کارت گرافیک شبهمجازی (paravirtual) QXL. با VGA سازگار است (شامل پشتیبانی از VESA 2.0 VBE). با این حال هنگام نصب بودن درایورهای مهمان qxl بهترین عملکرد را دارد. انتخاب توصیهشده هنگام استفاده از پروتکل spice.
- tcx
- (فقط sun4m) فریمبافر Sun TCX. این فریمبافر پیشفرض برای ماشینهای sun4m است و هر دو عمق رنگ ۸ بیتی و ۲۴ بیتی را در تفکیکپذیری ثابت 1024x768 ارائه میدهد.
- cg3
- (فقط sun4m) فریمبافر Sun cgthree. این یک فریمبافر ساده ۸ بیتی برای ماشینهای sun4m است که در هر دو تفکیکپذیری 1024x768 (در OpenBIOS) و 1152x900 (در OBP) در دسترس بوده و برای کاربرانی در نظر گرفته شده که مایل به اجرای نسخههای قدیمیتر Solaris هستند.
- virtio
- کارت گرافیک Virtio VGA.
- none
- غیرفعال کردن کارت VGA.
- -full-screen
- شروع در حالت تمامصفحه.
- -g widthxheight[xdepth]
- تنظیم
تفکیکپذیری
گرافیکی
اولیه و عمق
رنگ (فقط PPC و SPARC).
برای PPC مقدار پیشفرض 800x600x32 است.
برای SPARC با دستگاه گرافیکی TCX، مقدار پیشفرض 1024x768x8 به همراه گزینه 1024x768x24 است. برای cgthree، مقدار پیشفرض 1024x768x8 به همراه گزینه 1152x900x8 برای کاربرانی است که مایل به استفاده از OBP هستند.
- -vnc display[,option[,option[,...]]]
- به طور معمول، اگر QEMU با پشتیبانی از پنجره گرافیکی کامپایل شده باشد، خروجیهایی مانند گرافیک مهمان، کنسول مهمان، و مانیتور QEMU را در یک پنجره نمایش میدهد. با این گزینه، میتوانید کاری کنید که QEMU روی نمایشگر VNC گوش فرا دهد و تصویر نمایشگر VGA را روی نشست VNC هدایت کند. هنگام استفاده از این گزینه، فعال کردن دستگاه تبلت usb بسیار مفید است (گزینه -device usb-tablet). هنگام استفاده از نمایشگر VNC، در صورتی که از en-us استفاده نمیکنید، باید از پارامتر -k برای تنظیم چیدمان صفحهکلید استفاده کنید. نحو معتبر برای display عبارت است از:
- host:d
- اتصالات TCP تنها از مبدأ host روی نمایشگر d مجاز خواهند بود. طبق قرارداد، پورت TCP برابر با 5900+d است. بهصورت اختیاری، host میتواند حذف شود که در این حالت کارساز اتصالات را از هر میزبانی خواهد پذیرفت.
- unix:path
- اتصالات روی سوکتهای دامنهٔ یونیکس (UNIX domain sockets) مجاز خواهند بود که در آن path مسیر سوکت یونیکس برای گوش دادن به اتصالات ورودی است.
- none
- پروتکل VNC مقداردهی اولیه میشود اما راهاندازی نمیگردد. دستور change در مانیتور میتواند بعداً برای راهاندازی کارساز VNC استفاده شود.
به دنبال مقدار نمایشگر، میتواند یک یا چند پرچمِ گزینه که با ویرگول جدا شدهاند قرار گیرد. گزینههای معتبر عبارتند از:
- reverse=on|off
- اتصال به یک کلاینت گوشبهزنگ VNC از طریق یک اتصال «معکوس» ("reverse"). کلاینت توسط display مشخص میشود. برای اتصالات شبکهٔ معکوس (host:d,``reverse``)، آرگومان d شمارهٔ یک پورت TCP است، نه شمارهٔ نمایشگر.
- websocket=on|off
- یک پورت
شنود TCP
اضافی
اختصاص
داده شده به
اتصالات
وبسوکت VNC
باز میکند.
اگر گزینهٔ
websocket به
تنهایی
داده شود،
پورت
وبسوکت
برابر با 5700+display
خواهد بود.
یک پورت
جایگزین را
میتوان با
نحو websocket=port
مشخص کرد.
اگر host مشخص شده باشد، اتصالات تنها از این میزبان مجاز خواهند بود. میتوان نشانی شنود وبسوکت را بهصورت مستقل با استفاده از نحو websocket=host:port کنترل کرد.
وبسوکت میتواند روی سوکت دامنهٔ یونیکس مجاز شود، با استفاده از نحو websocket=unix:path، که در آن path مسیر سوکت یونیکس برای گوش دادن به اتصالات است.
چنانچه هیچ اعتبارنامهٔ TLS ارائه نشود، اتصال وبسوکت در حالت رمزگذارینشده اجرا میشود. در صورت ارائهٔ اعتبارنامههای TLS، اتصال وبسوکت نیازمند اتصالات رمزگذاریشدهٔ کلاینت خواهد بود.
- password=on|off
- الزام به
استفاده از
احراز هویت
مبتنی بر
گذرواژه
برای
اتصالات
کلاینت.
گذرواژه باید بهطور جداگانه با استفاده از دستور set_password در مانیتور QEMU به نشانی <#qemu-monitor> تنظیم شود. نحو تغییر گذرواژه به این صورت است: set_password <protocol> <password> که در آن <protocol> میتواند "vnc" یا "spice" باشد.
اگر مایلید انقضای گذرواژهٔ <protocol> را تغییر دهید، باید از دستور expire_password <protocol> <expiration-time> استفاده کنید که در آن زمان انقضا میتواند یکی از گزینههای زیر باشد: now، never، +seconds یا زمان یونیکس انقضا؛ برای نمونه 60+ برای انقضای گذرواژه در ۶۰ ثانیه بعد، یا 1335196800 برای منقضی شدن گذرواژه در تاریخ "Mon Apr 23 12:00:00 EDT 2012" (زمان یونیکس متناظر با این تاریخ و ساعت).
همچنین میتوانید از کلیدواژههای "now" یا "never" برای زمان انقضا استفاده کنید تا گذرواژهٔ <protocol> بلافاصله یا هیچوقت منقضی نشود.
- password-secret=<secret-id>
- الزام به استفاده از احراز هویت مبتنی بر گذرواژه برای اتصالات کلاینت، با استفاده از گذرواژهٔ ارائهشده توسط شیء secret که با secret-id مشخص میشود.
- tls-creds=ID
- شناسهٔ (ID) مجموعهای از اعتبارنامههای TLS را برای ایمنسازی کارساز VNC ارائه میدهد. این اعتبارنامهها هم بر سوکت معمولی کارساز VNC و هم بر سوکت وبسوکت (در صورت فعال بودن) اعمال خواهند شد. تنظیم اعتبارنامههای TLS باعث میشود سوکت کارساز VNC سازوکار احراز هویت VeNCrypt را فعال کند. این اعتبارنامهها باید پیشتر با استفاده از آرگومان -object tls-creds ایجاد شده باشند.
- tls-authz=ID
- شناسهٔ شیء مجازشماری QAuthZ را ارائه میدهد که نام متمایز (distinguished name) گواهی x509 کلاینت در برابر آن اعتبارسنجی خواهد شد. این شیء تنها در زمان استفاده حلوفصل میشود، بنابراین میتوان در حین فعال بودن کارساز VNC آن را درجا حذف و دوباره ایجاد کرد. در صورت عدم وجود، پیشفرض آن رد دسترسی خواهد بود.
- sasl=on|off
- الزام کلاینت به استفاده از SASL برای احراز هویت در کارساز VNC. انتخاب دقیق روش احراز هویت مورد استفاده از طریق فایل پیکربندی SASL سیستم/کاربر برای سرویس 'qemu' کنترل میشود. این فایل معمولاً در /etc/sasl2/qemu.conf قرار دارد. در صورت اجرای QEMU در قالب یک کاربر غیرممتاز، میتوان از متغیر محیطی SASL_CONF_PATH برای جستجوی مکانهای جایگزین فایل پیکربندی سرویس استفاده کرد. اگرچه برخی روشهای احراز هویت SASL میتوانند رمزگذاری داده را نیز فراهم کنند (مانند GSSAPI)، توصیه میشود همیشه SASL با تنظیمات 'tls' و 'x509' ترکیب شود تا امکان استفاده از SSL و گواهیهای کارساز فراهم گردد. این امر رمزگذاری داده را تضمین کرده و از افشای اطلاعات احراز هویت جلوگیری میکند. برای جزئیات مربوط به استفاده از احراز هویت SASL، بخش امنیت VNC <#vnc-security> را در راهنمای کاربران شبیهسازی سیستم ببینید.
- sasl-authz=ID
- شناسهٔ شیء مجازشماری QAuthZ را ارائه میدهد که نامکاربری SASL کلاینت در برابر آن اعتبارسنجی خواهد شد. این شیء تنها در زمان استفاده حلوفصل میشود، بنابراین میتوان آن را در زمان فعال بودن کارساز VNC درجا حذف و مجدداً ایجاد کرد. در صورت عدم وجود، پیشفرض آن رد دسترسی خواهد بود.
- acl=on|off
- روش قدیمی
برای
فعالسازی
مجازشماری
کلاینتها
در برابر
نام متمایز
x509 و
نامکاربری
SASL. این روش
منجر به
ایجاد دو
شیء authz-list با
شناسههای
vnc.username و vnc.x509dname
میشود.
قوانین
مربوط به
این اشیاء
باید با
دستورهای HMP ACL
پیکربندی
شوند.
این گزینه منسوخ شده است و دیگر نباید استفاده شود. گزینههای جدید sasl-authz و tls-authz جایگزین آن هستند.
- lossy=on|off
- فعالسازی روشهای فشردهسازی با اتلاف (مانند gradient، JPEG و غیره). در صورت فعال بودن این گزینه، کلاینت VNC ممکن است بسته به تنظیمات کدگذاری خود، بهروزرسانیهای بافرفریم را با اتلاف دریافت کند. فعال کردن این گزینه میتواند پهنای باند زیادی را به بهای کاهش کیفیت ذخیره کند.
- non-adaptive=on|off
- غیرفعالسازی کدگذاریهای تطبیقی. کدگذاریهای تطبیقی بهطور پیشفرض فعال هستند. یک کدگذاری تطبیقی تلاش میکند نواحی با بهروزرسانی مکرر در صفحه را شناسایی کرده و بهروزرسانیهای این نواحی را با استفاده از یک کدگذاری با اتلاف (مانند JPEG) ارسال کند. این ویژگی هنگام پخش ویدیوها برای صرفهجویی در پهنای باند بسیار مفید است. غیرفعال کردن کدگذاریهای تطبیقی رفتار ایستای اولیهٔ کدگذاریهایی مانند Tight را بازیابی میکند.
- تنظیم خطمشی همرسانی نمایشگر. مقدار 'allow-exclusive' به کلاینتها امکان میدهد تا درخواست دسترسی انحصاری کنند. طبق پیشنهاد مشخصات rfb، این سازوکار با قطع سایر اتصالات پیادهسازی میشود. اتصال همزمان چند کلاینت نیازمند آن است که همهٔ کلاینتها یک نشست اشتراکی درخواست کنند (سوئیچ -shared در vncviewer). این مقدار پیشفرض است. مقدار 'force-shared' دسترسی انحصاری کلاینت را غیرفعال میکند. برای نشستهای دسکتاپ اشتراکی که نمیخواهید فراموش کردن تعیین -shared توسط یک کاربر باعث قطع اتصال دیگران شود، مفید است. مقدار 'ignore' پرچم shared را کاملاً نادیده میگیرد و به همه اجازه میدهد بدون قید و شرط متصل شوند. این رفتار با مشخصات rfb همخوانی ندارد اما رفتار سنتی QEMU است.
- key-delay-ms
- تنظیم میزان تأخیر صفحهکلید برای رویدادهای فشردن (key down) و رها کردن (key up) کلید بر حسب میلیثانیه. مقدار پیشفرض 10 است. صفحهکلیدها دستگاههایی با پهنای باند کم هستند، بنابراین این کندسازی میتواند به دستگاه و سیستمعامل مهمان کمک کند تا هماهنگ باقی بمانند و در صورت دریافت دستهای رویدادها، آنها را از دست ندهند. دلایل محتمل برای دریافت دستهای رویدادها شامل اتصالات شبکهٔ ناپایدار یا اسکریپتهای آزمون خودکار است.
- audiodev=audiodev
- استفاده از audiodev مشخصشده در زمانی که کلاینت VNC درخواست انتقال صدا دارد. هنگام عدم استفاده از آرگومان -audiodev، این گزینه باید حذف شود؛ در غیر این صورت باید وجود داشته باشد و یک audiodev معتبر را مشخص کند.
- power-control=on|off
- به کلاینت راه دور اجازه میدهد تا درخواستهای کنترل برق نظیر shutdown، reboot یا reset را ارسال کند.
- -win2k-hack
- هنگام نصب Windows 2000 برای جلوگیری از باگ پر شدن دیسک از این گزینه استفاده کنید. پس از نصب Windows 2000، دیگر نیازی به این گزینه نخواهید داشت (این گزینه انتقالهای IDE را کُند میکند). مترادفی برای -global ide-device.win2k-install-hack=on است.
- -no-fd-bootchk
- بررسی امضای راهاندازی (boot signature) فلاپیدیسکها را در BIOS غیرفعال میکند. ممکن است برای راهاندازی از فلاپیدیسکهای قدیمی مورد نیاز باشد. مترادفی برای -m fd-bootchk=off است.
- -acpitable [sig=str][,rev=n][,oem_id=str][,oem_table_id=str][,oem_rev=n] [,asl_compiler_id=str][,asl_compiler_rev=n][,data=file1[:file2]...]
- افزودن جدول ACPI با فیلدهای سرایند و محتوای مشخصشده از فایلهای تعیینشده. برای file=، تمام جدول ACPI از فایلهای مشخصشده گرفته میشود، شامل همهٔ سرایندهای ACPI (که احتمالاً توسط گزینههای دیگر بازنویسی میشوند). برای data=، تنها بخش دادههای جدول استفاده میشود و تمامی اطلاعات سرایند در خط فرمان مشخص میشوند. اگر یک جدول SLIC به QEMU ارائه شود، فیلدهای oem_id و oem_table_id مربوط به SLIC همان موارد را در RSDT و FADT (که به عنوان FACP نیز شناخته میشود) بازنویسی میکنند تا اطمینان حاصل شود که فیلدها با الزامات مشخصات Microsoft SLIC و مشخصات ACPI مطابقت دارند.
- -smbios file=binary
- بارگذاری مدخل SMBIOS از یک فایل باینری.
- -smbios type=0[,vendor=str][,version=str][,date=str][,release=%d.%d][,uefi=on|off]
- تعیین فیلدهای SMBIOS type 0
- -smbios type=1[,manufacturer=str][,product=str][,version=str][,serial=str][,uuid=uuid][,sku=str][,family=str]
- تعیین فیلدهای SMBIOS type 1
- -smbios type=2[,manufacturer=str][,product=str][,version=str][,serial=str][,asset=str][,location=str]
- تعیین فیلدهای SMBIOS type 2
- -smbios type=3[,manufacturer=str][,version=str][,serial=str][,asset=str][,sku=str]
- تعیین فیلدهای SMBIOS type 3
- -smbios type=4[,sock_pfx=str][,manufacturer=str][,version=str][,serial=str][,asset=str][,part=str][,processor-family=%d][,processor-id=%d]
- تعیین فیلدهای SMBIOS type 4
- -smbios type=9[,slot_designation=str][,slot_type=%d][,slot_data_bus_width=%d][,current_usage=%d][,slot_length=%d][,slot_id=%d][,slot_characteristics1=%d][,slot_characteristics12=%d][,pci_device=str]
- تعیین فیلدهای SMBIOS type 9
- -smbios type=11[,value=str][,path=filename]
- تعیین
فیلدهای SMBIOS type 11
این آرگومان میتواند چندین بار تکرار شود، و مقادیر به همان ترتیبی که تجزیه میشوند اضافه خواهند شد. به برنامههایی که قصد استفاده از دادههای رشتههای OEM را دارند توصیه میشود از نام برنامهٔ خود به عنوان پیشوند برای رشتهٔ مقدار استفاده کنند. این کار ارسال همزمان اطلاعات را برای چندین برنامه تسهیل میکند.
نحو value=str دادههای رشتهای را به صورت درونخطی فراهم میکند، در حالی که نحو path=filename دادهها را از یک فایل روی دیسک بارگذاری میکند. توجه داشته باشید که فایل مجاز نیست حاوی هیچ بایت NUL باشد.
هر دو گزینهٔ value و path میتوانند چندین بار تکرار شوند و به همان ترتیبی که ظاهر میشوند به جدول SMBIOS اضافه خواهند شد.
توجه داشته باشید که در معماری x86، اندازهٔ کل تمام جداول SMBIOS به ۶۵۵۳۵ بایت محدود است. بنابراین دادههای رشتههای OEM برای ارسال مقادیر حجیم داده به سیستمعامل مهمان مناسب نیستند. در عوض، باید به عنوان نشانگری استفاده شوند تا به سیستمعامل مهمان اطلاع دهند دادههای واقعی را در کجا بیابد، برای مثال با مشخص کردن شناسهٔ سریال یک دستگاه بلوکی.
یک مثال از ارسال سه رشته:
-smbios type=11,value=cloud-init:ds=nocloud-net;s=http://10.10.0.1:8000/,\
value=anaconda:method=http://dl.fedoraproject.org/pub/fedora/linux/releases/25/x86_64/os,\
path=/some/file/with/oemstringsdata.txt
در سیستمعامل مهمان این مقدار با دستور dmidecode قابل مشاهده است:
$ dmidecode -t 11
Handle 0x0E00, DMI type 11, 5 bytes
OEM Strings
String 1: cloud-init:ds=nocloud-net;s=http://10.10.0.1:8000
String 2: anaconda:method=http://dl.fedoraproject.org/pub/fedora/linux/releases/25/x86_64/os
String 3: myapp:some extra data
- -smbios type=17[,loc_pfx=str][,bank=str][,manufacturer=str][,serial=str][,asset=str][,part=str][,speed=%d]
- تعیین فیلدهای SMBIOS type 17
- -smbios type=41[,designation=str][,kind=str][,instance=%d][,pcidev=str]
- تعیین
فیلدهای SMBIOS type 41
این آرگومان میتواند چندین بار تکرار شود. کاربرد اصلی آن این است که اجازه میدهد رابطهای شبکه در لینوکس به صورت enoX ایجاد شوند (که در آن X شمارهٔ نمونه است)، به جای آنکه نام آنها به موقعیت رابط روی گذرگاه PCI وابسته باشد.
نمونهای از کاربرد:
-netdev user,id=internet \ -device virtio-net-pci,mac=50:54:00:00:00:42,netdev=internet,id=internet-dev \ -smbios type=41,designation='Onboard LAN',instance=1,kind=ethernet,pcidev=internet-dev
در سیستمعامل مهمان، دستگاه باید به صورت eno1 ظاهر شود:
..parsed-literal:
$ ip -brief l lo UNKNOWN 00:00:00:00:00:00 <LOOPBACK,UP,LOWER_UP> eno1 UP 50:54:00:00:00:42 <BROADCAST,MULTICAST,UP,LOWER_UP>
در حال حاضر، دستگاه PCI باید به گذرگاه ریشه (root bus) متصل باشد.
- -nic [tap|passt|bridge|user|l2tpv3|vde|netmap|af-xdp|vhost-user|socket][,...][,mac=macaddr][,model=mn]
- این گزینه
یک میانبر
برای
پیکربندی
همزمان
سختافزار
کارت شبکه (NIC)
داخلی
(پیشفرض)
مهمان و Backend
شبکه
میزبان در
یک مرحله
است.
گزینههای
Backend میزبان
مشابه
گزینههای
متناظر -netdev
در ادامه
هستند. مدل NIC
مهمان را
میتوان با
model=modelname تنظیم
کرد. برای
فهرست کردن
نوع
دستگاههای
موجود از
model=help استفاده
کنید. آدرس
سختافزاری
MAC را
میتوان با
mac=macaddr مشخص
کرد.
دو مثال زیر دقیقاً عملکرد یکسانی دارند و نشان میدهند چگونه میتوان از -nic برای کوتاهتر کردن طول خط فرمان استفاده کرد:
qemu-system-x86_64 -netdev user,id=n1,ipv6=off -device e1000,netdev=n1,mac=52:54:98:76:54:32 qemu-system-x86_64 -nic user,ipv6=off,model=e1000,mac=52:54:98:76:54:32
- -nic none
- مشخص میکند که هیچ دستگاه شبکهای نباید پیکربندی شود. از این گزینه برای باطل کردن پیکربندی پیشفرض (NIC پیشفرض با Backend شبکه میزبان "user") که در صورت عدم ارائه گزینههای دیگر شبکه فعال میشود، استفاده میگردد.
- -netdev passt,id=str[,option][,...]
- یک Backend شبکه passt را پیکربندی میکند که برای اجرا به هیچ مجوز دسترسی مدیریتی (مدیر سیستم) نیاز ندارد. گزینههای معتبر عبارتند از:
- id=id
- اختصاص یک نام نمادین برای استفاده در دستورهای monitor.
- path=file
- نام فایل برنامه passt برای اجرا. در صورت مشخص نشدن، دستور passt با کمک متغیر محیطی PATH اجرا خواهد شد.
- quiet=on|off
- بهطور پیشفرض، مقدار quiet=on است تا پیامهای اطلاعاتی از passt غیرفعال شوند. quiet=on بهصورت --quiet به passt ارسال میشود.
- vhost-user=on|off
- بهطور پیشفرض، مقدار vhost-user=off است و QEMU از Backend شبکه stream برای ارتباط با passt استفاده میکند. اگر vhost-user=on باشد، passt با --vhost-user اجرا شده و QEMU از Backend شبکه vhost-user برای ارتباط با passt استفاده میکند.
- @mtu
- اختصاص MTU از طریق DHCP/NDP
- address
- آدرس IPv4 یا IPv6
- netmask
- ماسک IPv4
- mac
- آدرس MAC مبدأ
- gateway
- آدرس IPv4 یا IPv6 بهعنوان دروازه (gateway)
- interface
- رابط (interface) برای آدرسها و مسیرها (routes)
- outbound
- مقید شدن (bind) به آدرس بهعنوان مبدأ خروجی
- outbound-if4
- مقید شدن به رابط خروجی برای IPv4
- outbound-if6
- مقید شدن به رابط خروجی برای IPv6
- dns
- آدرس IPv4 یا IPv6 بهعنوان DNS
- search
- دامنههای جستجو
- fqdn
- نام دامنه کاملاً واجد شرایط (FQDN) برای پیکربندی کلاینت
- dhcp-dns
- فعال/غیرفعال کردن فهرست DNS در DHCP/DHCPv6/NDP
- dhcp-search
- فعال/غیرفعال کردن فهرست در DHCP/DHCPv6/NDP
- map-host-loopback
- آدرس برای ارجاع به میزبان
- map-guest-addr
- آدرس برای ترجمه به آدرس مهمان
- dns-forward
- هدایت پرسوجوهای DNS ارسالشده به
- dns-host
- سرویسدهنده نام (nameserver) میزبان برای هدایت پرسوجوها به آن
- tcp
- فعال/غیرفعال کردن TCP
- udp
- فعال/غیرفعال کردن UDP
- icmp
- فعال/غیرفعال کردن ICMP
- dhcp
- فعال/غیرفعال کردن DHCP
- ndp
- فعال/غیرفعال کردن NDP
- dhcpv6
- فعال/غیرفعال کردن DHCPv6
- ra
- فعال/غیرفعال کردن اعلانهای مسیر (route advertisements)
- freebind
- مقید شدن به هر آدرسی برای هدایت (forwarding)
- ipv4
- فعال/غیرفعال کردن IPv4
- ipv6
- فعال/غیرفعال کردن IPv6
- tcp-ports
- پورتهای TCP برای هدایت
- udp-ports
- پورتهای UDP برای هدایت
- param=string
- مقدار string
بهعنوان
پارامتر خط
فرمان به passt
ارسال
خواهد شد؛
میتوان
چندین بار
از پارامتر
param برای
ارسال
چندین
پارامتر به
passt استفاده
کرد.
برای نمونه، جهت ارسال --trace --log=trace.log:
qemu-system-x86_64 -nic passt,param=--trace,param=--log=trace.log
- -netdev user,id=id[,option][,option][,...]
- یک Backend شبکه میزبان در حالت کاربر (user mode) را پیکربندی میکند که برای اجرا به هیچ مجوز دسترسی مدیریتی (مدیر سیستم) نیاز ندارد. گزینههای معتبر عبارتند از:
- id=id
- اختصاص نام نمادین برای استفاده در دستورهای monitor.
- ipv4=on|off and ipv6=on|off
- مشخص میکند که کدامیک از پروتکلهای IPv4 یا IPv6 باید فعال باشند. در صورت مشخص نشدن هیچکدام، هر دو پروتکل فعال خواهند بود.
- net=addr[/mask]
- آدرس شبکه IP را که مهمان خواهد دید تنظیم میکند. بهصورت اختیاری netmask را به فرم a.b.c.d یا بهصورت تعداد بیتهای معتبر بالایی مشخص کنید. پیشفرض 10.0.2.0/24 است.
- host=addr
- آدرس قابلمشاهده میزبان برای مهمان را مشخص میکند. پیشفرض دومین IP در شبکه مهمان است، یعنی x.x.x.2.
- ipv6-net=addr[/int]
- آدرس شبکه IPv6 را که مهمان خواهد دید تنظیم میکند (پیشفرض fec0::/64 است). پیشوند شبکه در قالب نشانهگذاری معمول هگزادسیمال آدرس IPv6 ارائه میشود. اندازه پیشوند اختیاری است و بهصورت تعداد بیتهای معتبر بالایی مشخص میشود (پیشفرض ۶۴ است)..TP ipv6-host=addr آدرس IPv6 میزبان که از دید مهمان قابل مشاهده است را مشخص میکند. پیشفرض، دومین آدرس IPv6 در شبکهٔ مهمان است، یعنی xxxx::2.
- restrict=on|off
- اگر این گزینه فعال باشد، مهمان ایزوله خواهد شد؛ بدین معنا که قادر به برقراری ارتباط با میزبان نخواهد بود و هیچ بستهٔ IP مهمان از طریق میزبان به خارج هدایت نخواهد شد. این گزینه بر هیچیک از قواعد هدایت (forwarding) که صراحتاً تنظیم شدهاند، اثر نمیگذارد.
- hostname=name
- نام میزبان (hostname) کلاینت را که توسط کارساز DHCP داخلی گزارش میشود مشخص میکند.
- dhcpstart=addr
- نخستین آدرس از ۱۶ آدرس IP را که کارساز DHCP داخلی میتواند اختصاص دهد مشخص میکند. پیشفرض، پانزدهمین تا سیویکمین IP در شبکهٔ مهمان است، یعنی x.x.x.15 تا x.x.x.31.
- dns=addr
- آدرس کارساز نام مجازی (virtual nameserver) که از دید مهمان قابل مشاهده است را مشخص میکند. این آدرس باید با آدرس میزبان متفاوت باشد. پیشفرض، سومین IP در شبکهٔ مهمان است، یعنی x.x.x.3.
- ipv6-dns=addr
- آدرس کارساز نام مجازی IPv6 را که از دید مهمان قابل مشاهده است مشخص میکند. این آدرس باید با آدرس میزبان متفاوت باشد. پیشفرض، سومین IP در شبکهٔ مهمان است، یعنی xxxx::3.
- dnssearch=domain
- یک مدخل
برای فهرست
جستجوی
دامنه که
توسط
کارساز DHCP
داخلی
ارسال
میشود
فراهم
میکند. با
مشخص کردن
چندبارهٔ
این گزینه،
بیش از یک
پسوند
دامنه
میتواند
منتقل شود.
در صورت
پشتیبانی،
این ویژگی
باعث
میشود
مهمان در
صورتی که یک
نام دامنه
تحلیل (resolve)
نشود، به
طور خودکار
پسوند(های)
دادهشده
را به
انتهای آن
بیافزاید.
مثال:
qemu-system-x86_64 -nic user,dnssearch=mgmt.example.org,dnssearch=example.org
- domainname=domain
- نام دامنهٔ کلاینت را که توسط کارساز DHCP داخلی گزارش میشود مشخص میکند.
- tftp=dir
- هنگام استفاده از پشتهٔ شبکهٔ حالت کاربر، یک کارساز TFTP داخلی را فعال میکند. فایلهای موجود در dir به عنوان ریشهٔ یک کارساز TFTP در دسترس قرار میگیرند. کلاینت TFTP در مهمان باید در حالت باینری پیکربندی شود (از دستور bin کلاینت TFTP یونیکس استفاده کنید). کارساز TFTP داخلی فقطخواندنی است؛ هیچ دستوری را برای نوشتن فایلها پیادهسازی نمیکند. QEMU روی این دایرکتوری نخواهد نوشت.
- tftp-server-name=name
- در پاسخ BOOTP، عبارت name را به عنوان "TFTP server name" (گزینهٔ ۶۶ در RFC2132) همهپخشی (broadcast) میکند. این گزینه میتواند برای راهنمایی مهمان جهت بارگذاری فایلهای بوت یا پیکربندیها از کارسازی غیر از آدرس میزبان استفاده شود.
- bootfile=file
- هنگام
استفاده از
پشتهٔ
شبکهٔ حالت
کاربر،
مقدار file را
به عنوان
نام فایل BOOTP
همهپخشی
میکند. در
ترکیب با
tftp، این
میتواند
برای بوت
تحت شبکهٔ
مهمان از یک
دایرکتوری
محلی
استفاده
شود.
مثال (با استفاده از pxelinux):
qemu-system-x86_64 -hda linux.img -boot n -device e1000,netdev=n1 \
-netdev user,id=n1,tftp=/path/to/tftp/files,bootfile=/pxelinux.0
- smb=dir[,smbserver=addr]
- هنگام
استفاده از
پشتهٔ
شبکهٔ حالت
کاربر، یک
کارساز SMB
داخلی را
فعال
میکند تا
سیستمعاملهای
Windows بتوانند
به صورت
شفاف به
فایلهای
میزبان در
dir دسترسی
داشته
باشند. آدرس
IP کارساز SMB
میتواند
روی addr تنظیم
شود. به طور
پیشفرض
چهارمین IP
در شبکهٔ
مهمان
استفاده
میشود،
یعنی x.x.x.4.
در سیستمعامل Windows مهمان، سطر:
10.0.2.4 smbserver #PRE #NOFNR
باید در فایل LMHOSTS اضافه شود. در این سطر، #PRE درخواست پیشحافظهسازی (pre-caching) نگاشت را ثبت میکند که ارتباط اولیه را در برخی نسخههای Windows سرعت میبخشد. #NOFNR برای Windows NT 3.1 ضروری است تا مانع ارسال بستههای پرسمان NBNS شود که QEMU آنها را مدیریت نمیکند، و در سایر نسخهها بدون ایجاد مشکل نادیده گرفته میشود.
فایل LMHOSTS بسته به نسخهٔ Windows ممکن است در مکانهای متفاوتی قرار داشته باشد:
- C:\WINDOWS\LMHOSTS برای Windows 3x/9x/Me
- C:\WINNT\SYSTEM32\DRIVERS\ETC\LMHOSTS برای Windows NT/2000
- C:\WINDOWS\SYSTEM32\DRIVERS\ETC\LMHOSTS برای Windows XP و جدیدتر
سپس dir در \\smbserver\qemu قابل دسترسی خواهد بود.
توجه داشته باشید که یک کارساز SAMBA باید روی سیستمعامل میزبان نصب شده باشد.
- hostfwd=[tcp|udp|unix]:[[hostaddr]:hostport|hostpath]-[guestaddr]:guestport
- اتصالات
ورودی TCP، UDP یا
UNIX به درگاه
میزبان hostport را
به آدرس IP
مهمان guestaddr
روی درگاه
مهمان guestport
هدایت مجدد
(redirect) میکند.
اگر guestaddr مشخص
نشده باشد،
مقدار آن x.x.x.15
خواهد بود
(اولین آدرس
پیشفرضی
که توسط
کارساز
داخلی DHCP
تخصیص داده
میشود). با
تعیین hostaddr،
این قاعده
میتواند
به یک رابط
مشخص
میزبان
مقید (bind) شود.
اگر نوع
اتصال
تنظیم نشده
باشد، TCP
استفاده
میشود. این
گزینه
میتواند
چندین بار
تکرار شود.
به عنوان مثال، برای هدایت اتصال X11 میزبان از نمایشگر ۱ به نمایشگر ۰ مهمان، از دستور زیر استفاده کنید:
# on the host qemu-system-x86_64 -nic user,hostfwd=tcp:127.0.0.1:6001-:6000 # this host xterm should open in the guest X11 server xterm -display :1
برای هدایت اتصالات telnet از درگاه ۵۵۵۵ میزبان به درگاه telnet در مهمان، از دستور زیر استفاده کنید:
# on the host qemu-system-x86_64 -nic user,hostfwd=tcp::5555-:23 telnet localhost 5555
سپس هنگامی که روی میزبان از telnet localhost 5555 استفاده کنید، به کارساز telnet مهمان متصل میشوید.
برای هدایت سوکت unix میزبان /tmp/vm به سوکت tcp مهمان روی درگاه ۲۳، به شکل زیر عمل کنید:
# on the host qemu-system-x86_64 -nic user,hostfwd=unix:/tmp/vm-:23
- guestfwd=[tcp]:server:port-dev; guestfwd=[tcp]:server:port-cmd:command
- اتصالات TCP
مهمان به
آدرس IP
کارساز server
روی درگاه port
را به
دستگاه
نویسهای dev
یا به
برنامهای
که توسط cmd:command
اجرا شده و
برای هر
اتصال
ایجاد (spawn)
میشود،
ارسال (forward)
میکند. این
گزینه
میتواند
چندین بار
تکرار شود.
میتوانید مستقیماً از یک chardev استفاده کنید و آن را در تمام طول دورهٔ فعالیت QEMU به کار ببرید، مانند مثال زیر:
# باز کردن 10.10.1.1:4321 هنگام راهاندازی، اتصال 10.0.2.100:1234 به آن هر زمان که # مهمان به آن دسترسی پیدا کند qemu-system-x86_64 -nic user,guestfwd=tcp:10.0.2.100:1234-<tcp:10.10.1.1:4321>
یا میتوانید در هر اتصال TCP برقرار شده توسط مهمان، دستوری را اجرا کنید تا QEMU مانند یک فرایند inetd برای آن سرور مجازی عمل کند:
# فراخوانی "netcat 10.10.1.1 4321" در هر اتصال TCP به 10.0.2.100:1234 # و اتصال جریان TCP به stdin/stdout آن qemu-system-x86_64 -nic 'user,id=n1,guestfwd=tcp:10.0.2.100:1234-cmd:netcat 10.10.1.1 4321'
- -netdev tap,id=id[,fd=h][,ifname=name][,script=file][,downscript=dfile][,br=bridge][,helper=helper]
- پیکربندی
یک بکاند
شبکهٔ TAP
میزبان با
شناسهٔ id.
از فایل اسکریپت شبکه file برای پیکربندی آن و از فایل اسکریپت شبکه dfile برای لغو پیکربندی استفاده کنید. اگر name مشخص نشده باشد، سیستمعامل بهطور خودکار نامی ارائه میدهد. اسکریپت پیشفرض پیکربندی شبکه /etc/qemu-ifup و اسکریپت پیشفرض لغو پیکربندی شبکه /etc/qemu-ifdown است. از script=no یا downscript=no برای غیرفعال کردن اجرای اسکریپت استفاده کنید.
اگر QEMU را بهعنوان کاربری بدون امتیاز اجرا میکنید، از برنامهٔ کمکی شبکه (helper) برای پیکربندی واسط TAP و اتصال آن به bridge استفاده کنید. فایل اجرایی پیشفرض برنامه کمکی شبکه /path/to/qemu-bridge-helper و دستگاه bridge پیشفرض br0 است.
میتوان از fd=h برای مشخص کردن هندل (handle) یک واسط TAP میزبان که از پیش باز شده است استفاده کرد.
مثالها:
# اجرای یک نمونه QEMU با اسکریپت شبکه پیشفرض qemu-system-x86_64 linux.img -nic tap
# اجرای یک نمونه QEMU با دو NIC، که هر کدام به یک
# دستگاه TAP متصل شدهاند
qemu-system-x86_64 linux.img \
-netdev tap,id=nd0,ifname=tap0 -device e1000,netdev=nd0 \
-netdev tap,id=nd1,ifname=tap1 -device rtl8139,netdev=nd1
# اجرای یک نمونه QEMU با برنامه کمکی پیشفرض شبکه برای
# اتصال یک دستگاه TAP به bridge br0
qemu-system-x86_64 linux.img -device virtio-net-pci,netdev=n1 \
-netdev tap,id=n1,"helper=/path/to/qemu-bridge-helper"
- -netdev bridge,id=id[,br=bridge][,helper=helper]
- اتصال یک
واسط شبکهٔ
TAP میزبان به
یک دستگاه bridge
میزبان.
از helper شبکه برای پیکربندی واسط TAP و متصل کردن آن به bridge استفاده کنید. فایل اجرایی پیشفرض برنامه کمکی شبکه /path/to/qemu-bridge-helper و دستگاه bridge پیشفرض br0 است.
مثالها:
# اجرای یک نمونه QEMU با برنامه کمکی پیشفرض شبکه برای # اتصال یک دستگاه TAP به bridge br0 qemu-system-x86_64 linux.img -netdev bridge,id=n1 -device virtio-net,netdev=n1
# اجرای یک نمونه QEMU با برنامه کمکی پیشفرض شبکه برای # اتصال یک دستگاه TAP به bridge qemubr0 qemu-system-x86_64 linux.img -netdev bridge,br=qemubr0,id=n1 -device virtio-net,netdev=n1
- -netdev socket,id=id[,fd=h][,listen=[host]:port][,connect=host:port]
- این بکاند
شبکهٔ
میزبان
میتواند
برای اتصال
شبکهٔ
مهمان به یک
ماشین
مجازی دیگر
QEMU با
استفاده از
اتصال سوکت
TCP استفاده
شود. اگر listen
مشخص شده
باشد، QEMU
منتظر
اتصالات
ورودی روی port
میماند (host
اختیاری
است). از connect
برای اتصال
به یک
نمونهٔ
دیگر QEMU که از
گزینهٔ listen
استفاده
میکند، به
کار میرود.
fd=h یک سوکت TCP
از پیش باز
شده را مشخص
میکند.
مثال:
# اجرای نخستین نمونه QEMU
qemu-system-x86_64 linux.img \
-device e1000,netdev=n1,mac=52:54:00:12:34:56 \
-netdev socket,id=n1,listen=:1234
# متصل کردن شبکه این نمونه به شبکه نخستین نمونه
qemu-system-x86_64 linux.img \
-device e1000,netdev=n2,mac=52:54:00:12:34:57 \
-netdev socket,id=n2,connect=127.0.0.1:1234
- -netdev socket,id=id[,fd=h][,mcast=maddr:port[,localaddr=addr]]
- پیکربندی یک بکاند شبکهٔ میزبان سوکت برای به اشتراکگذاری ترافیک شبکهٔ مهمان با سایر ماشینهای مجازی QEMU با استفاده از یک سوکت چندپخشی (multicast) مبتنی بر UDP، که عملاً یک گذرگاه (bus) برای هر QEMU با آدرس مالتیکست maddr و port یکسان میسازد. نکات:
- 1.
- چندین QEMU میتوانند روی میزبانهای متفاوتی اجرا شوند و از گذرگاه یکسانی بهره ببرند (با فرض پیکربندی درست مالتیکست برای این میزبانها).
- 2.
- پشتیبانی از mcast با User Mode Linux سازگار است (آرگومان ethN=mcast)، نشانی http://user-mode-linux.sf.net را ببینید.
- 3.
- از fd=h برای مشخص کردن یک سوکت مالتیکست UDP که از پیش باز شده است استفاده کنید.
مثال:
# اجرای یک نمونه QEMU
qemu-system-x86_64 linux.img \
-device e1000,netdev=n1,mac=52:54:00:12:34:56 \
-netdev socket,id=n1,mcast=230.0.0.1:1234
# اجرای نمونه دیگری از QEMU روی همان "bus"
qemu-system-x86_64 linux.img \
-device e1000,netdev=n2,mac=52:54:00:12:34:57 \
-netdev socket,id=n2,mcast=230.0.0.1:1234
# اجرای یک نمونه دیگر از QEMU روی همان "bus"
qemu-system-x86_64 linux.img \
-device e1000,netdev=n3,mac=52:54:00:12:34:58 \
-netdev socket,id=n3,mcast=230.0.0.1:1234
مثال (سازگاری با User Mode Linux):
# اجرای نمونه QEMU (توجه کنید که نشانی mcast انتخاب شده، پیشفرض UML است)
qemu-system-x86_64 linux.img \
-device e1000,netdev=n1,mac=52:54:00:12:34:56 \
-netdev socket,id=n1,mcast=239.192.168.1:1102
# اجرای UML
/path/to/linux ubd0=/path/to/root_fs eth0=mcast
qemu-system-x86_64 linux.img \
-device e1000,netdev=n1,mac=52:54:00:12:34:56 \
-netdev socket,id=n1,mcast=239.192.168.1:1102,localaddr=1.2.3.4
- -netdev stream,id=str[,server=on|off],addr.type=inet,addr.host=host,addr.port=port[,to=maxport][,numeric=on|off][,keep-alive=on|off][,mptcp=on|off][,addr.ipv4=on|off][,addr.ipv6=on|off][,reconnect-ms=milliseconds]
- پیکربندی یک backend شبکه برای اتصال به یک ماشین مجازی QEMU دیگر یا یک پراکسی با استفاده از سوکت TCP/IP.
- server=on|off
- اگر on باشد، یک سوکت سرور ایجاد میکند
- addr.host=host,addr.port=port
- آدرس سوکت برای شنود (server=on) یا اتصال به آن (server=off)
- to=maxport
- در صورت وجود، این بازهای از آدرسهای ممکن است که پورت آن بین port و maxport قرار دارد.
- numeric=on|off
- اگر on باشد، تضمین میشود که host و port عددی هستند، در غیر این صورت برای تفکیک نام تلاش خواهد شد (پیشفرض: off)
- keep-alive=on|off
- فعالسازی keep-alive هنگام اتصال به این سوکت. برای سوکتهای غیرفعال (passive) پشتیبانی نمیشود.
- mptcp=on|off
- فعالسازی multipath TCP
- ipv4=on|off
- پذیرش یا عدم پذیرش آدرسهای IPv4؛ پیشفرض تلاش برای هر دو IPv4 و IPv6 است
- ipv6=on|off
- پذیرش یا عدم پذیرش آدرسهای IPv6؛ پیشفرض تلاش برای هر دو IPv4 و IPv6 است
- reconnect-ms=milliseconds
- برای یک سوکت کلاینت، اگر اتصال سوکت قطع شود، پس از تعداد میلیثانیههای مشخصشده برای اتصال مجدد تلاش میکند. تنظیم این مقدار بر روی صفر، این قابلیت را غیرفعال میکند. (پیشفرض: 0)
مثال (دو سیستمعامل مهمان متصلشده با استفاده از سوکت TCP/IP):
# first VM
qemu-system-x86_64 linux.img \
-device virtio-net,netdev=net0,mac=52:54:00:12:34:56 \
-netdev stream,id=net0,server=on,addr.type=inet,addr.host=localhost,addr.port=1234
# second VM
qemu-system-x86_64 linux.img \
-device virtio-net,netdev=net0,mac=52:54:00:12:34:57 \
-netdev stream,id=net0,server=off,addr.type=inet,addr.host=localhost,addr.port=1234,reconnect-ms=5000
- -netdev stream,id=str[,server=on|off],addr.type=unix,addr.path=path[,abstract=on|off][,tight=on|off][,reconnect-ms=milliseconds]
- پیکربندی یک backend شبکه برای اتصال به یک ماشین مجازی QEMU دیگر یا یک پراکسی با استفاده از سوکت جریانی unix domain.
- server=on|off
- اگر on باشد، یک سوکت سرور ایجاد میکند
- addr.path=path
- مسیر فایلسیستم مورد استفاده
- abstract=on|off
- اگر on باشد، یک آدرس سوکت انتزاعی (abstract) در لینوکس است.
- tight=on|off
- اگر نادرست (false) باشد، آدرس سوکت انتزاعی را با تعداد کافی بایت تهی (null bytes) پر میکند تا عضو sun_path در struct sockaddr_un پر شود.
- reconnect-ms=milliseconds
- برای یک سوکت کلاینت، اگر اتصال سوکت قطع شود، پس از تعداد میلیثانیههای مشخصشده برای اتصال مجدد تلاش میکند. تنظیم این مقدار بر روی صفر، این قابلیت را غیرفعال میکند. (پیشفرض: 0)
مثال (استفاده از passt به عنوان جایگزین -netdev user):
# start passt server as a non privileged user
passt
UNIX domain socket bound at /tmp/passt_1.socket
# start QEMU to connect to passt
qemu-system-x86_64 linux.img \
-device virtio-net,netdev=net0 \
-netdev stream,id=net0,server=off,addr.type=unix,addr.path=/tmp/passt_1.socket
مثال (دو سیستمعامل مهمان متصلشده با استفاده از سوکت جریانی unix domain):
# first VM
qemu-system-x86_64 linux.img \
-device virtio-net,netdev=net0,mac=52:54:00:12:34:56 \
netdev stream,id=net0,server=on,addr.type=unix,addr.path=/tmp/qemu0
# second VM
qemu-system-x86_64 linux.img \
-device virtio-net,netdev=net0,mac=52:54:00:12:34:57 \
-netdev stream,id=net0,server=off,addr.type=unix,addr.path=/tmp/qemu0,reconnect-ms=5000
- -netdev stream,id=str[,server=on|off],addr.type=fd,addr.str=file-descriptor[,reconnect-ms=milliseconds]
- پیکربندی یک backend شبکه برای اتصال به یک ماشین مجازی QEMU دیگر یا یک پراکسی با استفاده از توصیفگر فایل سوکت جریانی.
- server=on|off
- اگر on باشد، یک سوکت سرور ایجاد میکند
- addr.str=file-descriptor
- شماره توصیفگر فایل برای استفاده به عنوان سوکت
- reconnect-ms=milliseconds
- برای یک سوکت کلاینت، اگر اتصال سوکت قطع شود، پس از تعداد میلیثانیههای مشخصشده برای اتصال مجدد تلاش میکند. تنظیم این مقدار بر روی صفر، این قابلیت را غیرفعال میکند. (پیشفرض: 0)
- -netdev dgram,id=str,remote.type=inet,remote.host=maddr,remote.port=port[,local.type=inet,local.host=addr]
- پیکربندی یک backend شبکه برای اتصال به یک آدرس چندپخشی (multicast).
- remote.host=maddr,remote.port=port
- آدرس چندپخشی (multicast)
- local.host=addr
- مشخص کردن آدرس میزبان برای ارسال بستهها از آن
مثال:
# launch one QEMU instance
qemu-system-x86_64 linux.img \
-device virtio-net,netdev=net0,mac=52:54:00:12:34:56 \
-netdev dgram,id=net0,remote.type=inet,remote.host=224.0.0.1,remote.port=1234
# launch another QEMU instance on same "bus"
qemu-system-x86_64 linux.img \
-device virtio-net,netdev=net0,mac=52:54:00:12:34:57 \
-netdev dgram,id=net0,remote.type=inet,remote.host=224.0.0.1,remote.port=1234
# launch yet another QEMU instance on same "bus"
qemu-system-x86_64 linux.img \
-device virtio-net,netdev=net0,mac=52:54:00:12:34:58 \
-netdev dgram,id=net0,remote.type=inet,remote.host=224.0.0.1,remote.port=1234
- -netdev dgram,id=str,remote.type=inet,remote.host=maddr,remote.port=port[,local.type=fd,local.str=file-descriptor]
- پیکربندی یک backend شبکه برای اتصال به یک آدرس چندپخشی (multicast) با استفاده از توصیفگر فایل سوکت UDP.
- remote.host=maddr,remote.port=port
- آدرس چندپخشی (multicast)
- local.str=file-descriptor
- توصیفگر فایل برای استفاده جهت ارسال بستهها
- -netdev dgram,id=str,local.type=inet,local.host=addr,local.port=port[,remote.type=inet,remote.host=addr,remote.port=port]
- پیکربندی یک backend شبکه برای اتصال به یک ماشین مجازی QEMU دیگر یا یک پراکسی با استفاده از سوکت دادهگرامی (datagram oriented) در unix domain.
- local.host=addr,local.port=port
- آدرس IP برای ارسال بستهها از آن.TP remote.host=addr,remote.port=port آدرس IP مقصد
مثال (دو میهمان متصلشده با استفاده از یک سوکت UDP/IP):
# first VM
qemu-system-x86_64 linux.img \
-device virtio-net,netdev=net0,mac=52:54:00:12:34:56 \
-netdev dgram,id=net0,local.type=inet,local.host=localhost,local.port=1234,remote.type=inet,remote.host=localhost,remote.port=1235
# second VM
qemu-system-x86_64 linux.img \
-device virtio-net,netdev=net0,mac=52:54:00:12:34:56 \
-netdev dgram,id=net0,local.type=inet,local.host=localhost,local.port=1235,remote.type=inet,remote.host=localhost,remote.port=1234
- -netdev dgram,id=str,local.type=unix,local.path=path[,remote.type=unix,remote.path=path]
- پیکربندی یک پسزمینهٔ شبکه برای اتصال به یک ماشین مجازی QEMU دیگر یا یک پراکسی با استفاده از سوکت unix مبتنی بر دیتاگرام.
- local.path=path
- مسیر فایلسیستم مورد استفاده برای مقید کردن (bind) سوکت
- remote.path=path
- مسیر فایلسیستم مورد استفاده بهعنوان مقصد (رجوع کنید به sendto(2))
مثال (دو میهمان متصلشده با استفاده از یک سوکت UDP/UNIX):
# first VM
qemu-system-x86_64 linux.img \
-device virtio-net,netdev=net0,mac=52:54:00:12:34:56 \
-netdev dgram,id=net0,local.type=unix,local.path=/tmp/qemu0,remote.type=unix,remote.path=/tmp/qemu1
# second VM
qemu-system-x86_64 linux.img \
-device virtio-net,netdev=net0,mac=52:54:00:12:34:57 \
-netdev dgram,id=net0,local.type=unix,local.path=/tmp/qemu1,remote.type=unix,remote.path=/tmp/qemu0
- -netdev dgram,id=str,local.type=fd,local.str=file-descriptor
- پیکربندی یک پسزمینهٔ شبکه برای اتصال به یک ماشین مجازی QEMU دیگر یا یک پراکسی با استفاده از یک توصیفگر فایل سوکت مبتنی بر دیتاگرام.
- local.str=file-descriptor
- توصیفگر فایل مورد استفاده برای ارسال بستهها
- -netdev l2tpv3,id=id,src=srcaddr,dst=dstaddr[,srcport=srcport][,dstport=dstport],txsession=txsession[,rxsession=rxsession][,ipv6=on|off][,udp=on|off][,cookie64=on|off][,counter=on|off][,pincounter=on|off][,txcookie=txcookie][,rxcookie=rxcookie][,offset=offset]
- پیکربندی
پسزمینهٔ
شبکهٔ
میزبان
مبتنی بر
شبهسیم (pseudowire)
پروتکل L2TPv3.
پروتکل L2TPv3 (RFC3931)
یک پروتکل
محبوب برای
انتقال
فریمهای
دادهٔ Ethernet (و
سایر
لایههای ۲)
بین دو
سیستم است.
این قابلیت
در
مسیریابها،
فایروالها
و هستهٔ
لینوکس (از
نسخهٔ ۳.۳
به بعد)
وجود دارد.
این انتقال به یک ماشین مجازی اجازه میدهد مستقیماً با یک ماشین مجازی، مسیریاب یا فایروال دیگر ارتباط برقرار کند.
- src=srcaddr
- آدرس مبدأ (اجباری)
- dst=dstaddr
- آدرس مقصد (اجباری)
- udp=on
- انتخاب کپسولهسازی udp (پیشفرض ip است).
- srcport=srcport
- پورت udp مبدأ.
- dstport=dstport
- پورت udp مقصد.
- ipv6=on
- اجبار به استفاده از v6، در غیر این صورت پیشفرض v4 است.
- کوکیها شکل ضعیفی از امنیت در مشخصات l2tpv3 هستند. کاربرد آنها بیشتر جلوگیری از پیکربندی نادرست است. بهطور پیشفرض ۳۲ بیتی هستند.
- تنظیم اندازهٔ کوکی به ۶۴ بیت بهجای مقدار پیشفرض ۳۲ بیت
- counter=off
- اجبار به استفاده از یک L2TPv3 'تقلیلیافته' بدون شمارنده، مطابق با draft-mkonstan-l2tpext-keyed-ipv6-tunnel-00
- pincounter=on
- دور زدن مشکل مدیریت معیوب شمارنده در طرف مقابل (peer). این گزینه همچنین ممکن است در شبکههای دارای بههمریختگی ترتیب بستهها کمک کند.
- offset=offset
- افزودن یک آفست اضافی بین سرایند (header) و داده
برای مثال، جهت اتصال یک ماشین مجازی در حال اجرا روی میزبان 4.3.2.1 از طریق L2TPv3 به پل br-lan روی میزبان لینوکس راهدور 1.2.3.4:
# Setup tunnel on linux host using raw ip as encapsulation
# on 1.2.3.4
ip l2tp add tunnel remote 4.3.2.1 local 1.2.3.4 tunnel_id 1 peer_tunnel_id 1 \
encap udp udp_sport 16384 udp_dport 16384
ip l2tp add session tunnel_id 1 name vmtunnel0 session_id \
0xFFFFFFFF peer_session_id 0xFFFFFFFF
ifconfig vmtunnel0 mtu 1500
ifconfig vmtunnel0 up
brctl addif br-lan vmtunnel0
# on 4.3.2.1
# launch QEMU instance - if your network has reorder or is very lossy add ,pincounter
qemu-system-x86_64 linux.img -device e1000,netdev=n1 \
-netdev l2tpv3,id=n1,src=4.2.3.1,dst=1.2.3.4,udp=on,srcport=16384,dstport=16384,rxsession=0xffffffff,txsession=0xffffffff,counter=on
- -netdev vde,id=id[,sock=socketpath][,port=n][,group=groupname][,mode=octalmode]
- پیکربندی
پسزمینهٔ
VDE برای
اتصال به
درگاه (PORT)
شمارهٔ n از
یک سوییچ vde
در حال اجرا
روی میزبان
و
گوشبهزنگ
برای
اتصالات
ورودی روی
socketpath. از GROUP groupname و MODE octalmode
برای تغییر
مالکیت و
دسترسیهای
پیشفرض
درگاه
ارتباطی
استفاده
کنید. این
گزینه تنها
در صورتی
موجود است
که QEMU با فعال
بودن
پشتیبانی
از vde
کامپایل
شده باشد.
مثال:
# launch vde switch vde_switch -F -sock /tmp/myswitch # launch QEMU instance qemu-system-x86_64 linux.img -nic vde,sock=/tmp/myswitch
- -netdev af-xdp,id=str,ifname=name[,mode=native|skb][,force-copy=on|off][,queues=n][,start-queue=m][,inhibit=on|off][,sock-fds=x:y:...:z][,map-path=/path/to/socket/map][,map-start-index=i]
- پیکربندی پسزمینهٔ AF_XDP برای اتصال به یک رابط شبکه 'name' با استفاده از سوکت AF_XDP. یک حالت اتصال برنامهٔ خاص برای برنامهٔ پیشفرض XDP را میتوان با 'mode' تحمیل کرد، که مقدار پیشفرض آن best-effort است و در آن احتمالاً پربازدهترین حالت استفاده خواهد شد. تعداد صفهای 'n' معمولاً باید با تعداد صفهای رابط مطابقت داشته باشد؛ مقدار پیشفرض ۱ است. ترافیکی که به صفهای پیکربندینشدهٔ دستگاه میرسد به پسزمینهٔ شبکه تحویل داده نخواهد شد.
# set number of queues to 4
ethtool -L eth0 combined 4
# launch QEMU instance
qemu-system-x86_64 linux.img -device virtio-net-pci,netdev=n1 \
-netdev af-xdp,id=n1,ifname=eth0,queues=4
گزینهٔ 'start-queue' را میتوان در حالتی که نیاز به استفاده از یک بازهٔ مشخص از صفها [m, m + n] باشد، مشخص نمود. بهعنوان مثال، ممکن است این امر برای استفاده از برخی NICها در حالت native ضروری باشد. هسته به درایور اجازه میدهد مجموعهای جداگانه از صفهای XDP را فراتر از صفهای عادی ایجاد کند، و فقط این صفها میتوانند برای سوکتهای AF_XDP به کار روند. کارتهای شبکهای که به این صورت کار میکنند، ممکن است نیاز به یک بازهدایت ترافیک اضافی با ethtool به این صفهای خاص داشته باشند.
# تنظیم تعداد صفها به 1
ethtool -L eth0 combined 1
# هدایت تمام ترافیک به صف دوم (شناسه: 1)
# نکته: ممکن است درایورها به جفت کلید/ماسک غیرخالی نیاز داشته باشند.
ethtool -N eth0 flow-type ether \
dst 00:00:00:00:00:00 m FF:FF:FF:FF:FF:FE action 1
ethtool -N eth0 flow-type ether \
dst 00:00:00:00:00:01 m FF:FF:FF:FF:FF:FE action 1
# راهاندازی نمونهٔ QEMU
qemu-system-x86_64 linux.img -device virtio-net-pci,netdev=n1 \
-netdev af-xdp,id=n1,ifname=eth0,queues=1,start-queue=1
برنامهٔ XDP میتواند بهصورت خارجی نیز بارگذاری شود. در این حالت گزینهٔ 'inhibit' باید بر روی 'on' تنظیم گردد. با فعال بودن 'inhibit'، میتوان از هر یک از گزینههای 'sock-fds' یا 'map-path' استفاده کرد. مقدار 'sock-fds' میتواند توصیفکنندههای فایلی برای سوکتهای XDP از پیش باز شده اما bindنشده را که قبلاً به یک socket map برای صفهای متناظر افزوده شدهاند فراهم کند. یک سوکت به ازای هر صف.
qemu-system-x86_64 linux.img -device virtio-net-pci,netdev=n1 \
-netdev af-xdp,id=n1,ifname=eth0,queues=3,inhibit=on,sock-fds=15:16:17
برای گزینهٔ 'inhibit' که بر روی 'on' تنظیم شده و همراه با 'map-path' به کار میرود، انتظار میرود که برنامهٔ XDP به همراه socket map از قبل روی دستگاه شبکه بارگذاری شده و نگاشت در فایلسیستم BPF پین شده باشد. سپس مسیر نگاشت پینشده به QEMU ارسال میشود که توصیفکنندههای فایل را ایجاد کرده و آنها را در socket map موجود درج میکند.
qemu-system-x86_64 linux.img -device virtio-net-pci,netdev=n1 \
-netdev af-xdp,id=n1,ifname=eth0,queues=2,inhibit=on,map-path=/sys/fs/bpf/xsks_map
علاوه بر این، میتوان از 'map-start-index' برای تعیین آفست شروع جهت درج در socket map استفاده کرد. ترکیب همزمان 'map-path' و 'sock-fds' با یکدیگر پشتیبانی نمیشود.
- -netdev vhost-user,chardev=id[,vhostforce=on|off][,queues=n]
- ایجاد یک netdev
از نوع vhost-user،
با
پشتیبانی
یک chardev id. این chardev
باید مبتنی
بر unix domain socket باشد.
vhost-user از
پروتکل
مشخصی برای
ارسال
پیامهای
جایگزین ioctl
مربوط به vhost
به
برنامهای
در سمت دیگر
سوکت
استفاده
میکند. در
مهمانهای
غیر MSI-X، این
ویژگی را
میتوان با
vhostforce اجبار
کرد. از 'queues=n'
برای تعیین
تعداد
صفهای
ایجادشده
برای vhost-user
چندصفی (multiqueue)
استفاده
کنید.
مثال:
qemu -m 512 -object memory-backend-file,id=mem,size=512M,mem-path=/hugetlbfs,share=on \
-numa node,memdev=mem \
-chardev socket,id=chr0,path=/path/to/socket \
-netdev type=vhost-user,id=net0,chardev=chr0 \
-device virtio-net-pci,netdev=net0
- -netdev vhost-vdpa[,vhostdev=/path/to/dev][,vhostfd=h]
- ایجاد یک netdev
از نوع vhost-vdpa.
دستگاه vDPA دستگاهی است که از یک مسیر داده (datapath) منطبق با مشخصات virtio همراه با یک مسیر کنترل اختصاصی سازنده (vendor specific) استفاده میکند. دستگاههای vDPA میتوانند هم بهصورت فیزیکی روی سختافزار قرار داشته باشند و هم توسط نرمافزار شبیهسازی شوند.
- -netdev hubport,id=id,hubid=hubid[,netdev=nd]
- ایجاد یک
پورت هاب
روی هاب
شبیهسازیشده
با شناسهٔ hubid.
گزینهٔ netdev از نوع hubport به شما امکان میدهد تا به جای یک netdev تکی، یک کارت شبکه (NIC) را به یک هاب شبیهسازیشده در QEMU متصل کنید. در غیر این صورت، میتوانید با استفاده از گزینهٔ netdev=nd، این hubport را به یک netdev دیگر با شناسهٔ nd متصل نمایید.
- -net nic[,netdev=nd][,macaddr=mac][,model=type] [,name=name][,addr=addr][,vectors=v]
- گزینهٔ قدیمی (legacy) برای پیکربندی یا ایجاد یک کارت واسط شبکه (NIC) روی برد (یا پیشفرض ماشین) و اتصال آن به هاب شبیهسازیشده با شناسهٔ 0 (یعنی هاب پیشفرض)، یا به netdev با شناسهٔ nd. اگر model حذف شود، مدل پیشفرض NIC مرتبط با نوع ماشین استفاده میشود. توجه داشته باشید که ممکن است مدل پیشفرض NIC در نسخههای آیندهٔ QEMU تغییر کند، بنابراین اکیداً توصیه میشود همیشه یک مدل مشخص شود. به صورت اختیاری، آدرس MAC میتواند به mac تغییر کند، نشانی دستگاه به addr تنظیم شود (فقط کارتهای PCI)، و نامی برای استفاده در دستورهای مانیتور اختصاص یابد. همچنین برای کارتهای PCI، میتوانید تعداد v از بردارهای MSI-X را که کارت باید داشته باشد مشخص کنید؛ این گزینه در حال حاضر تنها روی کارتهای virtio تأثیر میگذارد؛ برای غیرفعال کردن MSI-X مقدار v = 0 را تنظیم کنید. اگر هیچ گزینهٔ -net مشخص نشود، یک NIC منفرد ایجاد میشود. QEMU میتواند چندین مدل مختلف کارت شبکه را شبیهسازی کند. از -net nic,model=help برای دریافت فهرستی از دستگاههای موجود برای هدف خود استفاده نمایید.
- -net user|passt|tap|bridge|socket|l2tpv3|vde[,...][,name=name]
- پیکربندی
یک بکاند
شبکهٔ
میزبان (با
گزینههای
متناظر با
همان
گزینهٔ -netdev) و
اتصال آن به
هاب
شبیهسازیشدهٔ
0 (هاب
پیشفرض).
از name برای
تعیین نام
پورت هاب
استفاده
کنید.
شکل کلی یک گزینهٔ دستگاه نویسهای به صورت زیر است:
- -chardev backend,id=id[,mux=on|off][,options]
- مؤلفهٔ backend
یکی از این
موارد است:
null، socket، udp،
msmouse، hub، vc،
ringbuf، file، pipe،
console، serial، pty،
stdio، braille، parallel،
spicevmc، spiceport، dbus.
نوع backend مشخص
تعیینکنندهٔ
گزینههای
قابل اعمال
خواهد بود.
برای چاپ تمام انواع موجود backend در chardev از -chardev help استفاده کنید.
تمامی دستگاهها باید یک id داشته باشند که میتواند هر رشتهای تا حداکثر ۱۲۷ نویسه باشد. این شناسه برای شناسایی یکتای این دستگاه در سایر دستورالعملهای خط فرمان استفاده میشود.
یک دستگاه نویسهای میتواند در حالت چندگانهسازی (multiplexing) توسط چندین front-end استفاده شود. برای فعال کردن این حالت mux=on را تعیین کنید. یک مالتیپلکسر یک دستگاه "1:N" است که در اینجا انتهای "1" همان backend مشخصشدهٔ chardev شما و انتهای "N" بخشهای مختلف QEMU است که میتوانند با یک chardev ارتباط برقرار کنند. اگر یک chardev را با id=myid و mux=on ایجاد کنید، QEMU یک مالتیپلکسر با شناسهٔ مشخصشدهٔ شما ایجاد خواهد کرد و سپس میتوانید چندین frontend را طوری پیکربندی کنید که از آن شناسهٔ chardev برای ورودی/خروجی خود استفاده کنند. حداکثر تا چهار frontend مختلف میتوانند به یک chardev چندگانهشده متصل شوند. (بدون فعالسازی مالتیپلکسینگ، یک chardev تنها توسط یک frontend منفرد قابل استفاده است.) به عنوان مثال، میتوانید از این قابلیت استفاده کنید تا اجازه دهید یک chardev از نوع stdio توسط دو درگاه سریال و مانیتور QEMU استفاده شود:
-chardev stdio,mux=on,id=char0 \ -object monitor-hmp,id=hmp0,chardev=char0 \ -serial chardev:char0 \ -serial chardev:char0
شما میتوانید بیش از یک مالتیپلکسر در پیکربندی سیستم داشته باشید؛ برای نمونه میتوانید یک درگاه TCP چندگانهشده میان UART 0 و UART 1، و stdio چندگانهشده میان مانیتور QEMU و یک درگاه موازی (parallel port) داشته باشید:
-chardev stdio,mux=on,id=char0 \ -object monitor-hmp,id=hmp0,chardev=char0 \ -parallel chardev:char0 \ -chardev tcp,...,mux=on,id=char1 \ -serial chardev:char1 \ -serial chardev:char1
هنگامی که از یک دستگاه نویسهای چندگانهشده استفاده میکنید، برخی از توالیهای فرار (escape sequences) در ورودی تفسیر میشوند. برای جزئیات بیشتر به بخش Keys in the character backend multiplexer <#keys-in-the-character-backend-multiplexer> در System Emulation Users Guide مراجعه کنید.
توجه داشته باشید که برخی دیگر از گزینههای خط فرمان ممکن است بهطور ضمنی backendهای نویسهای چندگانهشده ایجاد کنند؛ برای نمونه -serial mon:stdio یک backend چندگانهشدهٔ stdio متصل به درگاه سریال و مانیتور QEMU ایجاد میکند، و -nographic نیز کنسول و مانیتور را روی stdio چندگانهسازی میکند.
اگر نیاز دارید دادهها را در جهت مخالف تجمیع کنید (جایی که یک رابط frontend در QEMU ورودی و خروجی را از چندین دستگاه chardev در backend دریافت میکند)، لطفاً به بند زیر در رابطه با پیکربندی دستگاه تجمیعکنندهٔ hub در chardev مراجعه کنید.
هر backend از گزینهٔ logfile پشتیبانی میکند که مسیر فایلی را برای ضبط تمام دادههای منتقلشده از طریق آن backend تعیین مینماید. گزینهٔ logappend کنترل میکند که آیا فایل لاگ هنگام باز شدن خالی (truncate) شود یا دادهها به انتهای آن افزوده (append) شوند.
backendهای موجود عبارتند از:
- -chardev null,id=id
- یک دستگاه خالی (void). این دستگاه هیچ دادهای ارسال نمیکند و هر دادهای را که دریافت کند دور میاندازد. مؤلفهٔ null هیچ گزینهای نمیپذیرد.
- -chardev socket,id=id[,TCP options or unix options][,server=on|off][,wait=on|off][,telnet=on|off][,websocket=on|off][,reconnect-ms=milliseconds][,tls-creds=id][,tls-authz=id]
- یک سوکت
جریانی
دوطرفه
ایجاد
میکند که
میتواند
سوکت TCP یا unix
باشد. اگر path
مشخص شود،
یک سوکت unix
ایجاد
خواهد شد.
در صورتی که
گزینههای
TCP برای یک
سوکت unix
تعیین
شوند،
رفتار
نامشخص
خواهد بود.
server=on|off مشخص میکند که سوکت باید یک سوکت شنودکننده (listening socket) باشد.
wait=on|off مشخص میکند که QEMU نباید در انتظار اتصال کلاینت به یک سوکت شنودکننده مسدود شود.
telnet=on|off مشخص میکند که ترافیک روی سوکت باید توالیهای فرار telnet را تفسیر کند.
websocket=on|off مشخص میکند که سوکت برای ارتباطات از پروتکل WebSocket استفاده میکند.
reconnect-ms مهلت زمانی اتصال مجدد را در سوکتهای غیرسرور (non-server) در صورت قطع ارتباط طرف مقابل تنظیم میکند. qemu به میزان این میلیثانیهها درنگ کرده و سپس برای اتصال مجدد تلاش میکند. مقدار صفر اتصال مجدد را غیرفعال میکند و مقدار پیشفرض است.
tls-creds درخواست فعالسازی پروتکل TLS را برای رمزنگاری ارائه میدهد و id مربوط به اعتبارنامههای TLS را برای استفاده در دستتکانی (handshake) مشخص میکند. این اعتبارنامهها باید پیشتر با آرگومان -object tls-creds ایجاد شده باشند.
tls-auth شناسهٔ شیء مجوزدهی QAuthZ را فراهم میکند که نام متمایز (distinguished name) کلاینت x509 بر اساس آن اعتبارسنجی خواهد شد. این شیء تنها در زمان استفاده ارزیابی میشود، بنابراین میتوان آن را در زمان فعال بودن سرور chardev بهصورت بیدرنگ حذف و دوباره ایجاد کرد. در صورت عدم وجود، پیشفرض آن رد دسترسی خواهد بود.
گزینههای سوکت TCP و unix در زیر آورده شدهاند:
- گزینههای TCP: port=port[,host=host][,to=to][,ipv4=on|off][,ipv6=on|off][,nodelay=on|off]
- host برای یک
سوکت
شنودکننده،
آدرس محلی
برای متصل
شدن (bind) را
مشخص
میکند.
برای یک
سوکت
متصلشونده،
میزبان
دوردست را
برای اتصال
مشخص
میکند. host
برای
سوکتهای
شنودکننده
اختیاری
است. در
صورت مشخص
نشدن،
مقدار
پیشفرض آن
0.0.0.0 خواهد
بود.
port برای یک سوکت شنودکننده، درگاه محلی برای bind شدن را مشخص میکند. برای یک سوکت متصلشونده، درگاه روی میزبان دوردست را برای اتصال مشخص میکند. port میتواند به صورت شماره درگاه یا نام یک سرویس مشخص شود. تعیین port الزامی است.
to تنها برای سوکتهای شنودکننده کاربرد دارد. اگر این گزینه مشخص شود و امکان bind شدن به port وجود نداشته باشد، QEMU تلاش خواهد کرد به درگاههای بعدی تا خود درگاه to (شامل آن) متصل شود تا زمانی که موفق شود. to باید به صورت شماره درگاه مشخص شود.
ipv4=on|off و ipv6=on|off مشخص میکنند که باید از IPv4 یا IPv6 استفاده شود. در صورتی که هیچکدام مشخص نشود، سوکت میتواند از هر یک از پروتکلها استفاده کند.
nodelay=on|off الگوریتم Nagle را غیرفعال میکند.
- گزینههای unix: path=path[,abstract=on|off][,tight=on|off]
- path مسیر محلی سوکت unix را مشخص میکند. تعیین path الزامی است. abstract=on|off استفاده از فضای نام انتزاعی سوکت (abstract socket namespace) را به جای سیستم فایل مشخص میکند. اختیاری است و پیشفرض آن false میباشد. tight=on|off طول سوکتهای انتزاعی را به جای طول کامل sun_path بر روی حداقل مقدار آن تنظیم میکند. اختیاری است و پیشفرض آن true میباشد.
- -chardev udp,id=id[,host=host],port=port[,localaddr=localaddr][,localport=localport][,ipv4=on|off][,ipv6=on|off]
- تمام
ترافیک را
از سیستم
مهمان از
طریق UDP به یک
میزبان
دوردست
ارسال
میکند.
host میزبان دوردست برای اتصال را مشخص میکند. اگر مشخص نشود، مقدار پیشفرض localhost خواهد بود.
port درگاه روی میزبان دوردست برای اتصال را مشخص میکند. تعیین port الزامی است.
localaddr آدرس محلی برای bind شدن را مشخص میکند. اگر مشخص نشود، مقدار پیشفرض آن 0.0.0.0 خواهد بود.
localport درگاه محلی برای bind شدن را مشخص میکند. اگر مشخص نشود، از هر درگاه محلی موجود استفاده خواهد شد.
ipv4=on|off و ipv6=on|off مشخص میکنند که باید از IPv4 یا IPv6 استفاده شود. اگر هیچکدام مشخص نشود، دستگاه میتواند از هر پروتکلی استفاده کند.
- -chardev msmouse,id=id
- رویدادهای msmouse شبیهسازیشده توسط QEMU را به سیستم مهمان هدایت (forward) میکند. msmouse هیچ گزینهای نمیپذیرد.
- -chardev hub,id=id,chardevs.0=id[,chardevs.N=id]
- بهطور صریح یک دستگاه hub برای backend در chardev با امکان تجمیع ورودی از چندین دستگاه backend و ارسال آن به یک دستگاه frontend منفرد ایجاد میکند. علاوه بر این، دستگاه hub خروجی دستگاه frontend را دریافت کرده و آن را به تمام دستگاههای backend متصل بازمیفرستد. این ویژگی امکان تعامل یکپارچه میان دستگاههای backend مختلف و یک رابط frontend منفرد را فراهم میکند. تجمیع تا حداکثر ۴ دستگاه chardev پشتیبانی میشود. (از نسخهٔ 10.0).sp برای نمونه، در ادامه یک مورد استفاده از ۲ دستگاه backend آورده شده است: کنسول مجازی vc0 و یک pseudo TTY با نام pty0 که با کمک یک هاب hub0 به یک دستگاه frontend کنسول virtio hvc متصل شدهاند. کنسول مجازی متن را به یک تصویر رندر میکند که میتواند از طریق پروتکل VNC به اشتراک گذاشته شود. متقابلاً، backend مربوط به pty ارتباطی دوطرفه با کنسول virtio hvc از طریق فایل pseudo TTY فراهم میکند. پیکربندی نمونه میتواند به صورت زیر باشد:
-chardev pty,path=/tmp/pty,id=pty0 \ -chardev vc,id=vc0 \ -chardev hub,id=hub0,chardevs.0=pty0,chardevs.1=vc0 \ -device virtconsole,chardev=hub0 \ -vnc 0.0.0.0:0
پس از راهاندازی QEMU، میتوان از کلاینت VNC و هر شبیهساز TTY دیگری برای کنترل یک کنسول hvc واحد استفاده کرد:
# Start TTY emulator tio /tmp/pty # Start VNC client and switch to virtual console Ctrl-Alt-2 vncviewer :0
استفاده از چندین دستگاه frontend پشتیبانی نمیشود. همچنین پشتهسازی چندگانهسازها (multiplexers) و دستگاههای هاب نیز پشتیبانی نمیشود.
- -chardev vc,id=id[[,width=width][,height=height]][[,cols=cols][,rows=rows]][,encoding=ENCODING]
- اتصال به یک کنسول متنی QEMU. پیادهسازی و مجموعه قابلیتهای پشتیبانیشده به backend نمایش انتخابی بستگی دارد.
- پشتانه (backend) مربوط به GTK از libvte برای شبیهسازی و نمایش استفاده میکند (در صورت دردسترس بودن).
- پشتانه مربوط به D-Bus دستگاه نویسهای را به صورت یک شیء Chardev برونریزی میکند.
- پشتانه spice-app آن را به عنوان یک درگاه Spice برونریزی میکند.
در موارد دیگر، QEMU از VT100 شبیهسازیشده خودش استفاده میکند و میتوان به صورت اختیاری به vc ابعاد مشخصی داد.
گزینههای width و height به ترتیب پهنا و ارتفاع کنسول را بر حسب پیکسل مشخص میکنند.
گزینههای cols و rows مشخص میکنند که اندازه کنسول به ابعاد یک کنسول متنی با اندازههای دادهشده تنظیم شود.
گزینه encoding مجموعه نویسههای مورد انتظار از سیستم مهمان را مشخص میکند: utf8 یا cp437 (کد ۸ بیتی Extended ASCII / VGA).
- -chardev ringbuf,id=id[,size=size]
- ایجاد یک بافر حلقهای با اندازه ثابت size. مقدار size باید توانی از دو باشد و مقدار پیشفرض آن 64K است.
- -chardev file,id=id,path=path[,input-path=input-path]
- ثبت تمام
ترافیک
دریافتی از
مهمان در یک
فایل.
گزینه path مسیر فایلی را که باید باز شود مشخص میکند. اگر این فایل وجود نداشته باشد ایجاد میشود، و در صورت وجود، بازنویسی خواهد شد. مشخص کردن path الزامی است.
در صورت تعیین input-path، این مقدار مسیر فایل دومی خواهد بود که برای ورودی استفاده میشود. اگر input-path مشخص نشود، هیچ ورودیای از chardev در دسترس نخواهد بود.
توجه داشته باشید که input-path روی میزبانهای Windows پشتیبانی نمیشود.
- -chardev pipe,id=id,path=path
- ایجاد یک
ارتباط
دوطرفه با
سیستم
مهمان.
رفتار این
گزینه در
میزبانهای
Windows با سایر
میزبانها
اندکی
متفاوت است:
در Windows، یک لوله (pipe) دوطرفه در \\.pipe\path ایجاد خواهد شد.
در سایر میزبانها، دو pipe با نامهای path.in و path.out ایجاد میشوند. دادههای نوشتهشده در path.in توسط مهمان دریافت میشوند. دادههای نوشتهشده توسط مهمان نیز از path.out خوانده میشوند. برنامه QEMU این fifoها را ایجاد نخواهد کرد و لازم است از پیش موجود باشند.
همانطور که در بالا ذکر شد، path بخشی از مسیر pipe را تشکیل میدهد. مشخص کردن path الزامی است.
- -chardev console,id=id
- ارسال
ترافیک از
مهمان به
خروجی
استاندارد
QEMU. گزینه console
هیچ
پارامتری
دریافت
نمیکند.
گزینه console تنها روی میزبانهای Windows در دسترس است.
- -chardev serial,id=id,path=path
- ارسال
ترافیک از
مهمان به یک
دستگاه
سریال روی
سیستم
میزبان.
در میزبانهای Unix، این گزینه علاوه بر خطوط سریال در واقع هر دستگاه tty دیگری را نیز میپذیرد.
گزینه path نام دستگاه سریالی را که باید باز شود مشخص میکند.
- -chardev pty,id=id[,path=path]
- ایجاد یک
شبهترمینال
(pseudo-terminal) جدید
روی میزبان
و اتصال به
آن.
گزینه pty روی میزبانهای Windows در دسترس نیست.
در صورت تعیین path، برنامه QEMU یک پیوند نمادین (symbolic link) در آن مکان ایجاد میکند که به دستگاه PTY جدید اشاره دارد.
این قابلیت مانع از نیاز به ارسال پرسوجوهای مانیتور QMP یا HMP برای پیدا کردن مسیر دستگاه PTY جدید میشود.
توجه داشته باشید که هرچند QEMU هنگام خروج عادی پیوند نمادین را حذف میکند، اما در صورت کرش کردن یا خطاهای خاص هنگام راهاندازی این کار را انجام نخواهد داد. توصیه میشود برای مدیریت این مسئله، کاربر پس از خاتمه QEMU وجود پیوند نمادین را بررسی و آن را حذف کند.
- -chardev stdio,id=id[,signal=on|off]
- اتصال به
ورودی
استاندارد
و خروجی
استاندارد
فرایند QEMU.
گزینه signal مشخص میکند که آیا سیگنالها روی ترمینال فعال باشند یا خیر، که این موضوع شامل خروج از QEMU با کلید ترکیبی Control-c نیز میشود. این گزینه به صورت پیشفرض فعال است؛ برای غیرفعالسازی از signal=off استفاده کنید.
- -chardev braille,id=id
- اتصال به یک سرور محلی BrlAPI. گزینه braille هیچ پارامتری دریافت نمیکند.
- -chardev parallel,id=id,path=path
- گزینه parallel تنها روی میزبانهای Linux، FreeBSD و DragonFlyBSD
- در دسترس
است.
اتصال به یک درگاه موازی (parallel) محلی.
گزینه path مسیر دستگاه درگاه موازی را مشخص میکند. مشخص کردن path الزامی است.
- -chardev spicevmc,id=id,debug=debug,name=name
- گزینه spicevmc
تنها زمانی
در دسترس
است که
پشتیبانی
از spice در
برنامه
تعبیه شده
باشد.
debug سطح اشکالزدایی برای spicevmc
name نام کانال spice جهت اتصال
اتصال به یک کانال ماشین مجازی spice، مانند vdiport.
- -chardev spiceport,id=id,debug=debug,name=name
- گزینه spiceport
تنها زمانی
در دسترس
است که
پشتیبانی
از spice در
برنامه
تعبیه شده
باشد.
debug سطح اشکالزدایی برای spicevmc
name نام درگاه spice جهت اتصال
اتصال به یک درگاه spice، که به کلاینت Spice امکان میدهد ترافیک شناساییشده با یک نام (ترجیحاً یک fqdn) را مدیریت کند.
- -chardev dbus,id=id,name=name
- گزینه dbus
تنها زمانی
در دسترس
است که
پشتیبانی
از نمایشگر
D-Bus در برنامه
تعبیه شده
باشد.
name نام chardev به صورتی که روی رابط نمایشگر D-Bus برونریزی شده است
برونریزی دستگاه نویسهای روی رابط نمایشگر D-Bus، به طوری که یک کلاینت D-Bus بتواند به آن متصل شود.
شکل کلی گزینه دستگاه TPM به صورت زیر است:
- -tpmdev backend,id=id[,options]
- نوع مشخص
پسبخش (backend)،
گزینههای
قابل
استفاده را
تعیین
میکند.
گزینهٔ -tpmdev
پسبخش TPM را
ایجاد
میکند و
نیازمند یک
گزینهٔ -device
است که مدل
رابط
پیشبخش (frontend)
مربوط به TPM
را مشخص
کند.
برای چاپ همه انواع پسبخشهای موجود TPM از -tpmdev help استفاده کنید.
پسبخشهای دردسترس عبارتند از:
- -tpmdev passthrough,id=id,path=path,cancel-path=cancel-path
- (فقط میزبان
لینوکس)
فعالسازی
دسترسی به TPM
میزبان با
استفاده از
درایور passthrough.
path مسیر دستگاه TPM میزبان را مشخص میکند، به عنوان مثال، در میزبان لینوکس این مسیر /dev/tpm0 خواهد بود. path اختیاری است و به طور پیشفرض /dev/tpm0 استفاده میشود.
cancel-path مسیر ورودی sysfs دستگاه TPM میزبان را برای لغو یک دستور در حال اجرای TPM مشخص میکند. cancel-path اختیاری است و به طور پیشفرض QEMU برای یافتن مدخل sysfs جهت استفاده، جستجو خواهد کرد.
چند نکته درباره استفاده از TPM میزبان با درایور passthrough:
دستگاه TPM که توسط درایور passthrough مورد دسترسی قرار میگیرد، نباید توسط هیچ برنامه دیگری در میزبان استفاده شود.
از آنجا که سفتافزار (BIOS/UEFI) میزبان قبلاً TPM را مقداردهی اولیه کرده است، سفتافزار (BIOS/UEFI) ماشین مجازی (VM) قادر به مقداردهی اولیه مجدد آن نخواهد بود و بنابراین ممکن است منوی اختصاصی TPM را نمایش ندهد؛ منویی که در حالت عادی به کاربر اجازه پیکربندی TPM را میدهد، برای مثال اجازه فعال/غیرفعال کردن یا راهاندازی/متوقف کردن TPM. علاوه بر این، اگر مالکیت TPM از درون ماشین مجازی رها شود، TPM میزبان غیرفعال و خاموش خواهد شد. برای فعالسازی و راهاندازی دوباره TPM پس از آن، میزبان باید راهاندازی مجدد (reboot) شود و کاربر باید وارد منوی سفتافزار شود تا TPM را فعال و راهاندازی کند. اگر TPM در حالت غیرفعال و/یا راهاندازینشده باقی بماند، اکثر دستورات TPM ناموفق خواهند بود.
برای ایجاد یک TPM از نوع passthrough از دو گزینه زیر استفاده کنید:
-tpmdev passthrough,id=tpm0 -device tpm-tis,tpmdev=tpm0
توجه داشته باشید که شناسهٔ -tpmdev برابر tpm0 است و در گزینهٔ دستگاه با tpmdev=tpm0 به آن ارجاع داده میشود.
- -tpmdev emulator,id=id,chardev=dev
- (فقط میزبان
لینوکس)
فعالسازی
دسترسی به
شبیهساز TPM
با استفاده
از پسبخش chardev
مبتنی بر
سوکت دامنه
یونیکس (Unix domain socket).
chardev شناسه یکتای پسبخش دستگاه نویسهای (character device) را مشخص میکند که اتصال به کارساز نرمافزاری TPM را فراهم میسازد.
برای ایجاد یک دستگاه پسبخش شبیهساز TPM با پسبخش سوکت chardev:
-chardev socket,id=chrtpm,path=/tmp/swtpm-sock -tpmdev emulator,id=tpm0,chardev=chrtpm -device tpm-tis,tpmdev=tpm0
ویژگیهای تصویر بوت یا هسته (Boot Image or Kernel specific)
به طور کلی ۴ روش برای بوت کردن یک سیستم با QEMU وجود دارد:
- سفتافزاری را مشخص کرده و اجازه دهید یافتن هسته را کنترل کند
- سفتافزاری را مشخص کرده و اشارهای به هسته برای بوت شدن ارسال کنید
- بوت مستقیم تصویر هسته
- بارگذاری دستی فایلها در فضای آدرس مهمان
روش سوم برای آزمایش سریع هستهها مفید است، اما از آنجا که سفتافزاری وجود ندارد تا اطلاعات پیکربندی را به هسته منتقل کند، سختافزار یا باید قابل کاوش (probeable) باشد، هسته برای همان پیکربندی دقیق ساخته شده باشد، یا دادههای پیکربندی (مانند یک داده باینری DTB) به آن ارسال شود که به هسته اعلام کند به چه درایورهایی نیاز دارد. این جزئیات دقیق اغلب وابسته به سختافزار است.
روش آخر عمومیترین روش بارگذاری تصاویر در فضای آدرس مهمان است و بیشتر برای توسعه بر روی سختافزار خام (bare metal) استفاده میشود، جایی که بردارهای بازنشانی (reset vectors) پردازنده در نظر گرفته میشوند.
برای ماشینهای x86 و برخی از معماریهای دیگر، -bios معمولاً با هر آنچه به آن داده شود به درستی عمل میکند. برای سایر ماشینها، گزینهٔ سختگیرانهتر -pflash نیازمند تصویری است که اندازه آن متناسب با دستگاه فلش برای نوع ماشین مشخصشده باشد.
لطفاً برای مستندات دقیقتر، بخش QEMU System Emulator Targets <#system-targets-ref> راهنما را ببینید.
- -bios file
- نام فایل مربوط به BIOS را تنظیم میکند.
- -pflash file
- استفاده از file به عنوان یک تصویر فلش موازی (parallel flash).
گزینههای هسته برای کار با هستههای لینوکس طراحی شدهاند، هرچند موارد دیگر (مانند هایپروایزرها) نیز میتوانند به عنوان یک تصویر اجرایی هسته بستهبندی شوند. قالب دقیق یک تصویر اجرایی معمولاً وابسته به معماری است.
روشی که هسته راهاندازی میشود (در چه آدرسی بارگذاری شود، چه اطلاعاتی در صورت وجود از طریق ثباتهای CPU به آن منتقل شود، وضعیت سختافزار هنگام راهاندازی، و غیره) نیز وابسته به معماری است. معمولاً این روش از مشخصاتی پیروی میکند که توسط هسته لینوکس برای نحوه راهاندازی هستهها در آن معماری تعیین شده است.
- -kernel bzImage
- استفاده از bzImage به عنوان تصویر هسته. هسته میتواند یک هسته لینوکس یا در قالب multiboot باشد.
- -shim shim.efi
- استفاده از 'shim.efi' برای بوت کردن هسته
- -append cmdline
- استفاده از cmdline به عنوان خط فرمان هسته
- -initrd file
- استفاده از file به عنوان دیسک رم اولیه (initial ram disk).
- -initrd "file1 arg=foo,file2"
- این نحو
تنها با multiboot
دردسترس
است.
استفاده از file1 و file2 به عنوان ماژولها و ارسال arg=foo به عنوان پارامتر به ماژول نخست. ویرگولها را میتوان در پارامترهای ماژول با دو بار تکرار کردنشان در خط فرمان نادیدهگردانی (escape) کرد:
- -initrd "bzImage earlyprintk=xen,,keep root=/dev/xvda1,initrd.img"
- فقط Multiboot. استفاده از bzImage به عنوان ماژول نخست با "earlyprintk=xen,keep root=/dev/xvda1" به عنوان خط فرمان آن، و initrd.img به عنوان دومین ماژول.
- -dtb file
- استفاده از file به عنوان تصویر دودویی درخت دستگاه (dtb) و ارسال آن به هسته هنگام بوت.
در نهایت، میتوانید تصاویر را به صورت دستی مستقیماً در فضای آدرس مهمان بارگذاری کنید. این روش بیشتر برای توسعهدهندگانی مفید است که از پیش چیدمان مهمان خود را میدانند و اطمینان حاصل میکنند که هنگام اجرای بردار بازنشانی (reset vector) اتفاق معقولی رخ خواهد داد.
بارگذار عمومی را میتوان با استفاده از دستگاه loader فراخوانی کرد:
-device loader,addr=<addr>,data=<data>,data-len=<data-len>[,data-be=<data-be>][,cpu-num=<cpu-num>]
همچنین guest loader نیز وجود دارد که به شیوهای مشابه عمل میکند اما DTB را تغییر میدهد تا هایپروایزری که از طریق -kernel بارگذاری شده است بتواند مکان تصویر مهمان را بیابد:
-device guest-loader,addr=<addr>[,kernel=<path>,[bootargs=<arguments>]][,initrd=<path>].SS گزینههای اشکالزدایی/پیشرفته (Debug/Expert options)
- -compat [deprecated-input=<input-policy>][,deprecated-output=<output-policy>]
- تنظیم خطمشی برای مدیریت رابطهای مدیریتی منسوخشده (آزمایشی):
- deprecated-input=accept (پیشفرض)
- پذیرش دستورات و آرگومانهای منسوخشده
- deprecated-input=reject
- رد دستورات و آرگومانهای منسوخشده
- deprecated-input=crash
- فروپاشی (Crash) در هنگام مواجهه با دستورات و آرگومانهای منسوخشده
- deprecated-output=accept (پیشفرض)
- ارسال نتایج و رویدادهای دستورات منسوخشده
- deprecated-output=hide
- پنهانسازی نتایج و رویدادهای دستورات منسوخشده
محدودیت: تنها جنبههای نحوی QMP را پوشش میدهد.
- -compat [unstable-input=<input-policy>][,unstable-output=<output-policy>]
- تنظیم خطمشی برای مدیریت رابطهای مدیریتی ناپایدار (آزمایشی):
- unstable-input=accept (پیشفرض)
- پذیرش دستورات و آرگومانهای ناپایدار
- unstable-input=reject
- رد دستورات و آرگومانهای ناپایدار
- unstable-input=crash
- فروپاشی در هنگام مواجهه با دستورات و آرگومانهای ناپایدار
- unstable-output=accept (پیشفرض)
- ارسال نتایج و رویدادهای دستورات ناپایدار
- unstable-output=hide
- پنهانسازی نتایج و رویدادهای دستورات ناپایدار
محدودیت: تنها جنبههای نحوی QMP را پوشش میدهد.
- -fw_cfg [name=]name,file=file
- افزودن مدخل نامگذاریشده fw_cfg با محتویات برگرفته از فایل file. اگر نام فایل حاوی کاما است، باید آن را دو بار تکرار کنید (برای نمونه، "file=my,,file" برای استفاده از فایل "my,file").
- -fw_cfg [name=]name,string=str
- افزودن
مدخل
نامگذاریشده
fw_cfg با
محتویات
برگرفته از
رشته str. اگر
رشته حاوی
کاما است،
باید آن را
دو بار
تکرار کنید
(برای
نمونه،
"string=my,,string" برای
استفاده از
فایل "my,string").
نویسه پایانی NUL در محتویات str به عنوان بخشی از دادههای آیتم fw_cfg لحاظ نخواهد شد. برای درج محتویات حاوی نویسههای NUL درونی، باید از پارامتر file استفاده کنید.
مدخلهای fw_cfg توسط QEMU به سیستمعامل مهمان منتقل میشوند.
مثال:
-fw_cfg name=opt/com.mycompany/blob,file=./my_blob.bin
یک مدخل fw_cfg به نام opt/com.mycompany/blob با محتویاتی از
- -serial dev
- هدایت
درگاه
سریال
مجازی به
دستگاه
نویسهای
(character device) میزبان dev.
دستگاه
پیشفرض در
حالت
گرافیکی vc
و در حالت
غیرگرافیکی
stdio است.
این گزینه را میتوان چندین بار برای شبیهسازی چندین درگاه سریال به کار برد.
میتوانید از -serial none برای جلوگیری از ایجاد دستگاههای سریال پیشفرض استفاده کنید.
دستگاههای نویسهای موجود عبارتند از:
- vc[:WxH]
- کنسول مجازی. به صورت اختیاری، میتوان عرض و ارتفاع را بر حسب پیکسل مشخص کرد:
vc:800x600
همچنین امکان تعیین عرض یا ارتفاع بر حسب نویسه وجود دارد:
vc:80Cx24C
- pty[:path]
- [تنها در
لینوکس]
شبهترمینال
(یک PTY جدید به
طور خودکار
اختصاص
مییابد).
در صورت مشخص شدن path، QEMU یک پیوند نمادین (symlink) در آن مکان ایجاد میکند که به دستگاه PTY جدید اشاره دارد.
این کار از نیاز به پرسوجو از مانیتور QMP یا HMP برای یافتن مسیر دستگاه PTY جدید جلوگیری میکند.
توجه داشته باشید که اگرچه QEMU هنگام خروج عادی پیوند نمادین را حذف میکند، اما در هنگام فروپاشی یا خطاهای خاص راهاندازی این کار را انجام نمیدهد. توصیه میشود کاربر پس از خاتمه QEMU، پیوند نمادین را بررسی و حذف کند.
- none
- هیچ دستگاهی اختصاص داده نمیشود. توجه داشته باشید برای نوع ماشینهایی که سیستمهایی با حضور دائمی دستگاه سریال در سختافزار واقعی را شبیهسازی میکنند، این ممکن است معادل گزینه null باشد، بدین صورت که دستگاه سریال همچنان وجود دارد اما تمام خروجیها دور ریخته میشوند. برای بردهایی که تعداد درگاههای سریال واقعاً متغیر است، این گزینه از ایجاد دستگاه جلوگیری میکند.
- null
- سیستمعامل مهمان دستگاه UART یا سریال را در ماشین حاضر میبیند، اما تمام خروجیها دور ریخته شده و هیچ ورودی وجود ندارد. این مفهوم معادل هدایت خروجی به /dev/null است.
- chardev:id
- استفاده از یک دستگاه نویسهای نامگذاریشده که با گزینه -chardev تعریف شده است.
- /dev/XXX
- [تنها در لینوکس] استفاده از tty میزبان، به عنوان مثال /dev/ttyS0. پارامترهای درگاه سریال میزبان مطابق با پارامترهای شبیهسازیشده تنظیم میشوند.
- /dev/parportN
- [تنها در لینوکس، فقط درگاه موازی] استفاده از درگاه موازی N میزبان. در حال حاضر امکان استفاده از قابلیتهای درگاه موازی SPP و EPP وجود دارد.
- file:filename
- نوشتن خروجی در filename. هیچ نویسهای قابل خواندن نیست.
- stdio
- [تنها در یونیکس] ورودی/خروجی استاندارد
- pipe:filename
- لوله نامگذاریشده (named pipe) filename
- COMn
- [تنها در ویندوز] استفاده از درگاه سریال n میزبان
- udp:[remote_host]:remote_port[@[src_ip]:src_port]
- این گزینه UDP Net
Console را
پیادهسازی
میکند. در
صورتی که remote_host
یا src_ip مشخص
نشوند،
پیشفرض
آنها 0.0.0.0
خواهد بود.
در صورت عدم
تعیین src_port، یک
درگاه
تصادفی به
طور خودکار
انتخاب
میشود.
اگر صرفاً یک کنسول ساده فقطخواندنی میخواهید، میتوانید از netcat یا nc استفاده کنید؛ با اجرای QEMU با: -serial udp::4555 و nc به صورت: nc -u -l -p 4555. هر زمان که QEMU چیزی روی آن درگاه بنویسد، در نشست netconsole نمایان خواهد شد.
اگر قصد دارید نویسهها را از طریق netconsole بازگردانید یا میخواهید QEMU را مکرراً متوقف و راهاندازی کنید، باید کاری کنید که QEMU هر بار با استفاده از دستوری مانند -serial udp::4555@:4556 از همان درگاه مبدا یکسان استفاده کند. روش دیگر، استفاده از نسخه وصلهشدهای از netcat است که میتواند به یک درگاه TCP گوش دهد و نویسهها را از طریق udp ارسال و دریافت کند. اگر نسخهای وصلهشده از netcat دارید که telnet remote echo و انتقال تکنویسهای (single char) را فعال میکند، میتوانید از گزینههای زیر برای راهاندازی یک بازهدایتکننده netcat استفاده کنید تا به telnet روی درگاه 5555 اجازه دسترسی به درگاه QEMU داده شود.
- گزینههای netcat:
- -u -P 4555 -L 0.0.0.0:4556 -t -p 5555 -I -T
- گزینههای telnet:
- localhost 5555
- tcp:[host]:port[,server=on|off][,wait=on|off][,nodelay=on|off][,reconnect-ms=milliseconds]
- کنسول شبکه TCP دارای دو حالت عملیاتی است. میتواند ورودی/خروجی (I/O) سریال را به یک مکان ارسال کند یا منتظر برقراری اتصال از یک مکان بماند. بهطور پیشفرض، کنسول شبکه TCP به host در port ارسال میشود. اگر از گزینه server=on استفاده کنید، QEMU پیش از ادامه کار منتظر میماند تا یک برنامه کلاینت سوکت به پورت متصل شود، مگر اینکه گزینه wait=on|off مشخص شده باشد. گزینه nodelay=on|off الگوریتم بافرینگ Nagle را غیرفعال میکند. گزینه reconnect-ms فقط زمانی اعمال میشود که server=no تنظیم شده باشد؛ در این حالت اگر اتصال قطع شود، تلاش میکند در بازه زمانی تعیینشده دوباره متصل شود. اگر host حذف شود، 0.0.0.0 فرض میشود. در هر لحظه تنها یک اتصال TCP پذیرفته میشود. میتوانید از telnet=on برای اتصال به دستگاه نویسهای (character device) متناظر استفاده کنید.
- مثال برای ارسال کنسول tcp به 192.168.0.2 در پورت 4444
- -serial <tcp:192.168.0.2:4444>
- مثال برای گوش دادن و انتظار برای اتصال در پورت 4444
- -serial <tcp::4444,server=on>
- مثال برای گوش دادن روی IP 192.168.0.100 پورت 4444 بدون انتظار
- -serial <tcp:192.168.0.100:4444,server=on,wait=off>
- telnet:host:port[,server=on|off][,wait=on|off][,nodelay=on|off]
- پروتکل telnet بهجای سوکتهای خام tcp استفاده میشود. گزینهها دقیقاً مانند حالتی کار میکنند که -serial tcp را مشخص کرده باشید. تفاوت در این است که پورت با استفاده از مذاکره گزینههای telnet، مانند یک سرور یا کلاینت telnet عمل میکند. این کار همچنین به شما اجازه میدهد تا در صورت استفاده از telnetای که از ارسال توالی break پشتیبانی میکند، توالی MAGIC_SYSRQ را ارسال کنید. معمولاً در telnet یونیکس این کار با Control-] و سپس تایپ "send break" و فشردن کلید اینتر انجام میشود.
- websocket:host:port,server=on[,wait=on|off][,nodelay=on|off]
- پروتکل WebSocket بهجای سوکت خام tcp استفاده میشود. پورت به عنوان یک سرور WebSocket عمل میکند. حالت کلاینت پشتیبانی نمیشود.
- unix:path[,server=on|off][,wait=on|off][,reconnect-ms=milliseconds]
- یک سوکت دامنه یونیکس (unix domain socket) بهجای سوکت tcp استفاده میشود. این گزینه مانند حالتی کار میکند که -serial tcp را مشخص کرده باشید، به جز اینکه از مسیر سوکت دامنه یونیکس برای اتصالها استفاده میشود.
- mon:dev_string
- این یک
گزینه ویژه
است که
اجازه
میدهد
مانیتور
روی یک
درگاه
سریال دیگر
تسهیم (multiplex)
شود. دسترسی
به مانیتور
با کلیدهای
ترتیبی Control-a و
سپس فشردن c
امکانپذیر
است. dev_string باید
یکی از
دستگاههای
سریال
مشخصشده
در بالا
باشد. یک
مثال برای
تسهیم
مانیتور
روی یک سرور
telnet که در پورت
4444 گوش
میدهد:
-serial mon:telnet::4444,server=on,wait=off
هنگامی که مانیتور به این روش روی stdio تسهیم میشود، دیگر کلید Ctrl+C باعث خاتمه QEMU نخواهد شد، بلکه به سیستمعامل میهمان هدایت میشود.
- braille
- دستگاه بریل. این گزینه از BrlAPI برای نمایش خروجی بریل روی یک دستگاه واقعی یا مجازی استفاده میکند.
- msmouse
- ماوس سریال سه کلیده. سیستمعامل میهمان را برای استفاده از پروتکل Microsoft پیکربندی کنید.
- -parallel dev
- تغییر مسیر
درگاه
موازی
مجازی به
دستگاه
میزبان dev
(همان
دستگاههای
درگاه
سریال). در
میزبانهای
لینوکس،
میتوان از
/dev/parportN برای
استفاده از
دستگاههای
سختافزاری
متصل به
درگاه
موازی
متناظر در
میزبان
استفاده
کرد.
این گزینه میتواند چندین بار برای شبیهسازی تا ۳ درگاه موازی استفاده شود.
برای غیرفعال کردن همه درگاههای موازی از -parallel none استفاده کنید.
- -monitor dev
- تغییر مسیر
مانیتور به
دستگاه
میزبان dev
(همان
دستگاههای
درگاه
سریال).
دستگاه
پیشفرض در
حالت
گرافیکی vc
و در حالت
غیرگرافیکی
stdio است. برای
غیرفعال
کردن
مانیتور
پیشفرض از
-monitor none
استفاده
کنید.
استفاده از -monitor dev یک تسهیل نحوی برای ایجاد یک دستگاه نویسهای از dev و جفت کردن آن با -object monitor-hmp است. به هر دو دستگاه نویسهای و شیء مانیتور یک شناسه (ID) به صورت compat_monitorNNN اختصاص مییابد که در آن NNN یک شمارنده از 0 است.
- -qmp dev
- مانند -monitor است، اما در حالت 'control' باز میشود. برای مثال، جهت در دسترس قرار دادن QMP روی پورت 4444 در localhost:
-qmp tcp:localhost:4444,server=on,wait=off
استفاده از -qmp dev یک تسهیل نحوی برای ایجاد یک دستگاه نویسهای از dev و جفت کردن آن با -object monitor-qmp است. به هر دو دستگاه نویسهای و شیء مانیتور یک شناسه به صورت compat_monitorNNN اختصاص مییابد که در آن NNN یک شمارنده از 0 است.
- -qmp-pretty dev
- مانند -qmp است، اما از قالببندی خوانای JSON استفاده میکند.
- -mon [chardev=]name[,mode=readline|control][,pretty=on|off]
- راهاندازی
یک مانیتور
متصل به chardev با
نام name. QEMU از
دو مانیتور
پشتیبانی
میکند: Human Monitor Protocol
(HMP؛ برای
تعامل
کاربر
انسان)، و QEMU Monitor
Protocol (QMP؛ یک
پروتکل بر
پایه JSON RPC).
پیشفرض HMP
است؛ مقدار
mode=control بهجای
آن QMP را
انتخاب
میکند.
گزینه pretty
فقط زمانی
معتبر است
که mode=control
باشد، که با
فعال کردن
چاپ خوانای
JSON خواندن و
اشکالزدایی
را برای
انسان
آسانتر
میکند.
برای مثال:
-chardev socket,id=mon1,host=localhost,port=4444,server=on,wait=off \ -mon chardev=mon1,mode=control,pretty=on
مانیتور QMP را روی پورت 4444 در localhost به همراه چاپ زیبا فعال میکند.
استفاده از -mon mode=readline یک تسهیل نحوی منسوخشده برای گزینه جدید -object monitor-hmp است، که هر بار استفاده از آن یک شیء با شناسه compat_monitorNNN ایجاد میکند که در آن NNN یک شمارنده شروع شونده از 0 است.
استفاده از -mon mode=control یک تسهیل نحوی منسوخشده برای گزینه جدید -object monitor-qmp است، که هر بار استفاده از آن یک شیء با شناسه compat_monitorNNN ایجاد میکند که در آن NNN یک شمارنده شروع شونده از 0 است.
- -debugcon dev
- تغییر مسیر کنسول اشکالزدایی به دستگاه میزبان dev (همان دستگاههای درگاه سریال). کنسول اشکالزدایی یک درگاه I/O است که معمولاً پورت 0xe9 است؛ نوشتن در این درگاه I/O خروجی را به این دستگاه ارسال میکند. دستگاه پیشفرض در حالت گرافیکی vc و در حالت غیرگرافیکی stdio است.
- -pidfile file
- ذخیره شناسه فرایند (PID) مربوط به فرایند QEMU در file. در صورتی که QEMU را از طریق یک اسکریپت اجرا میکنید، این گزینه مفید است.
- --preconfig
- متوقف کردن موقت QEMU برای پیکربندی تعاملی پیش از ایجاد ماشین، که امکان پرسوجو و پیکربندی ویژگیهای مؤثر بر مقداردهی اولیه ماشین را فراهم میسازد. از دستور QMP با عنوان 'x-exit-preconfig' برای خروج از وضعیت preconfig و رفتن به وضعیت بعدی استفاده کنید (یعنی اجرای میهمان در صورتی که -S استفاده نشده باشد، یا مکث بار دوم در صورت استفاده از -S). این گزینه آزمایشی است.
- -S
- در زمان راهاندازی CPU را آغاز نکن (باید در مانیتور 'c' را تایپ کنید).
- -overcommit mem-lock=on|off|on-fault
- -overcommit cpu-pm=on|off
- اجرای qemu به
همراه
راهنماییهایی
درباره
تخصیص بیش
از حد منابع
میزبان (host resource
overcommit). حالت
پیشفرض بر
این فرض
استوار است
که میزبان
همه منابع
را بیش از
حد تخصیص
میدهد..sp
قفلکردن
حافظهٔ qemu و
مهمان را
میتوان از
طریق mem-lock=on یا
mem-lock=on-fault فعال
کرد (بهطور
پیشفرض
غیرفعال
است). این
ویژگی
هنگامی کار
میکند که
حافظهٔ
میزبان
بیشازحد
تخصیص
نیافته
باشد (overcommit
نشده باشد)
و بدترین
حالت تأخیر
را برای
مهمان کاهش
میدهد.
گزینهٔ on-fault
برای کاهش
ردپای
حافظه بهتر
است چرا که
تخصیصها
را تنبل (lazy)
میسازد،
اما با این
وجود
صفحهها پس
از رخ دادن
نقص (fault) توسط
مهمان یا QEMU،
در جای خود
قفل
میشوند.
توجه داشته
باشید که
این دو
گزینه
مانعةالجمع
هستند.
توانایی مهمان برای مدیریت وضعیت توان پردازندههای میزبان (که باعث افزایش تأخیر برای سایر فرایندها روی همان پردازندهٔ میزبان شده، اما تأخیر را برای مهمان کاهش میدهد) میتواند از طریق cpu-pm=on فعال شود (بهطور پیشفرض غیرفعال است). این حالت زمانی بهترین کارایی را دارد که CPU میزبان بیشازحد تخصیص داده نشده باشد. در صورت استفاده، تخمینهای میزبان از چرخههای پردازنده و مصرف توان نادرست خواهند بود، چرا که زمان بیکاری (idle) مهمان را در نظر نمیگیرند.
- -gdb dev
- پذیرش یک
اتصال gdb روی
دستگاه dev
(فصل GDB usage <#gdb-usage> در
راهنمای
کاربران
شبیهسازی
سیستم را
ببینید).
توجه داشته
باشید که
این گزینه
اجرای QEMU را
متوقف
نمیکند --
اگر
میخواهید
QEMU تا زمانی
که با gdb متصل
نشدهاید و
دستور continue را
صادر
نکردهاید
مهمان را
آغاز نکند،
باید
گزینهٔ -S
را نیز به QEMU
ارسال کنید.
معمولترین پیکربندی، گوش دادن روی یک سوکت محلی TCP است:
-gdb tcp::3117
اما میتوانید backendهای دیگری را نیز مشخص کنید؛ UDP، شبه TTY، یا حتی stdio همگی موارد استفادهٔ معقولی هستند. برای مثال، یک اتصال stdio به شما اجازه میدهد QEMU را از درون gdb آغاز کرده و اتصال را از طریق یک لوله (pipe) برقرار کنید:
(gdb) target remote | exec qemu-system-x86_64 -gdb stdio ...
- -s
- کوتاهنوشتی برای -gdb <tcp::1234>، یعنی باز کردن یک gdbserver روی درگاه TCP به شمارهٔ 1234 (فصل GDB usage <#gdb-usage> در راهنمای کاربران شبیهسازی سیستم را ببینید).
- -d item1[,...]
- فعالسازی لاگبرداری از موارد مشخصشده. برای دیدن فهرست موارد لاگ از '-d help' استفاده کنید.
- -D logfile
- خروجی دادن لاگ در logfile به جای stderr
- -dfilter range1[,...]
- فیلتر کردن خروجی اشکالزدایی تنها به موارد مرتبط با یک محدوده از نشانیهای مقصد. مشخصهٔ فیلتر میتواند start+size، start-size یا start..end باشد که در آن start، end و size نشانیها و اندازههای مورد نیاز هستند. برای مثال:
-dfilter 0x8000..0x8fff,0xffffffc000080000+0x200,0xffffffc000060000-0x1000
خروجی را برای هر کدی در بلوک با اندازهٔ 0x1000 که از 0x8000 شروع میشود، بلوک با اندازهٔ 0x200 که از 0xffffffc000080000 شروع میشود، و بلوک دیگری با اندازهٔ 0x1000 که از 0xffffffc00005f000 شروع میشود، تخلیه (dump) خواهد کرد.
- -seed number
- اجبار مهمان به استفاده از یک تولیدکنندهٔ اعداد شبهتصادفی معین (deterministic)، که با number مقداردهی اولیه (seed) شده است. این گزینه بر روالهای رمزنگاری درون میزبان تأثیری ندارد.
- -L path
- تنظیم
دایرکتوری
برای BIOS، VGA BIOS و
نگاشت
کلیدها (keymaps).
برای فهرست کردن تمام دایرکتوریهای داده، از -L help استفاده کنید.
- -enable-kvm
- فعالسازی پشتیبانی از مجازیسازی کامل KVM. این گزینه تنها در صورتی در دسترس است که پشتیبانی KVM در زمان کامپایل فعال شده باشد.
- -xen-domid id
- مشخص کردن شناسهٔ دامنهٔ مهمان xen (فقط XEN).
- -xen-attach
- اتصال به دامنهٔ موجود xen. ابزار libxl هنگام راهاندازی QEMU از این گزینه استفاده خواهد کرد (فقط XEN). محدود کردن مجموعهٔ عملیاتهای دردسترس xen به شناسهٔ دامنهٔ مشخصشده (فقط XEN).
- -no-reboot
- خروج به جای راهاندازی مجدد (reboot).
- -no-shutdown
- هنگام خاموش شدن مهمان از QEMU خارج نشوید، بلکه فقط شبیهسازی را متوقف کنید. این به عنوان مثال اجازه میدهد برای اعمال تغییرات روی تصویر دیسک، به محیط monitor بروید.
- -action event=action
- پارامتر action
برای تغییر
رفتار
پیشفرض QEMU
در زمان رخ
دادن
رویدادهای
خاص مهمان
به کار
میرود. این
پارامتر یک
روش عمومی
برای تعیین
رفتارهایی
فراهم
میکند که
توسط
پارامترهای
-no-reboot و -no-shutdown
تغییر
مییابند.
مثالها:
-action panic=none -action reboot=shutdown,shutdown=pause -device i6300esb -action watchdog=pause
- -loadvm file
- شروع بلافاصله با یک وضعیت ذخیرهشده (loadvm در monitor)
- -daemonize
- دیمن کردن فرایند QEMU پس از مقداردهی اولیه. QEMU تا زمانی که برای دریافت اتصالات روی هر یک از دستگاههای خود آماده نباشد، از ورودی/خروجی استاندارد جدا نخواهد شد. این گزینه روشی مفید برای برنامههای بیرونی است تا QEMU را بدون مواجهه با شرایط رقابتی (race conditions) در زمان مقداردهی اولیه اجرا کنند.
- -option-rom file
- بارگذاری محتوای file به عنوان یک option ROM. این گزینه برای بارگذاری مواردی مانند EtherBoot مفید است.
- -rtc [base=utc|localtime|datetime][,clock=host|rt|vm][,driftfix=none|slew]
- تعیین base به
صورت utc یا
localtime تا RTC
بهترتیب
با زمان
فعلی UTC یا
محلی شروع
شود. localtime
برای تاریخ
صحیح در MS-DOS یا
Windows مورد نیاز
است. برای
شروع در یک
نقطهٔ
زمانی خاص،
datetime را در
قالب 2006-06-17T16:01:21
یا 2006-06-17 مشخص
کنید. مقدار
پایهٔ
پیشفرض UTC
است.
بهطور پیشفرض RTC توسط زمان سیستم میزبان هدایت میشود. این امر اجازه میدهد از RTC به عنوان یک ساعت مرجع دقیق در داخل مهمان استفاده شود، بهویژه اگر زمان میزبان به آرامی از یک ساعت مرجع خارجی دقیق، مثلاً از طریق NTP، پیروی کند. اگر میخواهید زمان مهمان را از میزبان جدا کنید، میتوانید در عوض clock را روی rt تنظیم کنید که در صورت پشتیبانی میزبان، یک ساعت یکنواخت (monotonic) میزبان فراهم میکند. حتی برای جلوگیری از پیشروی RTC در طول حالت تعلیق (suspension)، میتوانید clock را روی vm (ساعت مجازی) تنظیم کنید. استفاده از 'clock=vm' بهویژه در حالت icount برای حفظ رفتار قطعی (determinism) توصیه میشود؛ با این حال، توجه داشته باشید که در حالت icount سرعت ساعت مجازی متغیر است و بهطور کلی میتواند با ساعت میزبان متفاوت باشد.
اگر با مشکلات انحراف زمان (time drift)، بهویژه با ACPI HAL مربوط به Windows مواجه هستید، driftfix را فعال کنید (فقط مقصدهای i386). این گزینه تلاش میکند مشخص کند چه تعداد وقفهٔ تایمر توسط مهمان Windows پردازش نشده است و آنها را دوباره تزریق (re-inject) خواهد کرد.
- -icount [shift=N|auto][,align=on|off][,sleep=on|off][,rr=record|replay,rrfile=filename[,rrsnapshot=snapshot]]
- فعالسازی
شمارندهٔ
مجازی
دستورالعملها.
پردازندهٔ
مجازی در هر
2^N
نانوثانیه
از زمان
مجازی، یک
دستورالعمل
را اجرا
میکند. اگر
auto مشخص شده
باشد، سرعت
پردازندهٔ
مجازی
بهطور
خودکار
تنظیم
میشود تا
زمان مجازی
در محدودهٔ
چند ثانیه
از زمان
واقعی باقی
بماند.
توجه داشته باشید اگرچه این گزینه میتواند رفتار معین و قطعی ارائه دهد، اما شبیهسازی دقیق چرخهای (cycle accurate) فراهم نمیکند. پردازندههای مدرن حاوی هستههای superscalar با اجرای نامرتب (out of order) و سلسلهمراتب حافظهٔ نهان پیچیده هستند. تعداد دستورالعملهای اجراشده اغلب همبستگی اندکی با عملکرد واقعی دارد یا اصلاً همبستگی ندارد.
هنگامی که پردازندهٔ مجازی در حالت خواب باشد، زمان مجازی با سرعت پیشفرض پیش خواهد رفت مگر اینکه sleep=off مشخص شده باشد. با sleep=off، هر زمان که پردازندهٔ مجازی به حالت خواب برود، زمان مجازی فوراً به سررسید تایمر بعدی میپرد و در صورتی که هیچ تایمری فعال نباشد، پیش نخواهد رفت. این رفتار زمانهای اجرای قطعی را از دیدگاه مهمان فراهم میکند. در صورت فعال بودن icount، مقدار پیشفرض sleep=on است. sleep=off نمیتواند همراه با shift=auto یا align=on استفاده شود.
گزینهٔ align=on الگوریتم تأخیر را فعال میکند که تلاش خواهد کرد ساعت میزبان و ساعت مجازی را همگام کند. هدف این است که مهمان با فرکانس واقعی تحمیلشده توسط گزینهٔ shift اجرا شود. هر زمان که ساعت مهمان از ساعت میزبان عقب بماند و align=on مشخص شده باشد، پیامی به کاربر چاپ میکنیم تا او را از تأخیر مطلع کنیم. در حال حاضر این گزینه زمانی که shift برابر با auto باشد کار نمیکند. نکته: الگوریتم همگامسازی برای مقادیری از shift کار خواهد کرد که در آنها ساعت مهمان جلوتر از ساعت میزبان حرکت کند. این وضعیت معمولاً زمانی رخ میدهد که مقدار shift بالا باشد (اینکه چقدر بالا باشد به ماشین میزبان بستگی دارد). در صورت فعال بودن icount، مقدار پیشفرض align=off است..sp هنگامی که گزینه rr مشخص شود، قابلیت ضبط/بازپخش قطعی (deterministic record/replay) فعال میشود. گزینه rrfile= نیز باید برای مشخص کردن مسیر لاگ بازپخش ارائه شود. در حالت ضبط (record)، دادهها در این فایل نوشته میشوند و در حالت بازپخش (replay)، از آن خوانده میشوند. اگر گزینه rrsnapshot داده شود، نام یک اسنپشات ماشین مجازی را تعیین میکند. در حالت ضبط، یک اسنپشات جدید ماشین مجازی با نام دادهشده در شروع ضبط اجرا ایجاد میشود. در حالت بازپخش، این گزینه نام اسنپشاتی را مشخص میکند که برای بارگذاری وضعیت اولیه ماشین مجازی به کار میرود.
- -watchdog-action action
- این کنش
کنترل
میکند که
هنگام به
پایان
رسیدن
زمانسنج
سگ نگهبان
(watchdog timer)، کیومو (QEMU)
چه کاری
انجام دهد.
پیشفرض reset
است
(راهاندازی
مجدد
اجباری
مهمان).
کنشهای
ممکن دیگر
عبارتند از:
shutdown (تلاش
برای خاموش
کردن آرام
مهمان)، poweroff
(خاموش کردن
اجباری
مهمان)، inject-nmi
(تزریق یک NMI
به مهمان)،
pause (متوقف
کردن موقت
مهمان)، debug
(چاپ پیام
اشکالزدایی
و ادامه
دادن)، یا none
(کاری انجام
نده).
توجه داشته باشید که کنش shutdown مستلزم آن است که سیستمعامل مهمان به سیگنالهای ACPI پاسخ دهد، که ممکن است در موقعیتهایی که زمانسنج سگ نگهبان منقضی میشود قادر به انجام آن نباشد؛ بنابراین -watchdog-action shutdown برای استفاده در محیطهای عملیاتی توصیه نمیشود.
مثالها:
-device i6300esb -watchdog-action pause
- -echr numeric_ascii_value
- نویسه گریز
(escape character)
استفادهشده
برای رفتن
به مانیتور
هنگام
استفاده از
اشتراکگذاری
مانیتور و
درگاه
سریال را
تغییر
میدهد. در
صورت
استفاده از
گزینه -nographic
مقدار
پیشفرض 0x01
است. مقدار
0x01 معادل
فشردن Control-a
است.
میتوانید
نویسه
دیگری را از
میان
کلیدهای
کنترلی
اسکی (ASCII)
انتخاب
کنید که در
آن ۱ تا ۲۶
به Control-a تا Control-z
نگاشت
میشوند.
برای
نمونه،
میتوانید
از هر یک از
موارد زیر
برای تغییر
نویسه گریز
به Control-t
استفاده
کنید.
-echr 0x14; -echr 20
گزینه -incoming کانال مهاجرت را برای یک مهاجرت ورودی (incoming migration) تعیین میکند. میتوان از آن چندین بار برای تعیین چندین نوع کانال مهاجرت استفاده کرد. نوع کانال در <channel> مشخص میشود، یا برای سایر اشکال -incoming برابر با 'main' است. اگر چندین گزینه -incoming برای یک نوع کانال مشخص شود، آخرین مورد اولویت دارد.
- -incoming tcp:[host]:port[,to=maxport][,ipv4=on|off][,ipv6=on|off]
- -incoming rdma:host:port[,ipv4=on|off][,ipv6=on|off]
- آمادهسازی برای مهاجرت ورودی، گوش دادن روی درگاه tcp مشخصشده.
- -incoming unix:socketpath
- آمادهسازی برای مهاجرت ورودی، گوش دادن روی سوکت unix مشخصشده.
- -incoming fd:fd
- پذیرش مهاجرت ورودی از یک توصیفگر فایل (file descriptor) دادهشده.
- -incoming file:filename[,offset=offset]
- پذیرش مهاجرت ورودی از یک فایل مشخصشده از مبدا offset. مقدار offset پسوندهای معمول اندازه یا پیشوند 0x را میپذیرد، اما نه هر دو را همزمان.
- -incoming exec:cmdline
- پذیرش مهاجرت ورودی به عنوان خروجی از یک دستور خارجی مشخصشده.
- -incoming <channel>
- پذیرش مهاجرت ورودی روی کانال مهاجرت. برای ساختار نحوی <channel>، مستندات QAPI مربوط به MigrationChannel را ببینید. مثالها:
-incoming '{"channel-type": "main",
"addr": { "transport": "socket",
"type": "unix",
"path": "my.sock" }}'
-incoming main,addr.transport=socket,addr.type=unix,addr.path=my.sock
- -incoming defer
- منتظر ماندن برای مشخص شدن URI از طریق migrate_incoming. از مانیتور میتوان برای تغییر تنظیمات (مانند پارامترهای مهاجرت) پیش از صدور دستور migrate_incoming به منظور اجازه شروع مهاجرت استفاده کرد.
- -only-migratable
- تنها اجازه دادن به دستگاههای با قابلیت مهاجرت. دستگاهها مجاز نخواهند بود که به وضعیتی بدون قابلیت مهاجرت وارد شوند.
- -nodefaults
- دستگاههای پیشفرض ایجاد نشوند. بهطور معمول، QEMU دستگاههای پیشفرضی مانند درگاه سریال، درگاه موازی، کنسول مجازی، دستگاه مانیتور، آداپتور VGA، درایو فلاپی و CD-ROM و غیره را تنظیم میکند. گزینه -nodefaults تمام آن دستگاههای پیشفرض را غیرفعال خواهد کرد.
- -prom-env variable=value
- تنظیم متغیر nvram اوپنبایوس (OpenBIOS) روی مقدار دادهشده (فقط در PPC و SPARC).
qemu-system-sparc -prom-env 'auto-boot?=false' \ -prom-env 'boot-device=sd(0,2,0):d' -prom-env 'boot-args=linux single'
qemu-system-ppc -prom-env 'auto-boot?=false' \ -prom-env 'boot-device=hd:2,\yaboot' \ -prom-env 'boot-args=conf=hd:2,\yaboot.conf'
- -semihosting
- فعالسازی
حالت
سمیهاستینگ
(Semihosting) <#semihosting> (فقط
در ARM، M68K، Xtensa، MIPS و
RISC-V).
هشدار:
برای اطلاعات بیشتر در مورد امکاناتی که این گزینه فراهم میکند، مستندات گزینه -semihosting-config را ببینید.
- -semihosting-config [enable=on|off][,target=native|gdb|auto][,chardev=id][,userspace=on|off][,arg=str[,...]]
- فعالسازی
و پیکربندی
سمیهاستینگ
(Semihosting) <#semihosting> (فقط
در ARM، M68K، Xtensa، MIPS و
RISC-V).
هشدار:
- target=native|gdb|auto
- مشخص میکند که فراخوانیهای semihosting به کجا فرستاده شوند، به QEMU (native) یا به GDB (gdb). مقدار پیشفرض auto است، که در طول نشستهای اشکالزدایی به معنی gdb و در غیر این صورت native است.
- chardev=str1
- ارسال خروجی به یک پسانه chardev برای خروجی native یا auto در زمانی که درون gdb نیست
- userspace=on|off
- به کدهایی که در فضای کاربری (userspace) مهمان اجرا میشوند اجازه دسترسی به واسط semihosting را میدهد. مقدار پیشفرض این است که تنها کدهای ممتاز (privileged) مهمان میتوانند فراخوانیهای semihosting را انجام دهند. توجه داشته باشید که تنظیم userspace=on تنها در صورتی باید استفاده شود که تمام کدهای مهمان مورد اعتماد باشند (برای مثال، در کدهای مورد آزمون روی سختافزار خام [bare-metal]).
- arg=str1,arg=str2,...
- به کاربر اجازه میدهد آرگومانهای ورودی را منتقل کند، و میتواند چندین بار برای ایجاد یک فهرست استفاده شود. روش قدیمی -kernel/-append برای ارسال خط فرمان هنوز برای سازگاری با نسخههای پیشین پشتیبانی میشود. اگر هر دو مورد --semihosting-config arg و -kernel/-append مشخص شده باشند، اولی به semihosting داده میشود زیرا همواره اولویت دارد.
- -sandbox arg[,obsolete=string][,elevateprivileges=string][,spawn=string][,resourcecontrol=string]
- فعالسازی فیلتر فراخوانی سیستم در حالت ۲ سِککامپ (Seccomp mode 2). مقدار 'on' فیلتر کردن syscall را فعال کرده و 'off' آن را غیرفعال میکند. مقدار پیشفرض 'off' است.
- obsolete=string
- فعال کردن فراخوانیهای سیستمی منسوخشده (Obsolete).TP elevateprivileges=string غیرفعال کردن فراخوانهای سیستمی set*uid|gid
- spawn=string
- غیرفعال کردن *fork و execve
- resourcecontrol=string
- غیرفعال کردن وابستگی پردازه (process affinity) و اولویت زمانبند
- -readconfig file
- خواندن پیکربندی دستگاه از file. این رویکرد زمانی مفید است که بخواهید پردازهٔ QEMU را با گزینههای خط فرمان متعددی اجرا کنید، اما نخواهید از محدودیت تعداد نویسههای خط فرمان فراتر بروید.
- -no-user-config
- گزینهٔ -no-user-config باعث میشود QEMU هیچیک از فایلهای پیکربندی ارائهشده توسط کاربر در sysconfdir را بارگذاری نکند.
- -trace [[enable=]pattern][,events=file][,file=file]
- مشخص کردن
گزینههای
ردگیری (tracing).
[enable=]PATTERN
از -trace help برای چاپ فهرستی از نامهای نقاط ردگیری استفاده کنید.
events=FILE
file=FILE
- -plugin file=file[,argname=argvalue]
- بارگذاری یک افزونه (plugin).
- file=file
- بارگذاری افزونهٔ دادهشده از یک فایل کتابخانهٔ مشترک (shared library).
- argname=argvalue
- آرگومان ارسالی به افزونه. (میتواند چندین بار مشخص شود.)
- -run-with [async-teardown=on|off][,chroot=dir][,exit-with-parent=on|off][,user=username|uid:gid]
- تنظیم
گزینههای
چرخهٔ حیات
پردازهٔ QEMU.
async-teardown=on آزادسازی و خاتمهٔ ناهمگام (asynchronous teardown) را فعال میکند. پردازهٔ جدیدی به نام "cleanup/<QEMU_PID>" در زمان راهاندازی با استفاده از clone ایجاد میشود که فضای آدرس را با پردازهٔ اصلی QEMU به اشتراک میگذارد. این پردازه منتظر خاتمهٔ کامل پردازهٔ اصلی QEMU میماند و سپس خارج میشود. این ویژگی اجازه میدهد QEMU حتی در صورت حجیم بودن مهمان بسیار سریع خاتمه یابد، و پاکسازی فضای آدرس را به پردازهٔ cleanup واگذار کند. از آنجا که پردازهٔ cleanup در همان cgroups پردازهٔ اصلی QEMU مشترک است، محاسبهٔ مصرف منابع (accounting) بهدرستی انجام میشود. این قابلیت تنها زمانی کار میکند که پردازهٔ cleanup پیش از خاتمهٔ کامل پردازهٔ اصلی QEMU با سیگنال SIGKILL اجباراً متوقف نشود.
chroot=dir میتواند برای انجام chroot به شاخهٔ مشخصشده بلافاصله پیش از شروع اجرای مهمان استفاده شود. این گزینه بهویژه در ترکیب با user=... مفید است.
exit-with-parent=on باعث میشود در صورت خروج پردازهٔ والد QEMU، این پردازه نیز خارج شود. از این گزینه میتوان هنگامی استفاده کرد که QEMU به عنوان یک ابزار مقید (captive appliance) اجرا میشود، جایی که طول عمر ابزار به پردازهٔ والد وابسته است. در صورتی که پردازهٔ والد دچار فروپاشی (crash) شود، QEMU همچنان پاکسازی میشود. این ویژگی تنها روی پلتفرمهای Linux، FreeBSD و macOS کار میکند.
user=username یا user=uid:gid میتواند برای سلب دسترسیهای کاربر ریشه (root) پیش از شروع اجرای مهمان به کار رود. QEMU از فراخوانهای سیستمی setuid و setgid برای جابهجایی به هویت مشخصشده استفاده خواهد کرد. توجه داشته باشید که ساختار دستوری user=username همچنین مجموعهٔ کامل گروههای تکمیلی (supplementary groups) کاربر را اعمال میکند، در حالی که user=uid:gid تنها از گروه gid استفاده خواهد کرد.
- -msg [timestamp=on|off][,guest-name=on|off]
- کنترل قالب پیام خطا.
- timestamp=on|off
- افزودن برچسب زمانی به ابتدای پیامها. پیشفرض off است.
- guest-name=on|off
- افزودن نام مهمان به ابتدای پیامها، اما تنها در صورتی که گزینهٔ -name guest تنظیم شده باشد؛ در غیر این صورت این گزینه نادیده گرفته میشود. پیشفرض off است.
- -dump-vmstate file
- تخلیهٔ اطلاعات vmstate با کدگذاری json برای نوع ماشین فعلی در فایل file
- -enable-sync-profile
- فعالسازی نمایهسازی همگامسازی (synchronization profiling).
- -perfmap
- تولید یک فایل نگاشت (map) برای ابزارهای perf لینوکس که امکان تفکیک اطلاعات پایهای نمایهسازی را به بلوکهای اساسی (basic blocks) فراهم میکند.
- -jitdump
- تولید یک فایل dump برای ابزارهای perf لینوکس که بلوکهای اساسی را به نام نمادها، شماره خطوط و کدهای کامپایلشده توسط JIT نگاشت میکند.
- -object typename[,prop1=value1,...]
- یک شیء جدید از نوع typename ایجاد میکند و ویژگیها را به همان ترتیبی که مشخص شدهاند تنظیم مینماید. توجه داشته باشید که ویژگی 'id' حتماً باید تنظیم شود. این اشیاء در مسیر '/objects' قرار میگیرند.
- -object monitor-hmp,id=id,chardev=chardev_id,readline=on|off
- یک مانیتور
بر بستر Human Monitor Protocol
راهاندازی
میکند که
به chardev با
شناسهٔ chardev_id
متصل است.
پارامتر id یک شناسهٔ یکتا است که میتواند برای حذف پویای مانیتور در زمان اجرا به کار رود. توجه داشته باشید به مانیتورهایی که با استفاده از نحو قدیمی ایجاد شدهاند، شناسههایی مطابق با الگوی compat_monmitorNNN اختصاص مییابد. ترکیب نحو -object با نحو -monitor توصیه نمیشود.
پارامتر readline، که مقدار پیشفرض آن on است، مشخص میکند که آیا مانیتور قابلیت ویرایش خط (line editing) را فراهم کند یا خیر.
- -object monitor-qmp,id=id,chardev=chardev_id,pretty=on|off,close-action=none|delete
- یک مانیتور
بر بستر QEMU Monitor Protocol
راهاندازی
میکند که
به chardev با
شناسهٔ chardev_id
متصل است.
پارامتر id یک شناسهٔ یکتا است که میتواند برای حذف پویای مانیتور در زمان اجرا به کار رود. توجه داشته باشید به مانیتورهایی که با استفاده از نحو قدیمی ایجاد شدهاند، شناسههایی مطابق با الگوی compat_monitorNNN اختصاص مییابد. ترکیب نحو -object با نحو -qmp و -qmp-pretty توصیه نمیشود.
پارامتر pretty، که مقدار پیشفرض آن off است، کنترل میکند که آیا پاسخهای مانیتور بهصورت JSON چندخطی و با فاصلهگذاری مناسب (pretty print) نمایش یابند یا اینکه به یک خط منفرد بدون فاصلههای خالی اضافه محدود شوند.
پارامتر close-action، که مقدار پیشفرض آن none است، تعیین میکند هنگامی که اتصال به مانیتور توسط کاربر پایان مییابد، چه اتفاقی بیفتد. اگر روی delete تنظیم شود، شیء monitor-qmp و دستگاه کاراکتری مرتبط با آن هر دو بلافاصله حذف میشوند. این ویژگی میتواند زمانی مفید باشد که یک مانیتور اضافی برای کاری مشخص بهصورت گرم متصل (hotplug) شده باشد و پس از اتمام باید جدا شود.
- -object memory-backend-file,id=id,size=size,mem-path=dir,share=on|off,discard-data=on|off,merge=on|off,dump=on|off,prealloc=on|off,host-nodes=host-nodes,policy=default|preferred|bind|interleave,align=align,offset=offset,readonly=on|off,rom=on|off|auto
- یک شیء
پسزمینهٔ
حافظه
مبتنی بر
فایل ایجاد
میکند که
میتواند
برای
پشتیبانی
از RAM مهمان
با
صفحههای
بزرگ (huge pages)
استفاده
شود.
پارامتر id یک شناسهٔ یکتا است که برای ارجاع به این ناحیهٔ حافظه در سایر پارامترها، مانند -numa، -device nvdimm و غیره استفاده خواهد شد.
گزینهٔ size اندازهٔ ناحیهٔ حافظه را مشخص میکند و پسوندهای رایج مانند 500M را میپذیرد.
گزینهٔ mem-path مسیر یک حافظهٔ اشتراکی (shared memory) یا نقطهٔ اتصال سیستمفایل huge page را ارائه میدهد.
گزینهٔ بولی share تعیین میکند که ناحیهٔ حافظه برای QEMU بهصورت خصوصی علامتگذاری شود یا اشتراکی. حالت دوم به یک فرایند خارجی همکار اجازه میدهد به ناحیهٔ حافظهٔ QEMU دسترسی داشته باشد.
تنظیم share=on ممکن است در برخی شرایط بر توانایی پیکربندی اتصالات NUMA برای پسزمینهٔ حافظه اثر بگذارد؛ برای جزئیات بیشتر به Documentation/vm/numa_memory_policy.txt در درخت کد منبع هستهٔ لینوکس مراجعه کنید.
تنظیم گزینهٔ بولی discard-data روی on مشخص میکند که محتویات فایل میتوانند هنگام خروج QEMU از بین بروند تا از انتقال غیرضروری دادهها به فایل پشتیبان جلوگیری شود. توجه داشته باشید که discard-data صرفاً یک بهینهسازی است و اگر QEMU بهطور غیرمنتظره متوقف شود یا با سیگنال SIGKILL خاتمه یابد، ممکن است محتویات فایل را دور نریزد.
گزینهٔ بولی merge ادغام حافظه را که به نام MADV_MERGEABLE نیز شناخته میشود فعال میکند، تا قابلیت Kernel Samepage Merging صفحهها را برای حذف دادههای تکراری حافظه (deduplication) در نظر بگیرد.
تنظیم گزینهٔ بولی dump روی off حافظه را از تخلیهٔ حافظهٔ خرابی (core dump) مستثنی میکند. این ویژگی همچنین به عنوان MADV_DONTDUMP شناخته میشود.
گزینهٔ بولی prealloc پیشتخصیص حافظه را فعال میکند.
گزینهٔ host-nodes محدودهٔ حافظه را به فهرستی از گرههای میزبان NUMA مقید میکند.
گزینهٔ policy سیاست NUMA را روی یکی از مقادیر زیر تنظیم میکند:
- default
- سیاست پیشفرض میزبان
- preferred
- ترجیح دادن فهرست گرههای میزبان دادهشده برای تخصیص
- bind
- محدود کردن تخصیص حافظه به فهرست گرههای میزبان دادهشده
- interleave
- توزیع متناوب (interleave) تخصیصهای حافظه میان فهرست گرههای میزبان دادهشده
گزینهٔ align همترازی آدرس پایه را هنگام فراخوانی mmap(2) روی mem-path توسط QEMU مشخص میکند و پسوندهای رایج مانند 2M را میپذیرد. برخی از فضاهای ذخیرهسازی پسزمینه که با mem-path مشخص میشوند، به همترازی متفاوتی از همترازی پیشفرض مورد استفادهٔ QEMU نیاز دارند؛ برای نمونه، دستگاه DAX به نشانی /dev/dax0.0 بهجای 4K به همترازی 2M نیاز دارد. در چنین مواردی، کاربران میتوانند همترازی لازم را از طریق این گزینه تعیین کنند.
گزینهٔ offset آفست درون فایل مقصد را که ناحیه از آنجا شروع میشود مشخص میکند. میتوانید از این پارامتر برای پشتیبانی از چند ناحیه با یک فایل واحد استفاده کنید.
گزینهٔ pmem مشخص میکند که آیا فایل پشتیبان مشخصشده توسط mem-path روی حافظهٔ پایدار میزبان قرار دارد که با استفاده از مدل برنامهنویسی SNIA NVM (مانند Intel NVDIMM) قابل دسترسی است یا خیر. اگر pmem روی 'on' تنظیم شده باشد، QEMU عملیات لازم را برای تضمین پایداری نوشتنهای خود در mem-path انجام میدهد (مثلاً در شبیهسازی برچسب vNVDIMM و مهاجرت زنده). همچنین، فایل پسزمینه با پرچم MAP_SYNC نگاشت خواهد شد، که تضمین میکند متادادههای فایل برای mem-path در صورت خرابی میزبان یا قطع برق همگام بمانند. پرچم MAP_SYNC نیازمند پشتیبانی هم از جانب هستهٔ میزبان (از لینوکس 4.15 به بعد) و هم سیستمفایلِ mem-path متصلشده با گزینهٔ DAX است.
گزینهٔ readonly مشخص میکند که فایل پشتیبان بهصورت فقطخواندنی یا خواندن-نوشتن (پیشفرض) باز شود.
گزینهٔ rom تعیین میکند که آیا یک حافظهٔ فقطخواندنی (ROM) ایجاد شود که توسط ماشین مجازی قابل تغییر نباشد یا خیر. هرگونه تلاش برای نوشتن روی چنین ROM رد خواهد شد. در بیشتر موارد، RAM عادی بهجای ROM مورد نیاز است. با این حال، موارد استفادهٔ خاصی مانند NVDIMMهای فقطخواندنی (R/O) میتوانند از ROM بهره ببرند. اگر روی on تنظیم شود، ROM ایجاد میکند؛ اگر روی off تنظیم شود، RAM قابل نوشتن ایجاد میکند؛ و اگر روی auto (پیشفرض) تنظیم شود، از مقدار گزینهٔ readonly استفاده میشود. این گزینه در وهلهٔ اول زمانی مفید است که بخواهیم در پیکربندیهایی که پیش از معرفی گزینهٔ rom بهطور سنتی ROM ایجاد میکردند، RAM قابل نوشتن داشته باشیم: مانند الگوسازی ماشین مجازی (VM templating)، جایی که میخواهیم فایلی را بهصورت فقطخواندنی باز کنیم (readonly=on) و حافظه را برای QEMU اختصاصی علامت بزنیم (share=off). برای این کاربرد، بهجای ROM به RAM قابل نوشتن نیاز داریم و همچنین میخواهیم rom=off را تنظیم نماییم.
- -object memory-backend-ram,id=id,merge=on|off,dump=on|off,share=on|off,prealloc=on|off,size=size,host-nodes=host-nodes,policy=default|preferred|bind|interleave
- یک شیء پسزمینهٔ حافظه ایجاد میکند که میتواند برای پشتیبانی از RAM مهمان استفاده شود. اشیاء پسزمینهٔ حافظه کنترل بیشتری نسبت به گزینهٔ -m، که بهطور سنتی برای تعریف RAM مهمان استفاده میشود، فراهم میکنند. لطفاً برای شرح گزینهها به memory-backend-file مراجعه کنید.
- -object memory-backend-memfd,id=id,merge=on|off,dump=on|off,share=on|off,prealloc=on|off,size=size,host-nodes=host-nodes,policy=default|preferred|bind|interleave,seal=on|off,hugetlb=on|off,hugetlbsize=size
- یک شیء
پسزمینهٔ
فایل
حافظهٔ
ناشناس (anonymous)
ایجاد
میکند که
به QEMU امکان
میدهد
حافظه را با
یک فرایند
خارجی به
اشتراک
بگذارد
(برای نمونه
هنگام
استفاده از
vhost-user). حافظه با
memfd و قابلیت
اختیاری
مهروموم
کردن (sealing)
تخصیص
مییابد.
(فقط
لینوکس)
گزینهٔ seal یک فایل مهرومومشده ایجاد میکند که مانع از تغییر اندازهٔ بیشتر حافظه در آینده میشود (بهطور پیشفرض 'on').
گزینهٔ hugetlb مشخص میکند که فایلِ ایجادشده در سیستمفایل hugetlbfs قرار گیرد (از نسخهٔ 4.14 لینوکس). در صورت استفاده همراه با گزینهٔ hugetlb، گزینهٔ hugetlbsize اندازهٔ صفحهٔ hugetlb را در سیستمهایی که از چندین اندازهٔ صفحهٔ hugetlb پشتیبانی میکنند تعیین میکند (باید مقداری توانی از ۲ و مورد پشتیبانی سیستم باشد).
در برخی از نسخههای لینوکس، گزینهٔ hugetlb با گزینهٔ seal ناسازگار است (حداقل به لینوکس 4.16 نیاز دارد).
لطفاً برای شرح سایر گزینهها به memory-backend-file مراجعه کنید.
گزینهٔ بولی share همراه با memfd بهطور پیشفرض روی on قرار دارد..TP -object memory-backend-shm,id=id,merge=on|off,dump=on|off,share=on|off,prealloc=on|off,size=size,host-nodes=host-nodes,policy=default|preferred|bind|interleave یک شیء پسزمینهٔ حافظهٔ مشترک POSIX ایجاد میکند که به QEMU اجازه میدهد حافظه را با یک فرایند خارجی (مثلاً هنگام استفاده از vhost-user) به اشتراک بگذارد.
memory-backend-shm یک نسخهٔ قابلحملتر و با قابلیتهای کمتر نسبت به memory-backend-memfd است. بنابراین میتوان آن را در هر سیستم POSIX، بهویژه زمانی که memfd پشتیبانی نمیشود، استفاده کرد.
لطفاً برای شرح گزینهها به memory-backend-file مراجعه کنید.
گزینهٔ بولی share در shm بهطور پیشفرض روشن (on) است. تنظیم آن روی off باعث بروز شکست هنگام تخصیص خواهد شد، زیرا توسط این پسزمینه پشتیبانی نمیشود.
- -object iommufd,id=id[,fd=fd]
- یک
پسزمینهٔ
iommufd ایجاد
میکند که
امکان
کنترل
نگاشت DMA را
از طریق
دستگاه /dev/iommu
فراهم
میسازد.
پارامتر id یک شناسهٔ یکتا است که پیشانهها (مانند vfio-pci یا vdpa) برای اتصال به پسزمینهٔ iommufd از آن استفاده خواهند کرد.
پارامتر fd یک توصیفگر فایل اختیاری از قبل بازشده حاصل از باز کردن /dev/iommu است. معمولاً iommufd میان تمام زیرسیستمها به اشتراک گذاشته میشود که مزیت شمارش مراجع متمرکز را به همراه دارد.
- -object rng-builtin,id=id
- یک پسزمینهٔ تولیدکنندهٔ اعداد تصادفی ایجاد میکند که آنتروپی را از توابع درونی QEMU به دست میآورد. پارامتر id یک شناسهٔ یکتا است که برای ارجاع به این پسزمینهٔ آنتروپی از دستگاه virtio-rng استفاده خواهد شد. بهطور پیشفرض، دستگاه virtio-rng از این پسزمینهٔ RNG استفاده میکند.
- -object rng-random,id=id,filename=/dev/random
- یک پسزمینهٔ تولیدکنندهٔ اعداد تصادفی ایجاد میکند که آنتروپی را از یک دستگاه روی میزبان دریافت مینماید. پارامتر id یک شناسهٔ یکتا است که برای ارجاع به این پسزمینهٔ آنتروپی از دستگاه virtio-rng به کار میرود. پارامتر filename مشخص میکند که آنتروپی از چه فایلی دریافت شود و در صورت حذف شدن، مقدار پیشفرض آن /dev/urandom است.
- -object rng-egd,id=id,chardev=chardevid
- یک پسزمینهٔ تولیدکنندهٔ اعداد تصادفی ایجاد میکند که آنتروپی را از یک دیمن خارجی در حال اجرا روی میزبان به دست میآورد. پارامتر id یک شناسهٔ یکتا است که برای ارجاع به این پسزمینهٔ آنتروپی از دستگاه virtio-rng استفاده خواهد شد. پارامتر chardev شناسهٔ یکتای یک پسزمینهٔ دستگاه نویسهای است که اتصال به دیمن RNG را فراهم میکند.
- -object tls-creds-anon,id=id,endpoint=endpoint,dir=/path/to/cred/dir,verify-peer=on|off
- یک شیء
اعتبارنامهٔ
ناشناس TLS
ایجاد
میکند که
میتواند
برای
ارائهٔ
پشتیبانی
از TLS در
پسزمینههای
شبکه
استفاده
شود.
پارامتر id
یک شناسهٔ
یکتا است که
پسزمینههای
شبکه برای
دسترسی به
اعتبارنامهها
از آن
استفاده
خواهند کرد.
مقدار endpoint
بسته به
اینکه
پسزمینهٔ
شبکهٔ QEMU که
از این
اعتبارنامهها
استفاده
میکند به
عنوان
کلاینت یا
سرور عمل
خواهد کرد،
server یا client است.
اگر verify-peer
فعال باشد
(پیشفرض)،
پس از تکمیل
دستتکانی،
اعتبارنامهٔ
همتا بررسی
خواهد شد،
اگرچه این
عمل برای
اعتبارنامههای
ناشناس
بیاثر (no-op)
است.
پارامتر dir به QEMU میگوید فایلهای اعتبارنامه را در کجا پیدا کند. برای نقطهپایانیهای سرور، این دایرکتوری ممکن است شامل یک فایل dh-params.pem باشد که پارامترهای diffie-hellman را جهت استفاده در سرور TLS فراهم میکند. اگر این فایل وجود نداشته باشد، QEMU در زمان راهاندازی مجموعهای از پارامترهای DH را تولید خواهد کرد. این یک عملیات محاسباتی سنگین است که آنتروپی مخزن تصادفی را مصرف میکند، بنابراین توصیه میشود مجموعهای ماندگار از پارامترها از قبل تولید و ذخیره شود.
- -object tls-creds-psk,id=id,endpoint=endpoint,dir=/path/to/keys/dir[,username=username]
- یک شیء
اعتبارنامهٔ
کلیدهای از
پیش به
اشتراک
گذاشتهشدهٔ
TLS (یا PSK) ایجاد
میکند که
میتواند
برای
ارائهٔ
پشتیبانی TLS
در
پسزمینههای
شبکه
استفاده
شود.
پارامتر id
یک شناسهٔ
یکتا است که
پسزمینههای
شبکه برای
دسترسی به
اعتبارنامهها
از آن
استفاده
خواهند کرد.
پارامتر endpoint
بسته به
اینکه
پسزمینهٔ
شبکهٔ QEMU
مصرفکنندهٔ
اعتبارنامهها
به عنوان
سرور یا
کلاینت عمل
کند، server یا
client است. تنها
برای
کلاینتها،
username نام
کاربری است
که به سرور
ارسال
خواهد شد.
در صورت عدم
ذکر، مقدار
پیشفرض آن
"qemu" است.
پارامتر dir به QEMU مشخص میکند که فایل کلیدها را در کجا بیابد. نام آن "dir/keys.psk" بوده و شامل جفتهای "username:key" است. این فایل را میتوان به سادهترین شکل با استفاده از برنامهٔ psktool در GnuTLS ایجاد کرد.
برای نقطهپایانیهای سرور، dir ممکن است شامل یک فایل dh-params.pem نیز باشد که پارامترهای diffie-hellman را برای استفاده در سرور TLS مهیا میسازد. اگر این فایل مفقود باشد، QEMU هنگام راهاندازی مجموعهای از پارامترهای DH را تولید خواهد کرد. این یک عملیات محاسباتی سنگین است که آنتروپی مخزن تصادفی را مصرف میکند، از این رو توصیه میشود یک مجموعهٔ ماندگار از پارامترها از پیش تولید و ذخیره شود.
- -object tls-creds-x509,id=id,endpoint=endpoint,dir=/path/to/cred/dir,priority=priority,verify-peer=on|off,passwordid=id
- یک شیء
اعتبارنامهٔ
ناشناس TLS
ایجاد
میکند که
میتواند
برای
ارائهٔ
پشتیبانی
از TLS در
پسزمینههای
شبکه
استفاده
شود.
پارامتر id
یک شناسهٔ
یکتا است که
پسزمینههای
شبکه برای
دسترسی به
اعتبارنامهها
از آن بهره
میبرند.
پارامتر endpoint
بسته به
اینکه
پسزمینهٔ
شبکهٔ QEMU
مصرفکنندهٔ
اعتبارنامهها
به عنوان
کلاینت یا
سرور عمل
کند، server یا
client است. اگر
verify-peer فعال
باشد
(پیشفرض)،
پس از پایان
دستتکانی،
اعتبارنامهٔ
همتا
اعتبارسنجی
خواهد شد.
با
گواهیهای
x509، این به
این معنی
است که
کلاینتها
نیز باید با
گواهیهای
کلاینت
معتبر
ارائه شوند.
پارامتر dir به QEMU میگوید فایلهای اعتبارنامه را در کجا پیدا کند. برای نقطهپایانیهای سرور، این دایرکتوری ممکن است حاوی فایل dh-params.pem باشد که پارامترهای diffie-hellman را برای استفاده در سرور TLS مهیا میسازد. در صورت عدم وجود این فایل، QEMU هنگام راهاندازی مجموعهای از پارامترهای DH را ایجاد میکند. این یک عملیات سنگین محاسباتی است که آنتروپی استخر تصادفی را مصرف میکند، بنابراین توصیه میشود مجموعهای پایدار از پارامترها از پیش تولید و ذخیره شود.
برای اعتبارنامههای گواهی x509، این دایرکتوری حاوی فایلهای بیشتری خواهد بود که گواهیهای x509 را فراهم مینمایند. این گواهیها باید با قالب PEM و با نامهای ca-cert.pem، ca-crl.pem (اختیاری)، server-cert.pem (تنها سرورها)، server-key.pem (تنها سرورها)، client-cert.pem (تنها کلاینتها) و client-key.pem (تنها کلاینتها) ذخیره شوند.
برای فایلهای server-key.pem و client-key.pem که حاوی کلیدهای خصوصی حساس هستند، این امکان وجود دارد که با ارائهٔ پارامتر passwordid از یک نسخهٔ رمزگذاریشده استفاده کرد. این پارامتر شناسهٔ یک شیء secret را که قبلاً ایجاد شده و حاوی گذرواژه برای رمزگشایی است مشخص میکند.
پارامتر priority امکان بازنویسی اولویت پیشفرض سراسری استفادهشده توسط gnutls را فراهم میسازد. این میتواند زمانی مفید باشد که مدیر سیستم بخواهد از مجموعه اولویتهای رمزنگاری ضعیفتری برای QEMU بدون تحمیل این ضعف به همهٔ برنامهها استفاده کند. یا برعکس، اگر کسی اولویت پیشفرض قویتری نسبت به سایر برنامهها برای QEMU بخواهد، میتواند از طریق این پارامتر آن را اعمال نماید. قالب آن یک رشتهٔ اولویت gnutls است، همانطور که در https://gnutls.org/manual/html_node/Priority-Strings.html توضیح داده شده است.
- -object tls-cipher-suites,id=id,priority=priority
- یک شیء
مجموعه
الگوریتمهای
رمزنگاری TLS
ایجاد
میکند که
میتواند
برای کنترل
الگوریتمهای
رمز/پروتکل
TLS که
برنامهها
مجاز به
استفاده از
آنها
هستند، به
کار رود.
پارامتر id یک شناسهٔ یکتا است که پیشانهها برای دسترسی به فهرست مرتبشدهٔ مجموعههای رمزنگاری مجاز TLS از میزبان، از آن استفاده میکنند.
پارامتر priority امکان بازنویسی اولویت پیشفرض سراسری استفادهشده توسط gnutls را فراهم میآورد. این میتواند زمانی سودمند باشد که مدیر سیستم بخواهد از مجموعه اولویتهای رمزنگاری ضعیفتری برای QEMU استفاده نماید، بدون آنکه این ضعف به همهٔ برنامهها تحمیل گردد. یا برعکس، چنانچه کسی بخواهد پیشفرض قویتری نسبت به سایر برنامهها برای QEMU در نظر بگیرد، میتواند این کار را با این پارامتر انجام دهد. قالب آن یک رشتهٔ اولویت gnutls است، همانطور که در https://gnutls.org/manual/html_node/Priority-Strings.html توصیف شده است.
نمونهای از کاربرد این شیء، کنترل راهاندازی بوت UEFI HTTPS Boot است. شیء tls-cipher-suites فهرست مرتبشدهٔ مجموعهرمزهای مجاز TLS را از سمت میزبان و از طریق fw_cfg در دسترس سفتافزار مهمان قرار میدهد. این فهرست به صورت آرایهای از اشیاء IANA_TLS_CIPHER نمایش داده میشود. سفتافزار از آرایهٔ IANA_TLS_CIPHER برای پیکربندی TLS در سمت مهمان استفاده میکند.
در مثال زیر، اولویتی که سیاست سمت میزبان بر مبنای آن دریافت میشود، توسط ویژگی priority تعیین شده است. با توجه به اینکه QEMU از GNUTLS استفاده میکند، priority=@SYSTEM میتواند برای ارجاع به /etc/crypto-policies/back-ends/gnutls.config به کار رود.
# qemu-system-x86_64 \
-object tls-cipher-suites,id=mysuite0,priority=@SYSTEM \
-fw_cfg name=etc/edk2/https/ciphers,gen_id=mysuite0
- -object filter-buffer,id=id,netdev=netdevid,interval=t[,queue=all|rx|tx][,status=on|off][,position=head|tail|id=<id>][,insert=behind|before]
- بازهٔ
زمانی t
نمیتواند 0
باشد؛ این
پالایه
تحویل
بستهها را
دستهای
میکند:
تمام
بستههایی
که در یک
بازهٔ معین
در netdev با
شناسهٔ netdevid
دریافت
میشوند،
تا پایان آن
بازه با
تاخیر
مواجه
میگردند.
بازه بر حسب
میکروثانیه
است. status
اختیاری
است و مشخص
میکند که
آیا netfilter روشن
(فعال) یا
خاموش
(غیرفعال)
است؛ وضعیت
پیشفرض
برای netfilter
مقدار 'on'
خواهد بود..sp
گزینه queue all|rx|tx
گزینهای
است که
میتواند
برای هر netfilter
اعمال شود.
all: فیلتر هم به صف دریافت و هم به صف ارسال netdev متصل میشود (پیشفرض).
rx: فیلتر به صف دریافت netdev متصل میشود، جایی که بستههای ارسالشده به netdev را دریافت خواهد کرد.
tx: فیلتر به صف ارسال netdev متصل میشود، جایی که بستههای ارسالشده توسط netdev را دریافت خواهد کرد.
گزینه position head|tail|id=<id> گزینهای برای تعیین محل درج فیلتر در فهرست فیلترها است. این گزینه میتواند برای هر netfilter اعمال شود.
head: فیلتر در ابتدای فهرست فیلترها، قبل از تمام فیلترهای موجود درج میشود.
tail: فیلتر در انتهای فهرست فیلترها، پس از تمام فیلترهای موجود درج میشود (پیشفرض).
id=<id>: فیلتر قبل یا بعد از فیلتر مشخصشده توسط <id> درج میشود، گزینه insert در زیر را ببینید.
گزینه insert behind|before گزینهای برای تعیین محل درج فیلتر جدید نسبت به فیلتر مشخصشده با position=id=<id> است. این گزینه میتواند برای هر netfilter اعمال شود.
before: درج قبل از فیلتر مشخصشده.
behind: درج بعد از فیلتر مشخصشده (پیشفرض).
- -object filter-mirror,id=id,netdev=netdevid,outdev=chardevid,queue=all|rx|tx[,vnet_hdr_support][,position=head|tail|id=<id>][,insert=behind|before]
- فیلتر filter-mirror روی netdev با شناسه netdevid، بسته شبکه را به chardev با شناسه chardevid آینهسازی (mirror) میکند؛ اگر پرچم vnet_hdr_support فعال باشد، filter-mirror بسته را همراه با vnet_hdr_len آینهسازی خواهد کرد.
- -object filter-redirector,id=id,netdev=netdevid,indev=chardevid,outdev=chardevid,queue=all|rx|tx[,vnet_hdr_support][,position=head|tail|id=<id>][,insert=behind|before]
- فیلتر filter-redirector روی netdev با شناسه netdevid، بسته شبکه فیلتر را به chardev با شناسه chardevid هدایت (redirect) کرده و بسته indev را به فیلتر هدایت میکند. اگر پرچم vnet_hdr_support فعال باشد، filter-redirector بسته را با vnet_hdr_len هدایت خواهد کرد. برای ایجاد یک filter-redirector باید شناسه outdev از شناسه indev متفاوت باشد؛ شناسهها نمیتوانند یکسان باشند. میتوان تنها از indev یا outdev استفاده کرد، اما حداقل یکی از indev یا outdev باید مشخص شود.
- -object filter-rewriter,id=id,netdev=netdevid,queue=all|rx|tx,[vnet_hdr_support][,position=head|tail|id=<id>][,insert=behind|before]
- ابزار Filter-rewriter
بخشی از
پروژه COLO است.
این فیلتر
بستههای tcp
را از primary به secondary
بازنویسی
میکند تا
اتصال tcp
ثانویه (secondary)
حفظ شود، و
بستههای tcp
را از secondary به primary
بازنویسی
میکند تا
بستههای tcp
توسط
کلاینت
قابل
پردازش
باشند. اگر
پرچم vnet_hdr_support
فعال باشد،
میتوان
بستهها را
به همراه
سرآیند vnet
پردازش کرد.
کاربرد: colo secondary: -object filter-redirector,id=f1,netdev=hn0,queue=tx,indev=red0 -object filter-redirector,id=f2,netdev=hn0,queue=rx,outdev=red1 -object filter-rewriter,id=rew0,netdev=hn0,queue=all
- -object filter-dump,id=id,netdev=dev[,file=filename][,maxlen=len][,position=head|tail|id=<id>][,insert=behind|before]
- ترافیک شبکه روی netdev با شناسه dev را در فایل مشخصشده با filename ذخیره (dump) میکند. حداکثر len بایت (بهطور پیشفرض 64k) به ازای هر بسته ذخیره میشود. قالب فایل libpcap است، بنابراین با ابزارهایی مانند tcpdump یا Wireshark قابل تحلیل است.
- -object colo-compare,id=<id>,primary_in=<chardevid>,secondary_in=<chardevid>,outdev=<chardevid>,iothread=<id>[,vnet_hdr_support][,notify_dev=<id>][,compare_timeout=<time_ms>][,expired_scan_cycle=<time_ms>][,max_queue_size=<maxsize>]
- ابزار Colo-compare
بستهها را
از
پساندهای
chardev مشخصشده
توسط primary_in و
secondary_in دریافت
کرده و
بررسی
میکند که
آیا محتوای
بار داده (payload)
بسته primary و
بسته secondary
یکسان است
یا خیر. اگر
مطابقت
داشته
باشند،
بسته primary را به
پساند chardev
مشخصشده
توسط outdev
ارسال
میکند؛ در
غیر این
صورت به COLO-framework
اطلاع
میدهد تا
یک نقطه
بررسی (checkpoint)
انجام دهد و
بسته primary را به
outdev
میفرستد.
به منظور بهبود کارایی، باید وظیفه مقایسه را در یک iothread دیگر قرار دهیم؛ گزینه iothread شیء iothread مربوطه را مشخص میکند (که باید در خط فرمان شما ایجاد شده باشد).
پرچم vnet_hdr_support به colo compare میگوید که هنگام ارسال و دریافت بستهها، طول سرآیند vnet را لحاظ کند.
گزینه compare_timeout حداکثر زمانی که colo-compare بسته را نگه میدارد (بر حسب میلیثانیه) تعیین میکند.
گزینه expired_scan_cycle دوره پایش بستههای شبکه منقضیشده گره primary را (بر حسب میلیثانیه) تعیین میکند.
گزینه max_queue_size حداکثر اندازه صف مقایسه را تعیین میکند.
اگر قصد استفاده از Xen COLO را دارید، باید notify_dev را مشخص کنید تا به colo-compare نحوه اطلاعرسانی به Xen colo-frame برای ایجاد checkpoint را مشخص نماید.
ابزار COLO-compare باید همراه با filter-mirror، filter-redirector و filter-rewriter استفاده شود.
KVM COLO primary: -netdev tap,id=hn0,vhost=off -device e1000,id=e0,netdev=hn0,mac=52:a4:00:12:78:66 -chardev socket,id=mirror0,host=3.3.3.3,port=9003,server=on,wait=off -chardev socket,id=compare1,host=3.3.3.3,port=9004,server=on,wait=off -chardev socket,id=compare0,host=3.3.3.3,port=9001,server=on,wait=off -chardev socket,id=compare0-0,host=3.3.3.3,port=9001 -chardev socket,id=compare_out,host=3.3.3.3,port=9005,server=on,wait=off -chardev socket,id=compare_out0,host=3.3.3.3,port=9005 -object iothread,id=iothread1 -object filter-mirror,id=m0,netdev=hn0,queue=tx,outdev=mirror0 -object filter-redirector,netdev=hn0,id=redire0,queue=rx,indev=compare_out -object filter-redirector,netdev=hn0,id=redire1,queue=rx,outdev=compare0 -object colo-compare,id=comp0,primary_in=compare0-0,secondary_in=compare1,outdev=compare_out0,iothread=iothread1 secondary: -netdev tap,id=hn0,vhost=off -device e1000,netdev=hn0,mac=52:a4:00:12:78:66 -chardev socket,id=red0,host=3.3.3.3,port=9003 -chardev socket,id=red1,host=3.3.3.3,port=9004 -object filter-redirector,id=f1,netdev=hn0,queue=tx,indev=red0 -object filter-redirector,id=f2,netdev=hn0,queue=rx,outdev=red1 Xen COLO primary: -netdev tap,id=hn0,vhost=off -device e1000,id=e0,netdev=hn0,mac=52:a4:00:12:78:66 -chardev socket,id=mirror0,host=3.3.3.3,port=9003,server=on,wait=off -chardev socket,id=compare1,host=3.3.3.3,port=9004,server=on,wait=off -chardev socket,id=compare0,host=3.3.3.3,port=9001,server=on,wait=off -chardev socket,id=compare0-0,host=3.3.3.3,port=9001 -chardev socket,id=compare_out,host=3.3.3.3,port=9005,server=on,wait=off -chardev socket,id=compare_out0,host=3.3.3.3,port=9005 -chardev socket,id=notify_way,host=3.3.3.3,port=9009,server=on,wait=off -object filter-mirror,id=m0,netdev=hn0,queue=tx,outdev=mirror0 -object filter-redirector,netdev=hn0,id=redire0,queue=rx,indev=compare_out -object filter-redirector,netdev=hn0,id=redire1,queue=rx,outdev=compare0 -object iothread,id=iothread1 -object colo-compare,id=comp0,primary_in=compare0-0,secondary_in=compare1,outdev=compare_out0,notify_dev=notify_way,iothread=iothread1 secondary: -netdev tap,id=hn0,vhost=off -device e1000,netdev=hn0,mac=52:a4:00:12:78:66 -chardev socket,id=red0,host=3.3.3.3,port=9003 -chardev socket,id=red1,host=3.3.3.3,port=9004 -object filter-redirector,id=f1,netdev=hn0,queue=tx,indev=red0 -object filter-redirector,id=f2,netdev=hn0,queue=rx,outdev=red1
اگر تمایل دارید از جزئیات خط فرمان بالا مطلع شوید، میتوانید گزارش git log مربوط به colo-compare را مطالعه کنید.
- -object cryptodev-backend-builtin,id=id[,queues=queues]
- یک پساند cryptodev ایجاد میکند که عملیات رمزنگاری را از طریق APIهای cipher در QEMU اجرا میکند. پارامتر id یک شناسه یکتا است که برای ارجاع به این پساند cryptodev از طرف دستگاه virtio-crypto استفاده میشود. پارامتر queues اختیاری است و تعداد صفهای پساند cryptodev را مشخص میکند؛ مقدار پیشفرض queues برابر با 1 است.
# qemu-system-x86_64 \
[...] \
-object cryptodev-backend-builtin,id=cryptodev0 \
-device virtio-crypto-pci,id=crypto0,cryptodev=cryptodev0 \
[...]
- -object cryptodev-vhost-user,id=id,chardev=chardevid[,queues=queues]
- یک پساند cryptodev از نوع vhost-user ایجاد میکند که مبتنی بر یک chardev با شناسه chardevid است. پارامتر id یک شناسه یکتا است که برای ارجاع به این پساند cryptodev از دستگاه virtio-crypto استفاده خواهد شد. این chardev باید مبتنی بر سوکت یونیکس (unix domain socket) باشد. بخش vhost-user از یک پروتکل ویژه برای ارسال پیامهای جایگزین ioctl در vhost به برنامهای در سمت دیگر سوکت استفاده میکند. پارامتر queues اختیاری است، که تعداد صفهای پساند cryptodev را برای vhost-user چندصفی مشخص میکند؛ مقدار پیشفرض queues برابر با 1 است.
# qemu-system-x86_64 \
[...] \
-chardev socket,id=chardev0,path=/path/to/socket \
-object cryptodev-vhost-user,id=cryptodev0,chardev=chardev0 \
-device virtio-crypto-pci,id=crypto0,cryptodev=cryptodev0 \
[...]
- -object secret,id=id,data=string,format=raw|base64[,keyid=secretid,iv=string]
- -object secret,id=id,file=filename,format=raw|base64[,keyid=secretid,iv=string]
- یک شیء
محرمانه (secret)
برای ذخیره
گذرواژه،
کلید
رمزگذاری
یا سایر
دادههای
حساس تعریف
میکند.
دادههای
حساس
میتوانند
مستقیماً
از طریق
پارامتر data،
یا به صورت
غیرمستقیم
از طریق
پارامتر file
ارسال شوند.
استفاده از
پارامتر data
ناامن است
مگر اینکه
دادههای
حساس
رمزگذاری
شده باشند.
دادههای حساس میتوانند در قالب raw (پیشفرض) یا base64 ارائه شوند. هنگام کدگذاری به صورت JSON، قالب raw تنها از نویسههای معتبر UTF-8 پشتیبانی میکند، بنابراین base64 برای ارسال دادههای باینری توصیه میشود. QEMU هر قالبی را که ارائه شده باشد به قالب مورد نیاز داخلی خود تبدیل خواهد کرد. برای مثال، یک گذرواژه RBD میتواند در قالب raw ارائه شود، حتی اگر هنگام ارسال به سرور RBD با base64 کدگذاری شود.
برای محافظت بیشتر، رمزگذاری دادههای مرتبط با یک شیء محرمانه با استفاده از الگوریتم رمزنگاری AES-256-CBC امکانپذیر است. استفاده از رمزگذاری با مشخص کردن پارامترهای keyid و iv مشخص میشود. پارامتر keyid شناسه (ID) یک شیء محرمانه از پیش تعریفشده را ارائه میدهد که حاوی کلید رمزگشایی AES-256 است. این کلید باید ۳۲ بایت طول داشته و با base64 کدگذاری شده باشد. پارامتر iv بردار مقداردهی اولیه (IV) تصادفی مورد استفاده برای رمزگذاری این شیء محرمانه خاص را فراهم میکند و باید یک رشته با کدگذاری base64 از IV شانزده بایتی باشد.
سادهترین روش استفاده (ناامن)، ارائه داده محرمانه بهصورت درونخطی است:
# qemu-system-x86_64 -object secret,id=sec0,data=letmein,format=raw
سادهترین روش استفاده امن، ارائه داده محرمانه از طریق یک فایل است
# printf "letmein" > mypasswd.txt # QEMU_SYSTEM_MACRO -object secret,id=sec0,file=mypasswd.txt,format=raw
برای امنیت بیشتر، باید از AES-256-CBC استفاده شود. برای نشان دادن نحوه استفاده، ابزار خط فرمان openssl را در نظر بگیرید که میتواند دادهها را رمزگذاری کند. توجه داشته باشید که هنگام رمزگذاری، متن آشکار (plaintext) باید با استفاده از الگوریتم استاندارد سازگار با PKCS#5/6 به اندازه بلوک رمزبندی (۳۲ بایت) پد (pad) شود.
ابتدا باید یک کلید اصلی (master key) با کدگذاری base64 ایجاد شود:
# openssl rand -base64 32 > key.b64 # KEY=$(base64 -d key.b64 | hexdump -v -e '/1 "%02X"')
هر داده محرمانهای که قرار است رمزگذاری شود، باید یک بردار مقداردهی اولیه (IV) تصادفیِ تولیدشده داشته باشد. نیازی نیست که این بردارها مخفی نگه داشته شوند:
# openssl rand -base64 16 > iv.b64 # IV=$(base64 -d iv.b64 | hexdump -v -e '/1 "%02X"')
داده محرمانهای که باید تعریف شود اکنون میتواند رمزگذاری شود؛ در اینجا به openssl میگوییم که نتیجه را با base64 کدگذاری کند، اما در صورت تمایل میتوان آن را به صورت بایتهای خام (raw) باقی گذاشت.
# SECRET=$(printf "letmein" |
openssl enc -aes-256-cbc -a -K $KEY -iv $IV)
هنگام راهاندازی QEMU، یک شیء محرمانه اصلی ایجاد کنید که به key.b64 اشاره دارد و مشخص کنید که برای رمزگشایی گذرواژه کاربر استفاده شود. محتویات iv.b64 را به شیء محرمانه دوم ارسال کنید:
# qemu-system-x86_64 \
-object secret,id=secmaster0,format=base64,file=key.b64 \
-object secret,id=sec0,keyid=secmaster0,format=base64,\
data=$SECRET,iv=$(<iv.b64)
- -object sev-guest,id=id,cbitpos=cbitpos,reduced-phys-bits=val,[sev-device=string,policy=policy,handle=handle,dh-cert-file=file,session-file=file,kernel-hashes=on|off]
- یک شیء
مهمان Secure Encrypted Virtualization
(SEV) ایجاد
میکند که
میتواند
برای ارائه
پشتیبانی
از
رمزگذاری
حافظه
مهمان در
پردازندههای
AMD استفاده
شود.
هنگامی که رمزگذاری حافظه فعال است، یکی از بیتهای آدرس فیزیکی (معروف به C-bit) برای نشانگذاری محافظتشده بودن یک صفحه حافظه به کار میرود. گزینه cbitpos برای مشخص کردن موقعیت C-bit استفاده میشود. موقعیت C-bit به خانواده پردازنده میزبان (Host) بستگی دارد، بنابراین کاربر باید این مقدار را مشخص کند. در پردازندههای EPYC، این مقدار باید ۴۷ باشد.
هنگامی که رمزگذاری حافظه فعال است، برخی از بیتها در فضای آدرس فیزیکی از دست میروند. گزینه reduced-phys-bits برای تعیین تعداد بیتهای از دسترفته در فضای آدرس فیزیکی استفاده میشود. مشابه C-bit، این مقدار به خانواده پردازنده میزبان بستگی دارد. در EPYC، مهمان حداکثر ۱ بیت را از دست میدهد، بنابراین مقدار باید ۱ باشد.
گزینه sev-device فایل دستگاه مورد استفاده برای ارتباط با سفتافزار SEV در حال اجرا درون AMD Secure Processor را مشخص میکند. دستگاه پیشفرض '/dev/sev' است. اگر سختافزار از رمزگذاری حافظه پشتیبانی کند، دستگاههای /dev/sev توسط درایور CCP ایجاد میشوند.
گزینه policy سیاست (policy) مهمان را مشخص میکند که توسط سفتافزار SEV اعمال میشود و تعیین میکند چه دستورهای پیکربندی و عملیاتی میتوانند توسط ناظر مجازیسازی (hypervisor) بر روی این مهمان اجرا شوند. این سیاست باید توسط مالک مهمان ارائه شود، به مهمان متصل است و در طول چرخه حیات مهمان قابل تغییر نیست. مقدار پیشفرض 0 است.
اگر policy مهمان اجازه اشتراکگذاری کلید با یک مهمان SEV دیگر را بدهد، میتوان از handle برای ارائه هندل مهمانی که کلید از آن به اشتراک گذاشته میشود استفاده کرد.
گزینههای dh-cert-file و session-file کلید عمومی دیفی-هلمن (Public Diffie-Hillman) مالک مهمان را که در مشخصات SEV تعریف شده ارائه میدهند. پارامترهای PDH و نشست (session) برای برقراری یک نشست رمزنگاری با مالک مهمان جهت مذاکره بر سر کلیدهای مورد استفاده برای تصدیق اصالت (attestation) استفاده میشوند. فایل باید با base64 کدگذاری شده باشد.
گزینه kernel-hashes درهمسازهای (hashes) مربوط به kernel/initrd/cmdline دادهشده را به یک صفحه سفتافزار تعیینشده مهمان برای راهاندازی اندازهگیریشده لینوکس (measured Linux boot) با -kernel اضافه میکند. پیشفرض off است. (از نسخه 6.2)
برای مثال برای راهاندازی یک مهمان SEV:
# qemu-system-x86_64 \
...... \
-object sev-guest,id=sev0,cbitpos=47,reduced-phys-bits=1 \
-machine ...,confidential-guest-support=sev0 \
.....
- -object tdx-guest,id=id,[attributes=attrs,sept-ve-disable=on|off,mrconfigid=sha384_digest,mrowner=sha384_digest,mrownerconfig=sha384_digest,quote-generation-socket=socketaddr]
- یک شیء
مهمان Intel Trusted Domain eXtensions
(TDX) ایجاد
میکند که
نوعی از شیء
confidential-guest-support است.
هنگامی که
شناسه شیء
به ویژگی
confidential-guest-support ماشین
ارسال شود،
میتواند
یک مهمان TDX
ایجاد کند.
ویژگی attributes یک عدد صحیح ۶۴ بیتی است که ویژگیهای TD (مربوط به TD attributes) را مشخص میکند.
ویژگی sept-ve-disable به طور خاص بیت ۲۸ ویژگیهای TD را کنترل میکند. هنگامی که روی on باشد، تبدیل تخطی EPT به #VE هنگام دسترسی مهمان به صفحههای PENDING غیرفعال میشود. برخی از سیستمعاملهای مهمان (مانند مهمان لینوکس TD) ممکن است به تنظیم این مورد نیاز داشته باشند، در غیر این صورت از راهاندازی خودداری میکنند. مقدار پیشفرض on است..sp ویژگی mrconfigid یک خلاصه (digest) از نوع SHA384 با کدگذاری base64 است که شناسه پیکربندی تعریفنشده توسط مالک (non-owner-defined) برای TD مهمان، مانند پیکربندی زمان اجرا یا سیستمعامل را فراهم میکند. مقدار پیشفرض همگی صفر است.
ویژگی mrowner یک خلاصه از نوع SHA384 با کدگذاری base64 است که شناسه را برای مالک TD مهمان فراهم میکند. مقدار پیشفرض همگی صفر است.
ویژگی mrownerconfig یک خلاصه از نوع SHA384 با کدگذاری base64 است که شناسه پیکربندی تعریفشده توسط مالک (owner-defined) برای TD مهمان، مانند پیکربندی مختص بار کاری (workload) به جای زمان اجرای سیستمعامل را فراهم میکند. مقدار پیشفرض همگی صفر است.
ویژگی quote-generation-socket نشانی سوکت مربوط به Quote Generation Service (QGS) را مشخص میکند. سرویس QGS یک دیمون در حال اجرا روی میزبان است. QEMU درخواست <GetQuote> را از TD مهمان به QGS بازارسال کرده و پاسخ (که در صورت موفقیت شامل QUOTE تولیدشده است) را از QGS به TD مهمان میفرستد.
# qemu-system-x86_64 \
...... \
-object '{"qom-type":"tdx-guest","id":"tdx","quote-generation-socket":{"type":"unix","path":"/var/run/qgs.socket"}}' \
-machine ...,confidential-guest-support=tdx \
......
- -object igvm-cfg,file=file
- یک شیء
پیکربندی IGVM
ایجاد
میکند که
وضعیت
اولیه
مهمان را با
استفاده از
فایلی
منطبق با
قالب
پرونده Independent Guest Virtual
Machine (IGVM) تعریف
میکند.
این گزینه در حال حاضر تنها توسط -machine q35 و -machine pc پشتیبانی میشود.
پارامتر file برای مشخص کردن فایل IGVM جهت بارگذاری استفاده میشود. هنگام ارائه، از فایل IGVM برای مقداردهی اولیه حافظه ماشین مجازی استفاده میشود و بسته به پلتفرم، میتواند وضعیت اولیه پردازنده، نقشه حافظه (memory map) و پارامترها را تعریف کند.
انتظار میرود فایل IGVM شامل سفتافزار (firmware) برای ماشین مجازی باشد، بنابراین یک شیء igvm-cfg نمیتواند همراه با سایر روشهای مشخصسازی سفتافزار، مانند پارامتر -bios در ماشینهای x86 ارائه شود.
برای نمونه، جهت راهاندازی ماشینی که سفتافزار را در یک فایل IGVM ارائه میدهد:
# qemu-system-x86_64 \
...... \
-object igvm-cfg,id=igvm0,file=bios.igvm \
-machine ...,igvm-cfg=igvm0 \
.....
- -object authz-simple,id=id,identity=string
- یک شیء
مجوزدهی (authorization)
ایجاد
میکند که
دسترسی به
سرویسهای
شبکه را
کنترل
خواهد کرد.
پارامتر identity کاربر را شناسایی میکند و قالب آن به سرویس شبکهای بستگی دارد که شیء مجوزدهی با آن در ارتباط است. برای مجوزدهی بر پایه گواهیهای TLS x509، هویت باید نام متمایز (distinguished name) x509 باشد. توجه داشته باشید که باید دقت کرد تا هرگونه ویرگول در نام متمایز گریزدهی (escape) شود.
یک نمونه شیء مجوزدهی برای اعتبارسنجی یک نام متمایز x509 به این شکل خواهد بود:
# qemu-system-x86_64 \
... \
-object 'authz-simple,id=auth0,identity=CN=laptop.example.com,,O=Example Org,,L=London,,ST=London,,C=GB' \
...
به استفاده از نقلقولها به دلیل وجود فاصله خالی در نام متمایز x509 و گریزدهی ',' دقت کنید.
- -object authz-listfile,id=id,filename=path,refresh=on|off
- یک شیء
مجوزدهی
ایجاد
میکند که
دسترسی به
سرویسهای
شبکه را
کنترل
خواهد کرد.
پارامتر filename مسیر کامل (fully qualified path) به فایلی حاوی قوانین فهرست کنترل دسترسی (ACL) در قالب JSON است.
یک نمونه از مجموعهای از قوانین که با نامهای کاربری SASL تطبیق مییابند میتواند به این صورت باشد:
{
"rules": [
{ "match": "fred", "policy": "allow", "format": "exact" },
{ "match": "bob", "policy": "allow", "format": "exact" },
{ "match": "danb", "policy": "deny", "format": "glob" },
{ "match": "dan*", "policy": "allow", "format": "exact" },
],
"policy": "deny"
}
هنگام بررسی دسترسی، شیء تمام قوانین را پیمایش میکند و اولین قانونی که مطابقت داشته باشد، مقدار policy آن به عنوان نتیجه بازگردانده میشود. اگر هیچ قانونی مطابقت نداشته باشد، مقدار پیشفرض policy بازگردانده میشود.
قوانین میتوانند یک تطبیق رشتهای دقیق باشند، یا میتوانند از الگوی تطبیق ساده glob یونیکس برای امکان استفاده از نویسههای عمومی (wildcards) بهره ببرند.
اگر refresh روی true تنظیم شده باشد، فایل پایش میشود و هر زمان محتوای آن تغییر کند بهطور خودکار بازخوانی میگردد.
همانند شیء authz-simple، قالب رشتههای هویتی مورد تطبیق به سرویس شبکه وابسته است، اما معمولاً یک نام متمایز TLS x509 یا یک نام کاربری SASL است.
یک نمونه شیء مجوزدهی برای اعتبارسنجی نام کاربری SASL به صورت زیر خواهد بود:
# qemu-system-x86_64 \
... \
-object authz-simple,id=auth0,filename=/etc/qemu/vnc-sasl.acl,refresh=on \
...
- -object authz-pam,id=id,service=string
- یک شیء
مجوزدهی
ایجاد
میکند که
دسترسی به
سرویسهای
شبکه را
کنترل
خواهد کرد.
پارامتر service نام یک سرویس PAM را برای استفاده در مجوزدهی تعیین میکند. این پارامتر مستلزم وجود فایل /etc/pam.d/service جهت ارائه پیکربندی برای زیرسیستم account است.
یک نمونه شیء مجوزدهی برای اعتبارسنجی نام متمایز TLS x509 به صورت زیر خواهد بود:
# qemu-system-x86_64 \
... \
-object authz-pam,id=auth0,service=qemu-vnc \
...
سپس یک فایل پیکربندی متناظر برای PAM در مسیر /etc/pam.d/qemu-vnc وجود خواهد داشت که شامل موارد زیر است:
account requisite pam_listfile.so item=user sense=allow \
file=/etc/qemu/vnc.allow
CN=laptop.example.com,O=Example Home,L=London,ST=London,C=GB
- -object iothread,id=id,poll-max-ns=poll-max-ns,poll-grow=poll-grow,poll-shrink=poll-shrink,poll-weight=poll-weight,aio-max-batch=aio-max-batch
- یک رشته (thread)
حلقه
رویداد
اختصاصی
ایجاد
میکند که
دستگاهها
میتوانند
به آن تخصیص
یابند. این
ساختار به
عنوان IOThread
شناخته
میشود.
بهطور
پیشفرض
شبیهسازی
دستگاه در
رشتههای vCPU
یا رشته
اصلی حلقه
رویداد رخ
میدهد. این
امر
میتواند
به یک
گلوگاه
مقیاسپذیری
تبدیل شود.
ساختارهای
IOThread اجازه
میدهند
شبیهسازی
دستگاه و I/O
بر روی سایر
پردازندههای
میزبان
اجرا شوند.
پارامتر id یک شناسه یکتا است که برای ارجاع به این IOThread از طریق -device ...,iothread=id استفاده خواهد شد. چندین دستگاه میتوانند به یک IOThread تخصیص داده شوند. توجه داشته باشید که همه دستگاهها از پارامتر iothread پشتیبانی نمیکنند.
دستور QMP به نام query-iothreads فهرستی از IOThreadها را ارائه کرده و شناسه رشتههای (thread IDs) آنها را گزارش میدهد تا کاربر بتواند تثبیت/وابستگی پردازنده میزبان (host CPU pinning/affinity) را پیکربندی کند.
ساختارهای IOThread از یک الگوریتم نظرسنجی تطبیقی (adaptive polling) برای کاهش تاخیر حلقه رویداد استفاده میکنند. بهجای ورود به یک فراخوان سیستمی مسدودکننده (blocking system call) برای نظارت بر توصیفکنندههای فایل و سپس پرداخت هزینه بیدار شدن هنگام وقوع یک رویداد، الگوریتم نظرسنجی برای مدت کوتاهی به انتظار رویدادها گردش (spin) میکند. پارامترهای پیشفرض این الگوریتم برای بسیاری از موارد مناسب هستند، اما میتوان آنها را بر اساس شناخت بار کاری و/یا تاخیر دستگاه میزبان تنظیم کرد.
پارامتر poll-max-ns حداکثر تعداد نانوثانیهها برای انتظار فعال (busy wait) رویدادها است. با تنظیم این مقدار روی 0 میتوان نظرسنجی را غیرفعال کرد.
پارامتر poll-grow ضریبی است که برای افزایش زمان نظرسنجی استفاده میشود، هنگامی که الگوریتم تشخیص دهد رویدادهایی را به دلیل طولانی نبودن مدت نظرسنجی از دست میدهد.
پارامتر poll-shrink مقسومعلیهی است که برای کاهش زمان نظرسنجی استفاده میشود، زمانی که الگوریتم تشخیص دهد مدت زمان زیادی را بدون مواجهه با هیچ رویدادی صرف نظرسنجی کرده است.
پارامتر poll-weight فاکتور وزن برای نظرسنجی تطبیقی است. این فاکتور تعیین میکند که آخرین بازه رویداد تا چه اندازه بر محاسبه مدتزمان نظرسنجی بعدی اثر میگذارد. در صورت تنظیم روی 0، از مقدار پیشفرض سیستم یعنی 3 استفاده میشود. مقادیر معمول: 1 (وزن بالا برای بازه اخیر)، 2-4 (وزن متوسط برای بازه اخیر).
پارامتر aio-max-batch حداکثر تعداد درخواستها در یک دسته (batch) برای موتور AIO است؛ مقدار 0 به این معنی است که موتور از مقدار پیشفرض خود استفاده خواهد کرد.
پارامترهای IOThread را میتوان در زمان اجرا با استفاده از دستور qom-set تغییر داد (که در آن iothread1 همان id مربوط به IOThread است):
(qemu) qom-set /objects/iothread1 poll-max-ns 100000
در طول شبیهسازی گرافیکی، میتوانید از ترکیبکلیدهای ویژه جدول زیر برای تغییر حالتها استفاده کنید. بهطور پیشفرض کلید تبدیلگر (modifier) ترکیب Ctrl+Alt است (استفادهشده در جدول زیر) که در صورت لزوم با زیرگزینه mod= در -display قابل تغییر است. برای نمونه، -display sdl, grab-mod=lshift-lctrl-lalt کلید تبدیلگر را به Ctrl+Alt+Shift تغییر میدهد، در حالی که -display sdl,grab-mod=rctrl آن را به کلید راست Ctrl تغییر میدهد.
کلیدهای تسهیمکننده (MULTIPLEXER KEYS)
| توالی کلیدها | عملیات |
| Ctrl+Alt+f | تغییر وضعیت تمامصفحه |
| Ctrl+Alt++ | بزرگنمایی صفحه |
| Ctrl+Alt+- | کوچکنمایی صفحه |
| Ctrl+Alt+0 | بازگرداندن ابعاد مقیاسبندینشده صفحه |
| Ctrl+Alt+n | جابهجایی به کنسول مجازی 'n'. نگاشتهای پیشفرض کنسول عبارتند از: 0.0 • 2 1: نمایشگر سیستم هدف • 2 2: مانیتور (Monitor) • 2 3: پورت سریال 840u |
| Ctrl+Alt+g | تغییر وضعیت تسخیر ماوس و صفحهکلید. |
در کنسولهای مجازی، میتوانید از Ctrl+Up، Ctrl+Down، Ctrl+PageUp و Ctrl+PageDown برای حرکت در تاریخچه پیشین (back log) استفاده کنید.
در طول شبیهسازی، اگر از یک تسهیمکننده پسانه نویسهای (character backend multiplexer) استفاده میکنید (که در صورت استفاده از -nographic پیشفرض است)، چندین دستور از طریق یک توالی گریز (escape sequence) در دسترس هستند. تمام این توالی کلیدها با یک نویسه گریز آغاز میشوند که بهطور پیشفرض Ctrl+a است، اما با -echr قابل تغییر میباشد. فهرست زیر فرض میکند که شما از پیشفرض استفاده میکنید..SH "کلیدهای مالتیپلکسر (MULTIPLEXER KEYS)"
| توالی کلیدها | عملیات |
| Ctrl+a h | چاپ این راهنما |
| Ctrl+a x | خروج از شبیهساز |
| Ctrl+a s | ذخیره مجدد دادههای دیسک در فایل (در صورت استفاده از -snapshot) |
| Ctrl+a t | تغییر وضعیت برچسبهای زمانی کنسول |
| Ctrl+a b | ارسال سیگنال break (یا magic sysrq در لینوکس) |
| Ctrl+a c | چرخش بین فرانتاندهای متصل به مالتیپلکسر (معمولاً سوئیچ بین مانیتور و کنسول) |
| Ctrl+a Ctrl+a | ارسال نویسه گریز (escape) به فرانتاند |
نکات (NOTES)
علاوه بر استفاده از ایمیجهای فایلی عادی برای دستگاههای ذخیرهسازی شبیهسازیشده، QEMU همچنین میتواند از منابع تحت شبکه مانند دستگاههای iSCSI استفاده کند. این موارد با استفاده از ساختار نحوی ویژه URL مشخص میشوند.
- iSCSI
- پشتیبانی
از iSCSI به QEMU این
امکان را
میدهد تا
مستقیماً
به منابع iSCSI
دسترسی
داشته باشد
و از آنها
بهعنوان
ایمیج برای
فضای
ذخیرهسازی
مهمان
استفاده
کند. هر دو
نوع ایمیج disk
و cdrom
پشتیبانی
میشوند.
نحو مشخص کردن LUNهای iSCSI بهصورت زیر است: "iscsi://<target-ip>[:<port>]/<target-iqn>/<lun>"
بهطور پیشفرض qemu از initiator-name مربوط به iSCSI با عنوان 'iqn.2008-11.org.linux-kvm[:<name>]' استفاده میکند، اما این مقدار را میتوان از طریق خط فرمان یا یک فایل پیکربندی نیز تنظیم کرد.
از نسخه QEMU 2.4، تعیین مهلت زمانی (timeout) برای درخواستهای iSCSI جهت تشخیص درخواستهای متوقفشده و برقراری مجدد اجباری نشست امکانپذیر است. این مهلت زمانی بر حسب ثانیه مشخص میشود. مقدار پیشفرض 0 است که به معنای عدم وجود مهلت زمانی است. برای این قابلیت به Libiscsi نسخه 1.15.0 یا بالاتر نیاز است.
مثال (بدون احراز هویت):
qemu-system-x86_64 -iscsi initiator-name=iqn.2001-04.com.example:my-initiator \
-cdrom iscsi://192.0.2.1/iqn.2001-04.com.example/2 \
-drive file=iscsi://192.0.2.1/iqn.2001-04.com.example/1
مثال (نام کاربری/گذرواژه CHAP از طریق URL):
qemu-system-x86_64 -drive file=iscsi://user%password@192.0.2.1/iqn.2001-04.com.example/1
مثال (نام کاربری/گذرواژه CHAP از طریق متغیرهای محیط):
LIBISCSI_CHAP_USERNAME="user" \ LIBISCSI_CHAP_PASSWORD="password" \ qemu-system-x86_64 -drive file=iscsi://192.0.2.1/iqn.2001-04.com.example/1
- NBD
- ابزار QEMU از NBD
(دستگاههای
بلوکی تحت
شبکه یا Network Block Devices)
هم با
استفاده از
پروتکل TCP و
هم Unix Domain Sockets
پشتیبانی
میکند. در
پروتکل TCP،
درگاه
پیشفرض 10809
است.
نحو تعیین یک دستگاه NBD با استفاده از TCP، در قالب ترجیحی URI: "nbd://<server-ip>[:<port>]/[<export>]"
نحو تعیین یک دستگاه NBD با استفاده از Unix Domain Sockets؛ به یاد داشته باشید که '?' یک نویسه glob پوسته است و ممکن است به نقلقول (کوتیشن) نیاز داشته باشد: "nbd+unix:///[<export>]?socket=<domain-socket>"
نحو قدیمیتر که همچنان شناختهشده است: "nbd:<server-ip>:<port>[:exportname=<export>]"
نحو تعیین یک دستگاه NBD با استفاده از Unix Domain Sockets: "nbd:unix:<domain-socket>[:exportname=<export>]"
مثال برای TCP
qemu-system-x86_64 --drive file=nbd:192.0.2.1:30000
مثال برای Unix Domain Sockets
qemu-system-x86_64 --drive file=nbd:unix:/tmp/nbd-socket
- SSH
- ابزار QEMU از
دسترسی SSH
(پوسته امن
یا Secure Shell) به
دیسکهای
راهدور
پشتیبانی
میکند.
مثالها:
qemu-system-x86_64 -drive file=ssh://user@host/path/to/disk.img qemu-system-x86_64 -drive file.driver=ssh,file.user=user,file.host=host,file.port=22,file.path=/path/to/disk.img
در حال حاضر احراز هویت باید با استفاده از ssh-agent انجام شود. روشهای دیگر احراز هویت ممکن است در آینده پشتیبانی شوند.
- HTTP/HTTPS/FTP/FTPS
- ابزار QEMU از
دسترسی
فقطخواندنی
به
فایلهای
در دسترس از
طریق http(s) و ftp(s)
پشتیبانی
میکند.
نحو با استفاده از یک نام فایل منفرد:
<protocol>://[<username>[:<password>]@]<host>/<path>
که در آن:
گزینههای زیر نیز پشتیبانی میشوند:
- url
- نشانی URL کامل هنگام ارسال صریح گزینهها به راهانداز (driver).
- readahead
- میزان دادهای که باید پیشاپیش (read ahead) در هر درخواست محدوده (range request) از سرور دوردست خوانده شود. این مقدار میتواند به صورت اختیاری دارای پسوند 'T'، 'G'، 'M'، 'K'، 'k' یا 'b' باشد. اگر پسوندی نداشته باشد، به بایت در نظر گرفته خواهد شد. مقدار باید مضربی از ۵۱۲ بایت باشد. مقدار پیشفرض آن 256k است.
- sslverify
- تعیین میکند که آیا هنگام اتصال از طریق SSL، گواهی سرور دوردست اعتبارسنجی شود یا خیر. میتواند مقدار 'on' یا 'off' داشته باشد. مقدار پیشفرض آن 'on' است.
- ارسال این کوکی (میتواند فهرستی از کوکیهای جداشده با ';' نیز باشد) با هر درخواست خروجی. تنها هنگام استفاده از پروتکلهایی مانند HTTP که از کوکیها پشتیبانی میکنند اعمال میشود؛ در غیر این صورت نادیده گرفته خواهد شد.
- timeout
- تنظیم مهلت زمانی (timeout) اتصال CURL بر حسب ثانیه. این مهلت، مدت زمانی است که CURL منتظر پاسخی از سوی سرور دوردست برای دریافت اندازه ایمیج مورد نظر میماند. در صورت عدم تنظیم، مهلت زمانی پیشفرض ۵ ثانیه استفاده میشود.
- force-range
- عدم ارسال درخواست HEAD در پروتکل HTTP برای بررسی اینکه آیا سرور http از درخواستهای محدوده پشتیبانی میکند یا خیر، و تکیه صرف بر درخواستهای GET. این گزینه بهویژه برای URLهای از پیش امضا شده S3 که در آنها درخواستهای HEAD غیرمجاز هستند بسیار مفید است. مقدار پیشفرض آن 'false' است.
توجه داشته باشید که هنگام ارسال صریح گزینهها به qemu، مقدار driver همان <protocol> خواهد بود.
مثال: راهاندازی (boot) از یک ایمیج زنده ISO دوردست Fedora 20
qemu-system-x86_64 --drive media=cdrom,file=https://archives.fedoraproject.org/pub/archive/fedora/linux/releases/20/Live/x86_64/Fedora-Live-Desktop-x86_64-20-1.iso,readonly qemu-system-x86_64 --drive media=cdrom,file.driver=http,file.url=http://archives.fedoraproject.org/pub/fedora/linux/releases/20/Live/x86_64/Fedora-Live-Desktop-x86_64-20-1.iso,readonly
مثال: راهاندازی از یک ایمیج ابری دوردست Fedora 20 با استفاده از یک لایه محلی (overlay) برای نوشتنها، copy-on-read، و خواندن پیشاپیش (readahead) به میزان 64k
qemu-img create -f qcow2 -o backing_file='json:{"file.driver":"http",, "file.url":"<http://archives.fedoraproject.org/pub/archive/fedora/linux/releases/20/Images/x86_64/Fedora-x86_64-20-20131211.1-sda.qcow2>",, "file.readahead":"64k"}' /tmp/Fedora-x86_64-20-20131211.1-sda.qcow2
qemu-system-x86_64 -drive file=/tmp/Fedora-x86_64-20-20131211.1-sda.qcow2,copy-on-read=on
مثال: راهاندازی از یک ایمیج ذخیرهشده روی سرور VMware vSphere با یک گواهی خودامضا (self-signed) با استفاده از یک لایه محلی برای نوشتنها، readahead برابر 64k و مهلت زمانی ۱۰ ثانیه.
qemu-img create -f qcow2 -o backing_file='json:{"file.driver":"https",, "file.url":"<https://user:password@vsphere.example.com/folder/test/test-flat.vmdk?dcPath=Datacenter&dsName=datastore1>",, "file.sslverify":"off",, "file.readahead":"64k",, "file.timeout":10}' /tmp/test.qcow2
qemu-system-x86_64 -drive file=/tmp/test.qcow2
مستندات HTML نرمافزار QEMU برای اطلاعات دقیقتر و فراخوانی شبیهساز حالت کاربر لینوکس.
نویسنده (AUTHOR)
Fabrice Bellard
حق نشر (COPYRIGHT)
2026, The QEMU Project Developers
| August 28, 2026 | 11.1.1 |