VirtualBox හි VDI ගොනු ප්‍රමාණය සංයුක්ත කරන්නේ කෙසේද?


313

මා සතුව VirtualBox VM ඉතා විශාල දෘඩ තැටි ප්‍රමාණයක් (ධාරකයට වඩා විශාල) වින්‍යාස කර ඇත. මගේ අත්වැරැද්ද අනුව, වීඑම් හි වැඩසටහනක් මඟින් ලොග් ලිපිගොනු විශාල ප්‍රමාණයක් ජනනය කර ඇති අතර ධාරකයේ ඉඩක් නොමැති තෙක් VDI ගොනු ප්‍රමාණය වර්ධනය වේ.

දැන් මම ලොග් ලිපිගොනු මකා දමා ඇති නමුත් VDI ගොනු ප්‍රමාණය භාවිතා කිරීමෙන් පසු කුඩා නොවේ VBoxManage.exe modifyhd "C:\Virts\mybox-i386.vdi" compact

VDI ගොනු ප්‍රමාණය සැබවින්ම සංයුක්ත කිරීමට ක්‍රමයක් තිබේද? ස්තූතියි!

Answers:


531

ඔබ පහත පියවරයන් කළ යුතුය:

  1. ආගන්තුකය තුළ defrag ධාවනය කරන්න (වින්ඩෝස් පමණි)
  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
    

    වින්ඩෝස් ආගන්තුකයෙකු සමඟ , Sysinternals වෙතින් SDelete බාගත කර මෙය ක්‍රියාත්මක කරන්න:

    sdelete.exe c: -z
    

    (C: VDI හි ධාවක අකුර සමඟ ආදේශ කරන්න)

  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
    

මෙය vdi ප්‍රමාණය අඩු කරයි.


20
ඊළඟ පුද්ගලයා සඳහා, මගේ විධානය මේ ආකාරයෙන් අවසන් විය: "C: \ Program Files \ Oracle \ VirtualBox \ VBoxManage.exe" modifyhd "C: ers පරිශීලකයින් \ daniel \ VirtualBox VMs \ .... \ thedisk.vdi" - -compact
ඩැනියෙල්

38
ශුන්‍ය නිදහස් ලිනක්ස් උපයෝගිතා මෑන්පේජ් ( manpages.ubuntu.com/manpages/natty/man8/zerofree.8.html ) ට අනුව, මෙම කාර්යය සඳහා dd ට වඩා ශුන්‍ය නිදහස් විය යුතුය . dd "එය මන්දගාමී නිසා" නිර්දේශ කළේ නැත කර, "එය තැටි ප්රතිරූපය කරයි (තාවකාලිකව) එහි maximal දුරට වර්ධනය", "එය (තාවකාලිකව) තැටියේ ඇති සියලු නිදහස් ඉඩ භාවිතා කරයි, එසේ අනෙකුත් සමගාමී ලිවීම් කටයුතු අසාර්ථක විය හැක." Zerofree උබුන්ටු ලිනක්ස් හි apt හරහා ලබා ගත හැකිය , නැතහොත් ඔබට එය තනිවම සම්පාදනය කළ හැකිය.
ඩකාටින්

28
Zdfree හි මෑන්පේජ් හි සඳහන් වන්නේ dd සමඟ වෙනත් සමගාමී ලිවීම් අසාර්ථක වනු ඇති බවයි, නමුත් ශුන්‍යයට ගොනු පද්ධතිය කියවීමට පමණක් සවි කිරීම අවශ්‍ය වේ! * duh *
Madarco

7
ඉඟිය: විධාන දෙක එක පේළියක තබන්න : dd ...; rm /bigfile, ඔබ ddසම්පූර්ණ වන තෙක් බලා නොසිටින විට මෙය සම්පූර්ණ තැටියක් සමඟ කාලය අවම කරයි .
jlh

22
අථත්ය බොක්ස් 4.3.10 භාවිතා කරමින් ඩකාටින්, තැටි රූප ගොනුව එහි උපරිම මට්ටමට වර්ධනය නොවීය . සියලුම ශුන්‍ය කොටස් භෞතික තැටියට ලිවීමට කරදර නොවීමට වර්චුවල් බොක්ස් දක්ෂය.
jlh

12

මම වින්ඩෝස් 7 හි වින්ඩෝස් අමුත්තන් සමඟ සිටිමි, මෙන්න මම සියලුම VDIs ෆෝල්ඩර ගසක සංයුක්ත කිරීමට ලියූ කණ්ඩායම් ගොනුවකි

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
ඔබ සිතන්නේ මෙවැනි වෙබ් අඩවියක ඩොස් සඳහා යම් ආකාරයක සින්ටැක්ස් ඉස්මතු කිරීමක් ඇති නමුත් නැත. එය නොට්පෑඩ් ++
CAD bloke

2
ACAD_bloke සඳහා විග්‍රහ කිරීමේ එන්ජිමක් අවශ්‍ය වන අතර SE හි පළ කර ඇති විවිධ භාෂා ගණන සලකා බැලූ විට ඔබ විශාල ව්‍යාපෘතියක් දෙස බලයි. උදාහරණයක් ලෙස ඩොස් හි අනුවාදයන් සහ උපභාෂා
කීයක් තිබේදැයි සිතා

ඉතා හොඳ කරුණක්. උත්ප්රාසාත්මකව ඇත අඩුක්කුව විනිමය iOS යෙදුම මත බවයි.
CAD bloke

2
ඔව් CloneVDI පුද්ගලික භාවිතය සඳහා වඩා හොඳ හා වේගවත් ක්‍රමයකි
VarunAgw

8

ඉවතලන්න / TRIM භාවිතා කරමින් වින්ඩෝස් සත්කාරකයේ ඩෙබියන් ආගන්තුකය.

මෙය සෘජු පිළිතුරක් නොවේ, මන්ද මම ගැටලුව ආමන්ත්‍රණය කරමි, ප්‍රශ්නය නොවේ. වරින් වර රූපය සංයුක්ත කිරීම වෙනුවට, මෙම විසඳුම මඟින් ධාරකයේ VM තැටි රූපයේ භාවිතයට නොගත් කොටස් ස්වයංක්‍රීයව ඉවත් කිරීමට ඉවතලෑම භාවිතා කරයි.

මෙම විසඳුමට අඛණ්ඩ TRIM සඳහා සහය දක්වන ආගන්තුක ගොනු පද්ධතියක් අවශ්‍ය වේ. ආර්ච් ලිනක්ස් විකියෙහි TRIM මෙහෙයුම් සඳහා සහය දක්වන ගොනු පද්ධති ලැයිස්තුවක් ඇත .

ආරක්ෂක ගැටළු ඇති බැවින් FDE සහ cryptoroot විශේෂයෙන් ආවරණය නොකෙරේ. මෙම ප්‍රශ්නයට වෙනත් විසඳුම් කිසිවක් සංයුක්ත කිරීමට ඉඩ නොදේ. ආර්ච් ලිනක්ස් විකියේ TRIM සහ dm-crypt උපාංග පිළිබඳ තොරතුරු තිබේ .

න්‍යායට අනුව, VDI ආචයනය භාවිතා කරමින් VBox ධාරකවල ඇති සියලුම ලිනක්ස් අමුත්තන් සඳහා මෙය ක්‍රියා කරයි.

ධාරක වින්‍යාසය

VBox පිටවී ඇති අතර VMs ක්‍රියාත්මක නොවන විට, VM සඳහා වින්‍යාස ගොනුවේ දෙකම discardසහ nonrotationalඑක් එක් තැටිය සැකසීමෙන් ඔබේ තැටි සඳහා ඉවතලන සහාය එක් කරන්න . මෙම අවස්ථාවේදී discardGUI හි නොමැත, නමුත් nonrotationalඑය "-න-තත්ව ධාවකය" පිරික්සුම් කොටුව ලෙස නිරාවරණය වේ. (ref: vbox forums, සහාය ඉවතලන්න )

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

VM ඉහළට ආරම්භ කර TRIM සහාය සක්‍රීය කර ඇති බව තහවුරු කරන්න:

sudo hdparm -I /dev/sda | grep TRIM

අමුත්තන්ගේ වින්‍යාසය

LVM භාවිතයේ තිබේ නම්, ඉවතලන සැකසුම වෙනස් කරන්න /etc/lvm/lvm.conf. (ref: debian wiki, lvm.conf උදාහරණය )

devices {
...
    issue_discards = 1
}

Fstab හි, discardඔබ ස්වයංක්‍රීයව ඉවත දැමීමට කැමති ගොනු පද්ධති වෙත විකල්පය එක් කරන්න (ref: debian wiki, 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

දැන් නොමිලේ බ්ලොක් බ්ලොක් කරන්න fstrim. fstrimසවිකර ඇති ගොනු පද්ධතිය භාවිතා කරයි, බ්ලොක් උපාංගය එයට සහාය නොදක්වයි. අඛණ්ඩව ඉවතලෑම සැකසීම වෙනුවට fstab, මෙය සතිපතා ක්‍රෝන් එකකින් කළ හැකිය. (TRIM සඳහා සැක සහිත සහය තිබිය හැකි භෞතික එස්එස්ඩී සඳහා සතිපතා ක්‍රෝන් නිර්දේශ කරනු ලැබේ, නමුත් යටින් පවතින එස්එස්ඩී සත්කාරක මෙහෙයුම් පද්ධතිය විසින් හසුරුවන බැවින් මෙය මෙහි අදාළ නොවේ. බලන්න: එස්එස්ඩී ටිම් අනතුරු ඇඟවීම ).

fstrim /
fstrim /build

මෙම අවස්ථාවෙහිදී, වීඑම් තුළ ඇති ගොනු පද්ධතිවල ප්‍රමාණය සහ වීඑම් රූපවල ප්‍රමාණය ඉතා ආසන්න අගයක් විය යුතුය.

සමඟ පරීක්ෂා කර ඇත්තේ:

  • ආගන්තුක 1: ඩේබියන් 8.7, කර්නලය: ලිනක්ස් 4.8 බැක්පෝට් වලින් ග්‍රෙසෙක්, ගොනු පද්ධතිය: ext4
  • ආගන්තුක 2: ඩේබියන් 9 ආර්සී 2, කර්නලය: ලිනක්ස් 4.9, ගොනු පද්ධතිය: ext4
  • ධාරක 1: VBox 5.1.14, Win7, image fmt: VDI
  • ධාරක 2: VBox 5.1.14, Win8.1, image fmt: VDI

2

වින්ඩෝස් වර්චුවල් බොක්ස් හි අථත්ය ඩෙබියන් වෙත සවි කර ඇති මගේ VDI රූපය සඳහා මම මෙය භාවිතා කරමි. එය සාමාන්‍ය විසඳුමක් නොවේ, නමුත් එය අවම වශයෙන් මා කරන දේ පිළිබඳ සාරාංශයක්වත් ලබා දිය යුතුය.

ඩේබියන් හි විධාන:

root@debian:~# lsblk  # show partitions
නම මේජ්: MIN RM SIZE RO TYPE MOUNTPOINT 
sdb 8:16 0 128G 0 තැටිය 
Dsdb1 8:17 0 128G 0 part / mnt / web # මෙය උනන්දුවේ කොටසයි!
sda 8: 0 0 64G 0 තැටිය 
Dasda1 8: 1 0 61,4G 0 කොටස / 
├─sda2 8: 2 0 1K 0 කොටස 
└─sda5 8: 5 0 2,7G 0 කොටස 
[SWAP] sr0 11: 0 1 56,3M 0 rom
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

එය උපකාරී වේ යැයි සිතමි :)


2

සඳහා MacOS අමුත්තා මෙය කරන්න:

  1. ආගන්තුක පද්ධතියේ නිදහස් ඉඩ අහෝසි කරන්න:

    diskutil secureErase freespace 0 "/Volumes/Macintosh HD"
    

    (ඔබේ ධාවකයේ නම සමඟ / වෙළුම් / මැකින්ටොෂ් HD ආදේශ කරන්න)

  2. ආගන්තුක වී.එම්

  3. VDI තැටි රූප ප්‍රමාණය අඩු කිරීමට මෙම විධානය ක්‍රියාත්මක කරන්න

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

    හෝ

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

2

නීති සඳහා වැදගත් සටහන (~ 1997-2007) මෙහෙයුම් පද්ධති

පොදුවේ ගත් කල, කලින් දී ඇති පිළිතුරු වල ශිල්පීය ක්‍රම වලංගු වේ; කෙසේ වෙතත්, ඉතා වැදගත් විශේෂ අවස්ථාවක් තිබේ.

වසර කිහිපයක් සඳහා - සමහර විට 1997-2007 හෝ ඊට වැඩි - 32-බිට් මෙහෙයුම් පද්ධති තවමත් සම්මතයක් විය, නමුත් 2GB ට වඩා විශාල දෘඩ තැටි දැනටමත් භාවිතයේ පැවතුනි. මෙහි ප්‍රති As ලයක් වශයෙන්, ශුන්‍ය ගොනුවක් ලිවීමෙන් සියලු නිදහස් අවකාශය පරිභෝජනය කිරීමට උත්සාහ කරන විට (එය සැමවිටම root ලෙස කළ යුතුය, වෙනත් කිසිවෙකුට ස්පර්ශ කළ නොහැකි මූලයේ වරප්‍රසාදිත නිදහස් ඉඩ ඇතුළත් කිරීම), ඔබට පෙනෙනු ඇත:

ගොනුව ඉතා විශාලයි

ඔබ අපේක්ෂා කරන දේ වෙනුවට:

උපාංගයේ ඉඩක් ඉතිරි නොවේ.

මෙය සිදුවුවහොත්, ඔබ බොහෝ විට 2GB ගොනු ප්‍රමාණයේ සීමාවකට පහර දී ඇත. එකල මෙය සුලභව දක්නට ලැබුනේ බොහෝ ගොනු මෙහෙයුම් මඟින් අත්සන් කළ බිටු 32 ක පූර්ණ සංඛ්‍යා ප්‍රති results ල ලබා දුන් නිසා negative ණ අගයන්ට දෝෂ කේත වාර්තා කළ හැකි බැවිනි. මෙය effectively ලදායී ලෙස අදහස් කළේ විශේෂ ක්‍රියාමාර්ග නොමැතිව ඕෆ්සෙට් ප්‍රති results ල බයිට් 2 ^ 31 කට සීමා කර ඇති බවයි.

ක්‍රියාකාරීත්වය සරල ය: තැටිය සැබවින්ම හිස්ව යන තුරු වෙනම, වෙනස් ලෙස නම් කරන ලද ශුන්‍ය ගොනු සාදන්න.

ඔබ පංතියක් සඳහා මෙම තත්වය නිරූපණය කිරීමට කැමති උපදේශකයෙකු නම්, Red Hat Linux 7.0 හි පැරණි පිටපතක් සහිත 4GB තැටි රූපයක් ප්‍රමාණවත් වේ.


Addl. information තිහාසික තොරතුරු: ලිනක්ස් විශාල ගොනු සහාය glibc 2.2 + linux 2.4.0 වලින් ආරම්භ වේ. වින්ඩෝස් විශාල ගොනු සහාය එන්ටීඑෆ්එස් හි ආරම්භ වන නමුත් වින් 2 කේ වැනි පැරණි අනුවාදයන්ට වෙනත් තැටි සීමාවන් ඇත (48-බිට් එල්බීඒ → 128 ගිබී මැක්ස් ඩිස්ක්, ආදිය).
ඇන්ඩ rew ඩොමස්ක්

2

මෙහෙයුම් පද්ධතිය තුළ TRIM සහය සක්‍රීය කිරීමට මට අවශ්‍ය නැත, මන්ද සෑම දත්ත මකාදැමීමක්ම VDI ගොනුවේ දත්ත සංයුක්ත කිරීමට බල කරනු ඇති අතර VDI ගොනුව සම්භාව්‍ය භ්‍රමණ තැටියේ ඇති විට ආගන්තුක පද්ධතිය භාවිතා කළ නොහැක. මට වඩා හොඳ වන්නේ මසකට වරක් අතින් සංයුක්ත කිරීම ය.

සාමාන්‍ය සංයුක්තයේදී VDI ගොනු අන්තර්ගතය නව ගොනුවකට පිටපත් කරනු ලැබේ. මේ සඳහා ධාරක තැටියේ (සමහර විට විශාල) නිදහස් ඉඩක් අවශ්‍ය වේ.

ඇන්ඩ rew ඩොමසෙක් පෙන්වා දුන් ආකාරයටම මට විසඳුමක් තිබේ. එන්ටීඑෆ්එස් (වින්ඩෝස් 10) සමඟ වුවද එය ඉතා හොඳින් ක්‍රියාත්මක වේ.

මෙය කිරීමට:

  • GParted Live CD සමඟ ආරම්භ වන නව අථත්‍ය යන්ත්‍රයක් සාදන්න (ඔබට ඔබේ ප්‍රියතම ලිනක්ස් ඩිස්ට්‍රෝ භාවිතා කළ හැකිය).
  • යන්ත්‍ර සැකසුම් සංස්කරණය කර SATA තැටි පාලකය සකසන්න
  • ඔබට සංයුක්ත කිරීමට අවශ්‍ය VDI ගොනු එක් කරන්න
  • TRIM සහාය ඇතිව SSD ලෙස පෙනෙන පරිදි VDI පාදක තැටි වෙනස් කරන්න:

    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
  • නව ගොනුවක් නිර්මාණය නොකර VDI සංයුක්ත කිරීමට බල කරන්න: fstrim -v /mnt

1

පිළිගත් පිළිතුරට අතිරේකයක් ලෙස ඉතා උපක්‍රමයක් නම්, ආගන්තුක අවකාශය ශුන්‍ය කිරීමෙන් පසු කිසිදු සම්පිණ්ඩනයකින් තොරව ඔබට ඉවත් විය හැකි බවයි, ධාරකයේ සම්පීඩිත ගොනු පද්ධතියක් භාවිතා කිරීමෙන් (උදා: එන්ටීඑෆ්එස් ගුණාංග මත අථත්‍ය ධාවකයන්ගේ ෆෝල්ඩරය සම්පීඩනය කිරීමට තෝරා ගැනීම a වින්ඩෝස් සත්කාරක). මෙහෙයුම් පද්ධති බොහෝ පුනරාවර්තන පෙළ හෝ ද්විමය ලිපිගොනු රඳවා තබා ගැනීමට නැඹුරු වන නිසා මෙය ඇත්ත වශයෙන්ම වැඩි ඉඩක් ඉතිරි කර ගැනීමේ වාසිය ලබා ගනී (උදා: 30GB ආගන්තුක ධාවකය 15GB ඉඩ ශුන්‍ය කළ ධාරක ධාවකයේ 4GB දක්වා හැරවිය හැක).

සැබෑ දෘඩාංග සඳහා ධාවක ප්‍රවේශය වැඩි විය හැකි අතර CPU භාවිතය සුළු වශයෙන් වැඩි වේ.

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.