SDカードのSecure Eraseの方法 (Linux向け)

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/card/block.c [lxr.free-electrons.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

で良いっぽい、簡単だ。