2016年6月アーカイブ

SSD時代のデータ完全消去

古き良き時代(?)のHDDのデータ完全消去といえば、0とか1とかランダムデータとかで全論理セクタを数回上書きするのが一般的で、Wikipediaにshredを使った手順が書いてあるくらいには認知度が高いと思う。

でもそのshred(1)のmanを見ると、ファイル単位でも消去できるようなことが書いてあってビックリ。古き良き時代(?)のFilesystemならばファイルを上書きすれば同じ論理セクタに上書きしてくれるかもしれないけど、最近のFilesystemだと、上書きのつもりでもFilesystemがreallocationしているかもしれないし、nilfs2みたいに追記型かもしれないし、ファイル単位の消去なんて今時はムリでは・・・と思ってたら確かにmanのCAUTIONにいろいろいいわけが書いてあって、要するにムリって書いてあるに等しい。

SSD時代になってくるとさらに話がややこしい。SSDだと中の人(中のマイコン)がセクタの論物変換をやってて、NANDフラッシュメモリのBadblock管理やらECCやらやって、要するにSSDの外から同じ論理セクタに上書きしても内部的には前のデータが物理セクタに残ってるかもしれないわけで。いっぱい書けばそのうち全部の物理セクタを上書きするだろう、というやり方もなんだか心許ない。で、こういう用途のために、ATA Secure Erase(eMMCにもSecure Eraseがある)というのがあり、仕様上はこれを使えば完全消去できることになっている。ただしょせんは仕様なので、もしSSD(やeMMC)の中の人がさぼっていると・・・幸いにも(?)、NANDフラッシュメモリは一度eraseすると前のデータを読むのはかなり困難なので、HDDの磁気ディスクみたいに何度も上書きする必要性はかなり低いと思う。

なんだよSSDめんどくせーなならHDDでいいや、と思っているとこれも危なくて、いわゆる4KセクタのHDDのadvanced formatだと4Kセクタへの部分上書きのためにエミュレーションしてるけどこのときパフォーマンス稼ぐために別の物理セクタに書いている可能性を否定できないし、SMRだとこれが256MBセクタとも言えるわけだし・・・それ以前にRAIDコントローラ使ってたら・・・

というわけで、本当にヤバイデータの場合は物理的に破壊がいいと思います、はい。
SSHD?さぁ?知らない子ですね。

あ、TRIM(DISCARD)の話を入れ忘れた、まぁいっか。

Linux 4.5 から MADV_FREE が登場してた

てっきりLinuxにはMADV_DONTNEEDがあるからMADV_FREEは実装されないものだと思ってたら、Linux 4.5で登場してた。この辺に詳しい。 Volatile ranges and MADV_FREE

ぱっと見た感じ、MADV_DONTNEEDはcallされると即座にinvalidateされるのに対し、MADV_FREEはcallされてもshrinkerから追い出されるまでは必ずしもinvalidateされるわけではない、という感じっぽい。どちらも、ユーザランドからkernelにmmapした領域をもうイラネと通知するための仕組み。invalidateされると、その後はじめてアクセスするタイミングでAnonymousページだとゼロフィルされたページが再度割り当てられる。backendがある場合(ファイルをmmapしたなど)は再度データを読み込んだページを割り当てる。

・・・みたいな感じのことをmadvise(2)のmanを見るだけでユーザはちゃんと理解できるんだろうか、とか思わなくもない・・・

VMとFilesystem回りのパフォーマンスチューニングは難しくて、メモリをいっぱい使いたいんだけどOOM Killerが走るほどは使いたくない、みたいな微妙なラインをユーザランドも意識したい場合とか、ポリシー策定がめんどいよなぁ。とりあえず使いこなすのが難しいSyscall類などなど、mmap, munmap, msync, readahead, posix_fadvise, madvise, mprotect, mlock, mlockall 最終的な環境がわからずにこれら使ってチューニングするとたいていは逆に悪化するような気がする。

このアーカイブについて

このページには、2016年6月に書かれたブログ記事が新しい順に公開されています。

前のアーカイブは2016年5月です。

次のアーカイブは2016年7月です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。

月別 アーカイブ

ウェブページ

Powered by Movable Type 7.9.0