जवाबों:
डेबियन आधारित डिस्ट्रो पर आपको virt-resize
इसके बजाय उपयोग करना चाहिए । यह हुड के तहत अब सब कुछ बहुत संभालती है। मान लें कि आपकी छवि को Win7 कहा जाता है (क्यों नहीं?)। पहली बात यह सुनिश्चित करें कि आपका VM बंद है:
उपकरण स्थापित करें:
# apt-get install libguestfs-tools
अपने VM डिस्क का स्थान प्राप्त करें:
# 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 -
अपनी 64G डिस्क बनाएं:
# 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
अब बूट!
अधिक जानकारी के लिए: मनुष्य पुण्य-आकार बदलें
raw
टाइप होगा । यदि आप उदाहरण के qcow2
प्रकार के लिए बनाए रखना चाहते हैं , तो आपको एक रूपांतरण लागू करना चाहिए जैसे:qemu-img convert -O qcow2 /var/lib/libvirt/images/outdisk /var/lib/libvirt/images/outdisk.qcow2
मैं यह करने से पहले सलाह देता हूं कि आप डिस्क छवि की पूरी प्रतिलिपि लें जैसा कि यह है, फिर जब यह सब टूट जाता है तो आप इसे शुरू करने के लिए वापस कॉपी कर सकते हैं।
वहाँ 3 चीजें आप की जरूरत है:
1) डिस्क की छवि को बड़ा करें। आपके मेजबान में:
qemu-img resize foo.qcow2 +32G
अब आपका अतिथि एक बड़ी डिस्क देख सकता है, लेकिन अभी भी पुराने विभाजन और फाइल सिस्टम हैं।
2) डिस्क छवि के अंदर विभाजन को बड़ा करें। आपको इसके लिए अपने अतिथि में LiveCD से बूट करने की आवश्यकता है, क्योंकि आप एक माउंटेड विभाजन के साथ गड़बड़ नहीं कर पाएंगे। यह काफी शामिल है और शायद सबसे खतरनाक हिस्सा है। यहाँ नकल करना काफी है, इसलिए मैं अभी के बदले लिंक करूँगा। आप ऐसा कुछ करना चाहते हैं:
http://www.howtoforge.com/linux_resizing_ext3_partitions_p2
या 2 बी) यदि आप अधिक भंडारण स्थान चाहते हैं तो एक नया विभाजन बनाना सरल (और सुरक्षित) होगा। Fdisk या cfdisk का उपयोग करें, या जो कुछ भी आप सहज महसूस करते हैं - आपको अब अपने अतिथि डिस्क पर अनलॉक्ड स्थान का एक पूरा गुच्छा देखना चाहिए।
3) अंत में, यदि आपने अपने मौजूदा विभाजन का आकार बदल लिया है, तो नए बड़े विभाजन के अंदर फाइलसिस्टम को बड़ा बनाएं (यह वास्तव में वैसे भी जुड़े हुए गाइड में है)। अपने मेहमान के अंदर:
resize2fs /dev/sda1
मुझे लगता है कि सीज़ियम का जवाब ठीक है, मैं यही बात हासिल करने के लिए कुछ अन्य कमांड लिखना चाहूंगा।
मान लें कि आपके पास एक disk.img
डिस्क छवि वाली फ़ाइल है , अर्थात इसमें एक विभाजन तालिका और एक या अधिक विभाजन हैं, और कहते हैं कि आप अंतिम विभाजन को बड़ा बनाना चाहते हैं। आपको क्या करना है
1) पूरी फाइल को बड़ा बनाओ, 4GiB कहो। इसका उपयोग करने का एक त्वरित तरीका है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
डिस्क छवि फ़ाइल में वापस परिवर्तन लिखने के लिए टाइप करें, और fdisk से बाहर निकलें।
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
सबसे अच्छा समाधान यहाँ पाया गया है:
http://www.linux-kvm.com/content/how-resize-your-kvm-virtual-disk
मुझे लगता है कि @Caassium ने जो कहा है वह उपरोक्त आधिकारिक लिंक से दिया गया है
मुझे उम्मीद है कि इससे सहायता मिलेगी।
3 चरण:
1.qemu-img resize windows.qcow2 +5GB
2.GParted live cd to resize
3.reboot and use os tools to resize
#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);
}
यह सरल प्रोग्राम वर्चुअल छवि के अंत में एन बाइट्स जोड़ता है। मैंने नई बनाई गई छवियों को मर्ज करने के लिए विंडोज एक्सपी के लिए पैरागॉन विभाजन छवि का उपयोग किया। यहाँ ठीक काम करता है।
dd
या truncate
...
virsh edit virt_name
डिस्क के स्रोत को नया करने के लिए पथ बदल सकते हैं और बदल सकते हैं । अगर यह काम नहीं करता है, तो बस इसे वापस बदलें और फिर से प्रयास करें। जब आप इसे 2 के साथ कर सकते हैं तो वास्तव में 3 छवियां होने का कोई मतलब नहीं है