কম্পিউটার টিউটোরিয়াল

KVM: ভার্চুয়াল মেশিনের ডিস্ক সাইজ বাড়ানো বা কমানো

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

KVM ভার্চুয়াল মেশিনের ডিস্ক সাইজ কীভাবে বাড়ানো/এক্সটেন্ড করা যায়?

KVM-এ ভার্চুয়াল ডিস্ক বাড়ানো

একটি ২০GB ভার্চুয়াল ডিস্কের সাইজ বাড়ানোর উদাহরণ দেখি। ভার্চুয়াল মেশিনের ভার্চুয়াল ডিস্ক সেটিংস পরিবর্তন করার আগে VM-কে অবশ্যই অফ করে দিন।

KVM ভার্চুয়াল মেশিনের ভার্চুয়াল ডিস্ক সেটিংস দেখতে এই কমান্ড ব্যবহার করুন:

qemu-img info /path_to_disk

ফলাফলটি এমন দেখাবে:

KVM: ভার্চুয়াল মেশিনের ডিস্ক সাইজ বাড়ানো বা কমানো

এখানে সাইজ দেখানোর দুটি ফিল্ড আছে: virtual_size এবং disk_size:

  • virtual_size – এটি ডিস্ক তৈরি বা এক্সটেন্ড করার সময় সেট করা ভার্চুয়াল ডিস্কের সাইজ (এই উদাহরণে সর্বোচ্চ ডিস্ক সাইজ ২০GB);
  • disk_size — এটি ডিস্ক ফাইলের বর্তমান সাইজ, অর্থাৎ ফিজিক্যাল সার্ভারে ডিস্ক কতটুকু জায়গা ঘের रहा (শুধু qcow ডিস্ক ফরম্যাটের জন্য প্রযোজ্য)। আমাদের উদাহরণে ভার্চুয়াল ডিস্ক স্টোরেজে মাত্র ১.৬GB জায়গা নিচ্ছে।

KVM ডিস্ক টাইপ (ফরম্যাট) সম্পর্কে কিছু কথা। KVM-এ ভার্চুয়াল মেশিন তৈরি করার সময় আমি raw-এর বদলে qcow2 ব্যবহার করার পরামর্শ দিই। পরে ব্যাখ্যা করব কেন।

পরবর্তী ধাপে, আমি ভার্চুয়াল মেশিনের সাইজ ৫GB বাড়াব (ডিস্ক সঠিকভাবে এক্সটেন্ড করার জন্য VM-এ কোনো স্ন্যাপশট থাকা উচিত নয়):
# qemu-img resize /path to disk +5G

Image resized.

ভার্চুয়াল ডিস্ক সেটিংস চেক করলে দেখবেন এটি এক্সপ্যান্ড হয়েছে:

# qemu-img info /path_to_disk

image: /path_to_disk file format: qcow2 virtual size: 25G (26843535600 bytes) disk size: 1.6G cluster_size: 65536 Format specific information: compat: 0.10 refcount bits: 16 

আমরা কাজের এক অংশ করেছি, কিন্তু গেস্ট OS-এও কিছু کار করতে হবে। এখন দেখি কিভাবে গেস্ট CentOS 7 এবং Windows Server ২০১২ R2-এ ডিস্ক সাইজ এক্সপ্যান্ড করতে হয়।

যদি আপনি KVM হাইপারভাইজারে আপনার VM-এ আরেকটি ভার্চুয়াল ডিস্ক যোগ করতে চান, তবে qemu-img এবং virsh টুলগুলো ব্যবহার করা হয়।

CentOS Linux চলমান ভার্চুয়াল মেশিনে পার্টিশন কীভাবে এক্সটেন্ড করবেন?

KVM সার্ভার সাইডে ভার্চুয়াল ডিস্ক সাইজ বাড়ানোর পর, আপনার ভার্চুয়াল মেশিন চালু করুন এবং এতে সংযোগ করুন। হার্ড ডিস্ক পার্টিশন ম্যানেজমেন্ট টুল fdisk ব্যবহার করে পার্টিশন ও ফাইল সিস্টেমের সাইজ বাড়াব।

SSH-এর মাধ্যমে VM গেস্ট OS-এ সংযোগ করুন এবং নিশ্চিত করুন যে অতিরিক্ত ৫ GB ডিস্ক স্পেস দেখাচ্ছে।

df –h
fdisk -l

KVM: ভার্চুয়াল মেশিনের ডিস্ক সাইজ বাড়ানো বা কমানো

স্ক্রিনশটে দেখানো হয়েছে যে /dev/vda2-এর সাইজ ২০GB, কিন্তু উপলব্ধ ডিস্ক স্পেস ২৫GB।

/dev/vda2 কে সর্বোচ্চ উপলব্ধ সাইজ পর্যন্ত এক্সটেন্ড করুন:

# fdisk /dev/vda

Welcome to fdisk (util-linux 2.23.2). Changes will remain in memory only, until you decide to write them. Be careful before using the write command. Command (m for help): d Partition number (1,2, default 2): Partition 2 is deleted Command (m for help): n Partition type: p primary (1 primary, 0 extended, 3 free) e extended Select (default p): p Partition number (2-4, default 2): First sector (1050624-52428799, default 1050624): Using default value 1050624 Last sector, +sectors or +size{K,M,G} (1050624-52428799, default 52428799): Using default value 52428799 Partition 2 of type Linux and of size 24.5 GiB is set Command (m for help): w The partition table has been altered! Calling ioctl() to re-read partition table. WARNING: Re-reading the partition table failed with error 16: Device or resource busy. The kernel still uses the old table. The new table will be used at the next reboot or after you run partprobe(8) or kpartx(8) Syncing disks. 

তারপর ভার্চুয়াল মেশিন রিস্টার্ট করুন এবং নতুন ডিস্ক সাইজ প্রয়োগ করার কমান্ড চালান:

# xfs_growfs /dev/vda2

meta-data=/dev/vda2 isize=512 agcount=4, agsize=1277888 blks = sectsz=512 attr=2, projid32bit=1 = crc=1 finobt=0 spinodes=0 data = bsize=4096 blocks=5111552, imaxpct=25 = sunit=0 swidth=0 blks naming =version 2 bsize=4096 ascii-ci=0 ftype=1 log =internal bsize=4096 blocks=2560, version=2 = sectsz=512 sunit=0 blks, lazy-count=1 realtime =none extsz=4096 blocks=0, rtextents=0 data blocks changed from 5111552 to 6422272 

# df -h

Filesystem Size Used Avail Use% Mounted on devtmpfs 485M 0 485M 0% /dev tmpfs 496M 0 496M 0% /dev/shm tmpfs 496M 6.6M 489M 2% /run tmpfs 496M 0 496M 0% /sys/fs/cgroup /dev/vda2 25G 1.3G 24G 6% / /dev/vda1 488M 100M 353M 23% /boot tmpfs 100M 0 100M 0% /run/user/0

ফলাফলে আমরা এক্সটেন্ডেড পার্টিশন /dev/vda2 পেয়েছি। আমরা যা করেছি সেটি হলো:

  • fdisk /dev/vda — fdisk চালু করে /dev/vda-এ সংযোগ করলাম;
  • /d — পার্টিশন ডিলিট করলাম। ডিফল্টভাবে পার্টিশন ২ ছিল যা আমাদের দরকার, তাই পরবর্তী আইটেমে এন্টার প্রেস করলাম;
  • /n – নতুন পার্টিশন তৈরি করলাম এবং এন্টার বা p প্রেস করলাম, তারপর আবার এন্টার প্রেস করলাম, কারণ আমরা যে পার্টিশন তৈরি করতে চাইছিলাম সেটি ডিফল্টভাবে ২;
  • প্রথম এবং শেষ সেক্টর নির্দিষ্ট করার সময়ও আমরা শুধু এন্টার প্রেস করলাম যদি পার্টিশনকে সর্বোচ্চ পর্যন্ত এক্সটেন্ড করতে চাই। নির্দিষ্ট সাইজ দিতে চাইলে লাস্ট সেক্টরে মেনুতে দেখানো +size{K,M,G} ফরম্যাটে ডিস্ক সাইজ দিন;
  • /w — নতুন সেটিংস প্রয়োগ করতে।

VM রিস্টার্ট করার পর ডিস্ক চেক করতে এই কমান্ড ব্যবহার করুন:

xfs_growfs /dev/vda2

কিছু উৎস নিচের কমান্ড ব্যবহার করার পরামর্শ দেয়:

resize2fs /dev/vda2

কিন্তু এটি XFS ফাইল সিস্টেমের জন্য কাজ করবে না!

এভাবে আপনি CentOS 7 চলমান ভার্চুয়াল মেশিনের ডিস্ক সাইজ এক্সটেন্ড করেছেন।

গেস্ট Windows Server-এ ডিস্ক সাইজ কীভাবে বাড়াবেন?

RDP বা VNC ব্যবহার করে Windows Server ভার্চুয়াল মেশিনে সংযোগ করুন এবং ডিস্ক এক্সপ্যান্ড করুন।

  1. Server Manager -> Tools -> Computer Management খুলুন;
  2. বাম প্যানেলে Storage -> Disk Management সিলেক্ট করুন। আপনার সব ডিস্ক পার্টিশন এবং যোগ করা আনঅ্যালোকেটেড স্পেস দেখাবে; KVM: ভার্চুয়াল মেশিনের ডিস্ক সাইজ বাড়ানো বা কমানো
  3. যে পার্টিশন বাড়াতে চান সেটি সিলেক্ট করে Extend Volume ক্লিক করুন; KVM: ভার্চুয়াল মেশিনের ডিস্ক সাইজ বাড়ানো বা কমানো
  4. ডিফল্টভাবে সব উপলব্ধ স্পেস ডিস্ক সাইজ বাড়াতে অফার করবে; KVM: ভার্চুয়াল মেশিনের ডিস্ক সাইজ বাড়ানো বা কমানো
  5. Next ক্লিক করে এক্সটেনশন শেষ করুন। এর পর আপনার পার্টিশনের সাইজ বাড়ে যাবে। KVM: ভার্চুয়াল মেশিনের ডিস্ক সাইজ বাড়ানো বা কমানো

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

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

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

ওয়েবে অনেক গাইড আছে যা KVM ভার্চুয়াল মেশিনে ডিস্ক স্পেস কমানোর পদ্ধতি বলে, কিন্তু সেগুলো কাজ করে না।

আমি কিছু উদাহরণ দিচ্ছি যা আমি পেয়েছিলাম এবং টেস্ট করেছিলাম।

Qemu ব্যবহার করে KVM ডিস্ক সাইজ কমানো

কিছু রিসোর্স qemu টুলের মাধ্যমে কাজ করার কথা বলে। তারা এই কমান্ড দিয়ে ভার্চুয়াল মেশিনের ডিস্ক স্পেস কমাতে বলেন:

qemu-img resize /path_to_disk -5G — ৫G만큼 ডিস্ক স্পেস ছোট করুন

অথবা নির্দিষ্ট ভার্চুয়াল ডিস্ক সাইজ সেট করার অপশন:

qemu-img resize /path_to_disk 25G — ডিস্ক সাইজ ২৫G সেট করুন

এই কমান্ড চালানোর পর কী হয়? সার্ভার চালু করার পর সিস্টেম বুট হবে না:

Unable to verify superblock, continuing... Sorry, could not find valid secondary superblock. Exiting now.

KVM: ভার্চুয়াল মেশিনের ডিস্ক সাইজ বাড়ানো বা কমানো

আমি সিস্টেমে fdisk ব্যবহার করে প্রথমে ডিস্ক সাইজ কমানোর চেষ্টা করেছিলাম, কিন্তু সেটাও বুট হয়নি, এমনকি ফিজিক্যাল সার্ভারে ডিস্ক শ্রিংক করা স্কিপ করলেও। এটা কाफি লজিক্যাল। যে পার্টিশনটি কমানোর চেষ্টা করছি সেটি একটি সিস্টেম পার্টিশন, এবং সেটি কমানোর চেষ্টা করার সময় তার ওপর থাকা তথ্য মুছে যায়, তাই OS বুট হবে না।

ইমেজ রিপ্লেসমেন্ট ব্যবহার করে ভার্চুয়াল ডিস্ক সাইজ কমানো

এই গাইডগুলোর কম জনপ্রিয় একটি পদ্ধতি হলো ডিস্ক রিপ্লেসমেন্ট ব্যবহার করে ডিস্ক স্পেস কমানো। এতে মানে আপনার প্রয়োজনীয় ডিস্ক সাইজের সাথে একটি নতুন ভার্চুয়াল মেশিন তৈরি করুন। তারপর পুরনো ডিস্ক ইমেজকে নতুন দিয়ে রিপ্লেস করুন, এবং വിവরণ অনুযায়ী এটি কাজ করে। আমি এই মেথড চেক করেছিলাম, এবং পূর্বের মতো ফাইল সিস্টেম অপারেবল হয়ে যায়। কমান্ড উদাহরণ:

virt-resize /old_disk_image /new_disk_image

র থেকে qcow2 ফরম্যাটে ডিস্ক কনভার্শন ব্যবহার করে কিছু মেথডও ছিল, কিন্তু আমি শুরু থেকেই এই ফরম্যাটে মেশিন তৈরি করি এবং এখানে ব্যাখ্যা করছি কেন।

KVM ডিস্ক ফরম্যাট এবং QCOW2 ডিস্ক কমপ্রেশন

লেখার শুরুতে আমি এই দুটি ডিস্ক ফরম্যাটের কথা বলেছিলাম: raw এবং qcow।

Raw-এর সুবিধা হলো সর্বোচ্চ পারফরম্যান্স এবং সাধারণতা। কিন্তু এর অনেক ডメリカও আছে, প্রধানগুলো হলো:

  • ভার্চুয়াল ডিস্ক ফাইল ফিজিক্যাল সার্ভারে আপনার জন্য আলোকিত সমস্ত স্পেস দখল করে;
  • স্ন্যাপশট নেওয়া যায় না।

Qcow2 হলো QEMU এবং QEMU-KVM হাইপারভাইজারের নেটিভ ফরম্যাট। KVM-এ সমর্থিত অন্যান্য সব ফরম্যাটের চেয়ে এটি সবচেয়ে সুবিধাজনক ভার্চুয়াল ডিস্ক ফরম্যাট। ডেটা জমা হওয়ার সাথে সাথে ডিস্ক ইমেজ বেড়ে যায়, এবং স্ন্যাপশট সাপোর্ট করা থাকে।

qcow2-এর সুবিধা কী? আপনাকে আপনার ভার্চুয়াল ডিস্কের সাইজ কমাতে হবে না কারণ এটি সার্ভার স্টোরেজে শুধু ততটুকু স্পেস দখল করে যা এটির প্রয়োজন। আপনার সার্ভারে ডেটা বারবার ওভাররাইট হলে, এবং ডিস্ক ফুলে যাওয়ায়, আপনি সহজে এটিকে কমপ্রেস করতে পারেন। এই অপশনটি দেখি। আমি ভার্চুয়াল ডিস্কে কিছু জিরো দিয়ে ফিল আপ করব এবং তারপর ফাইলটি ডিলিট করব:

dd if=/dev/zero of=/mytempfile
rm -rf /mytempfile

KVM: ভার্চুয়াল মেশিনের ডিস্ক সাইজ বাড়ানো বা কমানো

সার্ভার থেকে চেক করলে, আগে ডিস্ক ইমেজের সাইজ ২.৪G ছিল, পরে ৫.৯G হয়ে গেল:

# du -sh /image_path

2.4G *****

# du -sh /image_path

5.9G *****

এটি মানে ভার্চুয়াল মেশিন থেকে ইনফরমেশন ডিলিট করার পরও ভার্চুয়াল ডিস্ক সাইজ ছোট হয়নি। ভার্চুয়াল ডিস্ক ফাইলটিকে এর আসল সাইজে ফিরিয়ে আনার জন্য আমি এই পদ্ধতি ব্যবহার করি:

ভার্চুয়াল ডিস্ক ফাইল ব্যাকআপ নিন, ভার্চুয়াল মেশিন বন্ধ করুন এবং নিচের ধাপগুলো অনুসরণ করুন:

qemu-img convert -O qcow2 /old_image /new_image

তারপর দুটি ডিস্কের সাইজ তুলনা করুন:

# du -sh /new_disk

1.6G /****

# du -sh /old_disk

5.8G /****

আপনি দেখতে পাচ্ছেন, কমপ্রেসড ডিস্কের সাইজ ১.৬G। নতুন ডিস্ক ইমেজ ফাইলটিকে আপনার প্রয়োজনীয় নামে রিনেম করুন এবং ভার্চুয়াল মেশিন চালু করুন:
# df -h

Filesystem Size Used Avail Use% Mounted on devtmpfs 485M 0 485M 0% /dev tmpfs 496M 0 496M 0% /dev/shm tmpfs 496M 6.6M 489M 2% /run tmpfs 496M 0 496M 0% /sys/fs/cgroup /dev/vda2 25G 1.3G 24G 6% / /dev/vda1 488M 100M 353M 23% /boot tmpfs 100M 0 100M 0% /run/user/0

এই পদ্ধতি কাজ করে। আমি যতক্ষণ এটি ব্যবহার করছি, কোনো পরিস্থিতিতে ভার্চুয়াল মেশিনের ফাইল সিস্টেম ফেলিত হয়নি দেখা দেনি। কিন্তু আমি Напক্ষ রিকোর্মেন্ড করছি যে কিছু করার আগে ডিস্ক ব্যাকআপ নিন যাতে কোনো ডেটা হারানো না যায়।

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

  1. Hyper-V 2019-এ ভার্চুয়াল ডিস্ক যোগ করার পদ্ধতি

  2. উইন্ডোজ ১০-এ ভার্চুয়াল মেশিন তৈরি করার ধাপে ধাপ গাইড

  3. ESXi ৬.৭ হাইপারভাইজারে ভার্চুয়াল মেশিন তৈরির ধাপে ধাপে গাইড

  4. ফিজিক্যাল Windows মেশিনকে VirtualBox VM-এ রূপান্তর: ধাপে ধাপে গাইড