Windows Server 2019 の新規OSインストール時にて、以下エラーが発生して先に進めなかった人に向けた記事です。
Windows failed to start. A recent hardware or software change might be the cause. To fix the problem:
1. Insert your Windows installation disc and restart your computer.
2. Choose your language settings, and then click “Next”.
3. click “Repair your computer.”
If you do not have this disc, contact your system administrator or computer manufacturer for assistance.
File: \EFI\Microsoft\Boot\BCD
Status: 0xc000014c
Info: The Windows Boot Configuration Data for your PC is missing o contains errors.
TL;DR
ISOファイルが破損しているので、再度ISOファイルを入手しなおしましょう。可能であれば利用前にhash検証しましょう。
なぜ発生したのか
作業用PCでISOファイルのダウンロード後、保存先ディレクトリにISOファイルをcopy&pasteしたのですが、書き込みに時間がかかっていて処理完了を見届けず、その日の作業を終了していたのでした。
翌日、何かしらで作業用PCは再起動したいたのですが、コピー元/先のファイルサイズが同じであったことから、コピーは問題ないだろうということでOSインストール作業に取り掛かったのでした。
なぜなぜ
こればっかりは作業PCのファイル書き込み処理が遅かったのと、勝手にOSアップデートと再起動を一括でやってしまう世界トップシェアのデスクトップOSが良くないのですが、いつまでかかるかわからない作業をそのようなOSに委任した私の責もあるので、もう少し調べてみたいと思います。
なぜなぜなぜ
明確なエラー原因は特定できなかったのですが、少し調べた結果、以下事象にあたりそうです。
状況として以下のため、容量確保だけが完了し書き込みは完了しない中で処理が停止したものとみられます。
ダウンロード直後のISOファイル:正しい
コピーした後のISOファイル:ディスク容量は正しい、内容は破損
ファイルシステムの技術
https://www.atmarkit.co.jp/ait/articles/1210/02/news131.html
「10メガバイトの既存エクセルファイルをコピーして、あるフォルダの配下に、AAAという名前の10メガバイトの新規ファイルとして作成せよ」という命令を、アプリケーションからファイルシステムが受け取ったとする。ファイルシステムは、ハードディスク上の空き領域をチェックし、どのあたりにAAAという名前のファイルを配置するか決定する。そして、「どのあたりに配置されているか」という情報をハードディスクのインデックス領域に記録する。ほとんどの場合、その時点で、アプリケーションに対して「処理が完了しました」という連絡をしてしまう。その後で、メモリ上にあるデータを、ハードディスク上の然るべき場所に書き込んでいく。このような処理を行う理由は、アプリケーションに対する待ち時間を短縮し、システム全体の処理スピードを上げるためである。専門用語では、このような処理を「非同期I/O」という。システムの処理スピードを上げるための非同期I/Oであるが、OSの異常停止等のトラブルが発生すると、ファイルシステムの障害の原因となる。
再現確認
完全再現には作業PCの電源を抜くなど必要になるので、疑似的にファイルコピーを中断した状態で確認しました。
1.エクスプローラからのファイルサイズ確認
コピー開始時から確認してましたが、サイズについては逐次増加するのではなく最初からコピー元ファイルと同じ容量となっており、書き込みの実態と異なることが確認できました。
2.ファイルのプロパティ確認
ファイルのプロパティからは、全般タブでは容量が異なること、詳細タブでは容量が一致することが確認できました。エクスプローラでは詳細タブの方を表示しているのでしょう。
3.ファイル内容(先頭)
ファイル内容をheadした内容では、コピー前後で初頭の数十文字を除いて一致していました。
PS C:\WINDOWS\system32> Get-Content "[コピー元]\17763.1158.200413-1759.rs5_release_svc_refresh_SERVER_EVAL_x64FRE_ja-jp.iso" -Encoding Ascii | Select-Object -first 5
CD001 SSS_X64FREE_JA-JP_DV9 ?a))a?
"ppx
(SSS_X64FREE_JA-JP_DV9 MICROSOFT CORPORATION MICROSOFT CORPORATION, ONE MICROSOFT WAY, REDMOND WA 98052, (425) 882-8080 CDIMAGE 2.56 (01/01/2005 TM) 2020041400000000000000000000000000000000000000000000000000000000CD001EL TORITO SPECIFICATION?3????|????????QCD-ROM not bootable on this system.Remove CD-ROM and press ENTER key to continue.?|???#??????4|??.???????<t???u??????CD001BEA01NSR02TEA01Microsoft CorporationLIU????This disc contains a "UDF" file system and requires an operating system
that supports the ISO-13346 "UDF" file system specification.
PS C:\WINDOWS\system32> Get-Content "[コピー先]\17763.1158.200413-1759.rs5_release_svc_refresh_SERVER_EVAL_x64FRE_ja-jp.iso" -Encoding Ascii | Select-Object -first 5
?J8#?RWf=?"?<?d=??K??K?B?CD001 SSS_X64FREE_JA-JP_DV9 ?a))a?
"ppx
(SSS_X64FREE_JA-JP_DV9 MICROSOFT CORPORATION MICROSOFT CORPORATION, ONE MICROSOFT WAY, REDMOND WA 98052, (425) 882-8080 CDIMAGE 2.56 (01/01/2005 TM) 2020041400000000000000000000000000000000000000000000000000000000CD001EL TORITO SPECIFICATION?3????|????????QCD-ROM not bootable on this system.Remove CD-ROM and press ENTER key to continue.?|???#??????4|??.???????<t???u??????CD001BEA01NSR02TEA01Microsoft CorporationLIU????This disc contains a "UDF" file system and requires an operating system
that supports the ISO-13346 "UDF" file system specification.
4.ファイル内容(末尾)
ファイル内容をtailした内容では、コピー前後で全く異なっていました。コピー中で中断している証拠かと思います。
PS C:\WINDOWS\system32> Get-Content "[コピー元]\17763.1158.200413-1759.rs5_release_svc_refresh_SERVER_EVAL_x64FRE_ja-jp.iso" -Encoding Ascii | Select-Object -last 5
T88???$??8.rdata8x.rdata$zzzdbg ?.rsrc$01? ?.rsrc$02 R???? ?D~? %?c??a?????4<??????(?@?X?p????????? ???!8??!??MUI?????c??K?1pB??q
??????Y????????MUIja-JPSxsMigPlugin?4VS_VERSION_INFO???
cE
cE?StringFileInfo?041104B0LCompanyNameMicrosoft CorporationRFileDescriptionSxs Migration Pluginh$FileVersion10.0.17763.1 (WinBuild.160101.0800)BInternalNameSxsMigPlugin.dll?.LegalCopyright? Microsoft Corporation. All rights reserved.ROriginalFilenameSxsMigPlugin.dll.muij%ProductNameMicrosoft? Windows? Operating System>
ProductVersion10.0.17763.1DVarFileInfo$Translation?PADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDING?f??a)??
PS C:\WINDOWS\system32> Get-Content "[コピー先]\17763.1158.200413-1759.rs5_release_svc_refresh_SERVER_EVAL_x64FRE_ja-jp.iso" -Encoding Ascii | Select-Object -last 5
I?N???????????*
???NM????\.h?fm?k?????o?6???0C???h#r?V?@mM????Z:???*L????
Q=&?3*G?^?+1~I?#?????????+??a?i?c?z?EK_??d???J??u??n????e}???|?r?*V
???\@?Kk2i????Qbn-???As?????t?Y"???:????????qc???Q?{????g%D<??? 5v??lw??
?q?q?nl)9? ??#??7`W?4y??kS???????@m"&pRK??w?????#?L,|?&?|?)Hw??8??Ba;?????z??[?$q?????M?t@?C??}?^??mv??? X??+????C???A&_?8??9 ;???@??-??i2_iS?*???z??sb?)??Y??S??z?SIW?X?q?s?2'Z|5?,???W???vG?T?b???h}h?=?W??????A???q/
5.hash値の差異
hashですが、こちらはファイルの中身を利用して作成されているため、違いが確認されました。
C:\>certutil -hashfile "[コピー元]\Windows Server 2019\17763.1158.200413-1759.rs5_release_svc_refresh_SERVER_EVAL_x64FRE_ja-jp.iso" sha256
SHA256 ハッシュ (対象 [コピー元]\17763.1158.200413-1759.rs5_release_svc_refresh_SERVER_EVAL_x64FRE_ja-jp.iso):
a455d1730f8512800f5efb2d7f77ce73e2ce603e7e7ff0f68a8d97f0862f6e72
CertUtil: -hashfile コマンドは正常に完了しました。
C:\>
C:\>certuti -hashfile "[コピー先]\17763.1158.200413-1759.rs5_release_svc_refresh_SERVER_EVAL_x64FRE_ja-jp.iso" sha256
SHA256 ハッシュ (対象 [コピー先]\tmp\17763.1158.200413-1759.rs5_release_svc_refresh_SERVER_EVAL_x64FRE_ja-jp.iso):
c6ea984fe6a7030929bd5712f2196dd53e9c2e3dfbb33744794189ee3334cd55
CertUtil: -hashfile コマンドは正常に完了しました。
C:\>
最後に
大規模ファイルを利用する際には、やはりhashでファイルチェックを掛けた方がよい、ということになりました。
参考
ファイルシステムの技術
https://www.atmarkit.co.jp/ait/articles/1210/02/news131.html
PowerShellを使ってファイルの文字コードと改行コードを変換する
https://mseeeen.msen.jp/use-powershell-convert-to-encoding-and-line-feed/