virt-alignment-scan(1) Virtualization Support virt-alignment-scan(1)

virt-alignment-scan - بررسی تراز پارتیشن‌های ماشین‌های مجازی

virt-alignment-scan [--options] -d domname
virt-alignment-scan [--options] -a disk.img [-a disk.img ...]
virt-alignment-scan [--options]

هنگامی که سیستم‌عامل‌های قدیمی‌تر نصب می‌شوند، ابزارهای پارتیشن‌بندی پارتیشن‌ها را در سکتوری قرار می‌دهند که با فضای ذخیره‌سازی زیرین تراز نیست (معمولاً اولین پارتیشن در سکتور 63 شروع می‌شود). پارتیشن‌های ناتراز می‌توانند منجر به صدور ورودی/خروجی (I/O) بیش از حد لازم توسط سیستم‌عامل شوند.

ابزار virt-alignment-scan تراز پارتیشن‌ها را در ماشین‌های مجازی و ایمیج‌های دیسک بررسی می‌کند و در صورت وجود مشکلات تراز، به شما هشدار می‌دهد.

در حال حاضر ابزار مستقیمی برای اصلاح مشکلات تراز وجود ندارد. شما فقط می‌توانید سیستم‌عامل مهمان را مجدداً نصب کنید. سند زیر از NetApp این مشکل و راه‌حل‌های احتمالی را خلاصه کرده است: http://media.netapp.com/documents/tr-3747.pdf

برای اجرای مستقیم این ابزار روی یک ایمیج دیسک، از گزینه -a استفاده کنید:

$ virt-alignment-scan -a winxp.img
/dev/sda1        32256          512    bad (alignment < 4K)
$ virt-alignment-scan -a fedora16.img
/dev/sda1      1048576         1024K   ok
/dev/sda2      2097152         2048K   ok
/dev/sda3    526385152         2048K   ok

برای اجرای ابزار روی مهمانی که توسط libvirt شناخته شده است، از گزینه -d و احتمالاً گزینه -c استفاده کنید:

# virt-alignment-scan -d RHEL5
/dev/sda1        32256          512    bad (alignment < 4K)
/dev/sda2    106928640          512    bad (alignment < 4K)
$ virt-alignment-scan -c qemu:///system -d Win7TwoDisks
/dev/sda1      1048576         1024K   ok
/dev/sda2    105906176         1024K   ok
/dev/sdb1        65536           64K   ok

اجرای virt-alignment-scan بدون هیچ‌یک از گزینه‌های -a یا -d تمام دامنه‌های libvirt را اسکن می‌کند.

# virt-alignment-scan
F16x64:/dev/sda1      1048576         1024K   ok
F16x64:/dev/sda2      2097152         2048K   ok
F16x64:/dev/sda3    526385152         2048K   ok

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

ستون ۱
نام دستگاه و پارتیشن (مثلاً /dev/sda1 به معنای اولین پارتیشن روی اولین دستگاه بلوکی).

هنگام فهرست کردن تمام دامنه‌های libvirt (در صورتی که گزینه‌ای برای -a یا -d مشخص نشده باشد) نام دامنه libvirt یا UUID (در صورت استفاده از --uuid) به عنوان پیشوند به این ستون اضافه می‌شود؛ مانند: "WinXP:/dev/sda1"

ستون ۲
محل شروع پارتیشن به بایت.
ستون ۳
تراز پارتیشن به بایت یا کیلوبایت (مثلاً 512 یا "4K").
ستون ۴
عبارت "ok" اگر تراز برای عملکرد بهینه باشد، یا "bad" اگر تراز بتواند مشکلات عملکردی ایجاد کند.
ستون‌های ۵+
توضیحات متنی اختیاری.

کد خروج برنامه بسته به اینکه آیا پارتیشن‌های ناتراز یافت شده‌اند یا خیر تغییر می‌کند. بخش «وضعیت خروج (EXIT STATUS)» را در ادامه ببینید.

اگر فقط کد خروج را بدون هیچ خروجی متنی می‌خواهید، از گزینه -q استفاده کنید.

نمایش راهنمای کوتاه.
افزودن file که باید یک ایمیج دیسک از ماشین مجازی باشد.

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

افزودن یک دیسک راه دور. بخش "ADDING REMOTE STORAGE" در guestfish(1) را ببینید.
این پارامتر اندازه سکتور ایمیج دیسک را تنظیم می‌کند. این گزینه بر تمام دیسک‌هایی که بعد از این پارامتر صراحتاً اضافه می‌شوند تأثیر می‌گذارد. استفاده از --blocksize بدون آرگومان، اندازه سکتور دیسک را به مقدار پیش‌فرض که معمولاً ۵۱۲ بایت است بازمی‌گرداند. همچنین "guestfs_add_drive_opts" در guestfs(3) را ببینید.
در صورت استفاده از libvirt، به URI داده شده متصل می‌شود. در صورت عدم ذکر، به هایپروایزر پیش‌فرض libvirt متصل می‌شویم.

اگر دستگاه‌های بلوکی مهمان را مستقیماً مشخص کنید (-a)، libvirt اصلاً استفاده نخواهد شد.

افزودن تمام دیسک‌های مربوط به مهمان نام‌برده شده در libvirt. می‌توان به جای نام از UUID دامنه نیز استفاده کرد.
رفتار پیش‌فرض برای گزینه -a تشخیص خودکار فرمت ایمیج دیسک است. استفاده از این گزینه فرمت دیسک را برای گزینه‌های -a بعدی در خط فرمان اجبار می‌کند. استفاده از --format بدون آرگومان، وضعیت را به تشخیص خودکار برای گزینه‌های -a بعدی بازمی‌گرداند.

برای مثال:

virt-alignment-scan --format=raw -a disk.img

فرمت raw (بدون تشخیص خودکار) را برای disk.img اجبار می‌کند.

virt-alignment-scan --format=raw -a disk.img --format -a another.img

فرمت raw (بدون تشخیص خودکار) را برای disk.img اجبار کرده و برای another.img به تشخیص خودکار بازمی‌گردد.

اگر ایمیج‌های دیسک مهمان با فرمت خام (raw) غیرقابل اعتماد دارید، باید از این گزینه برای مشخص کردن فرمت دیسک استفاده کنید. این کار از یک مشکل امنیتی احتمالی با مهمان‌های مخرب جلوگیری می‌کند (CVE-2010-3851).

از نسخه 1.22 در libguestfs، ابزار virt-alignment-scan چندریسمانی (multithreaded) است و مهمان‌ها را به صورت موازی بررسی می‌کند. به طور پیش‌فرض تعداد ریسمان‌ها بر اساس مقدار حافظه آزاد موجود در زمان شروع virt-alignment-scan انتخاب می‌شود. شما می‌توانید با استفاده از گزینه -P ابزار virt-alignment-scan را مجبور کنید حداکثر از "nr_threads" ریسمان استفاده کند.

توجه داشته باشید که -P 0 به معنای تشخیص خودکار و -P 1 به معنای استفاده از یک ریسمان منفرد است.

هیچ خروجی تولید نمی‌کند. فقط کد خروج را تنظیم می‌کند (بخش «وضعیت خروج (EXIT STATUS)» در ادامه را ببینید).
چاپ UUIDها به جای نام‌ها. این گزینه برای دنبال کردن یک مهمان حتی زمانی که مهمان مهاجرت داده شده یا تغییر نام یافته، یا زمانی که دو مهمان نام یکسانی دارند مفید است.

این گزینه فقط زمانی اعمال می‌شود که تمام دامنه‌های libvirt فهرست شوند (زمانی که هیچ گزینه -a یا -d مشخص نشده باشد).

فعال‌سازی پیام‌های پرجزئیات برای اشکال‌زدایی.
نمایش شماره نسخه و خروج.
فعال‌سازی ردگیری فراخوانی‌های API در libguestfs.

سیستم‌عامل‌های قدیمی‌تر از ویندوز ۲۰۰۸ و لینوکس قبل از حدود سال ۲۰۱۰، اولین سکتور از اولین پارتیشن را در سکتور ۶۳ با اندازه سکتور ۵۱۲ بایت قرار می‌دهند. این اتفاق به دلیل یک تصادف تاریخی رخ داده است. درایوها مجبور بودند هندسه سیلندر / هد / سکتور (CHS) را به BIOS گزارش دهند. این هندسه در درایوهای امروزی کاملاً بی‌معنی است، اما طبق گزارش هندسه، همیشه ۶۳ سکتور در هر ترک (track) وجود دارد. بنابراین سیستم‌عامل اولین پارتیشن را در ابتدای «ترک» دوم، یعنی در سکتور ۶۳ قرار می‌دهد.

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

  • ۵۱۲ بایت

    اگر سیستم‌عامل میزبان از فضای ذخیره‌سازی محلی مستقیماً روی پارتیشن‌های هارد دیسک استفاده کند، و هارد دیسک دارای سکتورهای فیزیکی ۵۱۲ بایتی باشد.

  • ۴ کیلوبایت

    برای ذخیره‌سازی محلی روی هارد دیسک‌های جدید با سکتورهای فیزیکی ۴ کیلوبایتی؛ برای ذخیره‌سازی مبتنی بر فایل روی سیستم‌فایل‌هایی با اندازه بلوک ۴ کیلوبایتی؛ یا برای برخی انواع ذخیره‌سازهای متصل به شبکه (NAS).

  • ۶۴ کیلوبایت

    برای ذخیره‌سازهای متصل به شبکه سطح بالا. این اندازه بلوک بهینه برای برخی سخت‌افزارهای NetApp است.

  • ۱ مگابایت

    بخش «تراز پارتیشن ۱ مگابایتی (1 MB PARTITION ALIGNMENT)» در ادامه را ببینید.

پارتیشن‌هایی که به درستی با فضای ذخیره‌سازی زیرین تراز نشده‌اند باعث ورودی/خروجی اضافه می‌شوند. برای مثال:

                     sect#63
                     ┌──────────────────────────┬ ─ ─ ─ ─
                     │         guest            │
                     │    filesystem block      │
─ ┬──────────────────┴──────┬───────────────────┴─────┬ ─ ─
  │  host block             │  host block             │
  │                         │                         │
─ ┴─────────────────────────┴─────────────────────────┴ ─ ─

در این مثال، هر بار که یک بلوک ۴ کیلوبایتی مهمان خوانده می‌شود، باید به دو بلوک روی میزبان دسترسی پیدا کرد (بنابراین دو برابر ورودی/خروجی انجام می‌شود). هنگامی که یک بلوک ۴ کیلوبایتی مهمان نوشته می‌شود، ابتدا باید دو بلوک میزبان خوانده شوند، داده‌های قدیمی و جدید ترکیب شوند، و دو بلوک دوباره نوشته شوند (۴ برابر ورودی/خروجی).

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

برای یک هارد دیسک مصرفی معمولی با سکتورهای ۵۱۲ بایتی:

$ cat /sys/block/sda/queue/hw_sector_size
512
$ cat /sys/block/sda/queue/physical_block_size
512
$ cat /sys/block/sda/queue/logical_block_size
512
$ cat /sys/block/sda/queue/minimum_io_size
512
$ cat /sys/block/sda/queue/optimal_io_size
0

برای یک هارد دیسک مصرفی جدید با سکتورهای ۴ کیلوبایتی:

$ cat /sys/block/sda/queue/hw_sector_size
4096
$ cat /sys/block/sda/queue/physical_block_size
4096
$ cat /sys/block/sda/queue/logical_block_size
4096
$ cat /sys/block/sda/queue/minimum_io_size
4096
$ cat /sys/block/sda/queue/optimal_io_size
0

برای یک NetApp LUN:

$ cat /sys/block/sdc/queue/logical_block_size
512
$ cat /sys/block/sdc/queue/physical_block_size
512
$ cat /sys/block/sdc/queue/minimum_io_size
4096
$ cat /sys/block/sdc/queue/optimal_io_size
65536

سیستم NetApp دسترسی‌های ۵۱۲ بایتی را مجاز می‌داند (اما بسیار ناکارآمد خواهند بود)، حداقل اندازه ورودی/خروجی ۴ کیلوبایت را ترجیح می‌دهد، اما اندازه ورودی/خروجی بهینه آن ۶۴ کیلوبایت است.

برای کسب اطلاعات دقیق درباره معنای این اعداد، به این آدرس مراجعه کنید: http://docs.redhat.com/docs/en-US/Red_Hat_Enterprise_Linux/6/html/Storage_Administration_Guide/newstorage-iolimits.html

[با تشکر از Matt Booth برای ارائه داده‌های درایو 4K. با تشکر از Mike Snitzer برای ارائه داده‌های NetApp و اطلاعات تکمیلی.]

مایکروسافت از زمان Windows 2008 Server مقدار ۱ مگابایت را به عنوان تراز پیش‌فرض برای تمام پارتیشن‌ها انتخاب کرد و لینوکس نیز از این رویه پیروی کرده است.

با فرض سکتورهای ۵۱۲ بایتی در مهمان، اکنون مشاهده خواهید کرد که اولین پارتیشن در سکتور ۲۰۴۸ شروع می‌شود و پارتیشن‌های بعدی (در صورت وجود) در مضربی از ۲۰۴۸ سکتور شروع خواهند شد.

تراز ۱ مگابایتی با تمام نیازمندی‌های تراز فعلی (4K, 64K) سازگار است و فضایی برای رشد آتی در اندازه‌های بلوک فیزیکی فراهم می‌کند.

ابزار virt-resize(1) می‌تواند تراز پارتیشن‌های برخی از مهمان‌ها را تغییر دهد. در حال حاضر این ابزار می‌تواند تمام پارتیشن‌های همه مهمان‌های ویندوز را به طور کامل تراز کند و در صورت لزوم بوت‌لودر را اصلاح نماید. برای مهمان‌های لینوکس، می‌تواند پارتیشن‌های دوم و بعدی را تراز کند، به طوری که اکثریت دسترسی‌های سیستم‌عامل به جز زمان بوت تراز خواهند بود.

روش دیگر برای تصحیح مشکلات تراز پارتیشن‌ها، نصب مجدد سیستم‌عامل‌های مهمان است. اگر سیستم‌عامل‌ها را از روی الگوها (templates) نصب می‌کنید، اطمینان حاصل کنید که این الگوها نیز دارای تراز پارتیشن صحیح هستند.

برای نسخه‌های قدیمی‌تر ویندوز، سند زیر از NetApp حاوی اطلاعات مفیدی است: http://media.netapp.com/documents/tr-3747.pdf

برای Red Hat Enterprise Linux ≤ 5، از یک اسکریپت Kickstart استفاده کنید که شامل یک بخش صریح %pre باشد که پارتیشن‌های تراز شده را با استفاده از parted(8) ایجاد کند. از دستور Kickstart با عنوان "part" استفاده نکنید. سند NetApp بالا شامل یک مثال است.

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

  • 0

    خروج موفق، تمام پارتیشن‌ها برای بهترین عملکرد در تراز ≥ 64K قرار دارند

  • 1

    خطا در اسکن ایمیج دیسک یا مهمان

  • 2

    خروج موفق، برخی از پارتیشن‌ها دارای تراز < 64K هستند که می‌تواند منجر به عملکرد ضعیف در ذخیره‌سازهای تحت شبکه سطح بالا شود

  • 3

    خروج موفق، برخی از پارتیشن‌ها دارای تراز < 4K هستند که می‌تواند منجر به عملکرد ضعیف در اکثر هایپروایزرها شود

guestfs(3), guestfish(1), virt-filesystems(1), virt-rescue(1), virt-resize(1), http://libguestfs.org.

Richard W.M. Jones http://people.redhat.com/~rjones

Copyright (C) 2011 Red Hat Inc.

این برنامه نرم‌افزار آزاد است؛ می‌توانید آن را تحت شرایط مجوز عمومی همگانی گنو (GNU General Public License) منتشر شده توسط بنیاد نرم‌افزار آزاد؛ چه نسخه ۲ مجوز، یا (به انتخاب خودتان) هر نسخه بعدی بازتوزیع کرده و/یا تغییر دهید.

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

شما باید همراه با این برنامه یک نسخه از مجوز عمومی همگانی گنو را دریافت کرده باشید؛ در غیر این صورت به Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA بنویسید.

برای دریافت فهرست اشکالات مربوط به libguestfs، از این پیوند استفاده کنید: https://bugzilla.redhat.com/buglist.cgi?component=libguestfs&product=Virtualization+Tools

برای گزارش یک اشکال جدید در libguestfs، از این پیوند استفاده کنید: https://bugzilla.redhat.com/enter_bug.cgi?component=libguestfs&product=Virtualization+Tools

هنگام گزارش اشکال، لطفاً موارد زیر را ارائه دهید:

  • نسخه libguestfs.
  • مکانی که libguestfs را از آنجا دریافت کرده‌اید (مثلاً کدام توزیع لینوکس، کامپایل شده از سورس کد، و غیره).
  • اشکال را به دقت توصیف کرده و روشی برای بازتولید آن ارائه دهید.
  • برنامه libguestfs-test-tool(1) را اجرا کرده و خروجی کامل و ویرایش‌نشده را در گزارش اشکال قرار دهید.
2026-07-11 guestfs-tools-1.56.0