虎之助の徒然記

クローンディスクの作り方 (1) Linuxの場合

【概要】
 Linuxを用いたクローンディスクの作り方について説明します。ディスククローンには、dd、gdisk、gpartedの3つのコマンドを用います。それぞれの使い方や注意事項についてまとめます。

1. はじめに

 容量拡大のためにディスクのクローンを作成したり、SSD換装のために容量が小さなクローンディスクを作成したい場合があります。本稿では、これらをLinuxを用いて実現する方法について説明します。

2. クローンディスクの作成

 クローンディスクの作成には、主に次の3つのケースがあります。

  • ミラーリング:ディスクパーティションの大きさを変更せずにコピーする。
  • 拡張:サイズが大きなディスクに移し替える。
  • 縮小:サイズが小さなディスクに移し替える。

 それぞれのケースのクローンの作成について説明します。

 記事では、次のデバイス名を使っています。

  • /dev/sdS:オリジナルのディスク
  • /dev/sdT:クローン化するターゲットディスク
  • /dev/sdW:作業用のディスク

 マシン環境に合わせて、適宜、/dev/sdbや/dev/sdcと読み替えてください。

 なお、この記事は、パーティションテーブルは GPT (GUID Partion Table) で作成されていることを前提としてます。

3. 事前準備

3.1 必要なツールのインストール

3.1.1 dd、gdisk、gparted、ntfs-3gなど

$ apt install gdisk gparted ntfs-3g coreutils

 実際に、検証を行った Linux は Ubuntu18.04 です。aptを使う Debian 系のOSであれば、ほとんど同じパッケージ名でインストールできると思います。

 また、dd や shred が入っている coreutils はインストール済のはずですので通常は指定不要です。gdisk、ntfs-3g、gpartedなども、他のパッケージと同時にインストールされる場合があります。

3.1.2 gnome-disks

 必須ではありませんが、gnome-disk-utilityパッケージの中の gnome-disks もパーティションや SMART の情報などを見ることができて、ディスク管理に便利なコマンドです。

$ apt install gnome-disk-utility

3.1.3 parted

 partedでもパーティションテーブルを編集できますが、基本的には用いません。但し、パーティションテーブルの種類を調べるには、gdisk よりも parted の方が分かりやすいです。

$ apt install parted

 例えば、次のオプションでパーティションの種類を確認できます。

$ parted -l

あるいは

$ fdisk -l

「Partition Table」が「gpt」であれば GPT(GUIDパーティションテーブル)、「msdos」であれば MBR(マスターブートレコード)です。

 Windowsの場合、「ディスクの管理」 からディスクのプロパティを開き、「ボリューム」タブの「パーティションのスタイル」が「GUIDパーティションテーブル(GPT)」であることを確認します。MBRの場合には「マスターブートレコード(MBR)」と表示されます。

3.1.4 sudo について

 パッケージのインストールはroot権限が必要なので、sudo apt .... と sudo をつけて実行するか、rootにログインして実行します。ubuntu 系のOSではデフォールトではrootにはログインできないようになっているので、sudo を使うことが一般的です。

3.2 Windowsのシャットダウン

  • Windowsのディスクは、完全シャットダウンを行うこと*1

 完全シャットダウンをしていないntfsパーティションをLinuxではリサイズを行うことはできません。マウントもリードオンリーです。

 Windowsシステムが入ったディスクでも、外付けディスクとして別のWindowsマシンに接続して、完全シャットダウンしても大丈夫です。

3.3 ディスクの初期化

 今回の方法は、簡単な方法ですが、ある意味、乱暴な方法です。なぜなら、ディスクの末尾のパーティションテーブルを正しく取り扱っていません。

 ディスクに残った以前のGPTテーブルが悪さをするかもしれません。このため、ターゲットディスク・作業用ディスクを完全に初期化しておいた方が安心です(たぶん、不必要とは思いますが、ディスクを使いまわすときの習慣でいつもshredしているので、念のため書いておきます)。

$ shred -v -z -n 0 /dev/sdT /dev/sdW

 このコマンドで、ディスクの全セクタを0値に初期化します(非常に時間がかかります。2TBで丸一日ぐらい)。

3.4 本稿検証のためのデータの作成

 本稿で用いた方法は、loopデバイスを用いて検証しています。この検証のためのデータは、次のように作成しています。

  • 予め0値で埋まったファイルを作成し、loopデバイスと紐づけする。
     loopデバイスの使い方は、以前の記事
  • ファイルサイズは、以下の通り(1 MiB=1024x1024 bytes)。
    • sdS, sdW:100MiB
    • sdT1:80MiB
    • sdT2:100MiB
    • sdT3:120MiB
  • sdSのファイルシステムとパーティションサイズ:
    • part1:FAT16(30MiB)
      • FAT16としたのは、容量が小さすぎて、FAT32では作成できなかったため。
    • part2:NTFS(30MiB)
    • part3:ext4(30MiB)
    • 未割り当て(10MiB)
  • sdSに収めるデータ。
     ファイルがある領域とない領域が交互に現れるようにファイルを作成。
    • ① 未使用領域と同じサイズの乱数を書き込んだファイルを作成、直ぐに削除する。
      $ dd if=/dev/zero of=tmpfile ; shred -v -n 1 tmpfile ; rm tmpfile
      
    • ② 異なる乱数の1MiBのファイルで、ファイルシステムを満たす。
    • ③ 1, 3, 5,..., 17, 19番目の 10個のファイルの(10MiB)を残し、それ以外は削除する。

4. ミラーリングする場合

 パーティションサイズを変更せず、そのままの構成を保つ場合です。

4.1 同一サイズのディスクへコピーする場合

 オリジナルのディスクと全く同一のセクター数を持つディスクを使う場合です。

① ターゲットディスクへのコピー

 ddコマンドを用いてディスクをコピーします。これで終了です。

$ dd if=/dev/sdS of=/dev/sdT

 但し、例えば、同じ1TBのディスクといっても、セクタ数が同じとは限りません(違うと思っていた方がよいです)。

 同じブランド、同じ型番の商品を同時期に購入すれば、一致する可能性は高いですが、それでも、異なることがあるかもしれません。

4.2 大きなディスクへコピーする場合

 オリジナルのディスクよりも大きいセクター数を持つディスクへコピーする場合です。余分なセクタは使用せず、未割り当てのままとします。

① ターゲットディスクへのコピー

$ dd if=/dev/sdS of=/dev/sdT

② ターゲットディスクのGPTテーブルの修正

 GPTテーブルでは、第2GPTテーブル(バックアップGPTテーブルともいう。内容は第1GPTテーブルと同一)がディスク末尾のセクタに配置されなければなりません。そのため、ddでコピーしたそのままの状態では ターゲットディスク は、GPTテーブルの仕様に準拠しません。

● この状態で、gnome-disksでディスクを見ると、余分なセクタ部分が見えない状態となっています。余分なセクタ部分を未割り当てのままとして使用しないのなら、修正する必要はないのかもしれません。
● gpartedでは、GPTテーブルの位置不正を自動的に検知します。また、修正することも可能です。

 この問題を修正するために、gdiskを用いて、次のように第2GPTテーブルをディスク末尾に移動させます。

$ gdisk /dev/sdT 
Command (? for help): b              (GPTテーブルのバックアップを作成)
Enter backup filename to save: gpt-backup.dat 
Command (? for help): x              (Expertメニューに入る)
Expert command (? for help):  e      (第2GPTテーブルをディスク末尾に移動)
Expert command (? for help):  w      (変更したテーブルをディスクに書き込む)
$ partprobe /dev/sdT

 gdsikでは、GPTテーブルを新規に作り直したり、パーティションを作成・削除できます。しかし、これらの操作を行ってはなりません。なぜなら、これらの操作は、ディスクやパーティションにつけられたGUID/UUIDを変更してしまうからです。

 GUID/UUIDを変更すると、ディスク内のシステムがGUID/UUIDを参照していれば、問題が発生する可能性があります。例えば、Linuxでは、 /etc/fstab のディスクマウント定義でUUIDを用いることがあります。この場合、UUIDを変更すれば、対象のパーティションはマウントされなくなります。

 また、起動に関連するファイルシステムは、リサイズ・移動をしない方がよいでしょう。Linuxの場合、grubが起動イメージの配置をセクタで管理しています。パーティションをリサイズ・移動した場合には、起動イメージの配置されるセクタが変更される可能性があります。この場合、(LiveUSBなどを使って)grub コンフィギュレーションを修正します。

gdiskの使用上の注意事項

  • 作業の最初に、必ず、GPTテーブルのバックアップを取ること。
  • こまめに "p"(テーブルの表示)、"v"(検証)を行い、状況を把握すること。
  • オリジナルディスクとターゲットディスクのパーティションの一致を確認すること。
  • コマンドw(GPTテーブルをディスクへ書込んで終了)は、慎重に。
  • パーティション変更後は、partprobeを実行すること。

5. ディスクを拡張する場合

 サイズが大きなディスクに移し替える場合です。この場合、GPTテーブルの修正に加えて、パーティションの移動・拡大を行う必要があります。

① ターゲットディスクへのコピー

$ dd if=/dev/sdS of=/dev/sdT

② ターゲットディスクのGPTテーブルの修正

 ミラーリングの場合と同様に、gdiskで第2GPTテーブルをディスク末尾に配置します。

$ gdisk /dev/sdT 
Command (? for help): x              (Expertメニューに入る)
Expert command (? for help):  e      (第2GPTテーブルをディスク末尾に移動)
Expert command (? for help):  w      (変更したテーブルをディスクに書き込む)
$ partprobe /dev/sdT

③ ターゲットディスクのパーティションの拡大

 gpartedを用いて、パーティションの拡大を行います。

 今回は、それぞれ30MiBのfat16、ntfs、ext4のパーティションサイズを10MiB増加させて、40MiBにします。

  • gpartedを起動する
$ gparted /dev/sdT 
f:id:toranosuke_blog:20180912175236p:plain
当初のパーティション構成。ターゲットのデバイス名は/dev/loop1。

  • ディスクの末尾側のパーティション(/dev/loop1p3)をリサイズ・移動を指定する。

 「パーティション(P)」→「リサイズ/移動(R)」を選択し、前後の空き領域やサイズを指定し、「リサイズ/移動」をクリックする。

f:id:toranosuke_blog:20180912181845p:plain
前後の空き領域・サイズを指定する。

f:id:toranosuke_blog:20180912182253p:plain:w400
ブートに失敗するかもね、と警告される。

f:id:toranosuke_blog:20180912182807p:plain

 前方に19MB、後方に1MBの空き領域ができ、サイズも19MBとなる。これは、2048セクタ(=2048x512=1MiB)単位のアライメント調整を行っているため *2。リサイズパラメータの指定画面で「位置合わせ」を「なし」とすると、後方の空き領域をなくすことができる。

  • 同様に、ntfs、fat16の領域もリサイズ・移動の指定を行う。
f:id:toranosuke_blog:20180912184231p:plain

 パーティション間に隙間ができてしまった。ちゃんとリサイズ・アライメントすれば、パーティション間には隙間はできないはずだが、なぜか今回は隙間ができた。

f:id:toranosuke_blog:20180912190535p:plain
アライメント調整をなしにして、隙間を埋めた。

  • リサイズ・移動を実行する。

 「編集(E)」→「保留中の全ての操作を適用する(A)」をクリックして、リサイズ・縮小処理を実行します。

  今回の設定での検証実験では、ext4のパーティションの拡大に失敗し、エラーが発生しています。

f:id:toranosuke_blog:20180912203929p:plain:w300
エラーを知らせるポップアップ。

f:id:toranosuke_blog:20180912203935p:plain:w400
末尾のパーティションext4の拡大でエラーが発生。

 末尾のパーティション(ext4)の拡大に失敗していますが、それ以外は問題ありません。この失敗も、パーティションの拡大がディスク末尾の第2GPTテーブルを上書きする不正な要求だったためです。エラー判定されますが、チェック段階で不正と判定されているため、最後の処理は実行されていません。
  • 拡大後のパーティション構成

 最初のパーティション(fat16)と最後のパーティション(ext4)が1MiB足りず、計2MiB足りませんが、それぞれ、第1GPTテーブル、第2GPTテーブルが配置されている領域にはパーティションが拡張できないためです。

f:id:toranosuke_blog:20180912210716p:plain
リサイズ・移動後の最終的なパーティション構成。

  • 拡大前後のパーティション構成の詳細

 パーティションの拡大前後におけるgdiskのパーティション情報は、以下の通りです。

(拡大する前)
Number  Start (sector)    End (sector)  Size       Code  Name
   1            2048           63487   30.0 MiB    0700  Microsoft basic data
   2           63488          124927   30.0 MiB    0700  Microsoft basic data
   3          124928          186367   30.0 MiB    8300  Linux filesystem

(拡大した後)
Number  Start (sector)    End (sector)  Size       Code  Name
   1            2048           81919   39.0 MiB    0700  Microsoft basic data
   2           81920          163839   40.0 MiB    0700  Microsoft basic data
   3          163840          243711   39.0 MiB    8300  Linux filesystem
  • ディスク内容の確認

 ディスクの内容を確認します。今回は、それぞれのパーティションに入れた10個のファイル(乱数を書き込んだ1MiBのファイル)について、cmpやdiffコマンドを用いてバイナリーレベルで一致を確認しました。

6. ディスクを縮小する場合

 サイズが小さなディスクに移し替える場合です。

 オリジナルディスクの使用量は、ターゲットディスクよりも小さくなければならないことは言うまでもありませんが、ディスクパーティションも小さくしておく必要があります。

 このディスクパーティションの縮小には、初めにオリジナルディスクで行う場合と作業ディスクで行う場合とがあります。

 前者であれば、作業ディスクは不要です。

6.1 オリジナルディスクのパーティションを縮小する場合

 作業の開始前に、必ずオリジナルディスクのバックアップを取っておきます。

① オリジナルディスクのパーティションの縮小・移動

 ディスク拡大の場合と同様に、gpartedを用いてパーティションを縮小します。

 ここでは、それぞれのパーティションを20MiBに縮小し計80MiBにしようと思いましたが、gpartedはfat16の縮小には対応してなかったので*3、ntfs、ext4のパーティションのみを20MBに縮小します。なお、fat32であれば、縮小にも対応しています。

$ gparted /dev/sdS
f:id:toranosuke_blog:20180913125553p:plain
縮小後のオリジナルディスクのパーティション。

注意事項:  第2GPTテーブルをディスク末尾に配置しますので、ターゲットディスクの末尾に少なくとも1MiBの未割り当ての領域を確保しておく必要があります。

Windowsの場合
 Windowsの機能を用いて、パーティションのリサイズができます。

● 「アプリ」→「Windows管理ツール」→「コンピュータの管理」→「記憶域」→「ディスクの管理」

 具体的な操作方法は、例えば、次の記事に解説があります。

[FAQ番号:027519]Cドライブのサイズを変更(拡張/縮小)する方法(Windows 7 / Windows 8 / Windows 8.1)|FAQ Search|エプソンダイレクト

 実際には、「ディスクの管理」では、空きがあるにも関わらず、縮小できない場合があるようです*4

② ターゲットディスクへのコピー

 オリジナルディスクをターゲットディスクへコピーします。

$ dd if=/dev/sdS of=/dev/sdT
dd: writing to '/dev/sdT': No space left on device
163841+0 records in
163840+0 records out
83886080 bytes (84 MB, 80 MiB) copied, 3.93326 s, 21.3 MB/s

 ターゲットディスクよりも大きい部分のデータはコピーされません。ターゲットディスクが小さくて入りきらかなかったので、"No space left on device" のメッセージとともに、ddは終了します。

③ ターゲットディスクのGPTテーブルの修正

 ミラーリングの場合と同様に、gdiskで第2GPTテーブルをディスク末尾に配置します。

$ gdisk /dev/sdT
Command (? for help): x              (Expertメニューに入る)
Expert command (? for help):  e      (第2GPTテーブルをディスク末尾に移動)
Expert command (? for help):  w      (変更したテーブルをディスクに書き込む)
$ partprobe /dev/sdT

 これは、前述したgdiskによるGPTテーブルの末尾への移動の場合と同じコマンドです。しかし、今回は、第2GPTテーブルが存在しないため、ディスク末尾に新たに第2GPTテーブルが作成されます。

 また、gdiskコマンド実行中に、ディスクサイズが小さい、第2GPTテーブルが破壊されている等の警告メッセージが現れます。

f:id:toranosuke_blog:20180913140904p:plain
クローンでの最終的なパーティション構成。この例では、80MiBのディスクへ縮小。

④ ディスク内容の確認

 mountを行い、オリジナルディスクの内容とターゲットディスクの内容が一致するか、例えば、cmpコマンドやdiffコマンドを用いて確認します。

6.2 作業ディスクでパーティションを縮小する場合

 オリジナルディスクを作業ディスクにコピー後、作業ディスクのパーティションを縮小、ターゲットディスクに書き込みます。

① 作業ディスクへのコピー

 オリジナルディスクを作業ディスクにコピーします。

$ dd if=/dev/sdS of=/dev/sdW

② 作業ディスクのGPTテーブルの修正

 gdiskを用いて作業ディスクの第2GPTテーブルをディスク末尾に配置します。

$ gdisk /dev/sdW
Command (? for help): x              (Expertメニューに入る)
Expert command (? for help):  e      (第2GPTテーブルをディスク末尾に移動)
Expert command (? for help):  w      (変更したテーブルをディスクに書き込む)
$ partprobe /dev/sdW

③ 作業ディスクのパーティションの縮小・移動

 gpartedを用いて前述と同様に作業ディスクのパーティションを縮小・移動します。

 ターゲットディスクの末尾に少なくとも1MiBの未割り当ての領域できるように作業ディスクの末尾の未割り当て領域を調整します。

gparted /dev/sdW

④ 作業ディスクの内容をターゲットディスクにコピー

ddによって作業ディスクの内容をターゲットディスクにコピーします。

$ dd if=/dev/sdW of=/dev/sdT

 作業ディスクよりもターゲットディスクの容量が小さいので、警告メッセージがでますが、意図通りの動作です。

⑤ ターゲットディスクのGPTテーブルの修正

 gdiskでコマンドeを実行すると、ディスク末尾に第2GPTテーブルが新規に作成されます。

$ gdisk /dev/sdT
Command (? for help): x              (Expertメニューに入る)
Expert command (? for help):  e      (第2GPTテーブルをディスク末尾に移動)
Expert command (? for help):  w      (変更したテーブルをディスクに書き込む)
$ partprobe /dev/sdT

⑥ ディスク内容の確認

 mountを行い、オリジナルディスクの内容とターゲットディスクの内容が一致するか、例えば、cmpコマンドやdiffコマンドを用いて確認します。

7. まとめ

 今回は、Linuxにおけるクローンディスクの作り方について、リサイズする場合も含めて説明しました。今回説明した方法で、データが一致することは確認できました。

 しかし、この方法では、次のような点が原因となって不具合が発生するかもしれません。

  • 直接セクター配置によってアクセスするプログラムがある場合。
     特にブートに関連するプログラムには、このようなプログラムがあります。このため、システムディスクの起動関連のパーティションについては、リサイズ・移動をしない方が安心です。
  • ディスクのハードディスク情報を用いて動作している場合
     システムは、ハードディスクのシリンダー数やヘッド数、SSDなどの情報を用いています。これらの情報が誤っていれば、システムの動作に影響を与えるかもしれません。
  • ハードディスクにセキュリティ対策が施されている場合
     ハードウェアレベルでディスクに暗号化がかかっているのであれば、ディスクの中身を知ることはできませんので、パーティション変更等はできません。ミラーリングなどもできないようにセキュリティ保護される場合もあると思います。また、クローンディスクができたとしても、セキュアブートの設定を変更する必要があるかもしれません。

 システムディスクの場合、様々なトラブルに見舞われる可能性がありますので、オリジナルのディスクはそのままの状態で一切変更を加えずに、丸ごとコピーしたディスクをオリジナルディスクと見立てて、作業するとよいと思います。

(2018/9/13)

関連記事

*1:完全シャットダウンは、Shiftキー+「シャットダウン」をクリック、あるいは、"shutdown /s /t 0"

*2:gdiskでアライメント単位を変更することができるようなので、それを変更すれば、gpartedのアライメントの単位も変わるのかもしれません(未確認)。

*3:gpartedがサポートしているファイルシステムは、「表示」→「サポートするファイルシステム(F)」から確認できます。これによれば、fat16の縮小にも対応しているはずですが、一定以上のファイルサイズであることなどの条件があるのかもしれません。

*4:https://www.disk-partition.com/jp/articles/unable-to-shrink-c-drive.html

Dynabook AZ77のSSDへの換装 (4) NTFSには完全シャットダウンが必須

【概要】1TBのHDDの内容を500GBのSSDに縮小して入れようと思っています。そこで、まずはWindowsのシステムディスクをLinuxのgpartedコマンドを用いて、パーティションのリサイズを試みました。しかし、LinuxでWindowsのディスクをリサイズするためには、ハイバネーションの関係で、Windowsマシンを完全シャットダウンする必要があることが分かりました。

1. はじめに

 dynabookから取り出した1TBの内蔵ハードディスクの内容を500GBのSSDへコピーします。但し、1TBのハードディスクの内容を500GBに収めようとするのですから、使用するパーティションを縮小し、全体で500GB以下にする必要があります。

 この記事では、Linuxのgpartedを用いて、パーティション領域を縮小しようとして、つまずいたことについてまとめています。

2. 完全シャットダウンなしにLinuxでのリサイズは不可

 当然のことですが、1TBのハードディスクの使用領域は500GB以下でないと、パーティションを500GB以下に収めることはできません。今回のディスクの使用量は、400GB程度なので、うまくリサイズできれば、500GBのSSDに収まるはずです。

 Linuxのgpartedコマンドを使うと、パーティションの縮小・拡大・移動ができます。

 しかし、結論を先に言うと、Linuxのgpartedでは、少なくともWindowsでのシャットダウン時に完全シャットダウンしていないと、パーティションのリサイズはできません。

 まずは、完全シャットダウンを行うこと*1が必要でした。

3. gpartedでパーティションのリサイズ

3.1 gpartedを起動

 Linuxの場合、gpartedを使うとパーティションのリサイズを行うことができます。但し、今回、対象とするディスクは、ddでダンプしたファイルをloopデバイスを用いて認識させたものです(詳しくは、前の記事)。

 gpartedを起動すると、Windowsシステムの入っているパーティション(loop0p3)にオレンジ色の警告マークが示されます。また、詳細情報で操作ができない場合があると指摘され、実際、リサイズ・移動はできません。

$ gparted /dev/loop0
f:id:toranosuke_blog:20180909115759p:plain
Windowsのシステム領域(loop0p3)に警告マーク。

f:id:toranosuke_blog:20180905184804p:plain:w400
/dev/loop0p3 のパーティション情報。ntfs-3gはインストール済。

 そこで、対象のloop0p3をマウントしてみます。

$ mount -t ntfs /dev/loop0p3 /mnt/tmp1
$ gparted /dev/loop0

 すると、オレンジ色の警告マークが鍵マークに変わりました。この状態でもパーティションのリサイズ・移動はできません。

f:id:toranosuke_blog:20180905184615p:plain
mountした場合。/dev/loop0p3にはロックがかかり、リサイズ・移動できない。
ディスクの使用容量を黄色で表示。

3.2 読取専用マウントしかできない

 gparted の起動の前に、縮小対象となるパーティション /dev/loop0p3 をマウントしていますが、次の警告メッセージがでて、リードオンリー(読込専用)でマウントされます。

$ mount -t ntfs /dev/loop0p3 /mnt/tmp1/
The disk contains an unclean file system (0, 0).
Metadata kept in Windows cache, refused to mount.
Falling back to read-only mount because the NTFS partition is in an
unsafe state. Please resume and shutdown Windows fully (no hibernation
or fast restarting.)

 読込専用でマウントされるので、gpartedでリサイズできないのも、もっともな話です。mountの警告メッセージからすると、対象ディスクは、予め完全シャットダウンをしておく必要があったようです。

 mount.ntfsのremove_hiberfileオプションを使って、hibernationのためのファイルを強制的に削除して、マウントすることを試みましたが、拒否されてできませんでした。

$ mount -t ntfs -o remove_hiberfile /dev/loop0p3 /mnt/tmp1/
The disk contains an unclean file system (0, 0).
Metadata kept in Windows cache, refused to mount.
Failed to mount '/dev/loop0p3': 許可されていない操作です
The NTFS partition is in an unsafe state. Please resume and shutdown
Windows fully (no hibernation or fast restarting), or mount the volume
read-only with the 'ro' mount option.
  • remove_hiberfile オプションの説明
$ man mount.ntfs
NAME
     ntfs-3g - Third Generation Read/Write NTFS Driver

SYNOPSIS
     mount -t ntfs-3g [-o option[,...]]  volume mount_point
  
 OPTIONS
     remove_hiberfile
         When the NTFS volume is hibernated, a read-write mount is denied
         and a read-only mount is forced. One needs either to resume Win‐
         dows  and  shutdown  it  properly, or use this option which will
         remove the Windows hibernation file.  Please  note,  this  means
         that the saved Windows session will be completely lost. Use this
         option under your own responsibility.

4. 完全シャットダウンが必要だった

4.1 ハイバネーションが悪さする

 mountコマンドのエラーメッセージやコマンド説明にあるように、完全シャットダウンしない場合、LinuxではNTFSディスクへの処理は、mountもgpartedも読込処理に限定されていました。ハイバネーションの影響です。

 Linux上でもNTFSパーティションのリサイズはできますが、少なくとも、次を行わなければならないことが分かりました。

  • Windowsで完全シャットダウンをしなければならない

 ハイバネーションは、メモリ上に展開したファイルをディスク上へ退避する仕組み。完全シャットダウンしないとLinuxでは手に負えないため、処理は読取に限定しているということですね。

4.2 完全シャットダウンは外付けディスクで構わない

 後から気が付いたのですが、別のWindowsマシンに外付けディスクとして繋げて、そのマシンを完全シャットダウンしても、構いません。

 これならば、瀕死のHDDでWindowsを起動する必要はありません(瀕死のHDDはシャットダウンもできない状態だった)。

 実際、瀕死のHDDでも試しましたが、外付けディスクとしての完全シャットダウンは、ごく僅かなHDDへのアクセスだけで、短時間で終わります。mountコマンドによるマウントも読取専用ではなく、読み書き可能な状態でマウントができました。

5. 最後に

 完全シャットダウンを行えば、gpartedでも、パーティションの縮小はできそうです。

 しかし、瀕死のHDDを、再度、一週間近くかけて、ddダンプをする気にはなれなかったので、やり直しませんでした。今回は、アプリ丸ごと復旧させることは諦め、リカバリーディスクからクリアインストールすることにしました。

 ディスクイメージを縮小する試みは失敗しましたが、エクスプローラーでコピーしたバックアップやddダンプしたディスクイメージからデータを復旧できたので、一応はよしとしました。

 但し、クリアインストールしたディスクも、その後、いろいろやってお釈迦にして、2度目のクリアインストールをする羽目にはなったのですが...(付録参照)。

 Linuxで再挑戦したWIndowsの丸ごとコピー・リサイズについては次の記事でまとめます。

(2018/9/9)

関連記事

付録A:Windowsディスクの丸ごとddコピーで起動できるか?

A.1 セーフモードで起動できた!

 WindowsをクリアインストールしたディスクをddでHDDにコピーし、そのHDDから起動できるか確認しました。

 まずは、Ubuntu18.04のLiveUSBを作り、LiveUSBからdynabookを起動、内蔵ディスク(SSD)を外付けの2TBのHDDへddコピーしました。

$ dd if=/dev/sda of=/dev/sdc
   (内蔵SSD)→(外付けHDD)

 ddコピーした外付けディスクからWindowsを起動すると、、、正常起動できません。

 そうは言っても、セーフモードでは起動できました。

f:id:toranosuke_blog:20180906142939j:plain:w300f:id:toranosuke_blog:20180906142953j:plain:w300
f:id:toranosuke_blog:20180906143205j:plain:w300f:id:toranosuke_blog:20180906143236j:plain:w300
セーフモードなら、起動できた!

A.2 内蔵ディスクからWindowsが起動できなくなった!

 HDDから正常起動できるように、いろいろと設定を変えていたら、内蔵ディスクからの起動もできなくなってしまいました(冷汗)。

 Windowsのbcdbootコマンド(Microsoftの解説はここ)が原因ではないかと思います。

 Windowsの起動設定を破壊したようで、「回復」画面にしかなりません。セーブモードにさえ入れない状態となり、Windowsを再度クリアインストールする羽目になりました(涙)。

f:id:toranosuke_blog:20180906144525j:plain:w500
Windowsからのご臨終のお知らせ。
回復環境(F1キー)にもスタートアップ設定(F8キー)にも入れない。

A.3 Linuxでのハードルは高かった...

 外付けのHDD起動でもセーフモードでは起動できたので、ddコピーしたディスクを内蔵ディスクと入れ替えれば、起動できたのではないかと思います。

 そうは言っても、確実に起動できるか、分かりません。Windowsの場合には、専用のクローン化のツールがあるので、そちらを使うのが正しいのでしょう。例えば、EaseUS Todo BackupAOMEI Backupper などが人気があるようです。

 しかし、Linux freakな私としては、敗北感を感じます(笑)。

*1:「完全シャットダウン」は、Shiftキーを押しながら「シャットダウン」をクリックすればできます。また、"shutdown.exe /r /t 0"でも構いません。私は、いつもは、shutdownコマンドへのショートカットを作って、完全シャットダウンを行っています。

Dynabook AZ77のSSDへの換装 (3) ddを使ったディスクのコピー

【概要】 昔からunix系にあるddコマンドはディスクコピーに重宝する強力なツールです。取り出した内蔵ハードディスクのデータをddコマンドを使って、コピーする方法についてまとめました。さらに、ddコマンドで落としたディスクイメージファイルをマウントする方法についても説明します。

1. はじめに

 前回までの記事でdynabook内蔵の1TBのハードディスクを取り出しまでについて書きました。今回は、このハードディスクの中に入っているデータのコピーについて説明します。

2. 外付けディスクケース

 内蔵ハードディスクのままでは扱えませんので、外付けのディスクケースに入れて使用します。

 今回、用いた外付けのディスクケースは、玄人志向とCenturyの製品です。Centuryの製品は8年ぐらい前に購入した古いもの。最近は、玄人志向の製品を使うことが多いです。

メーカページ

-->

 今回は、別のLinuxパソコンを使って、内蔵ハードディスクをディスクケースに入れて、外付けディスクとして取り扱いました。ubuntuのLive CD/USBなどを作って、元々のパソコンをLinuxマシンとして起動できれば、内蔵HDDを取り出さずに、外部デバイスにコピーできます。考えてみると、Live USBを作ってLinux上で作業した方が良かったかもしれません(が、わざわざマシンが壊れたときに作るのは面倒。余裕のあるときに予め作っておくのがよいのでしょうね)。

3. ディスクの障害診断

 lubuntuをインストールしたHP miniにHDDを接続して、SMART(Self-Monitoring, Analysis and Reporting Technology)の情報を調べました(SMARTの各項目の意味は、ウィキペディア参照)。

 画像は、gnome-disksの画面です。64個の不良セクターがあり、HDD障害が発生していることが分かります。ひどい状態です。まともに動作しないのも納得。

$ gnome-disks

あるいは、「アクセサリ」→「ディスク」から起動(lubuntuの場合)
f:id:toranosuke_blog:20180823130955p:plain:w500

不良セクターが64個あります。使用可能となっていますが、不良セクターが64個もあれば、ディスクは即交換です。

f:id:toranosuke_blog:20180823131008p:plain:w500
SMARTのセルフテストの結果。
Current Pending Sector Countが16。16セクタが代替処理ができずにいる。

4. ディスクのコピー

 ディスクのコピーにはいろいろやり方はありますので、いくつか紹介します。実際に行ったのは、4.1.1節で説明する丸ごとディスク内容を抜き出して、ファイルに落とす方法です。

4.1 ディスクを丸ごとコピーする

4.1.1 ディスク内容を丸ごとファイルに落とす

 ddコマンドを使って、ディスクの内容をそのままファイルに落とします。

 一旦、全部をファイルに落とすので、その後は、壊れかけのディスクにアクセスせずに取り扱えるようになります。出力したファイルは、ハードディスクにディスク内容を書き戻し(4.1.3節)やファイルをディスクと見立てたマウント(4.2.2節)のために利用します。

$ dd if=/dev/sdc of=dynabook-az77-1tb-hdd.img bs=1M

 出力ファイルは、容量1TBになります。従って、of(output file)には、1TB以上の空きが必要です。今回は、2TBハードディスクをバックアップ用に用意しました。

 bsオプション(ブロックサイズ)は、1M~16Mぐらいを指定すればよいと思います。以下では、bsオプションの記載は省略します。

4.1.2 ディスク内容を丸ごとディスクにコピーする

$ dd if=/dev/sdc of=/dev/sdb

 出力先のディスク(ここでは、/dev/sdb)は、1TB以上の容量が必要です。丸ごとコピーするので、コピーしたディスクをそのままもとの筐体に戻せば、復旧するはずです(もしかしたら、BIOSや起動フラグなどの設定が必要かもしれません)。

 1TB以上の場合には、その後、パーティションを作成、あるいは、拡張することで、余った部分を有効利用できます。

 また、dynabook内蔵のHDDは、東芝製のSSHD MQ02ABD100Hでしたので、SSDへ換装しないなら、同じハードディスクを使う方が安心です。

4.1.3 ファイルからディスクへ丸ごとコピーする

4.1.1節で説明したようにddコマンドでファイルに落としたディスク内容は、ddコマンドを使って、ハードディスクに書き出すことができます。

$ dd if=dynabook-az77-1tb-hdd.img of=/dev/sdb

ここでは、/dev/sdbが出力先のデバイスです。要するに、ddコマンドは、ファイルも、デバイスも同じように扱うことができるのです。

4.2 パーティション単位でコピーする

 ddを使えば、パーティション単位のコピーもできます。今回のディスクのパーティションは5つありますので、次のようにすれば、全てのパーティションをコピーできます。

$ dd if=/dev/sdc1 of=disk-part-1.img
$ dd if=/dev/sdc2 of=disk-part-2.img
$ dd if=/dev/sdc3 of=disk-part-3.img
$ dd if=/dev/sdc4 of=disk-part-4.img
$ dd if=/dev/sdc5 of=disk-part-5.img

 この場合、パーティションテーブルは保存されませんので、別途、gdiskを使って保存します。

$ gdisk /dev/sdc
Command (? for help): b
Enter backup filename to save: gpt-table.dat
The operation has completed successfully.

4.3 ディスク内容を個別にコピーする

 ディスクをマウントして、それぞれのファイルを見られるようにすれば、必要なファイルを選択的にコピーすることができます。

4.3.1 ディスクをマウントする

$ mkdir /mnt/tmp
$ mount /dev/sdc3 /mnt/tmp

マウントポイント(/mnt/tmp)を作成し、そこへWindowsのユーザーが通常アクセスする3番目のパーティション(この例では、/dev/sdc3)をマウントします。その後は、通常のファイル・ディレクトリと同様に、cpコマンドやrsyncコマンドなどを用いて内容をコピーします(個人的にはrsyncの方が好みです)。

$ cp -dpr /mnt/tmp/Users/tora tora_backup/ 
$ rsync -av /mnt/tmp/Users/tora/ tora_backup/

(rsyncは、ソース側の最後のディレクトリデリミタ"/"の有無で動作が異なるので要注意)

4.3.2 ファイルをマウントする

 ファイルシステムのマウントはディスクのみならず、4.1.1でディスク内容を丸ごと落としたファイルでも可能です。このファイルをマウントすることで、前節と同様にファイルをコピーできます*1

(ループバックデバイスの確認)
$ losetup -f 
/dev/loop0

(イメージファイルをループバックデバイスに関連付ける)
$ losetup /dev/loop0 dynabook-az77-1tb-hdd.img

(ループバックデバイスのパーティションを認識させる)
$ partprobe /dev/loop0

(3番目のパーティションをマウントする)
$ mkdir /mnt/tmp
$ mount /dev/loop0p3 /mnt/tmp

(コピーなど作業する)

(マウントを解除する)
$ umount /mnt/tmp

(ループバックデバイスの関連付けを解除する)
$ losetup -d /dev/loop0

 しかし、この方法でのファイルの抜き出しで、少々、トラブルがありましたので、付録Aで説明します。

5. まとめ

 昔からunix系にあるddコマンドを使って、ハードディスクのデータをコピーする方法についてまとめました。さらに、ddコマンドで落としたディスクイメージファイルをマウントする方法についても説明しまた。

 次の記事では、ダンプしたディスク内容のSSDへの書き戻しについて説明します。

(2018/8/23)

関連記事

付録A:ディスクイメージがマウントできない

 ddでコピーしたディスクイメージのloopデバイスを使ったマウントについて4.3.2節で説明しました。しかし、マウントできないというトラブルがありました。

 ここでは、そのトラブルと対処方法について説明します。

A.1 partprobeでパーティションが認識できない

 4.3.2節では、ディスクイメージとloopデバイスをlosetupで関連付けた後、partprobeでディスクイメージのパーティションを認識させます。このときに、次のエラーが発生しました。

$ losetup /dev/loop0 dynabook-az77-1tb-hdd.img
$ partprobe /dev/loop0 
Error: /dev/loop0 を読み込み中にファイルの終わりに達しました

A.2 partedでloopデバイスを調べる

partedでパーティションを調べると、partprobeと同じメッセージがでてきましたが、無視して調べると、GPTテーブルが壊れていると出てきます。不吉です。それでも、一応は、パーティションを見ることができました。

$ parted /dev/loop0
GNU Parted 3.2
/dev/loop0 を使用
GNU Parted へようこそ! コマンド一覧を見るには 'help' と入力してください。
(parted) p                                                                
エラー: /dev/loop0 を読み込み中にファイルの終わりに達しました
やりなおし(R)/Retry/無視(I)/Ignore/取消(C)/Cancel? I                      
エラー: バックアップ GPT テーブルは壊れていますが、プライマリは問題ないようなので、そちらを使います。
OK/取消(C)/Cancel? OK                                                     
モデル: Loopback デバイス (loopback)
ディスク /dev/loop0: 1000GB
セクタサイズ (論理/物理): 512B/512B
パーティションテーブル: gpt
ディスクフラグ:

番号  開始    終了    サイズ  ファイルシステム  名前                          フラグ
 1    1049kB  274MB   273MB   fat32             EFI system partition          boot, esp
 2    274MB   290MB   16.8MB                    Microsoft reserved partition  msftres
 3    290MB   987GB   986GB   ntfs              Basic data partition          msftdata
 4    987GB   988GB   1061MB  ntfs                                            hidden, diag
 5    988GB   1000GB  12.5GB  fat32             Basic data partition          hidden, diag

A.3 gdiskを使って修復

 gdiskを使って、loop0を見ようとすると、今度はディスクを修復するようにとのメッセージがでます。修復することにしましたが、ディスクイメージを破壊する可能性があるので、オリジナルのディスクイメージではなく、そのコピーに対して修復を行いました(バックアップ用の2TBでは、容量が足りないので、さらに2TBのディスクを用意しました)。

 パーティションテーブルの問題点や修復作業についてはわけがわからないまま、コマンドの指示に従って作業を進めました(笑)。長いですが、全部、引用しておきます。

  • バックアップGPTヘッダ(第2GPTヘッダ)が壊れているので、修復するように言われました。
$ gdisk /dev/loop0
GPT fdisk (gdisk) version 1.0.3

Warning! Disk size is smaller than the main header indicates! Loading
secondary header from the last sector of the disk! You should use 'v' to
verify disk integrity, and perhaps options on the experts' menu to repair
the disk.
Caution: invalid backup GPT header, but valid main header; regenerating
backup header from main header.

Partition table scan:
  MBR: protective
  BSD: not present
  APM: not present
  GPT: damaged

****************************************************************************
Caution: Found protective or hybrid MBR and corrupt GPT. Using GPT, but disk
verification and recovery are STRONGLY recommended.
****************************************************************************
  • それでも、パーティション情報を出力すると、一見正しそうな情報を出力しました。
Command (? for help): p
Disk /dev/loop0: 1953525167 sectors, 931.5 GiB
Sector size (logical/physical): 512/512 bytes
Disk identifier (GUID): B45D2A5C-F9A4-478D-818B-D8E6280ABEA4
Partition table holds up to 128 entries
Main partition table begins at sector 2 and ends at sector 33
First usable sector is 34, last usable sector is 1953525134
Partitions will be aligned on 8-sector boundaries
Total free space is 4642 sectors (2.3 MiB)

Number  Start (sector)    End (sector)  Size       Code  Name
   1            2048          534527   260.0 MiB   EF00  EFI system partition
   2          534528          567295   16.0 MiB    0C01  Microsoft reserved ...
   3          567296      1926947658   918.6 GiB   0700  Basic data partition
   4      1926948864      1929021439   1012.0 MiB  2700  
   5      1929022863      1953525134   11.7 GiB    2700  Basic data partition

  • gdiskの指示に従って、コマンド"v"(verify disk)を実行すると、3つの問題点を指摘されました。
Command (? for help): v

Problem: The secondary header's self-pointer indicates that it doesn't reside
at the end of the disk. If you've added a disk to a RAID array, use the 'e'
option on the experts' menu to adjust the secondary header's and partition
table's locations.  
(→ 第2ヘッダーに書かれている自分の位置は、ディスクの最後になっていない)

Problem: Disk is too small to hold all the data!
(Disk size is 1953525167 sectors, needs to be 1953525168 sectors.)
The 'e' option on the experts' menu may fix this problem.
(→ ディスクのサイズが1セクタ足りない)

Partition(s) in the protective MBR are too big for the disk! Creating a
fresh protective or hybrid MBR is recommended.
(→ MBRに書かれているパーティションが大きすぎる)

Caution: Partition 5 doesn't begin on a 8-sector boundary. This may
result in degraded performance on some modern (2009 and later) hard disks.

Consult http://www.ibm.com/developerworks/linux/library/l-4kb-sector-disks/
for information on disk alignment.
(このCautionはあまり気にする必要はなさそう)

Identified 3 problems!

 パーティションテーブルのレイアウトが分からないと、何をいっているか、チンプンカンプンです。ウィキペディアによれば、パーティションテーブルは、以下の図のように配置されています。

f:id:toranosuke_blog:20180827105413p:plain:w500
パーティションテーブルのレイアウト。(wikipediaより引用)
各LBAは512バイト、各エントリは128バイト。

 2番目の問題(Disk is too small)は、ディスクサイズが1セクタ足りないとの指摘です。おそらく、ディスクの最後の1セクタ(512バイト)がディスクイメージのファイルに保存されていないことが原因と考えられます。

 ダンプされたディスクイメージのファイルサイズは、1,000,204,885,504バイト(=1,953,525,167セクタ×512バイト)です。一方、パーティションテーブルには、それよりも1つ多い1,953,525,168セクタあると、書いてあるのではないかと思います。

 第2ヘッダーの位置は、ディスクの最後と決まっているので、最後の1セクタがダンプされていないと、第2ヘッダーに書かれている位置と、ディスクイメージの最後から数えたヘッダの位置に不整合が発生します。これが第1の問題である第2ヘッダの自己ポインタが変だという検査結果となり、第2GPTヘッダは、壊れていると判断されます。

 第2GPTヘッダは壊れていますので、パーティション構成の解釈は、MBRによってなされます。MBRに記録されているセクタ数がダンプしたファイルのセクタ数よりも大きくなっているので、第3の問題点(MBRのパーティションが大きすぎる)を指摘されます。

  • experts' menuに入って、eオプションを実行。

 experts' menu のeコマンドは、「relocate backup data structures to the end of the disk」という処理です。意味をよく理解していませんが、第2GPTヘッダをディスクの最後に配置しなおす(前にずらす)ということだと思います。

Command (? for help): x
(コマンドxでexperts menuに入ります)

Expert command (? for help): e
Relocating backup data structures to the end of the disk

Expert command (? for help): p
Disk /dev/loop0: 1953525167 sectors, 931.5 GiB
Sector size (logical/physical): 512/512 bytes
Disk identifier (GUID): B45D2A5C-F9A4-478D-818B-D8E6280ABEA4
Partition table holds up to 128 entries
Main partition table begins at sector 2 and ends at sector 33
First usable sector is 34, last usable sector is 1953525133
Partitions will be aligned on 8-sector boundaries
Total free space is 4642 sectors (2.3 MiB)

Number  Start (sector)    End (sector)  Size       Code  Name
   1            2048          534527   260.0 MiB   EF00  EFI system partition
   2          534528          567295   16.0 MiB    0C01  Microsoft reserved ...
   3          567296      1926947658   918.6 GiB   0700  Basic data partition
   4      1926948864      1929021439   1012.0 MiB  2700  
   5      1929022863      1953525134   11.7 GiB    2700  Basic data partition

"last usable sector" が"1,953,525,134"から1,953,525,133に一つ減りました。

  • 再度、vコマンド(verify disk)を行うと、問題点は1つなりました。

 今度は、コマンド"s"(resize partition table)を使ってパーティションテーブルサイズを4つ減らせとのこと。

 第2ヘッダを1セクタ前にずらしていますので、パーティション5の最後の1セクタと第2GPTエントリーの1セクタが重複します。この重複を解消するために、1セクタ(512バイト)の大きさ分の4エントリ(4エントリ×128バイト=512バイト)を減らす必要があるということかと思います。

Expert command (? for help): v

Warning! Secondary partition table overlaps the last partition by
1 blocks!
Try reducing the partition table size by 4 entries.
(Use the 's' item on the experts' menu.)

Caution: Partition 5 doesn't begin on a 8-sector boundary. This may
result in degraded performance on some modern (2009 and later) hard disks.

Consult http://www.ibm.com/developerworks/linux/library/l-4kb-sector-disks/
for information on disk alignment.

Identified 1 problems!
  • expertコマンドs(resize partition table)を実行

partition table sizeを128から124に減らすと、今度はエントリーが少なすぎると警告される。

Expert command (? for help): s
Current partition table size is 128.
Enter new size (5 up, default 128): 124
Caution: The partition table size should officially be 16KB or larger,
which works out to 128 entries. In practice, smaller tables seem to
work with most OSes, but this practice is risky. I'm proceeding with
the resize, but you may want to reconsider this action and undo it.
  • partition table sizeを124,128,132と変更してみた。

 partition table sizeを124にすれば、エントリーが足らないと注意され、128以上にすると、第2パーティションテーブルが、最終パーティションとオーバーラップすると注意されます。

 使えるセクターが一つ減った影響で、パーティションテーブルがオーバーラップするか、パーティションテーブルを小さくするかの選択を迫っているということのようです。

 最終的には、パーティションテーブルサイズを124としました。エントリー数が減る影響をよく理解していませんが、大量にパーティションを切らない限り影響はないのではないかと思っています。

Expert command (? for help): v

Warning: The size of the partition table (15872 bytes) is less than the minimum
required by the GPT specification. Most OSes and tools seem to work fine on
such disks, but this is a violation of the GPT specification and so may cause
problems.

Caution: Partition 5 doesn't begin on a 8-sector boundary. This may
result in degraded performance on some modern (2009 and later) hard disks.

Consult http://www.ibm.com/developerworks/linux/library/l-4kb-sector-disks/
for information on disk alignment.

No problems found. 4643 free sectors (2.3 MiB) available in 3
segments, the largest of which is 2015 (1007.5 KiB) in size.

Expert command (? for help): s
Current partition table size is 124.
Enter new size (5 up, default 128):

Warning! Secondary partition table overlaps the last partition by
1 blocks!
Try reducing the partition table size by 4 entries.
(Use the 's' item on the experts' menu.)

Expert command (? for help): s
Current partition table size is 128.
Enter new size (5 up, default 128): 132

Warning! Secondary partition table overlaps the last partition by
2 blocks!
Try reducing the partition table size by 8 entries.
(Use the 's' item on the experts' menu.)

Expert command (? for help): s
Current partition table size is 132.
Enter new size (5 up, default 128): 124
Caution: The partition table size should officially be 16KB or larger,
which works out to 128 entries. In practice, smaller tables seem to
work with most OSes, but this practice is risky. I'm proceeding with
the resize, but you may want to reconsider this action and undo it.
  • expertメニューからメインメニューに戻り、再度、検証(v)し、パーティションテーブルの修正結果の書込み(w)を行いました。
Expert command (? for help): m

Command (? for help): v

Warning: The size of the partition table (15872 bytes) is less than the minimum
required by the GPT specification. Most OSes and tools seem to work fine on
such disks, but this is a violation of the GPT specification and so may cause
problems.

Caution: Partition 5 doesn't begin on a 8-sector boundary. This may
result in degraded performance on some modern (2009 and later) hard disks.

Consult http://www.ibm.com/developerworks/linux/library/l-4kb-sector-disks/
for information on disk alignment.

No problems found. 4643 free sectors (2.3 MiB) available in 3
segments, the largest of which is 2015 (1007.5 KiB) in size.

Command (? for help): w

Final checks complete. About to write GPT data. THIS WILL OVERWRITE EXISTING
PARTITIONS!!

Do you want to proceed? (Y/N): y
OK; writing new GUID partition table (GPT) to /dev/loop0.
Warning: The kernel is still using the old partition table.
The new table will be used at the next reboot or after you
run partprobe(8) or kpartx(8)
The operation has completed successfully.
  • パーティションテーブルの再確認

 最終的に次のようなパーティションテーブルとなりました。当初"damaged" だった、GPTパーティションテーブルも"present"と正常になりました。

$ gdisk /dev/loop0
GPT fdisk (gdisk) version 1.0.3

Partition table scan:
  MBR: protective
  BSD: not present
  APM: not present
  GPT: present

Found valid GPT with protective MBR; using GPT.

Command (? for help): p
Disk /dev/loop0: 1953525167 sectors, 931.5 GiB
Sector size (logical/physical): 512/512 bytes
Disk identifier (GUID): B45D2A5C-F9A4-478D-818B-D8E6280ABEA4
Partition table holds up to 124 entries
Main partition table begins at sector 2 and ends at sector 32
First usable sector is 33, last usable sector is 1953525134
Partitions will be aligned on 8-sector boundaries
Total free space is 4643 sectors (2.3 MiB)

Number  Start (sector)    End (sector)  Size       Code  Name
   1            2048          534527   260.0 MiB   EF00  EFI system partition
   2          534528          567295   16.0 MiB    0C01  Microsoft reserved ...
   3          567296      1926947658   918.6 GiB   0700  Basic data partition
   4      1926948864      1929021439   1012.0 MiB  2700  
   5      1929022863      1953525134   11.7 GiB    2700  Basic data partition
  • 修復前から変化した点は、次の通りです。
    • パーティションテーブルのサイズ:128→124エントリー
    • メインパーティションテーブルの終了セクター:33→32
    • 使用可能な最初のセクター:34→33
    • フリースペース:4642セクター → 4643セクター

 第2ヘッダのサイズが小さくなった影響を受けて、第1ヘッダのサイズも小さくなり、利用できるセクターが1セクタ増えたということのようです。

 この修正により、partprobe /dev/loop0も正常動作するようになり、パーティションを正しく認識するようになりました。

A.4 パーティションテーブルのダンプと修正

 gdiskの修復メッセージから類推すると、以下の図に示すような現象が起こっていたと思われます。まず、ddによるダンプによって、1セクタのコピー漏れが発生し、第2GPTヘッダが消失します。その第2GPTヘッダを新規作成するために、エントリー配列の大きさを128から124に減らし、1セクタ分小さくします。これに伴って、第1GPTエントリ配列も124エントリとなり、第1エントリ配列の直後の1セクタが新規に空き領域となります。

f:id:toranosuke_blog:20180827144102p:plain

 しかし、dynabookの壊れかけている内蔵ディスク/dev/sdcを直接gdiskコマンドで、調べたところ、ddでダンプしたディスクイメージと全く同じように第2GPTヘッダが壊れていました。ddが書き漏らしたのではなく、最初からディスク末尾の1セクタ(512バイト)が欠けていたのかもしれません。また、もともとWindowsでは、パーティションテーブルを正しく書いていない、という可能性もありますが、よく分かりません。

(追記:2018/9/21)この現象は、外付けハードディスクによって、読み取ることができるセクター数が異なることが原因と判明しました。
 本稿でハードディスクのddダンプで用いたのは、Centuryの製品です。また、作業用に用いていたのは、玄人志向の製品です。この二つの製品では、ハードディスクの最後の1セクタ (512バイト) を読み取ることはできず、欠損が生じます。
 これは、その後に購入した ELUTENG のディスクケースと玄人志向・Centuryのディスクケースでは、認識するディスクサイズが異なることから気が付きました(詳しくは、 この記事を参照)。
 実際、1TBのハードディスクの末尾の1セクタをELUTENGのディスクケースを使って読み込んで、Centuryのディスクケースでddダンプしたファイルの末尾に追加すると、gdiskは正常にGPTテーブルを解釈します。

● センチュリー ● 玄人志向 ● ELUTENG

A.5 もしかしたら、ディスクイメージの末尾に512バイト追加すればよかったのかも...

 パーティションの修復が必要なのは、ディスクイメージが1セクタ分欠けていることが原因と考えられます。gdiskを使った修復では、パーティションテーブルのサイズを128エントリから124エントリに減らしましたが、それだと、GPTヘッダの仕様で要求される128エントリを確保できません。

 そうであれば、次のような方法で、ディスクイメージに512バイト追加すれば、128エントリーを確保できるのではないかと思います。

  • ddでダンプする際に必要なセクタ数を明示的に指定してコピーする。
$ dd if=/dev/sdc of=disk.img count=1953525168

 もしかしたら、オリジナルのディスクの第2ヘッダの情報が正しくコピーされるかもしれません。そうであれば、partprobeも問題なく通過するでしょう。(しかし、ddで末尾までスキップして、ダンプしたところでは、期待していた1953525168番目のセクタは読みだせませんでした)

  • ディスクの最後の1セクタだけを読みだして、既にダンプしたディスクイメージに追加する
$ dd if=/dev/sdc skip=1953525167 count=1 >> disk.img

 dynabookに入っていた壊れかけたハードディスクの全データをダンプするのは大変です。この方法では、最後の1セクタだけを読み出して、既にダンプしたファイルに追加します。

 実際に行ったところ、 skip=1953525166まではスキップできましたが、1つ増やして1953525167とすると、エラーとなりました。やはり、1953525168番目のセクタは読みだせないようです。

  • ダンプしたディスクイメージの末尾に512バイトの0値を付け加える
$ dd if=/dev/zero count=1 >> disk.img

 この方法では、第2GPTヘッダを修復する必要はあります。実際に試したところ、128エントリーを保ったままパーティションテーブルを修復することができました(付録B参照)。

付録B:ファイルに1セクタ追加して、GPTヘッダを修復

 ddコマンドでダンプしたディスクイメージは、1セクタ(512バイト)欠けているようでした。このため、512バイトの0値をファイル末尾に追加して大きくしたファイルに対して、gdisk を使って、パーティションテーブルを修復しました。これによって、エントリー数を削減することなく、仕様通りのGPTヘッダを作ることができます。

B.1 マウントできるか?

 partprobe でエラーメッセージがでますが、マウントできて、ディスク内のファイルも参照できます。

$ losetup -f
/dev/loop0
$ losetup /dev/loop0 dynabook-az77_1tb-hdd+1sector.img 
$ partprobe /dev/loop0 
Error: バックアップ GPT テーブルは壊れていますが、プライマリは問題ないようなので、そちらを使います。
$ mount /dev/loop0p3 /mnt/tmp1/
The disk contains an unclean file system (0, 0).
Metadata kept in Windows cache, refused to mount.
Falling back to read-only mount because the NTFS partition is in an
unsafe state. Please resume and shutdown Windows fully (no hibernation
or fast restarting.)
$ ls  /mnt/tmp1/Users/tora/
'3D Objects'/
 AppData/
'Application Data'@
 Contacts/
 Cookies@
 Desktop/
 Documents/
 Downloads/
 Favorites/
 GoogleDrive/
(略)

 バックアップGPTテーブルは、壊れていると言われますが、マウントできました(read-onlyとなるのは、Windowsでのシャットダウンで完全シャットダウンを行っていないため)。また、ファイルも見ることができます。

B.2 パーティションテーブルの修復

 gdiskを使って第2GPTヘッダを修復しました。第1GPTヘッダを使って修復するコマンドが分からなかったので、一旦、パーティションテーブルを124エントリに縮小し、128エントリに戻すことで、第2GPTヘッダを作っています。

 リカバリーモード("r")のそれらしいコマンド (d, e, f) を試してみましたが、期待した通りの結果は得られませんでした。

 コマンドとしては、次の順序で行っています。

  • x (experts' menuに入る) → s (リサイズする) → 124を入力 → s (リサイズする) → 128を入力 → w (パーティションテーブルを書き込む) → yを入力

 作業にあたっての注意点としては、次の点が挙げられます。

  • パーティションテーブルのバックアップを取ること
     パーティションテーブルを破壊してしまったときに役立つはずです。
  • パーティション内容をよく確認すること
     特に、編集したパーティションテーブルをディスクに書き込む前には、v(検証)だけでなく、p(プリント)も出力して内容をよく確認します。

 両方ともに、さぼったので、実際に、操作を間違えて、パーティションテーブルを破壊し、ディスクイメージを使いものにならなくしてしまいました!(オリジナルコピーからやり直し)

 なお、実際のログは、以下に示す通りです。

$ gdisk /dev/loop0
GPT fdisk (gdisk) version 1.0.3

Partition table scan:
  MBR: protective
  BSD: not present
  APM: not present
  GPT: damaged

****************************************************************************
Caution: Found protective or hybrid MBR and corrupt GPT. Using GPT, but disk
verification and recovery are STRONGLY recommended.
****************************************************************************

Command (? for help): ?
b   back up GPT data to a file
c   change a partition's name
d   delete a partition
i   show detailed information on a partition
l   list known partition types
n   add a new partition
o   create a new empty GUID partition table (GPT)
p   print the partition table
q   quit without saving changes
r   recovery and transformation options (experts only)
s   sort partitions
t   change a partition's type code
v   verify disk
w   write table to disk and exit
x   extra functionality (experts only)
?   print this menu

Command (? for help): p
Disk /dev/loop0: 1953525168 sectors, 931.5 GiB
Sector size (logical/physical): 512/512 bytes
Disk identifier (GUID): B45D2A5C-F9A4-478D-818B-D8E6280ABEA4
Partition table holds up to 128 entries
Main partition table begins at sector 2 and ends at sector 33
First usable sector is 34, last usable sector is 1953525134
Partitions will be aligned on 8-sector boundaries
Total free space is 4642 sectors (2.3 MiB)

Number  Start (sector)    End (sector)  Size       Code  Name
   1            2048          534527   260.0 MiB   EF00  EFI system partition
   2          534528          567295   16.0 MiB    0C01  Microsoft reserved ...
   3          567296      1926947658   918.6 GiB   0700  Basic data partition
   4      1926948864      1929021439   1012.0 MiB  2700  
   5      1929022863      1953525134   11.7 GiB    2700  Basic data partition

Command (? for help): v
Partition(s) in the protective MBR are too big for the disk! Creating a
fresh protective or hybrid MBR is recommended.

Caution: Partition 5 doesn't begin on a 8-sector boundary. This may
result in degraded performance on some modern (2009 and later) hard disks.

Consult http://www.ibm.com/developerworks/linux/library/l-4kb-sector-disks/
for information on disk alignment.

Identified 1 problems!

Command (? for help): b
Enter backup filename to save: backup-partition.dat
The operation has completed successfully.

Command (? for help): x
Expert command (? for help): ?
a   set attributes
c   change partition GUID
d   display the sector alignment value
e   relocate backup data structures to the end of the disk
f   randomize disk and partition unique GUIDs
g   change disk GUID
h   recompute CHS values in protective/hybrid MBR
i   show detailed information on a partition
j   move the main partition table
l   set the sector alignment value
m   return to main menu
n   create a new protective MBR
o   print protective MBR data
p   print the partition table
q   quit without saving changes
r   recovery and transformation options (experts only)
s   resize partition table
t   transpose two partition table entries
u   replicate partition table on new device
v   verify disk
w   write table to disk and exit
z   zap (destroy) GPT data structures and exit
?   print this menu

Expert command (? for help): s
Current partition table size is 128.
Enter new size (5 up, default 128): 124
Caution: The partition table size should officially be 16KB or larger,
which works out to 128 entries. In practice, smaller tables seem to
work with most OSes, but this practice is risky. I'm proceeding with
the resize, but you may want to reconsider this action and undo it.


Expert command (? for help): v
Warning: The size of the partition table (15872 bytes) is less than the minimum
required by the GPT specification. Most OSes and tools seem to work fine on
such disks, but this is a violation of the GPT specification and so may cause
problems.

Caution: Partition 5 doesn't begin on a 8-sector boundary. This may
result in degraded performance on some modern (2009 and later) hard disks.

Consult http://www.ibm.com/developerworks/linux/library/l-4kb-sector-disks/
for information on disk alignment.

No problems found. 4644 free sectors (2.3 MiB) available in 4
segments, the largest of which is 2015 (1007.5 KiB) in size.

Expert command (? for help): s
Current partition table size is 124.
Enter new size (5 up, default 128): 128
Expert command (? for help): v
Caution: Partition 5 doesn't begin on a 8-sector boundary. This may
result in degraded performance on some modern (2009 and later) hard disks.

Consult http://www.ibm.com/developerworks/linux/library/l-4kb-sector-disks/
for information on disk alignment.

No problems found. 4642 free sectors (2.3 MiB) available in 3
segments, the largest of which is 2014 (1007.0 KiB) in size.

Expert command (? for help): p
Disk /dev/loop0: 1953525168 sectors, 931.5 GiB
Sector size (logical/physical): 512/512 bytes
Disk identifier (GUID): B45D2A5C-F9A4-478D-818B-D8E6280ABEA4
Partition table holds up to 128 entries
Main partition table begins at sector 2 and ends at sector 33
First usable sector is 34, last usable sector is 1953525134
Partitions will be aligned on 8-sector boundaries
Total free space is 4642 sectors (2.3 MiB)

Number  Start (sector)    End (sector)  Size       Code  Name
   1            2048          534527   260.0 MiB   EF00  EFI system partition
   2          534528          567295   16.0 MiB    0C01  Microsoft reserved ...
   3          567296      1926947658   918.6 GiB   0700  Basic data partition
   4      1926948864      1929021439   1012.0 MiB  2700  
   5      1929022863      1953525134   11.7 GiB    2700  Basic data partition

Expert command (? for help): w
Final checks complete. About to write GPT data. THIS WILL OVERWRITE EXISTING
PARTITIONS!!

Do you want to proceed? (Y/N): y
OK; writing new GUID partition table (GPT) to /dev/loop0.
Warning: The kernel is still using the old partition table.
The new table will be used at the next reboot or after you
run partprobe(8) or kpartx(8)
The operation has completed successfully.

付録C:gdiskのコマンド一覧

  • gdiskのコマンド一覧
Command (? for help): ?
b   back up GPT data to a file
c   change a partition's name
d   delete a partition
i   show detailed information on a partition
l   list known partition types
n   add a new partition
o   create a new empty GUID partition table (GPT)
p   print the partition table
q   quit without saving changes
r   recovery and transformation options (experts only)
s   sort partitions
t   change a partition's type code
v   verify disk
w   write table to disk and exit
x   extra functionality (experts only)
?   print this menu
  • gdiskのexpertコマンドの一覧
Expert command (? for help): ?
a    set attributes
c    change partition GUID
d    display the sector alignment value
e    relocate backup data structures to the end of the disk
f    randomize disk and partition unique GUIDs
g    change disk GUID
h    recompute CHS values in protective/hybrid MBR
i    show detailed information on a partition
j    move the main partition table
l    set the sector alignment value
m    return to main menu
n    create a new protective MBR
o    print protective MBR data
p    print the partition table
q    quit without saving changes
r    recovery and transformation options (experts only)
s    resize partition table
t    transpose two partition table entries
u    replicate partition table on new device
v    verify disk
w    write table to disk and exit
z    zap (destroy) GPT data structures and exit
?    print this menu
  • gdiskのrecovery/transformationコマンドの一覧
Recovery/transformation command (? for help): ?
b   use backup GPT header (rebuilding main)
c   load backup partition table from disk (rebuilding main)
d   use main GPT header (rebuilding backup)
e   load main partition table from disk (rebuilding backup)
f   load MBR and build fresh GPT from it
g   convert GPT into MBR and exit
h   make hybrid MBR
i   show detailed information on a partition
l   load partition data from a backup file
m   return to main menu
o   print protective MBR data
p   print the partition table
q   quit without saving changes
t   transform BSD disklabel partition
v   verify disk
w   write table to disk and exit
x   extra functionality (experts only)
?   print this menu

Dynabook AZ77のSSDへの換装 (2) HDD/SSDの入れ替え

【概要】
 dynabook AZ77を分解し、HDD/SSDを入れ替えを写真付きで説明します。底蓋さえ、開けられれば、HDDとSSDの入れ替えは簡単です。

1. はじめに

 我が家のメインマシンDynabook AZ77のHDDが壊れました。購入が2015年の10月頃なので3年弱の寿命でした。

 この故障を機にHDDをSSDへ切り替えることしました。先の記事では、データのバックアップについて書きましたが、今回の記事では、底蓋を外して、HDD/SDDを入れ替える作業について報告します。

2. サムスンの500GBのSSDを購入した

2.1 HDDの大きさの確認

 まずは、交換するHDDのサイズを調べました。通常は、2.5インチ型SATAです。しかし、内蔵ディスクが、1.8型HHDやM.2規格なのに、2.5型のSSDを購入したりすると、悲しい事態になります。

 まずは、製品仕様で確認しようと思いましたが、書いてありませんでした。他の型番のdynabookのSSD換装の記事を読むと2.5型だったので、たぶん、AZ77も、2.5型だろうということで、2.5型SATAのSSDを購入することにしました。

 考えてみれば、本体を開けて中身を確認してから、購入すれば、間違えはありませんね(笑)。

2.2 サムスンの500GBのSSDを購入

 dynabook AZ77のHDDは、SSDとハイブリッドのHDDの1TBでした。懐の具合が許せば、同じ容量としたいところですが、半分の500GBの容量としました。なお、1TBのHDDの内容を500GBのSSDに押し込もうとするので、後でいろいろとトラブルの原因になる(実際になった!)ので、同じ容量以上にしておいた方が安心です。

 価格コムで500GBクラスのSSDを調べると、売れ筋や安さで上位に挙がってくるのは、次の3機種(無名ブランドは除く)。

 チェックした項目は、厚さ、価格、ブランド、保証期間で、5年保証が目立つように書いてあったサムソンにしました(発注後、インテルも5年保証だと気が付きました。同じ条件なら、インテルの方が好みなのですが、キャンセルも面倒なので、そのままサムスンを発注。crucialは3年保証)。

 価格は、アマゾンでもほぼ同額で購入できるので、アマゾンからの購入です。購入当時は、13,973円でしたが、2018年8月22日現在では、12,684円(500GB)、25,800円(1TB)、49,421(2TB)、103,800円(4TB)となっています(最新価格は、ここ)。お金に少々余裕があれば、1TBが欲しいところです。

3. 筐体の分解とHDDとSSDの交換

 基本的には、①ネジを外して、②底の蓋をパカっと開いて、③HDDの交換です。このうち、②のパカっと開けるのが壊しそうでびくびくしながら行う作業になります。

3.1 ネジを外す

f:id:toranosuke_blog:20180822113612j:plain:w500
このパソコンを分解します。

f:id:toranosuke_blog:20180822113718j:plain:w500
据え置きで使っていたので、裏側の吸気口は埃だらけ。

f:id:toranosuke_blog:20180822113836j:plain:w500
バッテリーを外す。妙にコツがいる。

f:id:toranosuke_blog:20180822114316j:plain:w500
底面のネジを外す。全部で17個(本当は、18個外す。後述)

3.2 パカっと開く

f:id:toranosuke_blog:20180822114608j:plain:w500
本体側と底面側に隙間を作って、徐々に外していく。

 爪を使って素手でも作業はできますが、専用の工具があるのでしょうね。ここが、もっとも神経を使うところです。下手に蓋を開けようとすれば、カバーの爪や内部部品などを壊しそうなので、いつも苦労します。

f:id:toranosuke_blog:20180822114912j:plain:w500
そのまま開こうとすると、ブルーレイドライブが引っかかる。
ここで、強引に開けようとすると、本体を壊します。

f:id:toranosuke_blog:20190711122329j:plain:w500
ブルーレイドライブを固定しているネジを外す。

f:id:toranosuke_blog:20190711122851j:plain:w500
ドライブを外すと、ドライブに隠れていた18個目のネジが現れる。このネジを外す。

f:id:toranosuke_blog:20180822115534j:plain:w500
無時、蓋が外れました。

 写真の左上がファン、それに太い銅管で繋がっているのがCPU、その右側がメモリ、手前の青いのがHDDです。こんな銅管で熱を運んでいるとは思いませんでした。宙に浮かせてはいるようですが、付近に熱が籠りそうです。

3.3 古いHDDを抜き出す

 蓋が取れれば、後は、HDDをSSDに交換するだけです。

f:id:toranosuke_blog:20180822121634j:plain:w300 f:id:toranosuke_blog:20180822121650j:plain:w300
f:id:toranosuke_blog:20180822121729j:plain:w300 f:id:toranosuke_blog:20180822121801j:plain:w300
f:id:toranosuke_blog:20180822121944j:plain:w300 f:id:toranosuke_blog:20180822122004j:plain:w300
ゴム製のマウンタをつまみ上げて、HDDを抜き出す。

 HDDは、東芝製のSSHD MQ02ABD100Hでした。壊れた1TBのHDDの内容を丸ごとコピーして、復旧させるなら、このハードディスクが安心です。

3.4 新しいSSDを挿す

 クリアインストールする場合には、購入したものをそのまま交換します。

f:id:toranosuke_blog:20180822132231j:plain:w300 f:id:toranosuke_blog:20180822132327j:plain:w300
新しく入れるSSDは、Samsung 860EVOの500GB。

f:id:toranosuke_blog:20180822132705j:plain:w300 f:id:toranosuke_blog:20180822132726j:plain:w300
ゴム製のマウンタを取り付けて、元の場所に挿入する。

3.5 BIOSで確認する

 後は、底蓋を閉じて、バッテリーを戻して、終了です。

f:id:toranosuke_blog:20180822140216j:plain:w500
BIOSでディスクを確認。(BIOSに入るためには、起動時にF2連打)

4. おわりに

 無事、SSDへの交換が完了しました。

 下手に蓋を開けようとすれば、内部部品やカバーの爪を壊しそうなので、いつも苦労します。それさえ、問題がなければ、後は簡単です。

 次は中身の復旧です。

(2018/8/22)
(2019/7/11) 18個目のネジの場所が分かりにくかったので、写真を追加、本文を修正しました。

関連記事

Dynabook AZ77のSSDへの換装 (1) データのバックアップ

【概要】

 DynabookのHDDをSSDに換装するにあたって行ったWIndowsパソコンのバックアップについて説明します。Windows上のデータは、エクスプローラーを用いたコピーとLinuxのddコマンドを使ったディスクの丸ごとコピーを行いました。

1. 悲報、パソコンが立ち上がらない

 Windows Updateのたびに、調子が悪くなる我が家のメインマシンのdynabook AZ77、ついにHDDがご臨終のときを迎えたようです。

 運よく起動することもあるのですが、再起動しても、異常に遅い動作、あるいは、固まったような状態で、使いものになりません。たまに、普通に動くようになることもあるのですが、調べたところ、不良ブロックが原因のハードディスクエラーが頻発していました。chkdsk /rをしても、症状は改善しませんでした。

 意を決して、HDDを交換して、SSDに入れ換えることにしました。

 この記事では、データのバックアップについて説明します。その後の記事でdynabookの分解と換装や、1TBHDDを500GBに丸ごとコピーする方法などについて説明します。

2. バックアップの方針

 インストールしたソフトを再設定するのは、気が遠くなります。そのため、次の優先順位で移行を計画しました。

  • Windowsのバックアップ機能で保存する。
    • バックアップからWindowsの機能でリストアする。
  • HDDの内容を丸ごと、SSDにコピーして復元する。
    • SSDを入れ替えて、そのままもとの環境を復元する。
  • リカバリーディスクからのクリアインストール。
    • 全てのソフトを再インストールし、私用データはバックアップから復元する。

 私用データは、ほとんどGoogleドライへの保存しているので、このパソコン独自で保存した私用データは、ubuntuが入っている仮想PC(約280GB)と若干の動画(約10GB)、音楽データ(iTunesとAmazon Music)ぐらいです。

 このため、次のバックアップを作ることにしました。

 ① 私用データ(仮想PC・動画・音楽)をWindows上でコピー
 ② Windowsのバックアップ機能を使った全体のバックアップ
 ③ 取り出した内蔵ディスクを、Linuxのddコマンドで丸ごとコピー

 なお、リカバリーディスクは、dynabookの購入時にBD-Rに焼いていますので、今回は作業はありません。

3. データのバックアップ

 バックアップイメージは、使っていなかった2TBのハードディスクへのバックアップします。但し、②のWindowsのバックアップ機能を使ったバックアップは、後述の通り、実際にはやっていません。

3.1 エクスプローラーを使ったバックアップ

 Windowsのエクスプローラーを使って、ホームディレクトリを丸ごとコピーしました。バックアップ先の2TBの2.5インチHDDは、Linuxのshredコマンドでファイルシステムごとクリアしたディスクだったため、NTFSのファイルシステムを作り直しました(付録参照)。

 300GB程度のデータ量でしたが、1週間ぐらいかかりました。これは、すでにWindowsが正常機能しておらず、超スローにしか動作しなかったことが主な原因です。

 なお、この方法では、隠しファイルがコピーできませんので、注意が必要です(というか、コピーできていなかったことが後から発覚した:-p)。Windowsでもrobocopyコマンド使えば、ディレクトリ丸ごとのコピーができるようです*1

3.2 Windowsのバックアップ機能を使ったバックアップ

 300GBのバックアップにあまりにも時間かかったので、Windowsのバックアップ機能を使ったバックアップは諦めました。

 Windows機能によるバックアップデータがないので、元の環境の復元は、1TBのHDDの内容をそのまま500GBのSSDに移して、動かせるか、ということにかかってきます。

3.3 内蔵ディスクの丸ごとコピー

 内蔵のHDDディスクの物理的な抜き出しについては、次の記事「(2)HDD/SSDの入れ替え」で述べますが、取り出したディスクの丸ごとコピーは、次のように行います。

 まず、内蔵ディスクを適当な外付けディスクケースに入れて、Linuxマシンに接続します。次に、接続したデバイスの内容をddコマンドで丸ごとファイルに落とします(この例では、/dev/sdcが内蔵ディスク)。

$ dd if=/dev/sdc of=dynabook-az77-1tb-hdd.img bs=1M

 これも、1週間程度かかりました (bs指定をしていなかった。bs=1Mを付ければ2~3日で終わったと思う)。 コピーしたファイルのサイズは、内蔵ディスクと同じ1TBとなります。

メーカページ

-->

 パソコンなしにハードウェアで、丸ごとコピーする製品もあります。

4. まとめ

 WindowsパソコンのHDDの換装のためのバックアップについて説明しました。

 バックアップを取っておくと、まずは、一安心です。次回の記事では、物理的なディスク交換や1TBハードディスクを500GBに収める方法について説明します。

(2018/8/21)

関連記事

付録:NTFSのファイルシステムをLinuxで作る

 身近に転がっていたHDDは、Widowsパソコンでは認識できませんでした。おそらく、HDDのデータをLinuxのshredコマンドを使ってファイルシステムごと全て消去したためです。

 そこで、まず、Linux上でハードディスクにNTFSのファイルシステムを作ることにしました。lubuntuをインストールしたHP mini(関連記事はここ)でUSB接続した2TBのハードディスクにパーティションとファイルシステムを作成しました。

 ファイルシステムの作成は、partedコマンド、mkfsコマンドを使いました。mkfsが異常に遅く、12時間ぐらいかかりました。

 この原因は、"initializing device with zeros"のステップでディスク全体に0を書き込んでいるためです。"-Q"オプションをつければクイックフォーマットとなり、短時間で完了します(その他のオプション説明は"man mkfs.ntfs"を参照)。

$ sudo parted /dev/sdb
(parted) mklabel msdos
(parted) mkpart
Partition type?  primary/extended? primary
File system type?  [ext2]? ntfs
Start? 0
End? -1s
Warning: The resulting partition is not properly aligned for best performance.
Ignore/Cancel? I
(parted) p
Model: ST2000LM 003 HN-M201RAD (scsi)
Disk /dev/sdb: 2000GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags:

Number  Start  End     Size    Type     File system  Flags
1      512B   2000GB  2000GB  primary  ntfs lba

(parted) quit
$ sudo mkfs -t ntfs /dev/sdb1

注:ここでは、partedを使いましたが、GPTテーブル用のgdiskもあります*2。こちらの方が使いやすいかもしれません。

CPU温度やCPU使用率のログを取る (Win10)

【概要】

 WindowsでCPU温度・CPU使用率のログを取る方法についてまとめました。Windows標準の「コンピュータの管理」のパフォーマンスのモニタリングツールを使えば、ログをファイルに書き出せます。

1. はじめに

 前回の記事では、冷却台の評価のためパソコンの温度計測を行いましたが、画面をキャプチャしながら、取り扱っていました。いろいろと不便です。調べてみると、パソコンのいろいろな内部情報をファイルへ書き出すことができることが分かりました。

 本稿では、そのような内部情報のファイルへの記録方法について説明します。

2. ログを取る

 以下では、記録するデータとしてCPU温度とCPU使用率を例に説明します。

2.1 データコレクターセットの定義

 まず、「コンピュータの管理」でモニタするコンピュータ情報のデータのセット「データコレクターセット」を定義します。

2.1.1 「ユーザ定義」を作成する

 まず、データコレクターセットの「ユーザ定義」を作成します。その後、「ユーザ定義」をカスタマイズします(次節)。

データコレクターセットの作成画面を開く

  • 「コンピュータの管理(ローカル)」→「システムツール」→「パフォーマンス」→「データコレクターセット」→「ユーザー定義」の右クリックで「新規作成(N)」→「データコレクターセット」を選択
f:id:toranosuke_blog:20180817170645p:plain:w500

データコレクターの名前の設定

  • 「名前(M)」を設定し、「次へ(N)」
    • ここでは、デフォールトの「New Data Collector Set」のままで説明
    • 「テンプレートから作成する(推奨)(T)」はそのまま。
f:id:toranosuke_blog:20180817170650p:plain:w500

テンプレートの設定

  • 「テンプレートデータコレクターセット(T)」で「Basic」を選択し、「次へ(N)」
f:id:toranosuke_blog:20180819104650p:plain:w500

データの保存場所の設定

  • 「ルートディレクトリ(D)」を設定し、「次へ(N)」進む。
f:id:toranosuke_blog:20180819105248p:plain:w500

データコレクターセットを作成・保存する

  • 「保存して閉じる(W)」のまま、「完了(F)」する。
f:id:toranosuke_blog:20180819105450p:plain:w500

2.2 収集するデータの設定

 前節で作成したユーザー定義の「New Data Collector Set」に対して、収集するデータを設定します。

不要な収集データの削除

  • 「New Data Collector Set」の「Configuration」「Kernel Trace」を削除する。
     「Configuration」や「Kernel Trace」で右クリックし、「削除(D)」を選択する。
f:id:toranosuke_blog:20180819112649p:plain:w500


不要なパフォーマンスカウンターを削除

  • 「Performance Counter」を右クリック→「プロパティ(R)」を選択→「Performance Counterのプロパティ」のウィンドウを開く。
f:id:toranosuke_blog:20180819113509p:plain


  • 不要なパフォーマンスカウンター「¥Processor()¥」を削除する。
f:id:toranosuke_blog:20180819113651p:plain

CPU温度とCPU使用率のデータ収集を設定

  • 「Performance Counterのプロパティ」の「追加」から、CPU温度とCPU使用率を設定する。
f:id:toranosuke_blog:20180819114029p:plain:w500
CPU温度の追加

f:id:toranosuke_blog:20180819114206p:plain:w500
CPU使用率の追加
  • 「Performance Counterのプロパティ」で「サンプルの間隔(I)」と「最大サンプル数(M)」を設定する。
     ここでは、10秒間隔で、最大10000サンプル、つまり、約28時間(10x10,000/3600=27.8時間)のデータを記録するように設定している。

 「Performance Counterのプロパティ」で、適宜、「ログフォーマット(F)」や「ログファイル名(N)」、「ファイ名のフォーマット(F)」などを設定する。

  • 「New Data Collector Setのプロパティ」→「停止条件」タブで停止条件を設定する。  「全体の期間(D)」を適宜設定する。デフォールト値は、「全体の期間」として1分が設定されているので、1分のデータしか記録されない場合は、ここの設定を確認する。
f:id:toranosuke_blog:20180819202012p:plain

2.2 データ収集の開始

  • 新しくユーザー定義した「New Data Collector Set」でデータ収集を開始する。
     ユーザー定義の「New Data Collection Set」を右クリックし、「開始」を選択する。

  • 指定した出力ファイル名で収集データが保存される。
     指定した出力ファイル名は、「New Data Collector Setのプロパティ」の「ファイル名の例」で確認できる。

  • 保存されたデータの例
     「ログフォーマット(F)」で「タブ区切り」を出力した場合の出力例です。

"(PDH-TSV 4.0) ("   "\\KALI\Thermal Zone Information(\_TZ.THRM)\Temperature"    "\\KALI\Processor(_Total)\% Processor Time"
"08/19/2018 12:16:12.413"   "327"   " "
"08/19/2018 12:16:22.415"   "326"   "11.099851579793995"
"08/19/2018 12:16:32.411"   "327"   "11.546767349739318"
"08/19/2018 12:16:42.416"   "327"   "13.947944802304935"
"08/19/2018 12:16:52.422"   "326"   "10.457082756639725"
"08/19/2018 12:17:02.412"   "326"   "14.03997696466247"
"08/19/2018 12:17:12.418"   "328"   "14.091034207271369"
"08/19/2018 12:17:22.424"   "326"   "9.1432902279966815"
"08/19/2018 12:17:32.415"   "325"   "9.6579174171366517"
"08/19/2018 12:17:42.420"   "325"   "13.7184316714544"
"08/19/2018 12:17:52.408"   "326"   "14.118761909741039"
"08/19/2018 12:18:02.414"   "326"   "14.288049643974221"
"08/19/2018 12:18:12.419"   "326"   "14.786049969030024"
"08/19/2018 12:18:22.410"   "325"   "9.5827334511697444"
"08/19/2018 12:18:32.414"   "326"   "18.651734511613704"

 2列目が温度(K)、3列目がCPU使用率です。10秒間隔でデータが記録されています。

 この例では、「New Data Collection Setのプロパティ」→「全般タブ」の「説明(T)」を削除しています。削除しない場合は、「説明(T)」の内容が一行目に表示されます。

3. 収集したデータの表示

3.1 記録したデータの表示

 「パフォーマンスモニター」を使って、記録したデータを表示することができます。

  • 「パフォーマンスモニターのプロパティ」→「ソース」タブ→「データソース」→「ログファイル(L)」で記録したデータを指定する。
    「時間の範囲(T)」で、指定した範囲のデータを表示できます。
f:id:toranosuke_blog:20180819131449p:plain

3.2 データ収集とリアルタイムでのモニタ

 データの収集時でもデータ(CPU温度・CPU使用率)を「パフォーマンスモニター」でリアルタイムでモニタすることができます。

  • 「パフォーマンスモニターのプロパティ」→「ソース」タブ→「データソース」→「現在の活動状況(C)」を指定する。
f:id:toranosuke_blog:20180819143443g:plain
CPU温度(赤)とCPU使用率(青)を表示。
(パフォーマンスモニターの「プロパティ」で右クリック→「イメージを保存(I)」でグラフ画像が保存できる)


 ここで、データ収集中のファイルを指定するとエラーとなります。

f:id:toranosuke_blog:20180819202828p:plain
データ収集中のログファイルはデータソースとして指定できない。


  • 個々のデータを別々に表示  CPU温度とCPU使用率では、データの範囲が異なるので、見にくい場合には、「コンピュータの管理」を複数開けば、それぞれのデータ範囲に合わせたグラフを表示できます。
f:id:toranosuke_blog:20180819143552p:plain
7zipでCPUスレッド数を8→0(停止)→1→2→4→6→8→0と変更している。

まとめ

 WindowsでCPU温度・CPU使用率のログを取る方法についてまとめました。一旦、ファイルに保存してから、データを加工するときに便利だと思います。ご参考にして頂ければ幸いです。

(2018/8/19)

関連記事


Amazonで見つけた面白いUSB扇風機。ちょっと惹かれます。同じ原理のディプレイデバイスが、随分昔にWBSで紹介されていたけど、随分安い商品になったのですね。なんか感慨深い。

CPU温度をWindows上で計測して、パソコン冷却台の効果を調べた

【概要】

 ノートパソコン用の冷却台の効果を調べるために、Windows 10 のツールを使って、CPU温度を計測しました。条件でいろいろ変わるのですが、CPU温度は、3℃~5℃ぐらい低下することが分かりました。但し、CPU使用率が100%の場合ではCPU温度は、低下しませんでした。筐体温度の低下も、3℃~5℃程度ではないかと思います。残念ながら、期待していたよりも冷却効果は高くありません。他の機種と比較していないので、これが妥当な数字なのか、良く分かりませんが。

(ファンのon/offだけではなく、冷却台の有無も含めて評価したところ、10℃程度のCPU温度の低下がありました。追記参照。)

1. はじめに

 先日、ノートパソコン用の冷却台を購入しました(記事はここ)。その効果を調べるために、温度を計測したくなりました。Windowsのツールは詳しくはないのですが、CPU温度は、Windowsの「コンピュータの管理」で計測し、SSD温度はCrystalDiskInfoによってモニタできることが分かりました。今回は、それらの使い方とその実測結果をまとめます。

2. CPU温度を計測する

 CPUに組み込まれている温度センサの値は、Windowsの「コンピュータの管理」を使ってモニタすることができます*1

2.1 「コンピュータの管理」でCPU温度を計測する

2.1.1 パフォーマンスモニタを開く

 「Windowsマーク」(右ボタン)→「コンピュータの管理(G)」→「コンピュータの管理(ローカル)」→「システムツール」→「パフォーマンス」→「モニターツール」→「パフォーマンスモニタ」でモニタ画面を表示。

f:id:toranosuke_blog:20180815105608p:plain


2.1.2 カウンターの追加

「追加(プラスマーク)」(あるいは、Ctrl+N)を押して「カウンターの追加」→「Thermal Zone Information」→「Temperature」を選択し、「追加(D)>>」を押して、右側の「追加されたカウンター(C)」に追加し、「OK」。

f:id:toranosuke_blog:20180815102746p:plain:w500

「説明を表示する(H)」をチェックすると、温度の単位はケルビン(K)であることが分かる。セルシウス温度(℃)に変換するには、ケルビン温度(K)から273.15を引く。例えば、ケルビン温度の300Kは、セルシウス温度で26.85℃。

2.1.3 グラフオプションの設定

 「パフォーマンスモニタのプロパティ」(あるいは、Ctrl+Q)→「グラフ」タブで、垂直スケールを調整する。その他、スクロール方法やグリッドの表示を適宜設定する。

f:id:toranosuke_blog:20180815104257p:plain

 CPU温度は最大で370K強となったので、「垂直スケール」を300-380に設定。その他、グラフのオプションを適宜設定し、「適用(A)」をクリックする。

2.1.4 サンプリング間隔の設定

f:id:toranosuke_blog:20180815104952p:plain

 「全般」タブ→「グラフ要素」で、例えば、「サンプリング間隔(P)」を5秒、「期間(R)」を3600秒とすれば、1時間分のデータが表示されるようになる。なお、サンプリング数は、最大1000個まで。サンプリング間隔が5秒で、期間が3600秒であれば、サンプリング数は720(=3600/5)で1000以下に収まる。

2.2 7zipを使って、CPUに負荷をかける

 温度計測する際には、CPU負荷を一定にして、CPU温度を安定させる必要があります。

 CPU負荷は、CPUベンチマークツールを用いて、実現しました。使ったベンチマークツールは、ファイル圧縮・展開ツールの7zipです(7zipのホームページは、ここ)。ファイル圧縮・展開ツールですが、ベンチマーク機能もあります。

f:id:toranosuke_blog:20180815110916p:plain:w500
「ツール(T)」→「ベンチマーク(B)」で、ベンチマークのウィンドウが開く。

f:id:toranosuke_blog:20180815110929p:plain

 CPUスレッド数が8の場合、CPU使用率が100%となりました。冷却台を稼働させても、CPU使用率100%では温度に変化がなかったので、CPUスレッド数を1にしました。このときの、CPU使用率は約20%でした。

 また、負荷を最低にするには、何も作業しなければ、CPU使用率1%程度になりましたので、これで良しとしました。さらに下げるのであれば、様々なプロセスを停止していくことになるのでしょうが、大変そうなのでやっていません。

f:id:toranosuke_blog:20180815121804p:plain

 この例では、8スレッド・CPU使用率100%で98℃ (371K)から、1スレッド・CPU使用率20%で約81℃ (354K)にCPU温度が低下。負荷がなく、CPU使用率1%の場合はで約51℃(324K)であった。

3. SSD温度を計測する

3.1 S.M.A.R.T.機能を用いて、SSD温度をモニタする

 ハードディスクやSSDの温度は、デバイスに組み込まれているS.M.A.R.T.(Self-Monitoring Analysis and Reporting Technology)機能を用いて計測できます。

 S.M.A.R.T.に対応したツールは、いろいろあると思いますが、CrystalDiskInfo(ダウンロードはここ)を使ってモニタしました。これは、ディスクベンチマークとして有名なCrystalDiskMarkの作者が作ったツールです。

 ファンの効果を調べるためには、長時間、SSDに負荷をかけて温度変化を計測する必要がありますが、SSDの寿命を縮めそうなので、行いませんでした。また、安定的にSSDに負荷をかけるツールも探していません。

3.2 ディスクベンチマークテストでの温度上昇

 冷却台の効果は調べませんでしたが、CrystalDiskMarkを使ったときのSSDの温度上昇については調べました。

f:id:toranosuke_blog:20180815184624p:plain

 CrystalDiskMarkを起動して、SSDのベンチマークを行う*2。このベンチマークを走らせながら、温度を計測する。

f:id:toranosuke_blog:20180815185341p:plain:w500

 負荷をかけない場合には、SSD温度は40℃前後で推移するが、CrystalDiskMarkを実行すると、最大で55℃となった。

f:id:toranosuke_blog:20180816182127p:plain:w500
通常は、温度は青信号。

f:id:toranosuke_blog:20180816182211p:plain:w500
高温になると、黄色信号(何℃から黄色になるか未確認)

f:id:toranosuke_blog:20180816182234p:plain:w500

 55℃以上で赤信号。警告音が鳴る。HDDの動作範囲は50℃ぐらいなので、55℃はHDDなら危険水準の温度。しかし、使用しているSSDの動作範囲は0~70℃なので、危険水準ではないだろうが、低いことにこしたことはない。

 SSDで容易に55℃に達するとすれば、HDDはもっと高温になっていたのではないかと思う。これが、HDDが短命に終わった原因ではなかろうか(それでも2年はもったが、他の2.5インチHDDと比較すると、短命という印象)

4. ファンクーラーによるCPUの冷却効果

4.1 CPU使用率

 CPU使用率は、約1%、約20%で評価しました。CPUの使用率はタスクマネージャでモニタしましたが、ちょっとしたを操作するだけで、CPU使用率・CPU温度が大きく変化するので、温度計測中は極力、パソコンにお仕事をさせず、キーボード・マウスに触らないようにしました。

f:id:toranosuke_blog:20180815211944p:plain:w500
CPU1%では、クロック数が0.79GHzとクロックダウンしている。

f:id:toranosuke_blog:20180815211958p:plain:w500

CPU使用率20%で、クロック数は標準の2.60GHzから3.42GHzにブーストしている(ブースト時の最大クロック数は3.6GHz)。

4.2 計測条件

 以下のような計測条件で冷却台の冷却効果を調べました。

  • 室温:34~35℃
  • 室内に風はほとんどない状態(窓は締め切り)
  • 直射日光は当たらない
  • 条件を変えた場合、温度が安定するまで、少なくとも30分は待つ
  • 扇風機は人間用に弱風で使用(パソコンに風は当たらない)

 窓を開けておくと、室温32℃ぐらいで風が通って涼しいのですが、閉め切ると暑いです。また、計測は、最初から最後までで、数時間におよびましたが、室温は34~35℃の範囲で収まりました。

4.3 実験結果

 CPU使用率20%で、CPUの場所の下あたりに温度計を置いて、その温度を測ると、46℃(ファン停止)から43℃(ファン稼働)でした(3℃の温度低下)。このときのCPU温度は、87℃(ファン停止)から85℃(ファン稼働)で2℃の低下でした。

 ファンの稼働によって2~3℃温度が低下することが分かりました。しかし、パソコンはもっと冷えているという感覚だったのですが、計測すると、思ったほど温度は低下していませんでした。

f:id:toranosuke_blog:20180815213422j:plain:w400

 身近にあった安物の温度計(amazon)。厚さが12mmもあるので、パソコンと冷却台の間に挟み込むと、パソコンが浮き上がり、エアーフローが変化するはず。

 しかし、サイズ75x75x12mmの温度計は、エアフローに影響を与えますので、温度計がない場合についても計測しました。 温度計を外して、通常使う状態で温度計測すると、ファン停止で87℃、ファン稼働で82℃。5℃の冷却効果がありました。

 また、CPU使用率1%の場合では、53℃(ファン停止)から50℃(ファン稼働)と、CPU温度が3℃低下しました。

 結果を、以下の表にまとめます。

CPU使用率 ファン停止 ファン稼働温度低下
20% 温度計設置(温度計) 46℃ 43℃ -3℃
20% 温度計設置(CPU温度) 87℃ 85℃ -2℃
20% 通常状態(CPU温度) 87℃ 82℃ -5℃
1% 通常状態(CPU温度) 53℃ 50℃ -3℃
100% 通常状態(CPU温度) 98℃ 98℃ 0℃

5. SSDの冷却効果は評価せず

 SSDに関しては、負荷をかけると寿命を短くしそうなので、調べていません。例えば、CrystalDiskMarkでベンチマークテストで負荷をかけると、約40℃から55℃に温度上昇しました。危険な温度というわけではないと思いますが、やはり心配です。

 CPU使用率(CPU温度上昇)に対するSSD温度の影響は調べましたが、ほとんど影響しませんでした。これは、dynabookの場合、CPUとSSDが離れて配置されているためと考えられます。

6. まとめ

 暑い中、部屋を閉め切って、温度計測しました。大変です(笑)。

 冷却台を使うことで、3~5℃の温度低下しましたが、期待したほどの冷却効果が得られていないことが分かりました。今はUSB扇風機と併用しています。USB扇風機でさらに3℃ぐらい低下しますので、6~8℃の温度低下となります。猛暑はUSB扇風機との併用で乗り切ろうと思います。

 まあ、その前に室内クーラーを使えという話もありますけど、暑さにも慣れたので、32℃ぐらいまでは、余裕です(笑)。

(2018/8/16)

追記:パソコン直置き・旧ファンとの比較評価 (2018/8/17)

 パソコンを机の上に直に置いた場合と古いファンの場合も評価しました。

 評価結果は、以下の通りです。

(CPU使用率:20%、室温:32℃)
ファン停止ファン稼働温度低下
直置き 90℃ - -
古いファン 84℃ 79℃ -5℃
新しいファン 82℃ 80℃ -2℃

 この結果からすると、まず、机の上に直置きしないことで、6~8℃の冷却効果が得られています。ファンを動かすことで、さらに2~5℃温度が低下します。トータルで、10~11℃の温度低下の効果が得られました。

 直置きせずに、少し持ち上げて、熱が籠らないようにするだけでも十分な場合もあるかもしれません。その場合は、100円ショップで売っている鍋敷き台で十分ですね(笑)。

f:id:toranosuke_blog:20180817161029j:plain:w400
100円ショップの鍋敷き。これでも、十分な冷却効果はあるかも。


 結局、dynabookを据え置く私の使い方の場合には、新しい冷却台は、古い冷却台と比べて、冷却性能はほとんど変わらず、うるさく、振動が大きく、消費電力も大きいという良いところがない製品という結論でもあります。

 このため、新しい冷却台は、dynabookには使わず、ラズパイと付属ディスクの冷却用に使うことにしました。E-PRANCEのファンクーラーはメッシュ構造でどこからでも風が吹き抜けるので、昔のファンクーラーより適しているはずです。

 不要になったラズパイ用のファンクーラーはdynabookで使い、計2台でdynabookを冷却することしました(ファンクーラーを捨てるのも勿体ない)

f:id:toranosuke_blog:20180817161505j:plain:w500

ラズパイとハードディスクたち。ごちゃごちゃです。通常は2.5インチHDDの2台が24時間稼働、3.5インチのHDDはバックアップ時にたまに稼働するだけです。

f:id:toranosuke_blog:20180817161754j:plain:w500
dynabookはファンクーラーを2台にしたが、冷却効果が高まるというわけではない。

追記:HP miniには100円ショップがお似合い(2018/9/6)

 ヤフオク出品のための本の撮影用に、100円ショップで買ったまな板立て(本立て?)を冷却用に流用しています。このマシンは、もともと底面が非常に高温になるので、これだけでも十分冷却できています。

f:id:toranosuke_blog:20180906195209j:plain:w300f:id:toranosuke_blog:20180906195221j:plain:w300
もともとは、本を立てるために購入

f:id:toranosuke_blog:20180906195234j:plain:w300f:id:toranosuke_blog:20180906195341j:plain:w300

 折りたたむと、HP miniの冷却台にちょうど良い。sshでログインして使うLinuxパソコンなので、キーボードはほとんど使わないし、たまに使うだけなので、これでも十分です。

関連記事

*1:[Windows 10で、CPU温度を確認する手っ取り早い方法: 長続き目指しブログ

*2:CrystalDiskMarkのベンチマーク結果では、およそ製品スペック通りの値が得られている。

f:id:toranosuke_blog:20180818114930p:plain

シーケンシャルREAD/WRITEはほぼスペック通り(シーケンシャルについてはサムスンのスペック値もCrystalDiskMarkによる計測)。ランダムについては、製品スペックとCrystalDiskMarkの結果の対応関係をよく理解していないが、CrystalDiskMarkのREAD/WRITE(4KiB/Q8T8)が、製品スペックのRANDOM READ/WRITE(4KB,QD32)RANDOMと同じならば、ほぼスペック通りの性能。CrystalDiskMarkのREAD/WRITE(4KiBQ1T1)と製品スペックRANDOM READ(4KB,QD1)が同じなら、READはほぼスペック通り、WRITEはスペック値の半分程度の性能となっている。