【Mac】『badblocks』でUSBメモリのテストをする

◆2019.01.16追記

「USBメモリ」に代表されるフラッシュストレージ、
たまに不良品があるんですよね。
フラッシュストレージに限った事ではなく、これらの補助記憶装置、
使ってみなきゃわからないとは言え、ちょっと怖いですよね。
全体に影響する「回路」の不良なら、
使い始め一発目で判る事もあると思いますが、
部分単位(セルやセクタなど)での不良だった場合はどうなるんでしょうね。
それと、
使い始め一発目は正常でも、
使っている内に何日もしない内に壊れる事もあります。

つまり、
ある程度使って、正常に使える事を確認した上で、使いたい。とか
一通り、全ての領域に一回書き込みをしてみたい。とかいう
衝動に駆られる事があると思います。
そこで今回は、
「USBメモリ」の書き込みテストをMacで実施してみました。

<方法論>

「USBメモリ」などの補助記憶装置を検査する方法は幾つかあります。
大きく三通りに分けられます。

  1. 端から端まで全ての領域に書き込み、それを読み出し、
    元のデータと比較し一致するか確認する。
    • 【デメリット】
      • この類の検査は、対象となる補助記憶装置の総容量に比例し、大容量のものになると膨大な所要時間を要する。
      • 一度書き込み読み出しを行なうため、僅かではあるが耐用使用回数を全体的に消費する。
    • 【メリット】
      • 全ての記憶領域全体の検査ができるため、最も信頼度が高い。
  2. 端から端まで全ての領域に書き込み、それを読み出すが、
    元のデータと比較せず、読み取りエラーだけを検出する。
    • 【デメリット】
      • この類の検査は、対象となる補助記憶装置の総容量に比例し、大容量のものになると大きな所要時間を要する(a.ほどではない)。
      • 一度書き込み読み出しを行なうため、僅かではあるが耐用使用回数を全体的に消費する。
    • 【メリット】
      • 全ての記憶領域全体の検査ができるため、信頼度が高い(a.よりは低い)。
      • 元のデータと比較する処理を省く分だけ、僅かに所要時間が短くて済む。
        「書き込みエラーと読み取りエラーが発生していなければ、データは正しい筈だ」という考え方の人にはお勧め。
  3. 端から端まで全ての領域を読み出すが、書き込みは一切せず、
    読み取りエラーだけを検出する。
    • 【デメリット】
      • この類の検査は、対象となる補助記憶装置の総容量に比例し、大容量のものになるとその分、所要時間を要する(a.やb.ほどではない)。
    • 【メリット】
      • 全ての記憶領域全体の検査ができるため、信頼度がさほど低くはない(a.やb.よりは低い)。
      • 書き込みする処理と元のデータと比較する処理を省く分だけ、所要時間が短くて済む。
        「読み取りエラーさえ発生していなければ、正常な筈だ」という考え方の人にはお勧め。
  4. 一部の領域に範囲を絞って検査を行う。
    更に、a.〜c.のように書き込み・読み出し・比較一致の検査をそれぞれするかしないかの違いがある。
    • 【デメリット】
      • 全ての記憶領域全体の検査をしないため、信頼度がさほど高くない(全くしないよりはマシ)。
      • 読み取りエラーだけを検出し、書き込みを行わない検査では、信頼性はほぼ無いに等しい(それでも全くしないよりは微妙にマシ)。
    • 【メリット】
      • この類の検査は、対象となる補助記憶装置の総容量に比例せず、大容量のものでも、限られた所要時間で完了する。
      • 「一部の検査だけすれば充分だ」という考え方の人にはお勧め。

私の性分からすると選びたいのはひとつですね。
というわけで、ここではa.の
全領域・書き込み・読み出し・比較一致の検査の例を記事にします。

<『badblocks』を使う>

色々と調べてみたのですが、
有料ソフトでは幾つかあるようですが、
無料の範囲で先のa.の
全領域・書き込み・読み出し・比較一致の検査をしようと考えると、
近年のMacでは『badblocks』による方法しかないようです。

この『badblocks』とは何かというと、
ソフトウェアやアプリというよりは「コマンド」に類するものです。
使うには、ちょっとした手順が必要になります。

  1. 「MacPorts」をインストールする。
    (それ以外に利用する方法もあるかもしれない)
    ※既にインストール済みの人は、再インストールする必要はないのでこの節は飛ばして下さい。
    インストールやアップデートには、
    管理者権限のアカウントでのログインが
    必要になります(貴方が管理者権限では無い場合はシステム管理者に相談して下さい)。
    1. 「MacPorts」が入っているかどうか判らない場合は、
      まず、その確認からですね。
      確認の方法は幾つかあると思いますが、
      どうせならバージョンチェックでやりましょう。
      (インターネットに接続されている必要がある)
    2. ユーティリフォルダにある標準アプリの「ターミナル」を開きます。
    3. コマンドプロンプトのウインドウが開きますから、
      「$」の後に次のコマンドを入力して
      [return]キーを押して実行して下さい。

      $

      1. すると、何かしらの表示があると思います。
        Version: 2.4.2
        □□□□□:~ ○○○$
        (「2.4.2」の部分はインストールされているバージョン番号、「□□□□□」の部分は貴方のMacのローカルホスト名、「○○○」の部分はアカウント名になります)
        とだけ表示されれば、
        「MacPorts」は既にインストールされています。

      2. もし、
        Warning: port definitions are more than two weeks old, consider updating them by running 'port selfupdate'.
        Version: 2.4.2
        □□□□□:~ ○○○$
        (「two weeks」の部分は期間により異なる)
        などと表示されたら、
        「MacPorts」は既にインストールされているものの、
        しばらくアップデートの確認を
        していないという警告ですから、
        ついでにアップデートもしてしまいましょう。
        (端折っても構わないが)
        「ターミナル」で次のコマンドを入力して
        [return]キーを押して実行して下さい。

        $

        Password:
        とパスワードを求められますから
        現在ログインしているアカウントのパスワードを
        入力して[return]キーを押して下さい。
        数十秒から数分で処理が完了します。
        メッセージが幾つか表示された後、
        「$」が表示されたら次に進みます。

      3. 前出のバージョンチェックのコマンドを実行して
        「MacPorts」がインストールされていなかった場合、
        次の様に表示される筈です。
        -bash: port: command not found
        □□□□□:~ ○○○$
        この場合、次の手順で「MacPorts」をインストールします。
    4. 「MacPorts」をインストールする為には、
      先に「Xcode」をインストールする必要があります。
      https://developer.apple.com/jp/xcode/」から、
      「Xcode」をダウンロードします。
      OSに合わせたバージョンをダウンロードし、
      インストールしてください。
      どのバージョンかわからない方は
      「Xcode」の要求するシステム条件』を参考にして下さい。
      インストールできたら、
      一旦、「Xcoede」を起動しておきます(一度起動して[Agree]すれば終了してOK、一度も起動していないと、その後のインストールが上手く行かない)。
    5. https://www.macports.org/」から、
      右上の「Download」をクリック。
      すると英文の説明が出ます。
      その文章内の、貴方のMacのOS名をクリックして
      「MacPorts」をダウンロードし、インストールして下さい。
      (上部と中部の二箇所にリンクがあるが、ひとつだけでよい)
      OSのバージョンと名称の関係が分からない場合は
      https://ja.wikipedia.org/wiki/MacOS」を参照してください。
  2. 次に、「e2fsprogs」をインストールします。
    (『badblocks』は「e2fsprogs」パッケージの一部で、これをインストールする為に先の「MacPorts」が要る)
    1. 「ターミナル」から次のコマンドを実行します。

      $

      Password:
      とパスワードを求められますから
      現在ログインしているアカウントのパスワードを
      入力して[return]キーを押して下さい。
      すると、
      怒涛のようにメッセージが表示されて流れていきますので
      ちょっと驚くかもしれませんが、
      そのままで数十秒から数分で処理が完了します。
      「$」が表示されたら次に進みます。
    2. 「ターミナル」から次のコマンドを実行します。

      $

      badblocks: illegal option -- -
      Usage: badblocks [-b block_size] [-i input_file] [-o output_file] [-svwnfBX]
             [-c blocks_at_once] [-d delay_factor_between_reads] [-e max_bad_blocks]
             [-p num_passes] [-t test_pattern [-t test_pattern [...]]]
             device [last_block [first_block]]
      □□□□□:~ ○○○$
      という具合に、
      『badblocks』コマンド・オプションの概略が
      表示されればOKです。
      これで、『badblocks』コマンドを使う準備ができました。
      (表示されない場合は、どこかの手順が抜けていると思いますので、最初から見直してみて下さい)
  3. ここからやっと、実際の操作になります。
    1. 検査したい対象のUSBメモリなどを接続します。
      これより先は、「破壊検査」を前提にしていますので、
      対象のUSBメモリなどの中に
      消えて困るデータなどが無いか良く確認して下さい。

      必要であれば、内容の複製・移動などをして下さい。
      「破壊検査」とは、
      中身のデータを書き換えてしまう検査になります。
      (使い物にならなくするわけではない、初期化すると考えて良い)
    2. まず、ボリューム名とデバイス名を確認します。
      Macにマウントされない状態であれば、
      先にユーティリフォルダにある標準アプリの
      「ディスクユーティリティ」で初期化して下さい。
      (既に分かっている場合は読み飛ばして下さい)
      「ターミナル」から次のコマンドを実行します。

      $

      /dev/disk3
         #: TYPE NAME SIZE IDENTIFIER
         0: FDisk_partition_scheme *8.1 GB disk3
         1: Windows_NTFS test_usb 8.1 GB disk3s1
      という様に表示される筈です。
      (上の例では「disk3」以外を省略しているがドライブの数だけ羅列する)
      上の例での「test_usb」の部分に
      貴方のボリューム名が表示されています。
      (パーティションを分けていれば複数行表示される)
      上の例での「disk3」の部分に
      貴方のデバイス名が表示されています。
      この例での「disk3」などと表示されている番号が重要になりますから、
      心配ならメモっておくとか、コピペしておくとかして下さい。
      (デバイス名を取り違えないように細心の注意を払って下さい)
    3. 対象のボリュームをアンマウントします。
      (「ディスクユーティリティー」からでも良いが「取り出し」ではなく「アンマウント」である事に注意)
      「ターミナル」からやる場合は、
      下記のコマンドを実行しますが、
      「test_usb」の部分を
      貴方のボリューム名に置き換えてください。
      (名称未設定の場合は「NO\ NAME」になる、ボリューム名に半角空白が含まれている場合はその直前に「\」を挿入するか、ボリューム名全体をダブルクォーテーション「”」で囲む)

      $

      Volume test on disk3s1
      □□□□□:~ ○○○$
      正常にアンマウントできれば、上記の様な表示が出る筈です。
      (対象と関係ないボリュームはそのままでも良い)
    4. いよいよ、「badblocks」コマンドの実行です。
      デバイスの番号を間違わない様に慎重に入力して下さい。
      (間違えると対象にしたドライブの内容は全て失われてしまいます)
      「diskX」の部分を対象のデバイスの番号に置き換えて、
      下記のコマンドを実行します。
      (オプションの「-w」が破壊検査を意味しています、オプションの組み合わせ次第では非破壊検査もできますが、ここでは割愛します)

      $

      Password:
      とパスワードを求められますから
      現在ログインしているアカウントのパスワードを
      入力して[return]キーを押して下さい。
      すると、
      Testing with pattern 0xaa:   0.05% done, 0:06 elapsed. (0/0/0 errors)
      という様な表示が出て処理が始まります。
      上記の例では「0.05%」となっている部分が進捗具合です。
      進捗は、全体からの割合ではなく、
      各パターン(0xaa、0x55、0xff、0x00、の4種類×2)ごとの
      割合になります。
      続いて、読み取り・比較一致の処理が始まります。
      Testing with pattern 0xaa: done
      Reading and comparing: 62.31% done, 33:38 elapsed. (0/0/0 errors)
      各パターン全ての処理が終わると、
      Testing with pattern 0xaa: done
      Reading and comparing: done
      Testing with pattern 0x55: done
      Reading and comparing: done
      Testing with pattern 0xff: done
      Reading and comparing: done
      Testing with pattern 0x00: done
      Reading and comparing: done
      □□□□□:~ ○○○$
      と表示されます。
      8行ともエラーなく「done」と表示されれば、異状なしです。
      書き込み・読み出し・比較一致の検査ができました。
    5. 検査は完了しましたが、そのままでは再マウントできません。
      理由は「破壊検査」により、
      パーティションマップなどの管理情報も消してしまったからです。
      つまり、
      全くフォーマットされていない状態になっていますから、
      再度、フォーマットしてやる必要があります。
      やり方は、いつも通りに
      ユーティリティフォルダにある標準アプリの
      「ディスクユーティリティ」で初期化か
      パーティションを適用するだけです。

  4. エラーが発生した場合は
    • エラーが発生すると、以下のような表示になります。
      Testing with pattern 0xaa: done                                                 
      Reading and comparing: done                                                 
      Testing with pattern 0x55: done                                                 
      Reading and comparing: 4473056 done, 2:24:26 elapsed. (0/0/0 errors)
      4473057
      4473058
      4473059
      4473060
      4473061
      4473062
      4473063
      4473064
      4473065
      4473066
      4473067
      4473068
      4473069
      4473070
      4473071
      4473072
      4473073
      4473074
      4473075
      done                                                 
      Testing with pattern 0xff: done                                                 
      Reading and comparing: done                                                 
      Testing with pattern 0x00: done                                                 
      Reading and comparing: done
      □□□□□:~ ○○○$
      この例では、20個ほどのエラーが発生しました。
    • エラーが少ない場合、もう一度初期化し直して、
      「badblocks」コマンドを実行し直すと、解消される場合があります。
      心配なら、二度三度と繰り返してみて下さい。
    • 何回やってもエラーが出る。或いは
      大量のエラーを吐き出して、初期化もできなくなった場合は、
      保証期間内なら交換に応じてくれると思いますので
      ショップかメーカーに相談しましょう。
    • ちなみに。
      • メーカーの「(株)グリーンハウス」は、送料往復ともメーカー負担で交換して頂きました。
        良心的で、有難いですね。余所もそうあって欲しいものです。
      • (株)アーキサイトの「SUPER★TALENT」は、送料片道ユーザー負担でした。(復路は元払いで請求されませんでした)
      • ショップの「あきばお〜」は、送料は往復ともユーザ負担です。

<ご注意>

  • この記事通りに検査して異常がなかったからと言っても、
    すぐに故障しない事が保証されるわけではありません。
    普段から、重要なデータなどはバックアップをしましょう。
  • この記事に書かれている内容について、筆者は何の責任も負いません。
    ご利用・実施は、自己責任でお願いします。

お気に召しましたら、一票(ワンクリック)下さい。ランキングに参加しておりますゆえ。


人気ブログランキング

Macランキング