VirtualBoxおよびSSDのTRIMコマンドのサポート


27

私はこれがうまくいかないと言うインターネット上の膨大な数の投稿を知っており、なぜ私は数ヶ月前にソリューションを探して何日も費やしましたが、昨日ゲストマシンの「TRIMコマンドサポートを有効にする」方法のいくつかのヒントを見つけました。私はそれを試してみましたが、「見える」ように見えます。私が知りたいのは、どこにキャッチがあるのか​​、これが実際に機能しているのかということです。

出典:
https ://forums.virtualbox.org/viewtopic.php ? f =7& t =
51768 http://jaysonrowe.blogspot.com/2013/08/compacting-virtualbox-vdi.html

ディスクファイルをアタッチする正確なコマンド:

VBoxManage storageattach "GuestOsMachineName" --storagectl "SATA" --port 1 --device 0 --onrotational on --discard on --medium "C:\ path \ to \ file.vdi" --type hdd

マシンの* .vboxファイルでこのエントリを生成したもの:

<AttachedDevice nonrotational="true" discard="true" type="HardDisk" port="1" device="0">
    <Image uuid="{3836a042-a83e-4000-9a59-e95ad65162ce}"/>
</AttachedDevice>

データを失わないように、このドライブはマシンに接続された2番目のドライブでした。ドライブにファイルをコピーし、それを残し、マシンを再起動し、マシンをシャットダウンし、再起動後にそこにあるかどうかを確認し、ホストOSでディスクファイルの使用状況を調べるなどの簡単なテストを行いました。結果は次のとおりです。

  • オプションなしで添付されたディスクファイル--nonrotationalおよび--discardは、ゲストOSでファイルを削除した後でも(動的な)サイズを保持します
  • 上記の両方のオプションが添付されたディスクファイルは、データが削除された後にスペースを解放します

ここに私の質問があります:
-正確に--discardオプションは何をしますか?VirtualBoxマニュアル(http://www.virtualbox.org/manual/ch08.html#vboxmanage-storageattach)には記載されていません
-実際にTRIMをホストOSに渡しているのですか?


3
仮想マシンで使用する仮想TRIMは、仮想フィールグッドのための仮想ディスクにインタフェース...
フィアスコLabsの

Ramhound:それでは、ストレージサブメニューの[ソリッドステートドライブ]チェックボックスオプションとは何ですか?また、マニュアルに記載されている--discardのようなオプションがある場合は、詳細を確認する必要があります。「説明されていない理由があります」と言って、あなたの主張を完全に理解することはできません。もしそうなら、なぜそれがマニュアルにあるのですか?
クレジストフシンター

11
@Ramhoundに答えるために、私のブログはOPがリストした投稿の1つです。彼の理由がわからないが、私には、動的に割り当てられたディスクのファイルサイズを物理的に縮小するために必要な仮想マシンがあった。削除されたデータを保持していたディスクであり、それをより小さなサイズに縮小しようとしていました-TRIMコマンドを渡すと、それが可能になりました...仮想ディスクを12Gから7Gに縮小しました。OPに、私の投稿がお役に立てば幸いです。ブログで着信トラフィックを見ることでここに来ました。
ジェイソンロウ14年

トピックに興味がある人への警告です。VirtualBoxディスクイメージエミュレーターのトリミングの実装は非常にバグが多く、vmがクラッシュする可能性があります。2年前のバグが公開されています。有効にすることは可能ですが、試して時間を無駄にしないでください。
ドミニクSMogor

これはドミニクが言及しているバグだと思います:virtualbox.org/ticket/16450
bobpaul

回答:


19

--discardoptionsは、ゲストOS vdiからのtrimコマンドに応じてイメージが縮小されることを指定します。次の要件を満たす必要があります。

  • ディスク形式はVDIである必要があります
  • クリア領域は少なくとも1MB(サイズ)でなければなりません
  • [おそらく]クリアされた領域は、1つ以上の1MBブロックをカバーする必要があります(位置合わせ)

当然、ゲストOSはtrimコマンドを発行するように構成する必要があります。通常、これはゲストOSがディスクをSSDであると見なすようにすることを意味します。Ext4は-o discardマウントフラグをサポートしています。OSXでは、デフォルトでApple提供のSSDのみがこのコマンドを発行されるため、追加の設定が必要になります。Windowsは少なくともバージョン7および8でSSDを自動的に検出してサポートする必要がありますが、インストール時または実行時に検出が行われるかどうかはわかりません。Linux exFATドライバー(Samsung提供)はdiscardコマンドをサポートしています。exFATのMicrosoftの実装が同じものをサポートしているかどうかは明らかではありませんが、ファイルシステムはフラッシュ用に設計されています。

別の方法として、発行するアドホックな方法がありますtrim(例:Linux fstrimコマンド、util-linuxパッケージの一部)。

以前のソリューションでは、ユーザーが未使用の領域をゼロにする必要がありました。たとえばzerofree、明示的にディスクを使用して圧縮します(vmがオフラインの場合のみ可能だと想定しています)。


1
また、btrfs(特に0領域に穴を開けるもの)で何らかの重複排除を使用btrfs balanceすると、可能な限り多くのトリミング可能な領域を作成するのに役立ちます。
-Omnifarious

12

これはGoogleのトップの結果であるため、これは古い投稿ですが、他の回答を少し明確にしましょう。実際、ゲストファイルシステム上の未使用の仮想ブロックに、フラッシュをより有効に使用するために、対応するフラッシュの物理ブロックを未使用としてマークできるという意味で、TRIMを動作させることができます。ピースは、他の回答やコメントにもすでに存在しています。

最初に、空き領域がトリミングされるようにホストを設定する必要があります。-o discardを使用してファイルシステムをマウントするか、cronを使用してファイルシステムでfstrimを定期的に実行できます。最初のオプションでは、一度に多くのファイルを削除するときにシステムがロックアップする可能性があるため、後者をお勧めします。

qarmaが書き込むように、使用されるディスク形式はVDI動的サイズである必要があります。

OPで説明されているように、nonrotational = "true" discard = "true"が.vboxファイルに設定されていることを確認してください。

次に、ゲストOSで通常どおりTRIMを有効にします。Linuxでは、fstrimを実行するcronジョブを再度お勧めします。仮想ディスクイメージでTRIMを実行するコストは物理SSDよりもはるかに高いため、これはおそらくさらに重要です。イメージを小さくするためにデータが移動されるためです。

現在、ディスクイメージは定期的に圧縮されているため、使用される実際のスペースと、qarmaが書き込むときの1MBブロックサイズのオーバーヘッドのみを占有します。これは、ホストSSDの空き領域がトリミングされることを意味します。


実際、trimコマンドを使用して一部のVMを強制終了しました。
-davidbaumann

@davidbaumannどうしてそうなったの?
-dvtan

実際に、有効にした後、約20GBのトリミングが開始されました。まさにこの時点で、ラップトップがクラッシュしました(最近、私のGPUにいくつかの問題がありました)。forums.virtualbox.org/viewtopic.php?f=2&t=75308
davidbaumann

既存の最初のディスクに対してこれを行うコマンド(SATAを想定):VBoxManage storageattach $VM --storagectl "SATA Controller" --port 0 --device 0 --nonrotational on --discard on
RobM
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.