| virt-resize(1) | Virtualization Support | virt-resize(1) |
نام (NAME)
virt-resize - تغییر اندازه دیسکها و پارتیشنهای ماشینهای مجازی
خلاصه دستور (SYNOPSIS)
virt-resize [--resize /dev/sdaN=[+/-]<size>[%]] [--expand /dev/sdaN] [--shrink /dev/sdaN] [--ignore /dev/sdaN] [--delete /dev/sdaN] [...] indisk outdisk
توضیحات (DESCRIPTION)
ابزار virt-resize میتواند دیسک یک ماشین مجازی را تغییر اندازه داده، آن را در کل بزرگتر یا کوچکتر کند و پارتیشنهای داخل آن را تغییر اندازه دهد یا حذف نماید.
ابزار virt-resize نمیتواند دیسکها را بهصورت درجا (in-place) تغییر اندازه دهد. همچنین نباید روی ماشینهای مجازی روشن و فعال استفاده شود - برای دستیابی به نتایج پایدار و مطمئن، پیش از تغییر اندازه، ماشین مجازی را خاموش کنید.
اگر با ابزارهای مرتبط virt-filesystems(1) و virt-df(1) آشنایی ندارید، پیشنهاد میکنیم ابتدا صفحات راهنمای آنها را مطالعه فرمایید.
مثالها (EXAMPLES)
- 1.
- این مثال
دیسک
"olddisk" را
دریافت
کرده و آن
را در دیسک
"newdisk"
تغییر
اندازه
میدهد و
یکی از
پارتیشنهای
سیستمعامل
مهمان را
گسترش
میدهد تا ۵
گیگابایت
فضای اضافی
را پر کند:
virt-filesystems --long -h --all -a olddisk truncate -r olddisk newdisk truncate -s +5G newdisk # توجه داشته باشید که "/dev/sda2" پارتیشنی درون فایل "olddisk" است. virt-resize --expand /dev/sda2 olddisk newdisk
- 2.
- مانند حالت
قبل، اما
۲۰۰
مگابایت به
پارتیشن /boot
اضافه کرده
و
باقیمانده
فضا را به /dev/sda2
اختصاص
میدهد:
virt-resize --resize /dev/sda1=+200M --expand /dev/sda2 \ olddisk newdisk
- 3.
- مانند مثال
اول، ولی
بهعنوان
گام پایانی
یک حجم
منطقی (LVM) را
گسترش
میدهد. این
روشی است که
معمولاً
برای
سیستمهای
مهمان
لینوکسی
مبتنی بر LVM
استفاده
میکنید:
virt-resize --expand /dev/sda2 --LV-expand /dev/vg_guest/lv_root \ olddisk newdisk
- 4.
- مانند مثال
اول، اما
فرمت دیسک
خروجی
بهجای
دیسک خام (raw)
با فرمت qcow2
خواهد بود:
qemu-img create -f qcow2 -o preallocation=metadata newdisk.qcow2 15G virt-resize --expand /dev/sda2 olddisk newdisk.qcow2
نحوه استفاده با جزئیات (DETAILED USAGE)
بزرگکردن دیسک ماشین مجازی (EXPANDING A VIRTUAL MACHINE DISK)
- ۱. خاموش کردن ماشین مجازی
- ۲. یافتن تصویر دیسک ورودی
- تصویر دیسک
ورودی (فایل
یا دستگاه
روی میزبان
که حاوی
دیسک مهمان
است) را
مشخص کنید.
اگر ماشین
مهمان توسط
libvirt مدیریت
میشود،
میتوانید
با دستور
"virsh dumpxml" به
این صورت
نام تصویر
دیسک را
بیابید:
# virsh dumpxml guestname | xpath -e /domain/devices/disk/source Found 1 nodes: -- NODE -- <source dev="/dev/vg/lv_guest" />
- ۳. بررسی اندازههای فعلی
- از ابزار
virt-filesystems(1) برای
نمایش
پارتیشنها
و
اندازههای
فعلی آنها
استفاده
کنید:
# virt-filesystems --long --parts --blkdevs -h -a /dev/vg/lv_guest Name Type Size Parent /dev/sda1 partition 101M /dev/sda /dev/sda2 partition 7.9G /dev/sda /dev/sda device 8.0G -
(این مثال مربوط به یک ماشین مجازی با دیسک ۸ گیگابایتی است که میخواهیم آن را به ۱۰ گیگابایت افزایش دهیم).
- ۴. ساخت دیسک خروجی
- ابزار virt-resize
نمیتواند
تغییرات
دیسک را
بهصورت
درجا انجام
دهد. باید
فضای کافی
برای ذخیره
دیسک خروجی
تغییراندازهیافته
داشته
باشید.
برای ذخیره تصویر دیسک خروجی در یک فایل، فایلی با اندازه مناسب ایجاد کنید:
# rm -f outdisk # truncate -s 10G outdisk
یا از ابزار lvcreate(1) برای ساخت یک حجم منطقی (LVM) استفاده کنید:
# lvcreate -L 10G -n lv_name vg_name
یا از دستور virsh(1) vol-create-as برای ایجاد یک ولوم ذخیرهسازی libvirt بهره ببرید:
# virsh pool-list # virsh vol-create-as poolname newvol 10G
- ۵. تغییر اندازه (Resize)
- دستور virt-resize
دو پارامتر
اجباری
دریافت
میکند:
دیسک ورودی
و دیسک
خروجی (هر
دو
میتوانند
دستگاه،
فایل یا URI به
یک دیسک
دوردست
باشند).
دیسک خروجی
همان دیسکی
است که در
مرحله قبل
ساخته شد.
# virt-resize indisk outdisk
این دستور صرفاً تصویر دیسک "indisk" را در تصویر دیسک "outdisk" بدون تغییر اندازه یا دستکاری پارتیشنهای موجود کپی میکند. اگر "outdisk" بزرگتر باشد، یک پارتیشن خالی اضافی در انتهای دیسک ساخته میشود که فضای اضافی را پوشش میدهد. اگر "outdisk" کوچکتر باشد، با خطا مواجه خواهد شد.
در کاربردهای واقعی، شما میخواهید با افزودن گزینههای بیشتر پارتیشنهای موجود را گسترش دهید (برای لیست کامل به بخش «گزینهها» در ادامه مراجعه فرمایید).
گزینه --expand کاربردیترین گزینه است. این گزینه پارتیشن مشخصشده را در دیسک گسترش میدهد تا تمام فضای اضافی را پر کند:
# virt-resize --expand /dev/sda2 indisk outdisk
(در این حالت، پارتیشن اضافی در انتهای دیسک ساخته نمیشود، چرا که فضای استفادهنشدهای باقی نخواهد ماند).
گزینه --resize گزینه پرکاربرد دیگری است. دستور زیر اندازه /dev/sda1 را ۲۰۰ مگابایت افزایش داده و /dev/sda2 را گسترش میدهد تا باقیمانده فضای در دسترس را پر کند:
# virt-resize --resize /dev/sda1=+200M --expand /dev/sda2 \ indisk outdiskاگر پارتیشن گسترشیافته درون تصویر حاوی فایلسیستم یا PV لایه LVM باشد، در صورتی که virt-resize روش آن را بداند، محتوای آن را تغییر اندازه میدهد که معادل اجرای دستوراتی مانند pvresize(8)، resize2fs(8)، ntfsresize(8)، btrfs(8)، xfs_growfs(8) یا resize.f2fs(8) است. با این حال، virt-resize نحوه گسترش برخی فایلسیستمها را نمیداند، بنابراین پس از بوت کردن مهمان باید بهصورت آنلاین آنها را تغییر اندازه دهید.
# virt-resize --expand /dev/sda2 nbd://example.com outdisk
دیسک ورودی میتواند یک نشانی URI باشد تا از یک دیسک دوردست بهعنوان منبع استفاده شود. فرمت URI با guestfish سازگار است. بخش "ADDING REMOTE STORAGE" را در guestfish(1) ببینید.
سایر گزینهها در ادامه بررسی شدهاند.
- ۶. آزمایش (Test)
- تصویر دیسک
جدید را
پیش از دور
انداختن
دیسک قدیمی
بهطور
کامل
آزمایش
کنید.
اگر از libvirt استفاده میکنید، فایل XML را ویرایش کنید تا به دیسک جدید اشاره کند:
# virsh edit guestname
تگ <source ...> را تغییر دهید؛ به نشانی http://libvirt.org/formatdomain.html#elementsDisks مراجعه فرمایید.
سپس دامنه را با دیسک جدیدِ تغییراندازهیافته راهاندازی کنید:
# virsh start guestname
و بررسی کنید که آیا بهدرستی کار میکند. همچنین بخش «نکات» در ادامه را برای اطلاعات تکمیلی ببینید.
- ۷. تغییر اندازه حجمهای منطقی (LVs) درون مهمان
- (این کار را
میتوان
بهصورت
آفلاین با
استفاده از
guestfish(1) نیز
انجام داد)
بهمحض بالا آمدن سیستم مهمان، باید فضای جدید را در دسترس ببینید، حداقل برای PVها و فایلسیستمهایی که virt-resize نحوه گسترش آنها را میداند. کاربر ممکن است نیاز داشته باشد حجمهای منطقی (LV) درون PVها را بزرگ کند و همچنین فایلسیستمهایی را که virt-resize نمیتواند گسترش دهد بهصورت دستی تغییر اندازه دهد.
کوچککردن دیسک ماشین مجازی (SHRINKING A VIRTUAL MACHINE DISK)
کوچک کردن دیسک تا حدی پیچیدهتر از بزرگ کردن آن است و در اینجا تنها نمایی کلی از آن ارائه شده است.
در وهله اول، virt-resize تلاشی برای کوچک کردن محتوای پارتیشنها (فایلسیستمها، PVها) نخواهد کرد. کاربر باید پیش از ارسال تصویر دیسک به virt-resize، محتوای آن را کوچک کند، و virt-resize بررسی خواهد کرد که آیا محتوا بهدرستی کوچک شده است یا خیر.
(کوچک کردن را میتوان بهصورت آفلاین با guestfish(1) نیز انجام داد)
پس از کوچک کردن PVها و سیستمهای فایل، ماشین مهمان را خاموش کنید و مراحل ۳ و ۴ بالا را برای ایجاد تصویر دیسک جدید دنبال نمایید.
سپس virt-resize را با هر یک از گزینههای --shrink و/یا --resize اجرا کنید.
نادیده گرفتن یا حذف پارتیشنها (IGNORING OR DELETING PARTITIONS)
ابزار virt-resize راهکاری مناسب برای نادیده گرفتن یا حذف پارتیشنها هنگام کپی از دیسک ورودی به دیسک خروجی ارائه میدهد. نادیده گرفتن یک پارتیشن، عملیات کپی را در جایی که محتویات پارتیشن برایتان اهمیت ندارد سرعت میبخشد. حذف یک پارتیشن، آن را بهطور کامل پاک میکند؛ اما توجه داشته باشید که این کار موجب شمارهگذاری مجدد پارتیشنهای بعدی میشود که میتواند باعث بوت نشدن برخی سیستمهای مهمان گردد.
فرمتهای QCOW2 و خام فاقد پراکندگی (QCOW2 AND NON-SPARSE RAW FORMATS)
اگر دیسک ورودی با فرمت qcow2 باشد، ممکن است ترجیح دهید دیسک خروجی نیز با فرمت qcow2 ذخیره شود. همچنین virt-resize میتواند فرمت را حین کار تبدیل کند. فرمت خروجی بهسادگی با فرمت ظرف خالی خروجی که تهیه میکنید تعیین میشود. بنابراین برای ایجاد خروجی qcow2، بهجای دستور truncate از دستور زیر استفاده کنید:
qemu-img create -f qcow2 -o preallocation=metadata outdisk [size]
بهطور مشابه، برای دریافت خروجی خام فاقد پراکندگی (non-sparse raw)، دستور زیر را به کار ببرید:
fallocate -l size outdisk
(در سیستمهای قدیمیتر که فاقد دستور fallocate(1) هستند از "dd if=/dev/zero of=outdisk bs=1M count=.." استفاده کنید).
پارتیشنهای منطقی (LOGICAL PARTITIONS)
پارتیشنهای منطقی (مانند /dev/sda5+ روی دیسکهایی با جدول پارتیشن DOS/MBR) قابلیت تغییر اندازه ندارند.
برای درک روند کار: یکی از چهار پارتیشن /dev/sda1-4 دارای نوع پارتیشن MBR برابر با 05 یا "0f" خواهد بود. به این پارتیشن، پارتیشن توسعهیافته (extended partition) میگویند. از virt-filesystems(1) برای دیدن نوع پارتیشن MBR استفاده کنید.
پارتیشنهای منطقی درون پارتیشن توسعهیافته قرار دارند.
پارتیشن توسعهیافته را میتوان گسترش داد، اما نمیتوان آن را کوچک کرد (مگر با اجبار، که توصیه نمیشود). زمانی که پارتیشن توسعهیافته کپی میشود، تمام پارتیشنهای منطقی درون آن نیز بهصورت ضمنی کپی میشوند. ابزار virt-resize به درون پارتیشن توسعهیافته نگاه نمیکند، بنابراین پارتیشنهای منطقی را مستقیماً کپی مینماید.
شما اصلاً نمیتوانید یک پارتیشن منطقی (مانند /dev/sda5+) را در خط فرمان مشخص کنید. انجام این کار با خطا روبرو خواهد شد.
گزینهها (OPTIONS)
- --help
- نمایش راهنما.
- --align-first auto
- --align-first never
- --align-first always
- تراز کردن
پارتیشن
نخست برای
بهبود
عملکرد
(همچنین
گزینه --alignment
را ببینید).
حالت پیشفرض --align-first auto است که تنها در صورتی پارتیشن اول را تراز میکند که این کار ایمن باشد؛ یعنی فقط زمانی که بدانیم چگونه بوتلودر را بهطور خودکار اصلاح کنیم، و در حال حاضر این کار فقط برای مهمانهای ویندوز امکانپذیر است.
گزینه --align-first never بدین معنی است که هرگز پارتیشن نخست جابهجا نمیشود. این ایمنترین گزینه است. اگر ماشین مهمان پس از تغییر اندازه بوت نشد، این گزینه را امتحان کنید.
گزینه --align-first always به این معنی است که همیشه پارتیشن نخست تراز میشود (در صورت نیاز به تراز). در برخی سیستمهای مهمان این کار موجب از کار افتادن بوتلودر شده و سیستم را غیرقابلبوت میکند.
- --alignment N
- تنظیم تراز
پارتیشنها
روی "N"
سکتور.
مقدار
پیشفرض در
نسخههای
قبل از 1.13.19
برابر با ۶۴
سکتور بود و
پس از آن
۱۲۸ سکتور
است.
با فرض سکتورهای ۵۱۲ بایتی در مهمان، مقادیر مناسب به شرح زیر است:
- --alignment 1 (۵۱۲ بایت)
- پارتیشنها تا حد امکان فشرده و به هم چسبیده قرار میگیرند، اما کاملاً غیرتراز خواهند بود. در برخی موارد این موضوع میتواند باعث افت شدید کارایی شود. برای اطلاعات بیشتر به virt-alignment-scan(1) مراجعه کنید.
- --alignment 8 (۴ کیلوبایت)
- این مقدار، حداقل تراز قابل قبول برای عملکرد مناسب روی میزبانهای امروزی است.
- --alignment 128 (۶۴ کیلوبایت)
- این تراز زمانی که میزبان از ذخیرهسازهای شبکه ردهبالا استفاده میکند کارایی خوبی ارائه میدهد.
- --alignment 2048 (۱ مگابایت)
- این مقدار، تراز استاندارد استفادهشده توسط تمام مهمانهای تازهنصبشده از سال ۲۰۰۸ به بعد است.
- --colors
- --colours
- استفاده از کدهای رنگی ANSI برای رنگآمیزی پیامها. این حالت در زمان خروجی در ترمینال (tty) پیشفرض است. اگر خروجی برنامه به یک فایل هدایت شود، کدهای رنگی غیرفعال میشوند مگر اینکه از این گزینه استفاده کنید.
- -d
- --debug
- (منسوخشده:
بهجای آن
از گزینه -v
استفاده
کنید)
فعال کردن پیامهای اشکالزدایی.
- --delete PART
- حذف
پارتیشن
مشخصشده.
دقیقتر
است اگر
بگوییم «آن
را کپی
نکن»، زیرا
virt-resize
تغییرات
درجا انجام
نمیدهد و
تصویر دیسک
اصلی
دستنخورده
باقی
میماند.
توجه داشته باشید که وقتی یک پارتیشن را حذف میکنید، تمام دادههای موجود در آن نیز حذف میشوند. علاوه بر این، این کار باعث شمارهگذاری مجدد پارتیشنهای بعدی میشود که میتواند بهراحتی ماشین مهمان را غیرقابلبوت کند.
میتوانید این گزینه را چند بار مشخص کنید.
- --expand PART
- گسترش
پارتیشن
مشخصشده
تا تمام
فضای اضافی
را پر کند
(فضای
باقیمانده
پس از انجام
سایر
تغییرات
درخواستی).
اگر virt-resize روش آن را بداند، محتوای مستقیم پارتیشن را گسترش میدهد. برای مثال، اگر پارتیشن یک PV لایه LVM باشد، PV را گسترش میدهد (مانند اجرای دستور pvresize(8)). سایر محتویاتی که برایش ناشناخته باشد دستنخورده رها میشوند.
در حال حاضر virt-resize میتواند موارد زیر را تغییر اندازه دهد:
- فایلسیستمهای ext2، ext3 و ext4.
- فایلسیستمهای
NTFS، در صورتی
که libguestfs با
پشتیبانی
از NTFS
کامپایل
شده باشد.
فایلسیستم باید در آخرین استفاده بهطور مرتب خاموش شده باشد. علاوه بر این، دستور ntfsresize(8) فایلسیستم تغییراندازهیافته را به عنوان نیازمند بررسی نشانهگذاری میکند، بنابراین در اولین بوت پس از تغییر اندازه، ویندوز دیسک را بررسی خواهد کرد.
- حجمهای فیزیکی LVM (یا PVها). ابزار virt-resize معمولاً محتوای درون PV را تغییر اندازه نمیدهد، اما گزینه --LV-expand را ببینید. کاربر همچنین میتواند پس از بالا آمدن سیستم مهمان، حجمهای منطقی (LV) را به میزان دلخواه تغییر اندازه دهد.
- فایلسیستمهای Btrfs، اگر libguestfs با پشتیبانی از btrfs کامپایل شده باشد.
- فایلسیستمهای XFS، اگر libguestfs با پشتیبانی از XFS کامپایل شده باشد.
- پارتیشنهای
حافظه
مجازی (Swap)
لینوکس.
لطفاً توجه داشته باشید که libguestfs محتوای فعلی سواپ را با ساخت مجدد آن توسط "mkswap" از بین میبرد، بنابراین زمانی که ماشین مهمان در حالت تعلیق (Suspend) قرار دارد نباید از این گزینه استفاده شود.
- فایلسیستمهای f2fs، اگر libguestfs با پشتیبانی از f2fs کامپایل شده باشد.
توجه داشته باشید که نمیتوانید از --expand و --shrink بهطور همزمان استفاده کنید.
- --format raw
- تعیین فرمت
تصویر دیسک
ورودی. اگر
این پرچم
داده نشود،
فرمت
بهصورت
خودکار از
خود تصویر
تشخیص داده
میشود.
هنگام کار با تصاویر دیسک خام مهمان که غیرقابلاعتماد هستند، باید همیشه فرمت را مشخص نمایید.
توجه داشته باشید که این گزینه بر فرمت خروجی تأثیری ندارد. بخش «فرمتهای QCOW2 و خام فاقد پراکندگی» را ببینید.
- --ignore PART
- نادیده
گرفتن
پارتیشن
مشخصشده.
در عمل این
بدان
معناست که
پارتیشن
روی دیسک
مقصد تخصیص
داده
میشود،
اما محتوای
آن از دیسک
مبدأ کپی
نمیشود.
محتوای
پارتیشن
خالی
(تماماً
بایتهای
صفر) خواهد
بود.
میتوانید این گزینه را چند بار مشخص کنید.
- --LV-expand LOGVOL
- این گزینه
حجم منطقی
را دریافت
کرده و در
گام نهایی،
آن را گسترش
میدهد تا
تمام فضای
در دسترس در
گروه حجمی (Volume
Group) مربوطه را
پر کند. یک
کاربرد
متداول، با
فرض یک
مهمان
لینوکسی با
یک PV به نام
/dev/sda2 و یک
دستگاه
ریشه به نام
/dev/vg_guest/lv_root به این
صورت خواهد
بود:
virt-resize indisk outdisk \ --expand /dev/sda2 --LV-expand /dev/vg_guest/lv_root
این کار ابتدا پارتیشن (و PV) را گسترش داده و سپس دستگاه ریشه را گسترش میدهد تا فضای اضافی در PV را پر کند.
محتوای LV نیز در صورتی که virt-resize روش آن را بداند تغییر اندازه مییابد. میتوانید با استفاده از گزینه --no-expand-content مانع تلاش virt-resize برای گسترش محتوا شوید.
از virt-filesystems(1) برای فهرست کردن فایلسیستمهای درون ماشین مهمان استفاده کنید.
میتوانید این گزینه را چند بار مشخص کنید، اما این کار منطقی نخواهد بود مگر اینکه حجمهای منطقی مشخصشده همگی در گروههای حجمی متفاوتی باشند.
- --machine-readable
- --machine-readable=format
- این گزینه برای ایجاد خروجی مناسب پردازش ماشینی هنگام فراخوانی virt-resize از سایر برنامهها یا رابطهای گرافیکی (GUI) استفاده میشود. بخش «خروجی قابل خواندن توسط ماشین» در ادامه را ببینید.
- -n
- --dry-run
- چاپ خلاصهای از کارهایی که انجام خواهد شد، بدون انجام هیچ عملیات واقعی.
- --no-copy-boot-loader
- بهطور
پیشفرض،
virt-resize چند
سکتور
ابتدایی
دیسک را (تا
شروع
نخستین
پارتیشن)
کپی میکند.
معمولاً
این
سکتورها
حاوی رکورد
راهانداز
اصلی (MBR) و
بوتلودر
هستند و
برای بوت
شدن صحیح
ماشین
مهمان
ضروری
میباشند.
اگر این پرچم را مشخص کنید، این کپی اولیه انجام نمیشود. در این حالت ممکن است نیاز به نصب مجدد بوتلودر داشته باشید.
- --no-extra-partition
- بهطور
پیشفرض،
اگر پس از
انجام
تمامی
عملیات
تغییر
اندازه،
فضای
استفادهنشدهای
باقی
بماند، virt-resize
یک پارتیشن
اضافی
ایجاد
میکند. از
این گزینه
برای
جلوگیری از
ساخت این
پارتیشن
اضافی
استفاده
کنید. در
صورت
استفاده از
این گزینه،
فضای اضافی
غیرقابلدسترس
خواهد بود
تا زمانی که
fdisk، parted یا
ابزار
پارتیشنبندی
دیگری را
درون مهمان
اجرا کنید.
توجه داشته باشید که اگر فضای مازاد کمتر از ۱۰ مگابایت باشد، هیچ پارتیشن اضافی ایجاد نخواهد شد.
- --no-expand-content
- بهطور
پیشفرض،
virt-resize در صورت
امکان تلاش
میکند
محتوای
مستقیم
پارتیشنها
را گسترش
دهد (گزینه
--expand در بالا
را ببینید).
اگر گزینه --no-expand-content را مشخص کنید، virt-resize این تلاش را انجام نخواهد داد.
- --no-sparse
- غیرفعال کردن کپی پراکنده (Sparse Copying). بخش «کپی پراکنده» در ادامه را ببینید.
- --ntfsresize-force
- ارسال گزینه --force به ntfsresize(8)، که امکان تغییر اندازه را حتی اگر دیسک NTFS نیازمند بررسی نشانهگذاری شده باشد فراهم میکند. اگر میخواهید یک مهمان ویندوزی را چندین بار بدون بوت کردن ویندوز در بین تغییر اندازهها تغییر سایز دهید، باید از این گزینه استفاده کنید.
- --output-format raw
- تعیین فرمت
تصویر دیسک
خروجی. اگر
این پرچم
داده نشود،
بهطور
خودکار از
تصویر دیسک
تشخیص داده
میشود.
هنگام کار با تصاویر دیسک خام مهمان که غیرقابلاعتماد هستند، باید همیشه مطمئن شوید که فرمت مشخص شده است.
توجه داشته باشید که این گزینه فرمت خروجی را ایجاد نمیکند؛ این گزینه صرفاً به libguestfs میگوید که فرمت چیست تا نیازی به حدس زدن آن نداشته باشد. شما همچنان باید دیسک خروجی را با فرمت مناسب ایجاد کنید. بخش «فرمتهای QCOW2 و خام فاقد پراکندگی» را ببینید.
- -q
- --quiet
- خلاصه عملیات چاپ نشود.
- --resize PART=SIZE
- تغییر
اندازه
پارتیشن
مشخصشده
(بزرگ یا
کوچک کردن
آن) به
اندازه
دادهشده.
مقدار "SIZE" میتواند بهصورت یک عدد مطلق همراه با b/K/M/G به معنای بایت، کیلوبایت، مگابایت یا گیگابایت؛ یا بهصورت درصدی از اندازه فعلی؛ یا بهصورت یک عدد یا درصد نسبی بیان شود. برای مثال:
--resize /dev/sda2=10G --resize /dev/sda4=90% --resize /dev/sda2=+1G --resize /dev/sda2=-200M --resize /dev/sda1=+128K --resize /dev/sda1=+10% --resize /dev/sda1=-10%
میتوانید اندازه هر پارتیشنی را افزایش دهید. ابزار virt-resize در صورتی که روش آن را بداند محتوای مستقیم پارتیشن را گسترش خواهد داد (گزینه --expand در بالا را ببینید).
شما تنها میتوانید اندازه پارتیشنهایی را کاهش دهید که حاوی فایلسیستم یا PVهایی هستند که از قبل کوچک شدهاند. ابزار virt-resize پیش از ادامه کار انجام این موضوع را بررسی میکند، در غیر این صورت خطا چاپ خواهد کرد (همچنین --resize-force را ببینید).
میتوانید این گزینه را چندین بار مشخص کنید.
- --resize-force PART=SIZE
- این گزینه
همانند --resize
است با این
تفاوت که به
شما اجازه
میدهد
اندازه هر
پارتیشنی
را کاهش
دهید.
معمولاً
این بدان
معناست که
دادههای
موجود در
انتهای
پارتیشن
کوچکشده
را از دست
خواهید
داد، اما
ممکن است
این موضوع
برای شما
اهمیتی
نداشته
باشد (مانند
زمانی که یک
پارتیشن
استفادهنشده
را کوچک
میکنید یا
پارتیشنی
مانند Swap که
بهسادگی
دوباره
قابل ساخت
است).
همچنین گزینه --ignore را ببینید.
- --shrink PART
- کوچک کردن
پارتیشن
مشخصشده
تا زمانی که
کل تصویر
دیسک در
مقصد جا
بگیرد.
پارتیشن
مشخصشده
باید حاوی
فایلسیستم
یا PV باشد که
پیشتر با
ابزار
دیگری
(مانند guestfish(1)
یا سایر
ابزارهای
آنلاین)
کوچک شده
باشد. ابزار
virt-resize این
موضوع را
بررسی کرده
و در صورت
انجام
نشدن،
خطایی صادر
میکند.
میزانی که کل دیسک باید کوچک شود (پس از اعمال تمام عملیات درخواستی کاربر) «کسری» (deficit) نامیده میشود. برای مثال، کپی مستقیم (بدون عملیات دیگر) از یک دیسک ۵ گیگابایتی به یک دیسک ۴ گیگابایتی منجر به ۱ گیگابایت کسری میشود. در این حالت، virt-resize خطا میدهد مگر اینکه کاربر پارتیشنی را برای کوچک کردن مشخص کرده باشد و آن پارتیشن بیش از یک گیگابایت فضای خالی داشته باشد.
توجه داشته باشید که نمیتوانید از --expand و --shrink بهطور همزمان استفاده کنید.
- --unknown-filesystems ignore
- --unknown-filesystems warn
- --unknown-filesystems error
- پیکربندی
رفتار virt-resize
هنگامی که
درخواست
گسترش
فایلسیستمی
داده شده
است، اما نه
libguestfs از آن
پشتیبانی
میکند و نه
virt-resize روش
گسترش
محتوای آن
فایلسیستم
را میداند.
گزینه --unknown-filesystems ignore باعث میشود virt-resize چنین فایلسیستمهایی را بدون هشدار نادیده بگیرد و هیچ پیامی درباره آنها چاپ نشود.
گزینه --unknown-filesystems warn (رفتار پیشفرض) باعث میشود virt-resize برای هر فایلسیستمی که امکان گسترش آن وجود ندارد هشدار دهد، اما همچنان به تغییر اندازه دیسک ادامه دهد.
گزینه --unknown-filesystems error باعث میشود virt-resize با مشاهده اولین فایلسیستمی که نمیتواند گسترش یابد با خطا متوقف شود.
همچنین بخش "unknown/unavailable method for expanding the TYPE filesystem on DEVICE/LV" را ببینید.
- -v
- --verbose
- فعال کردن پیامهای اشکالزدایی با جزئیات.
- -V
- --version
- نمایش شماره نسخه و خروج.
- --wrap
- شکستن خطوط طولانی پیامهای خطا، هشدار و اطلاعاتی (Wrapping). این حالت زمانی که خروجی در ترمینال (tty) باشد پیشفرض است. اگر خروجی برنامه به یک فایل هدایت شود، شکستن خطوط غیرفعال میشود مگر اینکه این گزینه استفاده شود.
- -x
- فعال کردن ردیابی فراخوانیهای رابط برنامهنویسی (API) نرمافزار libguestfs.
خروجی قابل خواندن توسط ماشین (MACHINE READABLE OUTPUT)
گزینه --machine-readable میتواند برای تولید خروجی مناسب پردازش ماشینی استفاده شود که هنگام فراخوانی virt-resize از برنامههای دیگر یا رابطهای کاربری گرافیکی کاربرد دارد.
دو روش برای استفاده از این گزینه وجود دارد.
نخست، استفاده از این گزینه بهتنهایی برای استعلام قابلیتهای باینری virt-resize. خروجی نمونه به این صورت است:
$ virt-resize --machine-readable virt-resize ntfsresize-force 32bitok ntfs btrfs
فهرستی از ویژگیها، هر کدام در یک خط، چاپ شده و برنامه با وضعیت ۰ خارج میشود.
دوم، استفاده از این گزینه همراه با سایر گزینهها برای مناسبسازی خروجی معمول برنامه جهت پردازش ماشین.
در حال حاضر این به معنای موارد زیر است:
- 1.
- پیامهای
نوار
پیشرفت را
میتوان با
جستجوی این
عبارت
باقاعده (Regex)
از خروجی
استاندارد
(stdout) استخراج
کرد:
^[0-9]+/[0-9]+$
- 2.
- برنامه فراخواننده باید پیامهای ارسالی به stdout (بهجز پیامهای نوار پیشرفت) را بهعنوان پیامهای وضعیت در نظر بگیرد. این پیامها را میتوان ثبت (log) کرد یا به کاربر نمایش داد.
- 3.
- برنامه فراخواننده باید پیامهای ارسالی به stderr را بهعنوان پیامهای خطا در نظر بگیرد. علاوه بر این، در صورت وقوع خطای مهلک، virt-resize با کد وضعیت غیرصفر خارج میشود.
نسخههای پیش از 1.13.9 این برنامه از گزینه --machine-readable پشتیبانی نمیکردند و خطایی برمیگردانند.
امکان تعیین رشته قالببندی برای کنترل خروجی وجود دارد؛ بخش "ADVANCED MACHINE READABLE OUTPUT" در guestfs(3) را ببینید.
نکات (NOTES)
«پارتیشن ۱ در مرز سیلندر پایان نمییابد» ("Partition 1 does not end on cylinder boundary.")
ابزار virt-resize پارتیشنها را با مضارب ۱۲۸ سکتور تراز میکند (پارامتر --alignment را ببینید). معمولاً این بدان معناست که پارتیشنها با هندسه قدیمی CHS تراز نخواهند بود. با این حال هندسه CHS برای دیسکهای ساختهشده از اوایل دهه ۱۹۹۰ بیمعنی است و برای دیسکهای سخت مجازی این موضوع دوچندان صدق میکند. تراز کردن پارتیشنها با سیلندرها در هیچ سیستمعامل امروزی مورد نیاز نیست.
گیر کردن بوت مهمان روی «GRUB» (GUEST BOOT STUCK AT "GRUB")
اگر یک مهمان لینوکسی پس از تغییر اندازه بوت نشد و در کنسول روی عبارت "GRUB" متوقف ماند، نصب مجدد grub را امتحان کنید.
guestfish -i -a newdisk ><fs> cat /boot/grub/device.map # بررسی کنید محتوای این فایل معقول باشد یا در صورت نیاز آن را ویرایش کنید ><fs> grub-install / /dev/vda ><fs> exit
برای پیکربندی انعطافپذیرتر مهمان، از جمله در صورت نیاز به تعیین پارامترهای دیگر برای grub-install، از virt-rescue(1) استفاده کنید.
تغییر اندازه پارتیشنهای بوت ویندوز (RESIZING WINDOWS BOOT PARTITIONS)
در ویندوز ویستا و نسخههای بعدی، مایکروسافت به استفاده از یک پارتیشن بوت جداگانه روی آورد. در این ماشینهای مجازی معمولاً /dev/sda1 پارتیشن بوت و /dev/sda2 درایو اصلی (:C) است. تغییر اندازه نخستین پارتیشن (بوت) باعث بروز خطای 0xC0000225 در بوتلودر میشود. تغییر اندازه پارتیشن دوم (یعنی درایو :C) بدون مشکل کار خواهد کرد.
بررسی دیسک در ویندوز (WINDOWS CHKDSK)
دیسکهای ویندوزی که از NTFS استفاده میکنند باید پیش از استفاده از virt-resize در وضعیت پایداری باشند. اگر عملیات ntfsresize با شکست مواجه شد، ماشین مجازی اصلی را بوت کرده و دستور "chkdsk /f" را روی تمام پارتیشنهای NTFS اجرا کنید، سپس ماشین مجازی را بهصورت مرتب خاموش نمایید. برای اطلاعات بیشتر به پیوند زیر مراجعه کنید: https://bugzilla.redhat.com/show_bug.cgi?id=975753
پس از تغییر اندازه، اگر پارتیشنهای NTFS گسترش یافته باشند، ویندوز ممکن است در اولین بوت یک عملیات طولانی "chkdsk" را آغاز کند. این صرفاً یک بررسی ایمنی است و (مگر اینکه خطایی پیدا شود) جای نگرانی ندارد.
خطای صفحه آبی UNMOUNTABLE_BOOT_VOLUME در ویندوز (WINDOWS UNMOUNTABLE_BOOT_VOLUME BSOD)
پس از انجام sysprep روی مهمان ویندوزی و سپس تغییر اندازه آن با virt-resize، ممکن است مهمان با خطای صفحه آبی "UNMOUNTABLE_BOOT_VOLUME" مواجه شده و بوت نشود. این خطا به دلیل وجود خط "ExtendOemPartition=1" در فایل sysprep.inf ایجاد میشود. حذف این خط قبل از sysprep مشکل را برطرف میکند.
ویندوز ۸ (WINDOWS 8)
قابلیت "fast startup" در ویندوز ۸ میتواند مانع از تغییر اندازه پارتیشنهای NTFS توسط virt-resize شود. بخش "WINDOWS HIBERNATION AND WINDOWS 8 FAST STARTUP" در guestfs(3) را ببینید.
کپی پراکنده (SPARSE COPYING)
شما باید یک تصویر دیسک مقصد تازه و صفرشده (Zeroed) برای استفاده virt-resize ایجاد کنید.
ابزار virt-resize بهطور پیشفرض کپی پراکنده انجام میدهد. این بدان معناست که بلوکهایی از دیسک مبدأ را که تماماً صفر هستند کپی نمیکند. این کار سرعت و بهرهوری را افزایش میدهد، اما اگر تصویر دیسک مقصد حاوی دادههای صفرنشده باشد، نتایج نادرستی ایجاد خواهد کرد.
مهمترین حالتی که ممکن است مشکلساز شود زمانی است که مقصد یک پارتیشن میزبان باشد (مانند "virt-resize source.img /dev/sda4") زیرا ابزارهای پارتیشنبندی معمول دادههای قبلی دیسک را در جای خود رها میکنند.
اگر مجبور به استفاده مجدد از مقصدی هستید که حاوی داده است، باید از گزینه --no-sparse استفاده کنید. توجه داشته باشید که این کار میتواند بسیار کندتر باشد.
«روش نامشخص/غیرقابلدسترس برای گسترش فایلسیستم TYPE روی DEVICE/LV» ("unknown/unavailable method for expanding the TYPE filesystem on DEVICE/LV")
از virt-resize خواسته شده است پارتیشن یا حجم منطقی حاوی یک فایلسیستم از نوع "TYPE" را گسترش دهد، اما روش گسترش شناختهشده یا در دسترسی برای آن فایلسیستم وجود ندارد.
این ممکن است به دلیل یکی از دلایل زیر باشد:
- 1.
- فایلسیستم
مربوطه در
libguestfs در دسترس
نیست، زیرا
بسته مناسب
حاوی
ابزارهای
کمکی آن روی
میزبان نصب
نشده است.
این موضوع
معمولاً
برای
فایلسیستمهای
"btrfs"،
"ntfs"،
"xfs" و
"f2fs" رخ
میدهد.
نتایج دستورات زیر را بررسی کنید:
virt-resize --machine-readable guestfish -a /dev/null run : available guestfish -a /dev/null run : filesystem_available TYPE
در این حالت، کافی است بستههای مناسب جهت افزودن پشتیبانی از آنها را نصب کنید. به عنوان مثال، بسته "libguestfs-xfs" در توزیعهای Red Hat Enterprise Linux، CentOS، Debian، Ubuntu و توزیعهای مشتقشده از آنها برای پشتیبانی از فایلسیستم "xfs" استفاده میشود.
- 2.
- ابزار virt-resize
پشتیبانی
از گسترش آن
نوع
فایلسیستم
را ندارد.
در این حالت، کاری برای گسترش آن فایلسیستم توسط virt-resize نمیتوان انجام داد.
در هر دو حالت، virt-resize فایلسیستم مذکور را گسترش نخواهد داد؛ نتیجه این خواهد بود (مگر اینکه --unknown-filesystems error مشخص شده باشد) که پارتیشنهای حاوی چنین سیستمهای فایلی طبق درخواست بزرگتر خواهند شد، اما خود فایلسیستمها همچنان در اندازه قبلی خود قابل استفاده خواهند ماند.
ابزارهای جایگزین (ALTERNATIVE TOOLS)
ابزارهای تجاری متعددی برای تغییر اندازه پارتیشنها وجود دارد که در اینجا نامی از آنها برده نمیشود.
ابزار parted(8) و پوسته گرافیکی آن gparted میتوانند برخی عملیات تغییر اندازه را روی تصاویر دیسک انجام دهند. آنها میتوانند پارتیشنها را تغییر اندازه داده و جابهجا کنند، اما گمان نمیکنم بتوانند کاری با محتویات انجام دهند، و قطعاً ساختار LVM را درک نمیکنند.
ابزار guestfish(1) میتواند تمام کارهای virt-resize و حتی بسیار فراتر از آن را انجام دهد، اما در سطحی بسیار پایینتر. در نهایت احتمالاً مجبور خواهید شد آفستهای سکتورها را بهصورت دستی محاسبه کنید، چیزی که virt-resize برای جلوگیری از آن طراحی شده است. اگر میخواهید دستورات معادل guestfish را که virt-resize اجرا میکند ببینید، از پرچم --debug استفاده کنید.
مجموعه dracut(8) شامل ماژولی به نام "dracut-modules-growroot" است که میتواند برای گسترش پارتیشن ریشه در اولین باری که سیستم مهمان بوت میشود به کار رود. مستندات این ماژول در فایل README مربوطه موجود است.
وضعیت خروج (EXIT STATUS)
این برنامه در صورت موفقیت ۰ و در صورت بروز خطا مقداری غیرصفر برمیگرداند.
همچنین ببینید (SEE ALSO)
virt-filesystems(1), virt-df(1), guestfs(3), guestfish(1), lvm(8), pvresize(8), lvresize(8), resize2fs(8), ntfsresize(8), btrfs(8), xfs_growfs(8), resize.f2fs(8), virsh(1), parted(8), truncate(1), fallocate(1), grub(8), grub-install(8), virt-rescue(1), virt-sparsify(1), virt-alignment-scan(1), http://libguestfs.org
نویسنده (AUTHOR)
Richard W.M. Jones http://people.redhat.com/~rjones
حق نشر (COPYRIGHT)
Copyright (C) 2010-2025 Red Hat Inc.
مجوز (LICENSE)
این برنامه یک نرمافزار آزاد است؛ شما میتوانید آن را تحت شرایط «مجوز عمومی همگانی گنو» (GNU General Public License) طبق آنچه بنیاد نرمافزارهای آزاد منتشر کرده است، بازتوزیع کرده یا تغییر دهید؛ چه نسخه ۲ مجوز یا (به انتخاب خودتان) هر نسخه بعدی.
این برنامه به این امید توزیع میشود که مفید واقع شود، اما بدون هرگونه ضمانت؛ حتی بدون ضمانت ضمنی قابلیت تجاری یا مناسب بودن برای یک هدف خاص. برای جزئیات بیشتر به «مجوز عمومی همگانی گنو» مراجعه کنید.
شما باید همراه با این برنامه نسخهای از «مجوز عمومی همگانی گنو» را دریافت کرده باشید؛ در غیر این صورت، به بنیاد نرمافزارهای آزاد با نشانی زیر بنویسید:
Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
گزارش اشکالات (BUGS)
برای مشاهده فهرست اشکالات ثبتشده برای 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 |