2022年4月18日月曜日

粉吹きThinkPad

 長い間物置に入っていたThinkPad s30を取り出してみたら液晶がヤバい事になっている。

 それとともにケースの隙間から白い粉が出ている。あの白い粉はいったい何だろう?電解コンデンサの液が漏れたにしては量が半端ない。バッテリーは綺麗なまま取り外せているのでこれとは関係ない。液晶が漏れて乾いたのか?何れにしても何とかせねば、と早速上下に分解すると基板の周囲に山ほど白い粉が積もっている。これはいかん。

 このままじゃどうにもならないので粉をまき散らさないようにパーツを取り外してみると、

 不思議な事に粉が出来ているのはケースの底の周囲の表面と底から立ち上がったネジ受けだけで底板の底部や部品類は綺麗なままだ。従ってコンデンサの電解液の漏れや液晶の漏れが原因ではないようだ。

 とりあえずケースをぬるま湯に浸けて洗ってみた。浮きあがっていている粉は流れたがケースの表面に付着した部分は石のように固くて、少々こすっても取れない。

 何かおかしいなと思ってネットで検索してみると同例が1件見つかった。それによると、これはマグネシウム合金の腐食らしい。てっきり底板はプラスチックだと思っていたが、実はマグネシウム合金らしい。

 それならばと、ドライバーやピンセット等を使って白い粉を削った。うまく削れて金属光沢した表面が見える所もあるがなかなか手ごわい。金属のサビ取りなら何とかなるかなとCRCの5-56、3-36、2-26を使ってみると、表面は荒れているが白さが取れて少しは綺麗になったように見える。


続く

2022年4月16日土曜日

Dynabook(T75)のHDDを修復(その3)WindowsREの復活

  前回述べたようにBCDの回復(再構築)は、

> bootrec /rebuildbcd

で出来るが、これでは回復環境(WindowdRE)は回復出来ない。

 WindowsREを回復させるには reagentc コマンドを使う。ただ、reagentc はデフォルトでは現在立ち上がっているシステムを対象としているので reagentc をWindowsPEから使うには一工夫が必要である。

 先ず、reagentcを使うには予め回復環境のボリュームにドライブ文字を割り当てる必要がある。ディスクの管理情報を表示させ、その中で回復環境(WinRE)のVolumeは非表示となっているのでこれにドライブ文字を次の様に割り付ける。次の下線の文字が入力するコマンドである。

> diskpart
DISKPART> list volume
DISKPART> select volume N   ...NはWindowsREの含まれるVolume番号
DISKPART> assign letter R   ...仮に文字Rを割り付ける
DISKPART> list volume
DISKPART> exit

 これを実行した結果、次の様にWinREのボリューム(Volume 3)にRが割り付けられている。なおVolume5,6はWindowsPEの入ったUSBメモリーなので無視してよい。

 WindowsREの実体はWindowsRE.wimというファイルで、これはR:¥Recovery\Windowsのディレクトリ(フォルダ)に収納されているが(私のケースでは)Windows以下が隠しファイルになっていて表示されず、危うく欠落していると判断するところだった。パーティションの容量とボリュームの空き容量が余りにも違う(0.5GBほど少ない)事から何か隠れていると追及して分かった(隠しファイルを表示したい場合はdirコマンドに/a:hオプションを付ける)。

 reagentc はWindowsPEには含まれないのでC:ドライブにあるものを使う。そのため次の様に先ずカレントディレクトリを C:¥Windows¥System32 に移す

> c:
C:¥> cd ¥Windows¥system32
C:¥Windows¥System32>

 回復環境の場所をBCDに設定するには次のコマンドを使う。/target が起動したディスク以外のディスクに設定する場合の書き方である。

C:¥Windows¥system32> reagentc /setreimage /path R:¥Recovery¥WindowsRE /target C:¥windows

次に 回復環境を起動可能にするには、 

C:¥Windows¥system32> reagentc  /enable  /osguid {guid}

とする。ここで/osguid の引数の{guid}は bcdedit /enum /v で表示されるブートローダの identifier の値(GUID)である。

 これらを適用した結果、BCDのdefaultのブートローダーには次の様に recoverysequence recoveryenabled が追加されWindowsREが立ち上がるようになった。

Windows ブート マネージャー
--------------------------------
identifier              {bootmgr}
device                  partition=\Device\HarddiskVolume1
path                    \EFI\Microsoft\Boot\bootmgfw.efi
description             Windows Boot Manager
locale                  ja-JP
default                 {default}
resumeobject            {5ef36c70-b615-11ec-93cb-806e6f6e6963}
displayorder            {default}
timeout                 30

Windows ブート ローダー
--------------------------------
identifier              {default}
device                  partition=C:
path                    \Windows\system32\winload.efi
description             Windows 10 Home
locale                  ja-JP
recoverysequence        {8d7ba65d-b72b-11ec-b0fc-b5353a56518a}
recoveryenabled         Yes
osdevice                partition=C:
systemroot              \Windows
resumeobject            {5ef36c70-b615-11ec-93cb-806e6f6e6963}
bootmenupolicy          Standard

 ここまで出来て回復環境が使えるようになったので、あとはDynabookの持ち主にやってもらう事とした。

メデタシ、メデタシ。

 

 

 

 

 

 

 

 

2022年4月15日金曜日

Dynabook(T75)のHDDを修復(その2)Windowsの復活

 前回、壊れたHDDからエラー付きでクローンもどきを作ってユーザデータを吸い上げることが出来たが、クローンもどきを実装したDynabookは立ち上がらなかった。この状態でマイクロソフトからWindowsのインストーラをダウンロードしピュアなWindows10をクリーンインストールすることは出来るが、出来ればDynabookの回復環境(WindowsRE)を起動してメーカー提供のアプリを含む工場出荷時の状態に戻せるようにしたい。
 このままでは回復環境が立ち上がらないので作業用PCで(rufus使って)USBメモリーにWindowsPEをインストールし、そのUSBメモリーからDynabookを起動して作業する事にした。
 F12を押しながらDynabookを起動し、USBメモリーから立ち上げ、キーボードの選択を行い、次のインストール画面の左下に小さく表示された「コンピュータを修復する」をクリックし(このとき間違っても「今すぐインストール」をクリックしてはならない)、

次に「トラブルシューティング」に移り、

メニュー中の「コマンドプロンプト」を起動する。

 ここで先ずGPTの起動情報(EFIパーティションの中にあるBCDファイルの内容)を確認する。それにはBCDEditコマンドを使う。
 コマンドプロンプトから bcdedit  /enum を実行すると、

>bcdedit  /enum

 Windows ブート マネージャー
--------------------------------
identifier              {bootmgr}
device                  partition=\Device\HarddiskVolume7
path                    \EFI\Microsoft\Boot\bootmgfw.efi
description             Windows Boot Manager
locale                  ja-JP
inherit                 {globalsettings}
default                 {default}
resumeobject            {3990bcde-b3ba-11ec-81f0-e8a48f166c51}
displayorder            {default}
toolsdisplayorder       {memdiag}
timeout                 30

Windows ブート ローダー
--------------------------------
identifier              {default}
device                  partition=C:
path                    \Windows\system32\winload.efi
description             Windows 10
locale                  ja-JP
inherit                 {bootloadersettings}
recoverysequence        {3990bce0-b3ba-11ec-81f0-e8a48f166c51}
displaymessageoverride  Recovery
recoveryenabled         Yes
isolatedcontext         Yes
allowedinmemorysettings 0x15000075
osdevice                partition=C:
systemroot              \Windows
resumeobject            {3990bcde-b3ba-11ec-81f0-e8a48f166c51}
nx                      OptIn
bootmenupolicy          Standard

といった情報が表示される。
 この中に表示されている{3990bcde-b3ba-11ec-81f0-e8a48f166c51}の様な値をGUIDといいシステム的に決まっている定数か或いは重複しないようWindowsが個別に割り当てた値である。{GUID}は「システム上の名前」であり、何処か別の所に定義され或いは存在している実体と結びついている。このほか{default}の様な{}で括られた表現はGUIDにラベル(人が読むための名前)を割り付けたものである。例えばブートマネージャーで引用されている{default}はidentifierが{default}であるブートローダーの事である。

 クローンもどきのHDDが立ち上がらないのは、完璧なクローンならばパーティションのGUIDもそのままコピーされ矛盾は生じないがクローンもどきではパーティションを作成した時点でそこに新しいGUIDが割り振られるためBCDの記述内容と実際に割り振られたGUIDが不整合を起こしているものと考えた。

 ここはダメモトでネット情報を元に管理情報を手作業で書き込んでみることにし、次の一連のコマンドを1つずつ打ち込んだ。

> bcdedit /store BCD /create {bootmgr} /d "Windows Boot Manager"
> bcdedit /store BCD /create /d "Windows 11" /application osloader
ここに新しい{GUID}が表示されるのでそれをコピーして次の{xxxx}に入れる。
> bcdedit /store BCD /set {bootmgr} default  {xxxx}
> bcdedit /store BCD /set {bootmgr} path \EFI\Microsoft\Boot\bootmgfw.efi
> bcdedit /store BCD /set {bootmgr} locale ja-jp
> bcdedit /store BCD /set {bootmgr} displayorder {default}
> bcdedit /store BCD /set {bootmgr} timeout 10
> bcdedit /store BCD /set {default} device partition=c:
> bcdedit /store BCD /set {default} osdevice partition=c:
> bcdedit /store BCD /set {default} path \windows\system32\winload.efi
> bcdedit /store BCD /set {default} systemroot \windows

 これは成功しDynabook単独でWindowsが立ち上がるようになった。しかしBCDの項目数が元のBCDより少ない。元通りの内容に戻したいがこれ以上正確に打ち込める自信も無い(実際幾つか間違った内容も打ち込んでいたが順序に意味がある可能性もあり訂正する方法が分からなかった)。

 あれこれ調べていくうちにbootrecコマンドを使うともっと簡単にBCDを再構築できる事が分かった。そこで次の一連のコマンドで改めてBCDを再構築した。

> bootrec /fixmbr
> bootrec /scanos
> bootrec /rebuildbcd

 これで内蔵HDDからWindowsを起動する事ができた。この時のBCDの内容は次の様になっていた。

Windows ブート マネージャー
--------------------------------
identifier              {bootmgr}
device                  partition=\Device\HarddiskVolume3
path                    \EFI\Microsoft\Boot\bootmgfw.efi
description             Windows Boot Manager
locale                  ja-JP
default                 {default}
displayorder            {default}
timeout                 30

Windows ブート ローダー
--------------------------------
identifier              {default}
device                  partition=C:
path                    \Windows\system32\winload.efi
description             Windows 10 Home
locale                  ja-JP
osdevice                partition=C:
systemroot              \Windows
resumeobject            {5ef36c70-b615-11ec-93cb-806e6f6e6963}
bootmenupolicy          Standard

オリジナルに比べ幾つか項目が無くなっているが、これでとりあえずWindowsは動く(まだ回復環境は起動できない)。

 ここまで来たらDynabookに通常通りログインし、壊れている可能性のあるWindowsを修復することとした。ネットが使える状態でコマンドプロンプトを管理者モードで立ち上げ、次の2つのコマンドを使って復旧する(多少時間がかかる)。

> sfc /scannnow
> DISM /online /cleanup-image /restorehealth

 sfcは破損したファイルを修復して正常に終了したが、一方DISMは3.8%進んだ所で「指定されたファイルが見つかりません」とエラーを吐いて止まってしまった。どうやらシステムのファイルが壊れているようだ。いよいよクリーンインストールが必要になった。そのためには回復環境を復活させる必要がある。

  単にWindowsをクリーンインストールするのなら作成したWindowdPEから「今すぐインストール」を実行すれば良いが、一方Windowsを工場出荷の状態に戻すには回復環境(WindowsRE)を復活させHDDに格納されているメーカー作成のインストーラを起動させる必要がある。しかし回復環境はまだ立ち上がらない。

続く。

2022年4月9日土曜日

Dynabook(T75)のHDDを修復(その1)クローンの作成

 家族がDynabook(T75)が立ち上がらない、と持ってきた。これを使える所まで回復したので記憶と記録を元に書き留める。なお以下の内容は、試行錯誤的な作業を数日間に渡って行った関係で時間的な流れや手順を正確に再現したものではない。

 Dynabookの電源を入れてみると画面の中央にDynabookとタイルが出たままで、BIOSや回復環境へ進むためのファンクションキー(Fxx)の機能を表すメッセージが出る所まで進まず、 暫く放置していると回復環境(WindowsRE)が立ち上がるが修復関係のメニューを選んでもエラーになったりしてWindowsは立ち上がらない状態であった。なお家族によるとWindowsは更新を繰り返し当初Windos10であったものがWindows11までアップデートされたそうである。

 回復環境でコマンドプロンプトを立ち上げてchkdskを実行してみると多くの時間がかかるとともに次のメッセージが出てディスク(HDD)にエラーがある事が分かる。

「破損したディスク上のアッパーケース テーブルが検出されました」

 diskpart を立ち上げ list volume を実行してみると、表示にとても時間がかかってどうやらHDDが壊れているようだ。このHDDを取り出し別のPCに繋げてディスクの管理で内容を見るとC:ドライブに相当するパーティションがNTFSではなくRAWになっている。これではWindowsは立ち上がらない。


 これ以上このHDDで作業してもアクセスにとても時間がかかって作業効率が悪く、さらに最悪の場合HDDを壊してデータが復元できなくなる可能性があるので先ずこのHDDのクローンを作成することとした。

 同じ大きさのHDDを調達し、手持ちの Acronis True Image(2014版)付属のDVDで立ち上げHDDのクローニングを試みるもエラーがあってクローニングは不可とのメッセージで拒否される。代わりにHDDのバックアップの取得を行った(これは実行できた)。特にエラーのあるC:ドライブのパーティションはファイル毎ではなくセクター単位での取得になり、1TBのディスク全体を吸い上げるのに8時間くらいかかった。このとき進行状況の0%辺りと44%辺りがやたら遅かったので、この辺りが物理的に壊れている可能性が高い。

 次にこのバックアップデータをAcronisを使って作業用の新しいHDDに書き込む(リカバリ)。その前段階として新しいディスク全体の管理方法(MBR又はGPT)を元のHDDと同じ(GPT)にする必要がある。復元は、最初はAcronisで行ったが適当にお任せでやったら各パーティションの空きスペースが圧縮され元の状態を復元できなかった。そこで予めパーティションを作成してその中にデータを流し込むこととし、別のPC(※)(以下「作業用PC」とする)のdiskpartを使って壊れたdiskから管理情報(VolumeやPartition情報)を採取した(#)。

 元のDISKの管理情報は次のようなものである。

(この表示には作業用PCを使ったため、上の表示では元のC:がE:として割り当てられている)

(Partition 2がVolumeとして認識されていないのは、Partition間の隙間だからだろう)

 これらの情報からパーティション(順番、大きさ、フォーマット形式等)をdiskpart(或いは相当のツール)を使って新DISKに再現した。しかし上の表示値は丸められているので正確な値は分からず、元あった場所に狂い無くパーティションを回復することは出来なかった。このときVolume 5 (Partition 3)の属性を正しくNTFSと指定する事を忘れてはならない。

 新しいディスクに管理情報を設定した後、Partition毎にバックアップデータを流し込んだ。このデータの書き込みには4時間くらい、とくに壊れているPartition 3は全セクターをベタ書きするので時間がかかった。そしてAcronisの指示通り最後にトラック0やMBRも書き戻した。これらディスクの管理情報は最後に書き戻すよう指示されているので、ツールが適当に値を修正している筈だ。これでクローン(正確にはクローンもどき)は出来上がった。以下はこのHDDでの作業である。

 このディスクをDynabookに戻して起動を試みたが、いきなりエラーとなるだけで回復環境を含めて全く立ち上がらなかった(これはよくあるパターンで、普通は泣く泣くクリーンインストールするしかない)。各Partitionの位置がオリジナルと完全に一致していない事が原因かと思ったが最後に書き込むMBRはツールで修正されていると思われ、またこのDiskはGPT形式でありMBRを使っていないので関係ない筈なのだが・・・。

 このディスクを作業用PCに付けるとファイルにアクセス出来るようになった(色々試みたのでこの段階で何かの復活ツールの世話になったのか思い出せない)。ただし幾つかのファイル、とくにユーザのファイルへのアクセス権が無いと怒られた。そこでユーザフォルダのプロパティを開き、セキュリティタブの中のアクセス権を編集しUsersやPowerUsersを追加した(%)。ここまで来てユーザのファイルにアクセスできるようになり、ファイルを外付けUSB-HDDに取り出す事ができた。

  最後にchkdskを/fオプション付きで起動し壊れていたC:パーティションの修復を試み、それによって様々なエラーが修正された。その中には、

 CHKDSK は新しいルート ディレクトリを作成します。
  165 個のインデックスなしファイルがスキャンされました。             
  48 個のインデックスのないファイルが元のディレクトリに回復されました。
  117 個のインデックスのないファイルが lost and found に回復されました。
  48442 個の再解析レコードが処理されました。
 マスター ファイル テーブル (MFT) のミラーでエラーを修復します。
 属性定義テーブル エラーを修復します。
 ブート ファイル エラーを修復します。
 マスター ファイル テーブル (MFT) の BITMAP 属性エラーを修復します。
 ボリューム ビットマップ エラーを修復します。

 などがあった。

 続く。 

(※)作業用PCはDELLのLatitude D630(Core2Duo,4GB) というWindows-XP時代のPCをSSD化しWindows10に更新したものである。 

(#)SANWAのUSB-CVIDE3というSATA-USB3.0変換ケーブルを使って接続した。

(%)Windowsを十分理解していないのでこの操作が妥当であるかは分からない。ただ、Windowsの調子が悪くなった時はほぼ間違いなくアクセス権と後述の{GIUID}の問題が絡んでくる事は経験済み。