SDカードを完全に消去する必要があることがよくあります。
このプロセスを使用すると、速度が大幅に向上します。SDメモリーカードフォーマッタ。
残念ながら、このプログラムはLinuxでは利用できないようで、代替プログラム(dd
またはshred
)は時間がかかります。
AFAIK SD / MMCカードには一括削除のための特定のコマンドがあり、これが「SDメモリーカードフォーマッタ」が使用するものと疑われます(上書きを通じて内容を消去する代わりに)。
同じものを使うツールはありますか?
答え1
ブロック廃棄の使用
簡単に言うと:
blkdiscard /dev/mmcblk0
議論する
SDカード全体をすばやく消去するには、次のものを使用できます。blkdiscard
(8)注文する。これはLinux BLKDISCARD ioctlを呼び出し、それは順番にCMD38を渡します。SDメモリーカードフォーマッタ。
興味深い選択
-s
、--secure
ブロックを安全に廃棄します。他の場所で述べたように、通常のCMD38では、一部のブロックは空のように見えますが、ガベージコレクションのために他のブロックがはっきりと表示されます。-s
より安全でガベージコレクションブロックを強制的に削除したい場合に使用してください。-z
、--zero
捨てる代わりにブロックをゼロで埋めます。
USB経由で動作しない
この機能は私のラップトップとRaspberry Piでは動作しますが、USB SDカードリーダーでは機能しません。違いは、カーネルが下位レベルにアクセスする必要があることです。MMCUSBはこれを汎用の「一括ストレージ」デバイスに抽象化します。 [Microsoft Windowsにも同じ制限があると思いますが、私が間違っている場合はコメントで訂正してください。 ]
低レベルのSDカードと直接通信できるデバイスがない場合は、Arduinoを使用してデバイスを作成して実行できます。SDFormatter.ino。
非常に危険です!
blkdiscard
ルートとして実行する必要があるため、簡単にできます。破壊するあなたのすべてのデータ。正しいデバイスを指していることを確認して、もう一度確認することをお勧めします。lsblk
と を使用しますdf
。
マンページは、セキュリティ上の理由からドライブがまだマウントされていない場合にのみ機能することを示しています。これは優れたセキュリティ機能ですが、この記事を書いている時点ではそうではありません。現在の実装では、ドライブがすでにフォーマットされている場合はオプションが必要です。-f
これは--force
SDカードが事前フォーマットされているため(ほぼ)常にそうです。残念ながら、--force
手段を使ってみんな確認(ドライブを使用するかどうかを含む)が無効になります。
いつか、Linuxでroot権限なしでリムーバブルデバイスでblkdiscardを実行できるようになり、はるかに危険になる可能性があります。
その他の用途
プライバシー保護のためにデータをすばやく削除することに加えて、blkdiscard(SSDのfstrimに似ています)はウェアレベリングを改善し、一部のSDカードで通常、より速く実行。
答え2
最近のSDメモリーカードフォーマッタ(CLIバージョン)のためLinuxで利用可能(x86_64およびarm64の場合):
https://www.sdcard.org/downloads/sd-memory-card-formatter-for-linux/
しばらく前に、私はLinuxで(ツールチェーンの一部として)公式のSDメモリーカードフォーマッタを使用しなければならなかったので、SD協会にこれについて問い合わせるEメールを送信しました。彼らは反応が良くて役に立ちます。最近、彼らは現在、Linuxでフォーマッタを使用できるという電子メールを送信しました。
答え3
記者の要点を説明すると、次のようになります。 https://forum.armbian.com/topic/3776-the-partition-is-not-reised-to-full-sd-card-size/?do=findComment&comment=27413
シーザー
公開日:2017年3月13日
「予約されたセクタ」および過剰プロビジョニング関連:カードがnバイトの容量を必要とする場合、内部的により多くの容量があります。これは予約として機能します(コントローラが不良セクタを検出すると予約セクタがマッピングされます)、カードがいっぱいになったときに特定のレベルの書き込みパフォーマンスが可能になります。直接上書きできないフラッシュメディアでは、常に読み取り/削除/書き込みサイクルに時間がかかります。フラッシュセルが使用できる量は、設計されたプログラム/削除(P / E)サイクル数によって決まります。コントローラは、すべてのフラッシュセルが均等に磨耗するように(ウェアレベリング)それを処理する必要があります。
コントローラは、実際のデータを含むセクタとそうでないセクタを知らないので(SDカードはTRIMをサポートしていません。)カードを完全に一度埋める(すべてのスペースパーティション)これから、コントローラはすべてのセクタに有用なデータが含まれていると思います(同時にデータを削除してもTRIMサポートがないため、コントローラはデータを削除しません)。はい はい) 空であってもなくても、今後は全容量を使用したものとみなされます。これで、「予約されたセクタ」のみを使用して読み取り/削除/書き込みサイクルを実行できます。
SSDについて説明する記事を確認し、SDカードが10年前の不都合なSSDのように動作し、低速/生のコントローラを含み、TRIMをサポートしていないことを覚えておいてください。
注:これはSD Associationの「SD Formatter」の唯一の良いユースケースです。このツールは、SDカードを正しくフォーマットするために使用されます(「正しい」ファイルシステムが選択されている場合(FATまたはexFAT)パーティション)。次のステップはOSイメージを焼くことで、Armbianの観点からは確かに役に立ちません。パーティションテーブルの前に存在するファイルシステムが上書きされます。では、そもそもSDフォーマッタを使うのはなぜですか?これはERASE CMD38を実装しているためです。これは、カードの各セクタ/ブロックに実際のデータが含まれなくなり、空であると見なされる可能性があることをカードコントローラに通知します。 「一般」SDカードでは、非常に低いパフォーマンスを「工場デフォルト」のパフォーマンスに復元することもできます。ただし、最新のSDカードコントローラは、特に多くの予約済みセクタとペアになっている場合、あまり影響を受けません。
(...)
編集する: 「SD カードは TRIM をサポートしていません」に関する小さな注意事項です。 SDプロトコルはブロック削除コマンドを定義し、fstrimなどのツールがそのタスクを実行する必要があります。カーネルとSDカードの組み合わせがそれをサポートしているかどうかは、単純な「sudo fstrim -v /」で確認できます。これが望ましい効果をもたらすかどうかは別の質問です。 (これをテストするには、このトピックを参照してください。データセグメントを消去されたポイントとしてマークすると、上書きが含まれてはいけないため、十分なアプローチがあるかどうかはわかりません。SDカードのコントローラは、特定のセクタ/ページが「空」です。とマークされているので、摩耗レベルプールに追加できることを知っています。)
したがって、Linuxにはsdcard.org SDフォーマッタと同等の機能がなく、WindowsとMacでのみ使用できます。
fstrimまたはddは代替品ではありません。なぜ私たちがそのようなツールを見逃したのかわかりません。高度なオーバープロビジョニングと拡張コントローラを使用すると、長期的に大きな問題にならない可能性があります。 SD Formatterを作成したTuxeraに、Androidまたは一般的なLinuxバージョンをリリースする予定があるかどうか尋ねます。
答え4
SDカードはフォーマットする必要はありません。 「フォーマット」は、実際のデータのためにトラックとセクタが準備されるディスクの古い用語である。これは、ディスクによって定義されておらず、ディスクがフォーマットされたときにヘッドによって定義されます。したがって、フォーマットは非常に遅いです。
今、「フォーマット」はもはや遅いプロセスではなく、実際にフォーマットするのではありません。
通常、プログラムは1つのmkfs
スタイルのみを実行します。滞在、ファイルシステムの構造を作成するだけです。カードと内部コントローラは、データを保存する場所を定義しました。
残念ながら、ディスクに未使用のセクタがあることを示すコマンド(コントローラによって提供されたもの)が見つかりませんでした。これは役に立つかもしれませんが、いくつかかもしれませんmkfs
(カーネル側に隠されています)。ただし、実際の磁気ハードドライブを除いて不要な作業をしないでくださいdd
。 SD、SSDなどではデバイスが消費されるだけです。