TRIMが「通常の」ext4パーティションで機能するかどうかを簡単に確認できます: https://askubuntu.com/a/19480/592 。
LUKSで暗号化されたものに対してそれを行う方法は? 12.04代替インストーラー(つまり、LVMが関係するインストーラー)によって作成されたデフォルトのLUKSセットアップを想定しましょう.
私がここで求めているのは、ファイルが暗号化されたボリュームに保存されている場合、ファイルを削除した後にディスク上のブロックが実際にゼロで満たされていることを確認する方法です。
私はまだTRIMセットアップでdm-cryptを持っていませんが、これを検証することに興味があります。まず、SSDによってはこれが不可能な場合があると言わなければなりません(参照: https://serverfault.com/a/401506/60525 )。
適切な種類のSSDがあると仮定すると、いくつかの異なるオプションが表示されます。
これを非常に小さなブロックデバイスでテストします。システム全体と同じように、20MBの暗号化されたパーティションを作成します。最初にパーティションをランダムバイトで埋めてください。次に、暗号化されたfsで10Mbファイルを作成、書き込み、フラッシュ、および削除します。マウントされたfsでfstrimを実行します。すべてが機能している場合は、20Mbパーティションの約半分がゼロバイトで埋められていることがわかります。
または、UNMAPまたはWRITE SAME scsiコマンドがscsiサブシステムを介して発行されていることを確認できます。ハードウェアデバイスを使用したり、カーネルをハッキングしたりせずにscsiパケットを確認できる唯一の方法は、 scsiパケットのロギング を有効にすることでした。
echo $ BITMASK>/sys/module/scsi_mod/parameters/scsi_logging_level
9216をBITMASKとして使用すれば、ディスク上に直接存在するext4 fsのfstrimの後にWRITE SAME cdbが送信されるのを見るには十分です(暗号化なし)。
Fsrimをfsレベルで使用するか、sg_unmap/sg_write_sameをデバイスレベルで使用して、TRIMをトリガーできます。 UNMAPまたはWRITE SAMEを見つけたら、t10.orgのscsi docsを使用してパケットをデコードし、参照しているディスクをブロックします。次に、そのセクタでディスクのすべてがゼロになっていることを確認します。
後者のアプローチはより困難ですが、既存のインストールで作業するという利点があり、サイズの小さいファイルシステムで作業する場合ははるかに簡単です。 UNMAPまたはWRITE SAMEコマンドが送信されるのを見るだけで十分な場合があります(ゼロがあるかどうかは本当に気になりますか?)。 scsiログには表示されず、ata cdbを取得する方法がありません。しかし、それはケースの.01%未満だと思います。
後者のソリューションは、自動化されたものである可能性があります。そのため、手動でパケットをデコードする必要はありません。受験者はいますか?
そして今のところ、dm-crypt.cをハッキングせずに暗号化されたブロックアドレスからデバイスブロックアドレスへのマッピングを取得する方法はありませんので、削除されたファイルのブロックが暗号化されたファイルのトリミングされたfsデバイスのゼロセクターにデバイスマップをブロックすると、苦痛の世界が広がります。
これは、リンクした質問で回答されました。
LVMを使用している場合、/etc/fstab
のオプションにdiscard
を追加する必要があります
任意のエディターで/etc/fstab
を開きます
# Command line
Sudo -e /etc/fstab
# Graphical
gksu gedit /etc/fstab
4列目のオプションに「破棄」を追加します。
/dev/mapper/volumegroup-root / ext4 discard,noatime,nodiratime,errors=remount-ro 0 1
次に、/etc/crypttab
に同じオプションを追加(破棄)します
LUKSパーティションが/dev/sda1
(それに応じて調整)であると仮定します
# Command line
Sudo -e /etc/crypttab
# Graphical
gksu gedit /etc/crypttab
繰り返しますが、廃棄を追加します。
sda1_crypt UUID=[... series of numbers ...] none luks,discard
Initramfsを更新する
Sudo update-initramfs -c -k all
リブート
TRIMが機能していることを確認します...
Sudo dmsetup table /dev/mapper/sda1_crypt --showkeys
出力に「allow_discards」が表示されるはずです。
追加情報については、以下を参照してください: http://worldsmostsecret.blogspot.com/2012/04/how-to-activate-trim-on-luks-encrypted.html
暗号化されたボリュームに対してTRIMがどのように機能するかはわかりません。ボリュームは、定義上、ランダムに見える(つまり、非ゼロ)データでいっぱいです。 TRIMは、ファイルシステムにアクティブデータが格納されなくなったときにブロックをゼロにします。暗号化ボリュームでは、ハードウェアブロックデバイスに保存されるのはファイルシステムではなく、仮想ブロックデバイスです。