Flash memoryを使ったSSDでは、Secure Eraseというのがあって、これを使うとFlash Translation Layer (FTL)のLBA-物理アドレスのマッピングがリセットされるため、安全な消去という本来の目的の他、性能が上がったりすることが知られている。
Secure EraseはATAのコマンドで、Linuxからはhdparm(8)
を使って実行することができる。
SDカード/microSDカードも同様な仕組みで動作しているが、ATAのデバイスではない。
これらのカードでもSecure Eraseに相当する機能があるのではないか、使えるのではないかということで調べた。
mmcblk
Linuxでは、ノートパソコンに内蔵されているSDコントローラーにつながるSDカードはmmc
とかmmcblk0
とかいう名前で認識される:
mmc0: new SDXC card at address e624 mmcblk0: mmc0:e624 SU64G 59.4 GiB mmcblk0: p1
これはカーネル中のmmc/core/block.c
[elixir.bootlin.com]に書いてあって、ここを読むと、mmc_can_trim(card)
とか、mmc_can_secure_erase_trim(card)
とか、やはりSDカードにもTrimあるいはDiscard、Secure Trimなる機能が実装されているっぽいことが分かる。
実際使う
で、まあドライバにはそれっぽい機能が実装されていることが分かったので、これをユーザスペースからどう叩くか辿って行って調べたところ、blkdiscard(8)
という便利コマンドが用意されていることが判明した。
普通にTrimするには、
# blkdiscard /dev/mmcblk0
Secure Trimするには、
# blkdiscard -s /dev/mmcblk0
で良いっぽい、簡単だ。