![見出し画像](https://assets.st-note.com/production/uploads/images/118966883/rectangle_large_type_2_bb7eabcab4abd1b3dc4aa9a128ee7d29.jpeg?width=1200)
アリエクで自称2TBのUSBメモリを買ってみた
ほぼワンコインの安さだし、「本当に2TBだったよ!」というレビューもついているよ!
購入
アリエクことAliExpressでは様々な商品が出品されており、USBメモリも大量の出品がある。
この中から、今回は
十分安価である
(偽ブランドの心配がないよう) LenovoやXiaomiなどのロゴが入っていない
という条件で探し、以下の製品 (silver 2TB) を購入した。
値段は時間経過で変動するようだが、自分の購入時は556円 (送料無料) だった。
Estimated delivery は約2ヶ月後の日付になっていたが、注文から約1ヶ月で到着した。
以下のようなチャック付きの袋に入った状態で届いた。
![](https://assets.st-note.com/img/1697359789433-yoeWA1BJgs.jpg?width=1200)
中身は、以下のものが入っていた。
USBメモリ本体
キーチェーン
Micro USB Type-B (2.0) への変換アダプタ
USB Type-C への変換アダプタ
![](https://assets.st-note.com/img/1697359960312-zJtgxfzYSJ.jpg?width=1200)
USB Type-C のアダプタの USB Type-A 側は、青色が使われていたものの、USB 3.0 であるはずの追加端子が無いので USB 2.0 以下であることがわかる。
さらに、USBメモリ本体にも USB 3.0 用の追加端子は見当たらず、USB 2.0 以下のようである。
商品ページでは USB 3.0 と謳っていたので、この時点でインチキであることが確定する。
![](https://assets.st-note.com/img/1697360663566-oJNcCXfJl3.jpg?width=1200)
接続
今回のUSBメモリをパソコンに接続してみると、実際に約 1.89 TB のUSBメモリとして認識した。ファイルシステムは exFAT であった。
物理ディスクのセクタ数は 4,075,520,000 と認識され、これは約 1,943 GiB に相当する。
![](https://assets.st-note.com/img/1697361125201-lGlqMWLEYI.png)
速度の測定
CrystalDiskMark 8.0.4 を用いて、今回のUSBメモリの読み書きの速度を測定してみた。
今回の測定は、以下の環境で行った。
CPU:13th Gen Intel(R) Core(TM) i7-13700H 2.40GHz
RAM:32.0 GB
OS:Windows 11 Home 22H2
結果は、最大で読み込み約 29.9 MB/s、書き込み約 4.8 MB/s となった。
![](https://assets.st-note.com/img/1697362240435-DmSkb4YBDw.png)
比較のため、手元にあった I-O DATA の YUM2-8G/K の速度も測定してみた。
このUSBメモリは USB 3.0 での接続に対応している。
USB 3.0 で接続すると、最大で読み込み約 135.7 MB/s、書き込み約 17.4 MB/s となった。
![](https://assets.st-note.com/img/1697363723134-gDIw99l9EC.png)
USB 2.0 で接続すると、最大で読み込み約 42.7 MB/s、書き込み約 9.6 MB/s となった。
![](https://assets.st-note.com/img/1697364377782-2rGHI24vBU.png)
これと比較すると、今回のUSBメモリの読み書きの速度はあまり速くないことがわかる。
ただし、ランダムライトは、今回の比較対象と比べて約 50 倍と圧倒的に速い結果になった。
データを書き込んでみる
以下の Python 3 のプログラムを用意し、このUSBメモリに大容量のデータを書き込んでみた。
このプログラムは、ファイル内の位置を8バイトずつ書き込んでいくので、位置とデータを見ればデータが正しいかどうかがわかるようになっている。
import sys
import io
import os
import struct
import time
if len(sys.argv) != 2:
print("Usage: write-pos.py target-file")
sys.exit(1)
file = open(sys.argv[1], "ab")
file.seek(0, os.SEEK_END)
elementsInBlock = io.DEFAULT_BUFFER_SIZE // 8
reportInterval = 10
formatStr = "<" + str(elementsInBlock) + "Q"
prevTime = time.time()
bytesWritten = 0
while True:
data = struct.pack(formatStr, *[file.tell() + 8 * i for i in range(elementsInBlock)])
file.write(data)
bytesWritten += len(data)
currentTime = time.time()
delta = currentTime - prevTime
if delta >= reportInterval:
print(str(bytesWritten / 1024 / 1024 / delta) + " MiB / s")
bytesWritten = 0
prevTime = currentTime
file.flush()
このプログラムを Python 3.11.4 で実行した結果、約 18 時間で 0x2869EC4000 バイト (約 161.7 GiB) のデータを書き込むことができた。
実行を止め、バイナリエディタ HxD で中身を確認した。
すると、0xF3BFF8000 (約 60.9 GiB 地点) 以降のデータが 0xFF の連続に化けていた。
![](https://assets.st-note.com/img/1697363387755-1eDMNtzr3x.png?width=1200)
そして、0x2342DB7000 (約 141.0 GiB 地点) 以降から再び(正常な)位置のデータが現れた。
すなわち、最後の約 20 GiB のデータが正常であるということになる。
![](https://assets.st-note.com/img/1697364072001-iEFMRLiqd7.png?width=1200)
しかし、今回のUSBメモリーを一旦抜いて挿し直してみると、先ほどは正常だったデータも 0xFF の連続に化けてしまった。
そして、0x2869DD2000 (約 161.7 GiB 地点) 以降から再び(正常な)位置のデータが現れた。
すなわち、最後の 968 KiB のデータが正常であるということになる。
![](https://assets.st-note.com/img/1697364147832-W0F4lnLX5c.png?width=1200)
ファイルを書き込んだ直後は何らかのキャッシュが働いたために正常なデータを多めに取り出すことができ、一旦抜いて挿し直すとこのキャッシュが無効化されるために取り出せるデータが減ると推測できる。
物理ディスク上では、データが 0xFF の連続に化け始めた位置は 0xF400A0000 (約 61.0 GiB、127,927,552 セクタ目) からであった。
![](https://assets.st-note.com/img/1697365071754-OBKD1AsN6c.png?width=1200)
物理ディスクのファイルの最後に相当する部分では、スクロールの方向によって正常なデータが出たり 0xFF の連続が出たりと安定しない部分があった。
この実験後、さらに追加で 1 MiB のファイルを書き込んでみると、先に書き込んだ約 161.7 GiB のファイルの最後の部分が新たに書き込んだファイルの一部に化け、さらに新たに書き込んだファイルも一部が 0xFF の連続に化けていた。
よって、今回のUSBメモリは先頭の約 61 GiB の部分は普通にデータを保存でき、それを超える部分についてはキャッシュのような仕組みにより直近で書き込んだデータの一部を保持する仕組みになっていると推測できる。
速度の測定 再び
大きなデータを書き込んだ状態 (すなわち、テスト用のデータの読み書きがデータが保持されない領域で行われる状態) で、再び今回のUSBメモリの読み書きの速度を CrystalDiskMark 8.0.4 で測定してみた。
すると、最大で読み込み約 22.8 MB/s、書き込み約 20.1 MB/s となった。
![](https://assets.st-note.com/img/1697366634583-3h3pHJx5cb.png)
詳しく見ると、以下のようになっている。
シーケンシャルリードの速度は、データが保持される領域の約 75% と遅い
ランダムリードの速度は、データが保持される領域の約 110% と速い
ライトは、シーケンシャル・ランダムともにデータが保持される領域の約 5 倍と速い
ただし、測定用の一時ファイルが格納されるディレクトリもデータが保持されない領域に置かれるため、測定が正常に行われている保証はできない。
さらに、先ほどのファイルを書き込むプログラムの
print(str(bytesWritten / 1024 / 1024 / delta) + " MiB / s")
の部分を
print(
str(file.tell()) +
"\t" + str(file.tell() / 1024 / 1024 / 1024) + " GiB\t" +
str(bytesWritten / 1024 / 1024 / delta) + " MiB / s"
)
に変更し、出力される書き込み速度がファイル内のどの位置に対応しているのかがわかるようにした。
一旦今回のUSBメモリに保存したファイルを削除し、再びこのプログラムで約 130 GiB のデータを書き込むと、位置と書き込み速度の関係は以下のようになった。
![](https://assets.st-note.com/img/1697369198316-oMnAvYqg6Y.png?width=1200)
約 61 GiB より手前の部分では、書き込み速度の分散が大きくなっている。
一方、約 61 GiB より後の部分では、書き込み速度の分散が小さくなり、平均速度は前半より下がっている。
このことから、約 61 GiB 地点の手前と後で行われる処理が変わっていそうであることが読み取れる。
結論
今回のUSBメモリは、以下のような性質を持っていることがわかった。
商品ページには USB 3.0 とあるが、実際は USB 2.0 である
USB 3.0 ではあるはずの端子が無いため、USB 3.0 ではない
転送速度が 12Mbps を超えているので、USB 1.1 ではない
約 2TB (2*10^12 バイト) 分のセクタ数が認識されるが、データを保存できるのは先頭の約 61 GiB 分のみ
読み込み速度・書き込み速度ともに、特に速いとはいえない
まったくのゴミではなく、以下の条件であれば利用できる可能性がある。
パーティションの設定を変更し、先頭のデータを保存できる部分のみを使用するようにする
テスト用やデータを受け渡すために一時的に書き込む用などの用途にとどめ、大事なデータを長期間保存しようとしない
とはいえ、先頭の部分についても、書き込み可能年数や耐久性などの性能は不明であり、保証はできない。
今回のUSBメモリは約 64 GB 相当のようであったが、執筆時点で国内の大手家電量販店では同じ 64 GB の製品が 1,000 円前後で売られており、これらには USB 3.0 対応の製品も含まれる。
よって、これらより若干安いとはいえ、わざわざこのUSBメモリを購入・使用するのはオススメできない。
値段への価値観・想定する用途・リスクの許容度などに応じて、全く購入してはいけないとまではいえないだろう。
この記事が気に入ったらサポートをしてみませんか?