ভার্চুয়াল মেশিন ডিস্ককে কীভাবে আকার দিন?


23

ভার্চুয়াল মেশিনের ডিস্কটির আকার পরিবর্তন করার মতো কোনও উপায় আছে কি? বলুন ডিস্কের আকার 32GB থেকে 64GB পর্যন্ত বাড়িয়ে দিন। আমি উবুন্টু সার্ভার ১১.১০ bit৪ বিবিটে কেভিএম / কিউমু চালাচ্ছি। ধন্যবাদ।

উত্তর:


27

ডেবিয়ান ভিত্তিক ডিস্ট্রোতে আপনার virt-resizeপরিবর্তে ব্যবহার করা উচিত । এটি এখন হুডের নীচে বেশ কিছু হ্যান্ডেল করে। আসুন ধরে নেওয়া যাক আপনার চিত্রটিকে উইন 7 (কেন নয়?) বলা হয় called আপনার ভিএম বন্ধ হয়ে গেছে তা নিশ্চিত করুন:

সরঞ্জামটি ইনস্টল করুন:

# apt-get install libguestfs-tools

আপনার ভিএম ডিস্কের অবস্থান পান:

# virsh dumpxml Win7 | xpath -e /domain/devices/disk/source
Found 2 nodes in stdin:
-- NODE --
<source file="/var/lib/libvirt/images/Win7.img" />
-- NODE --
<source file="/var/lib/libvirt/images/Win7.iso" />

আপনাকে /var/lib/libvirt/images/Win7.imgনিম্নলিখিতগুলিতে মানিয়ে নিতে হবে :

# virt-filesystems --long --parts --blkdevs -h -a /var/lib/libvirt/images/Win7.img
Name       Type       MBR  Size  Parent
/dev/sda1  partition  07   100M  /dev/sda
/dev/sda2  partition  07   32G   /dev/sda
/dev/sda   device     -    32G   -

আপনার 64 জি ডিস্ক তৈরি করুন:

# truncate -s 64G /var/lib/libvirt/images/outdisk

আপনাকে / dev / sda2 প্রসারিত করতে হবে (বুট বিভাজন নয়):

# virt-resize --expand /dev/sda2 /var/lib/libvirt/images/Win7.img /var/lib/libvirt/images/outdisk
Examining /var/lib/libvirt/images/Win7.img ...
 100% [progress bar] --:--
**********

Summary of changes:

/dev/sda1: This partition will be left alone.

/dev/sda2: This partition will be resized from 32G to 64G.  The 
    filesystem ntfs on /dev/sda2 will be expanded using the 
    'ntfsresize' method.

**********
Setting up initial partition table on outdisk ...
Copying /dev/sda1 ...
Copying /dev/sda2 ...
 100% [progress bar] 00:00
 100% [progress bar] 00:00
Expanding /dev/sda2 using the 'ntfsresize' method ...

Resize operation completed with no errors.  Before deleting the old 
disk, carefully check that the resized disk boots and works correctly.

mvসেক্ষেত্রে ব্যাকআপ করুন (বা আপনি ব্যাকআপটি না চাইলে ব্যবহার করুন ):

# cp /var/lib/libvirt/images/Win7.img /var/lib/libvirt/images/Win7.img.old
# mv /var/lib/libvirt/images/outdisk /var/lib/libvirt/images/Win7.img

এখন বুট!

আরও তথ্যের জন্য: man virt-resize


3
শেষ ধাপে ব্যাকআপ তৈরির পরিবর্তে (যদি চিত্রটি বড় হয় এবং আপনি অতিরিক্ত ডিস্কের জায়গা নাও চান / না চান) আপনি কেবলমাত্র করতে পারেন virsh edit virt_nameএবং ডিস্কের উত্সের পথটি নতুনটিতে পরিবর্তন করতে পারেন। তারপরে যদি এটি কাজ না করে তবে এটি আবার পরিবর্তন করুন এবং আবার চেষ্টা করুন। আপনি যখন 2 দিয়ে এটি করতে পারতেন তখন 3 টি চিত্র থাকার খুব বেশি দরকার নেই
মাইক্র

1
অথবা আপনি প্রথম কমান্ডের জন্য সিপির পরিবর্তে এমভি ব্যবহার করতে পারেন। ডিস্কের স্থান বাঁচানোর পাশাপাশি এটিও নাটকীয়ভাবে দ্রুত হবে faster
কেভিন কেইন

6
একটি গুরুত্বপূর্ণ বিষয় লক্ষ্য করার জন্য এটি হ'ল যদিও মূল চিত্রটির একটি প্রকার রয়েছে, তবে গন্তব্য উদাহরণটি rawটাইপ হবে। উদাহরণস্বরূপ যদি আপনি বজায় রাখতে চান তবে আপনার qcow2মত রূপান্তরটি প্রয়োগ করা উচিত:qemu-img convert -O qcow2 /var/lib/libvirt/images/outdisk /var/lib/libvirt/images/outdisk.qcow2
লগঅফ

1
এবং গুণ-পুনরায় আকার এমনকি একটি বুদ্ধিমান ncurses অগ্রগতি স্পিনার আছে।
ডেভিড ম্যাকনিল

18

আমি এর যে কোনও কাজ করার আগে আপনাকে পরামর্শ দিচ্ছি আপনি ডিস্ক চিত্রের সম্পূর্ণ অনুলিপিটি সেভাবেই রাখুন, তারপরে এটি যখন সমস্ত বিরতি হয় তখন আপনি এটি আবার শুরু করতে অনুলিপি করতে পারেন।

আপনার তিনটি জিনিস করতে হবে:

1) ডিস্ক চিত্রটি আরও বড় করুন। আপনার হোস্টে:

qemu-img resize foo.qcow2 +32G

এখন আপনার অতিথি একটি বড় ডিস্ক দেখতে পাচ্ছেন, তবে তারপরেও পুরানো পার্টিশন এবং ফাইল সিস্টেম রয়েছে।

2) ডিস্ক চিত্রের ভিতরে পার্টিশনটি আরও বড় করুন। এটির জন্য আপনাকে আপনার অতিথির একটি লাইভসিডি বুট করতে হবে, কারণ আপনি মাউন্ট করা পার্টিশনের সাথে গোলযোগ করতে পারবেন না। এটি বেশ জড়িত এবং সম্ভবত সবচেয়ে বিপজ্জনক অংশ। এটি এখানে অনুলিপি করা যথেষ্ট, তাই আমি এখন জন্য পরিবর্তে লিঙ্ক করব। আপনি এরকম কিছু করতে চান:

http://www.howtoforge.com/linux_resizing_ext3_partitions_p2

বা 2 বি) একটি নতুন পার্টিশন তৈরি করা সহজ (যদি আপনি আরও বেশি স্টোরেজ স্পেস চান) সহজ হবে fer Fdisk বা cfdisk ব্যবহার করুন বা যা কিছুতেই আপনি স্বাচ্ছন্দ্য বোধ করেন - আপনার অতিথি ডিস্কে এখন অবিরত স্থানের পুরো গুচ্ছটি দেখতে পাওয়া উচিত।

3) অবশেষে, আপনি যদি আপনার বিদ্যমান পার্টিশনটি পুনরায় আকার দিয়েছেন, নতুন বড় পার্টিশনের অভ্যন্তরে ফাইল সিস্টেমটি আরও বড় করুন (এটি আসলে যে কোনওভাবে উপরে লিঙ্কযুক্ত গাইডে রয়েছে)। আপনার অতিথির ভিতরে:

resize2fs /dev/sda1

দ্রুত উত্তর দেওয়ার জন্য ধন্যবাদ। এটি একটি কার্যকর সমাধান হিসাবে দেখায়। আমি কয়েকদিন শহরের বাইরে থাকব, তবে পরের সপ্তাহে একবার অফিসে ফিরে আসার পরে, আমি একবার চেষ্টা করে দেখব এবং যদি এটি কাজ করে তবে ফিরে রিপোর্ট করব report
টং ওয়াং

1
আরও একটি প্রশ্ন: আমি যদি ডিস্কটি সঙ্কুচিত করতে চাই, তবে আমি কি বিপরীত ক্রমে পদক্ষেপগুলি সম্পাদন করব? লাইক: 1. ফাইল সিস্টেম সঙ্কুচিত; 2. বিভাজন সঙ্কুচিত; ৩. ডিস্কের চিত্র সঙ্কুচিত করুন। রাইট?
টং ওয়াং

হ্যাঁ, আকার পরিবর্তন 2fs সঙ্কুচিত হওয়ার পাশাপাশি বৃদ্ধি পেতে পারে, তবে অবশ্যই এটি ফাইল সিস্টেমে পর্যাপ্ত ফাঁকা জায়গার প্রয়োজন হবে। পার্টিশন সঙ্কুচিত করার সময় আমি প্রয়োজনের তুলনায় আরও কিছুটা ছেড়ে যেতে ভুল করব যাতে আপনি ভুলক্রমে ফাইল সিস্টেমটি শেষ করে না ফেলে :)
সিসিয়াম

আপনি একেবারে মাউন্ট করা পার্টিশনের সাথে
গণ্ডগোল করতে

4

আমি সিজিয়ামের উত্তরটি ঠিক আছে বলে মনে করি, একই জিনিসটি অর্জনের জন্য আমি কিছু অন্যান্য আদেশ লিখতে চাই।

ধরুন আপনার কাছে disk.imgডিস্ক ইমেজযুক্ত একটি ফাইল রয়েছে, যেমন এটির একটি বিভাজন সারণী এবং এক বা একাধিক পার্টিশন রয়েছে এবং বলুন আপনি শেষ বিভাজনটি আরও বড় করতে চান make আপনার যা করতে হবে তা হ'ল

1) পুরো ফাইলটি বড় করুন, 4 জিআইবি বলুন। এটি করার একটি দ্রুত উপায় হ'ল ব্যবহার করাdd

dd if=/dev/zero of=disk.img bs=1c seek=4G count=0

2) fdisk ব্যবহার করে পার্টিশনটি আরও বড় করুন (আমি আশা করি আমি পার্টড বা কোনও ভাল সরঞ্জামে এটি করতে পারতাম ... যে কেউ?)

fdisk disk.img

pপার্টিটন টেবিলটি মুদ্রণের জন্য টাইপ করুন এবং আপনার পার্টিশনের প্রারম্ভিক সেক্টর সন্ধান করুন, উদাহরণস্বরূপ পার্টিশন 2 সেক্টর 106496 থেকে শুরু হয়।

আপনি যা করবেন তা পার্টিশন টেবিল থেকে সেই পার্টিশনটি মুছে ফেলা এবং একটি নতুন পার্টিশন তৈরি করা যা ঠিক একই সেক্টর থেকে শুরু হয় তবে শেষের দিকে শেষ হয়। তারপরে পার্টিশনটিতে একটি বৈধ ফাইল সিস্টেম থাকবে।

dমুছে ফেলার জন্য পার্টিশন নম্বরটি টাইপ করুন এবং দিন। (Gulp!)

টাইপ করুন nএবং পছন্দসই পার্টিশন নম্বর দিন, এবং তারপরে শুরু সেক্টর। আপনি আগের মতো একই শুরুর ক্ষেত্রটি ব্যবহার করা উচিত। শেষ অবধি শেষ সেক্টর দিন বা কেবল fdisk আপনার ব্যবহার করতে পারেন সর্বোচ্চ সেক্টর চয়ন করুন।

wডিস্ক ইমেজ ফাইলে পরিবর্তনগুলি লিখতে টাইপ করুন এবং এফডিস্ক থেকে প্রস্থান করুন।

3) এখন আপনার ফাইল সিস্টেমটি আকার পরিবর্তন করতে হবে। এর জন্য আপনার ডিস্ক চিত্রের অভ্যন্তরে ফাইল সিস্টেমের (= অবস্থানের) অফসেটের প্রয়োজন। আপনি যদি সেক্টরের আকার জানেন (যা সাধারণত 512 হয়) বা আপনি ব্যবহার করতে পারেন তবে আপনি সেক্টর নম্বর থেকে এটি গণনা করতে পারেনparted

parted disk.img u b p

( partedকমান্ড লাইন আর্গুমেন্ট হিসাবে কমান্ড নিতে পারে, সুতরাং এর অর্থ 'ইউনিট বাইটস' এবং 'মুদ্রণ', সুতরাং এটি পার্টিশন টেবিলটি প্রিন্ট করে এবং আকার বেল্ট হিসাবে বাইট ব্যবহার করে))

এটি পার্টিশনটি শুরু এবং শেষ করে প্রিন্ট করে। বলুন যে আপনার পার্টিশনটি 54525952 এ শুরু হয়, তারপরে আপনি একটি লুপব্যাক ব্লক ডিভাইস তৈরি করেন losetup

losetup -f --show -o 54525952 disk.img 

losetupউদাহরণস্বরূপ, এটি কোনটি বেছে নিয়েছে তা আপনাকে জানায় /dev/loop0। এখন আপনি ব্যবহার করতে পারেন resize2fs:

resize2fs /dev/loop0

এবং অবশেষে লুপ ডিভাইসটি সরান

losetup -d /dev/loop0

2

সন্ধানের সেরা সমাধানটি এখানে:

http://www.linux-kvm.com/content/how-resize-your-kvm-virtual-disk

আমি মনে করি @ ক্যাসিয়াম যা বলেছিল তা উপরের অফিসিয়াল লিঙ্ক থেকে দেওয়া হয়েছে

আমি আশা করি এটি সাহায্য করবে

3 পদক্ষেপ:

1.qemu-img resize windows.qcow2 +5GB

2.GParted live cd to resize

3.reboot and use os tools to resize

সহজ উত্তরের জন্য আপনাকে ধন্যবাদ। উবুন্টু 16.04-এ আমার জন্য কাজ করেছেন
ফিল

-1
#include <stdio.h>

static unsigned long auxfilesize(FILE* fp) {

    unsigned long len=0;
    int c=0;


    while ( (c = fgetc(fp)) != -1 ) {
        len++;
    }

    return len;
}


static unsigned long aux_copyNBytesFromTo(FILE* from, FILE* to,
                                    unsigned long fromSize, 
                                    unsigned long bytes) {

    unsigned long iter = 0;
    while ( iter++ < fromSize ) {
        int c = fgetc(from);
        fputc(c, to);

    }
    iter-=1; 
    if ( fromSize < bytes ) {
        while ( iter++ < bytes ) {
            fputc(0, to);
        }
    }
    return iter;
}


int main(int argc, char **argv) {
    FILE *from = fopen(argv[1], "rb");
    FILE *to = fopen(argv[2], "wb" );
    unsigned long l = auxfilesize(from);

    rewind(from); 

    aux_copyNBytesFromTo(from, to, l, (l + l/2)) ;

    fclose(from);
    fclose(to);

}

এই সাধারণ প্রোগ্রামটি ভার্চুয়াল চিত্রের শেষে এন বাইট যুক্ত করে। আমি নতুন নির্মিত চিত্রগুলি মার্জ করার জন্য উইন্ডোজ এক্সপি-র জন্য প্যারাগন পার্টিশন চিত্রটি ব্যবহার করেছি। এখানে ঠিক আছে।


অব্যবহৃত স্ট্যাটিক ফাংশন 'auxfilesize', 'aux_copyNBytesFromTo'। কেন যে সাহায্য করা উচিত?
এবি

অব্যবহৃত? আমি প্রশ্নটি বুঝতে পারি না। তারা উভয় ব্যবহার করা হয়।
ইলিয়ান জাপ্রিয়ানভ

ফলাফলটি একটি অবিকৃত বাইটস এবং ওএসে একটি নতুন হার্ড ড্রাইভ। আপনি এটি ফর্ম্যাট করতে হবে। যদি আপনি জিজ্ঞাসা করছেন কেন foo-s স্থির। এটি কেবল আমাকে প্রোটোটাইপগুলি সংরক্ষণ করেছিল এবং কেন নয়। এটি আমার সহজ সময় 2 মিনিটে লেখা সহজ প্রোগ্রাম :) বিশেষ বা অনুকূল কিছুই নয়।
ইলিয়ান জাপ্রিয়ানভ

3
তোমার মত বিদ্যমান সরঞ্জাম ব্যবহার করতে পারতেন ddবা truncate...
rudimeier
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.