web-dev-qa-db-ja.com

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

これはうまくいかず、なぜかという理由でインターネット上に膨大な数の投稿があることを承知しており、数か月前に解決策を探すために何日も費やしましたが、昨日、ゲストマシンで「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 --nonrotational 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に渡すのですか、それとも単に次のように見えますか?

27

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

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

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

または、trimを発行するためのアドホックメソッドがあります。 Linux fstrimコマンド、util-linuxパッケージの一部。

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

19
Dima Tisnek

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

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

使用するディスクフォーマットは、qarmaが書き込むときのVDI動的サイズである必要があります。

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

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

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

12
Jacob Larsen