ভার্চুয়ালবক্সের ভিডিআই ফাইলের আকারটি কীভাবে কমপ্যাক্ট করবেন?


301

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

এখন আমি লগ ফাইলগুলি মুছে ফেলেছি কিন্তু ভিডিআই ফাইলের আকার ব্যবহারের পরে আর ছোট হচ্ছে না VBoxManage.exe modifyhd "C:\Virts\mybox-i386.vdi" compact

সত্যিই ভিডিআই ফাইলের আকারের সংযোগ দেওয়ার কোনও উপায় আছে কি? ধন্যবাদ!

উত্তর:


507

আপনাকে নিম্নলিখিত পদক্ষেপগুলি করতে হবে:

  1. গেস্টে ডিফ্র্যাগ চালান (কেবল উইন্ডোজ)
  2. শূন্য স্থান বাতিল করুন:

    একটি লিনাক্স অতিথির সাথে এটি চালান:

    dd if=/dev/zero of=/var/tmp/bigemptyfile bs=4096k ; rm /var/tmp/bigemptyfile
    

    বা:

    telinit 1
    mount -o remount,ro /dev/sda1
    zerofree -v /dev/sda1
    

    উইন্ডোজ অতিথির সাথে সিসিন্টার্নাল থেকে এসডিলেট ডাউনলোড করুন এবং এটি চালান:

    sdelete.exe c: -z
    

    (সি প্রতিস্থাপন: ভিডিআই-এর ড্রাইভ লেটার সহ)

  3. অতিথি ভিএম বন্ধ করুন

  4. এখন বিকল্পটি modifymediumদিয়ে VBoxManage কমান্ডটি চালান --compact:

    একটি লিনাক্স হোস্ট দিয়ে এটি চালান:

    vboxmanage modifymedium --compact /path/to/thedisk.vdi
    

    একটি উইন্ডোজ হোস্ট দিয়ে এটি চালান:

    VBoxManage.exe modifymedium --compact c:\path\to\thedisk.vdi
    

    একটি সঙ্গে ম্যাক হোস্ট এই সঞ্চালন করুন:

    VBoxManage modifymedium --compact /path/to/thedisk.vdi
    

এটি ভিডিআই আকার হ্রাস করে।


14
পরবর্তী ব্যক্তির জন্য, আমার কমান্ডটি এমনভাবে দেখা শেষ হয়েছিল: "সি: \ প্রোগ্রাম ফাইলগুলি rac ওরাকল \ ভার্চুয়ালবক্স \ ভিবক্সমনেজ.এক্সে" মোডিফাইহডি "সি: \ ব্যবহারকারীগণ ani ড্যানিয়েল \ ভার্চুয়ালবক্স ভিএমএস \ .... d thedisk.vdi" - -কম্প্যাক্ট
ড্যানিয়েল

36
Zerofree লিনাক্স ইউটিলিটি র manpage (মতে manpages.ubuntu.com/manpages/natty/man8/zerofree.8.html ), zerofree চেয়ে ভাল হতে হবে DD এই কাজের জন্য। ডিডি সুপারিশ করা হয়নি কারণ "এটি ধীর", "এটি ডিস্ক চিত্রটিকে (অস্থায়ীভাবে) সর্বাধিক পরিমাণে বাড়িয়ে তোলে", "এটি (অস্থায়ীভাবে) ডিস্কের সমস্ত ফাঁকা জায়গা ব্যবহার করে, সুতরাং অন্যান্য সমবর্তী লেখার ক্রিয়া ব্যর্থ হতে পারে"। Zerofree মাধ্যমে উবুন্টু লিনাক্স পাওয়া যায় কার্যক্ষম , অথবা আপনি এটি নিজের কম্পাইল করতে পারেন।
ডাকাটাইন

27
এটি মজার যে জিরোফ্রিটির ম্যানপেজটি জানিয়েছে যে ডিডি সহ অন্যান্য সমবর্তী লেখাগুলি ব্যর্থ হবে, তবে জিরোফ্রি ফাইল-সিস্টেমের কেবল পঠনযোগ্য মাউন্ট করা দরকার! *
দুহ

7
টিপ: দুটি কমান্ড এক লাইনে রাখুন dd ...; rm /bigfile:, আপনি যদি ddসম্পূর্ণ হওয়ার অপেক্ষায় না থাকেন তবে এটি একটি সম্পূর্ণ ডিস্কের সাথে সময়কে কমিয়ে দেবে ।
jlh

21
VirtualBox 4.3.10 ব্যবহার @Dakatine, ডিস্ক ইমেজ ফাইল হয়নি বৃদ্ধি পায় না তার সর্বোচ্চ পরিমাণে। ভার্চুয়ালবক্স শারীরিক ডিস্কে সমস্ত শূন্য ব্লক লেখার বিরক্ত না করার পক্ষে যথেষ্ট চালাক।
jlh

12

আমি উইন্ডোজ অতিথিদের সাথে একটি উইন্ডোজ 7 হোস্টে আছি, এখানে একটি ব্যাচ ফাইল রয়েছে যা আমি ফোল্ডার ট্রিতে সমস্ত ভিডিআইয়ের সাথে কমপ্যাক্টে লিখেছিলাম

echo off
mode con:cols=140 lines=200
cls
:: see https://forums.virtualbox.org/viewtopic.php?p=29272#p29272
:: How can I reduce the size of a dynamic VDI on disk?
:: but that page says to use sdelete -s which is suboptimal. 
:: use -z as per http://technet.microsoft.com/en-us/sysinternals/bb897443.aspx

:: First run the sdelete -z c: inside the VMs that zero-out all the free space
:: THEN run this batch file 

Title Compacting Free space on Virtual Machine VMs

:: http://ss64.com/nt/for_r.html
:: http://stackoverflow.com/questions/8836368/windows-batch-file-how-to-loop-through-files-in-a-directory/8836401#8836401

Setlocal EnableDelayedExpansion
:: http://ss64.com/nt/delayedexpansion.html ... 
:: Notice that within the for loop we use !variable! instead of %variable%.

For /R %CD% %%G IN (*.vdi) DO (
 set ohai=%%G
 set lastfive=!ohai:~-5!
:: Skip snapshots which are named {guid}.vdi
 if NOT !lastfive!==}.vdi (
 echo .
 echo Compacting %%G
 "C:\Program Files\Oracle\VirtualBox\VboxManage.exe" modifyhd "%%G" --compact )
 )

pause 
exit

আমি মন্তব্যে লিঙ্কগুলি রেখেছি যাতে আপনি (সাজানোর) বলতে পারেন এটি কীভাবে কাজ করে।

সম্পাদন করা

ঠিক আছে, এতকিছুর পরেও, আমি ক্লোনভিডিআই সরঞ্জামটি চেষ্টা করেছিলাম এবং এটি খুব কম সময়ে এবং এক ক্লিকে একটি ভাল কাজ করেছে।


5
আপনি এই ধরণের সাইটে ডসগুলির জন্য এক ধরণের সিনট্যাক্স হাইলাইট করার কথা ভাববেন কিন্তু তা নয়। এটা তোলে নোটপ্যাড ++, অনেক সুন্দর দেখায়
কানাডিয়ান আদমি

1
@ কেএডি_ব্লুক যাতে পার্সিং ইঞ্জিনের প্রয়োজন হবে এবং আপনি যখন এসইতে পোস্ট হওয়া বিভিন্ন ভাষার সংখ্যা বিবেচনা করবেন আপনি একটি বিশাল প্রকল্পের দিকে তাকাচ্ছেন। ভেবে দেখুন উদাহরণস্বরূপ ডসের কতগুলি সংস্করণ এবং উপভাষা রয়েছে এবং এটি এমনকি আপনি লিনাক্স ইত্যাদিতে
পৌঁছানোর আগেও

খুব ভাল পয়েন্ট। হাস্যকর ভাবে এটা করা হয় স্ট্যাক বিনিময় iOS অ্যাপ্লিকেশন হাইলাইট করা হয়েছে।
সিএডি

2
হ্যাঁ ক্লোনভিডিআই ব্যক্তিগত ব্যবহারের জন্য অনেক ভাল এবং দ্রুততর উপায়
বরুণআগউ

6

উইন্ডোজ হোস্টে ডেবিয়ান অতিথি বাতিল / ট্রিম ব্যবহার করে।

এটি প্রতি সেবার সরাসরি উত্তর নয়, কারণ আমি সমস্যাটিকেই সমাধান করছি, প্রশ্ন নয় not পর্যায়ক্রমে চিত্রটি কমপ্যাক্ট করার পরিবর্তে, এই সমাধানটি হোস্টের ভিএম ডিস্ক চিত্রের অব্যবহৃত ব্লকগুলি স্বয়ংক্রিয়ভাবে অপসারণ করতে বাতিল ব্যবহার করে।

এই সমাধানটির জন্য একটি অতিথি ফাইল সিস্টেমের প্রয়োজন যা ক্রমাগত ট্রিমকে সমর্থন করে। আর্ক লিনাক্স উইকিতে টিআরআইএম অপারেশনগুলিকে সমর্থনকারী ফাইল সিস্টেমগুলির একটি তালিকা রয়েছে

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

তত্ত্বগতভাবে, এটি ভিডিআই স্টোরেজ ব্যবহার করে ভিবিক্স হোস্টের সমস্ত লিনাক্স অতিথির জন্য কাজ করবে।

হোস্ট কনফিগারেশন

ভিবিক্স থেকে বেরিয়ে আসা এবং কোনও ভিএম চলছে না, আপনার ডিস্কগুলিতে উভয় discardএবং nonrotationalভিএম-এর জন্য কনফিগার ফাইলে প্রতিটি ডিস্কের জন্য সমর্থন ছাড়ুন । এই মুহূর্তে discardজিইউতে নেই, তবে nonrotational"সলিড-স্টেট ড্রাইভ" চেকবক্স হিসাবে প্রকাশিত হয়েছে। (রেফ: ভবক্স ফোরাম, সমর্থন বাতিল )

<AttachedDevice discard="true" nonrotational="true" type="HardDisk" [..other options..] >

ভিএম আপ বুট করুন এবং যাচাই করুন যে ট্রিম সমর্থন সক্ষম হয়েছে:

sudo hdparm -I /dev/sda | grep TRIM

অতিথি কনফিগারেশন

যদি LVM ব্যবহার হয়, তবে বাতিল করা সেটিংসটি এতে পরিবর্তন করুন /etc/lvm/lvm.conf। (রেফ: ডেবিয়ান উইকি, lvm.conf উদাহরণ )

devices {
...
    issue_discards = 1
}

Fstab এ, discardআপনি যে ফাইল সিস্টেমগুলি স্বয়ংক্রিয়ভাবে বাতিল করতে চান তার বিকল্পটি যুক্ত করুন (রেফারেন্স: ডেবিয়ান উইকি, fstab উদাহরণ )

UUID=8db6787f-1e82-42d8-b39f-8b7491a0523c   /   ext4    discard,errors=remount-ro   0   1
UUID=70bfca92-8454-4777-9d87-a7face32b7e7   /build  ext4    discard,errors=remount-ro,noatime   0   1

ফাইল সিস্টেমগুলিকে তাদের নতুন বিকল্পগুলি বাছাই করতে পুনরায় পরিমাণ করুন।

sudo mount -o remount /
sudo mount -o remount /build

ম্যানুয়ালি বিনামূল্যে ব্লক এখন ট্রিম fstrimfstrimমাউন্ট করা ফাইল সিস্টেম ব্যবহার করে, ব্লক ডিভাইসটিকে সমর্থন করে না। অবিচ্ছিন্ন ফেলে দেওয়া সেট করার পরিবর্তে fstabএটি একটি সাপ্তাহিক ক্রোন-এ করা যেতে পারে। (সাপ্তাহিক ক্রোন শারীরিক এসএসডিগুলির জন্য প্রস্তাবিত যা ট্রিমের জন্য সন্দেহজনক সমর্থন থাকতে পারে, তবে এটি এখানে প্রাসঙ্গিক নয় যেহেতু অন্তর্নিহিত এসএসডি হোস্ট ওএস দ্বারা পরিচালিত হয়। দেখুন: এসএসডি ট্রিম সতর্কতা ))

fstrim /
fstrim /build

এই মুহুর্তে, ভিএম এর অভ্যন্তরে ফাইল সিস্টেমের আকার এবং ভিএম চিত্রগুলির আকারের মান খুব কাছাকাছি হওয়া উচিত।

এর সাথে পরীক্ষিত:

  • অতিথি 1: ডেবিয়ান 8.7, কার্নেল: ব্যাকপোর্টগুলি থেকে ফাইলস সিস্টেম: ext4 থেকে লিনাক্স 4.8 গ্র্যাসেক
  • অতিথি 2: ডেবিয়ান 9 আরসি 2, কার্নেল: লিনাক্স 4.9, ফাইল সিস্টেম: ext4
  • হোস্ট 1: ভিবিক্স 5.1.14, উইন 7, চিত্র এফএমটি: ভিডিআই
  • হোস্ট 2: ভিবক্স 5.1.14, উইন 8.1, চিত্র এফএমটি: ভিডিআই

2

MacOS অতিথির জন্য এটি করুন:

  1. অতিথি সিস্টেমে ফাঁকা স্থান বাতিল করুন:

    diskutil secureErase freespace 0 "/Volumes/Macintosh HD"
    

    (আপনার ড্রাইভের নাম সহ ভলিউম / ম্যাকিনটোস এইচডি প্রতিস্থাপন করুন)

  2. অতিথি ভিএম বন্ধ করুন

  3. ভিডিআই ডিস্ক চিত্রের আকার হ্রাস করতে এই কমান্ডটি চালান

    VBoxManage modifyhd /path/to/thedisk.vdi --compact
    

    অথবা

    VBoxManage modifymedium /path/to/thedisk.vdi --compact
    

1

আমি এটি আমার ভিডিআই ইমেজটির জন্য উইন্ডোজ ভার্চুয়ালবক্সে ভার্চুয়াল ডেবিয়ানের জন্য ব্যবহার করেছি। এটি কোনও সাধারণ সমাধান নয়, তবে কমপক্ষে আপনাকে যা করতে হবে তার একটি সংক্ষিপ্ত বিবরণ দেওয়া উচিত।

দেবিয়ান কমান্ড:

root@debian:~# lsblk  # show partitions
নাম মেজ: মিন আরএম সাইজ আরআর টাইপ মুনটপয়েন্ট 
sdb 8:16 0 128G 0 ডিস্ক 
Dsdb1 8:17 0 128G 0 অংশ / এমএনটি / ওয়েব # এটি আগ্রহের অংশ!
sda 8: 0 0 64G 0 ডিস্ক 
Dasda1 8: 1 0 61,4G 0 অংশ / 
Dasda2 8: 2 0 1K 0 অংশ 
Dasda5 8: 5 0 2,7G 0 অংশ 
[সোয়াপ্প] sr0 11: 0 1 56,3M 0 রোম
root@debian:~# service mysql stop  # terminate all operations with partition
root@debian:~# service apache2 stop  # terminate all operations with partition
root@debian:~# umount /mnt/web  # unplug partition
root@debian:~# apt-get install zerofree  # install tool for filling in zeros to empty space
root@debian:~# zerofree -v /dev/sdb1  # fill with zeros
root@debian:~# poweroff  # shut down machine

উইন্ডোজ কমান্ড:

C:\Program Files\Oracle\VirtualBox>VBoxManage.exe modifyhd --compact "D:\VirtualBox VMs\web.vdi"  # convert zeros to empty space

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


1

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

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

আমি অ্যান্ড্রু ডোমাসেকের নির্দেশিত অনুরূপ সমাধান পেয়েছি। এটি এনটিএফএস (উইন্ডোজ 10) দিয়েও খুব ভাল কাজ করে।

এটা করতে:

  • নতুন ভার্চুয়াল মেশিন তৈরি করুন যা জিপি স্টার্ট লাইভ সিডি দিয়ে বুট করে (আপনি আপনার প্রিয় লিনাক্স ডিস্ট্রো ব্যবহার করতে পারেন)।
  • মেশিন সেটিংস সম্পাদনা করুন এবং SATA ডিস্ক নিয়ামক সেট করুন
  • আপনি কমপ্যাক্ট করতে চান এমন বিদ্যমান ভিডিআই ফাইল যুক্ত করুন
  • ভিডিআই ভিত্তিক ডিস্কগুলিকে ট্রিম সমর্থন সহ এসএসডি হিসাবে দৃশ্যমান হতে পরিবর্তন করুন:

    VBoxManage storageattach "gpared live" --storagectl "SATA" --port 0 --discard on --nonrotational on
    VBoxManage storageattach "gpared live" --storagectl "SATA" --port 1 --discard on --nonrotational on
    
  • মেশিন শুরু করুন

  • লিনাক্স রুট শেল-এ, এনটিএফএস পার্টিশনটি মাউন্ট করুন mount /dev/sda2 /mnt
  • শূন্য মুক্ত স্থান dd if=/dev/zero of=/mnt/bigfile
  • rm /mnt/bigfile
  • নতুন ফাইল তৈরি না করে ভিডিআইকে কমপ্যাক্ট করতে বাধ্য করুন: fstrim -v /mnt

0

গৃহীত উত্তরটি পরিপূরক করার জন্য খুব ঝরঝরে কৌশল হল যে আপনি অতিথি স্থান শূন্য করার পরে কোনও সংক্ষেপণ না করেই পালাতে পারবেন, হোস্টে একটি সংকোচিত ফাইল সিস্টেম ব্যবহার করে (যেমন এনটিএফএস বৈশিষ্ট্যে ভার্চুয়াল ড্রাইভের ফোল্ডারটি সংকোচিত করার জন্য নির্বাচন করা উইন্ডোজ হোস্ট)। প্রকৃতপক্ষে এর ফলে আরও অনেক বেশি জায়গা সাশ্রয় করার সুবিধা রয়েছে কারণ অপারেটিং সিস্টেমগুলি প্রচুর পুনরাবৃত্তিযোগ্য পাঠ্য বা বাইনারি ফাইল ধারণ করে থাকে (উদাহরণস্বরূপ একটি 30 গিগাবাইট গেস্ট ড্রাইভের মধ্যে 15 গিগাবাইট স্থানের শূন্যস্থান হোস্ট ড্রাইভের 4 জিবিতে পরিণত হতে পারে)।

গুহাতগুলিতে অন্তর্ভুক্ত রয়েছে যে আসল হার্ডওয়্যারে ড্রাইভের অ্যাক্সেস বাড়তে পারে এবং সিপিইউ ব্যবহারে সামান্য বৃদ্ধি পাওয়া যায়।


0

জালিয়াতির জন্য গুরুত্বপূর্ণ নোট (~ 1997-2007) অপারেটিং সিস্টেমগুলি

সাধারণভাবে, আগে দেওয়া উত্তরের কৌশলগুলি বৈধ; তবুও, একটি খুব গুরুত্বপূর্ণ বিশেষ কেস আছে।

কিছু বছরের জন্য - সম্ভবত 1997-2007 বা তাই - 32-বিট অপারেটিং সিস্টেমগুলি এখনও আদর্শ ছিল, তবে 2GB এর চেয়ে বড় হার্ড ডিস্কগুলি ইতিমধ্যে ব্যবহৃত হয়েছিল in ফলস্বরূপ, জিরোগুলির একটি ফাইল লিখে সমস্ত খালি স্থানটি গ্রাস করার চেষ্টা করার সময় (যা সর্বদা রুট হিসাবে করা উচিত, রুটের অধিকারযুক্ত মুক্ত স্থানকে অন্তর্ভুক্ত করার জন্য, যা অন্য কেউ স্পর্শ করতে পারে না), আপনি দেখতে পাবেন:

খুব বড় ফাইল

পরিবর্তে আপনি যা আশা করেন:

যন্ত্রে আর কোন স্থান অবশিষ্ট নেই.

যদি এটি ঘটে থাকে তবে আপনি সম্ভবত 2 জিবি ফাইলের আকারের সীমাবদ্ধতাটিকে আঘাত করেছেন। এটি তখন প্রচলিত ছিল কারণ অনেকগুলি ফাইল অপারেশন স্বাক্ষরিত 32-বিট পূর্ণসংখ্যার ফলাফলগুলি ফিরিয়ে দেয়, যাতে নেতিবাচক মানগুলি ত্রুটি কোডগুলি রিপোর্ট করতে পারে। এর কার্যকরভাবে বোঝানো হয়েছিল যে অফসেট ফলাফলগুলি বিশেষ ব্যবস্থা ছাড়াই 2 ^ 31 বাইটের মধ্যে সীমাবদ্ধ ছিল।

কর্মক্ষেত্রটি সোজাসুজি: ডিস্ক প্রকৃতপক্ষে স্থান শেষ না হওয়া অবধি পৃথক পৃথক-নামকরণকারী শূন্য ফাইল তৈরি করতে থাকুন।

আপনি যদি কোনও শ্রেণীর জন্য এই পরিস্থিতিটি প্রদর্শন করতে ইচ্ছুক প্রশিক্ষক হন তবে রেড হ্যাট লিনাক্স 7.0-র পুরানো অনুলিপি সহ 4 গিগাবাইটের ডিস্ক চিত্রই যথেষ্ট।

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