Server 2003/2008からP2Vで仮想化したときにブルースクリーン(0x0000007B)が発生する。

Windows Server 2003やWindows Server 2008の環境でP2Vツールを使用して物理サーバーから仮想環境(Hyper-V等)に移行した場合に、OSの起動時にブルスクリーンが発生して0x0000007Bのエラーが発生する場合がある。これは元の物理サーバーの環境でRAIDやSCSIを使用していたために、標準のSATA関係のドライバが組み込まれていないことに原因があります。

C:\Windows\System32\に以下のドライバが無い場合には、正常な環境から複製してください。

C:\windows\system32\drivers\intelide.sys
C:\windows\system32\drivers\pciide.sys
C:\windows\system32\drivers\atapi.sys

ドライバを読み込ませるために、以下のレジストリエントリが無い場合には作成してください。

HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\CriticalDeviceDatabase\pci#ven_8086&dev_7111
HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\CriticalDeviceDatabase\pci#ven_8086&dev_7110&cc_0601
HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\CriticalDeviceDatabase\primary_ide_channel
HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\CriticalDeviceDatabase\secondary_ide_channel
HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\IntelIde
HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\PCIIde
HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\atapi

設定すべき値は以下を参照してください。

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\CriticalDeviceDatabase\pci#ven_8086&dev_7111]
"Service"="intelide"
"ClassGUID"="{4D36E96A-E325-11CE-BFC1-08002BE10318}"

[HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\CriticalDeviceDatabase\pci#ven_8086&dev_7110&cc_0601]
"ClassGUID"="{4D36E97D-E325-11CE-BFC1-08002BE10318}"
"Service"="isapnp"

[HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\CriticalDeviceDatabase\primary_ide_channel]
"Service"="atapi"
"ClassGUID"="{4D36E96A-E325-11CE-BFC1-08002BE10318}"

[HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\CriticalDeviceDatabase\secondary_ide_channel]
"Service"="atapi"
"ClassGUID"="{4D36E96A-E325-11CE-BFC1-08002BE10318}"

[HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\IntelIde]
"ErrorControl"=dword:00000001
"Group"="System Bus Extender"
"Start"=dword:00000000
"Tag"=dword:00000004
"Type"=dword:00000001
"ImagePath"=hex(2):73,00,79,00,73,00,74,00,65,00,6d,00,33,00,32,00,5c,00,44,00,\
  52,00,49,00,56,00,45,00,52,00,53,00,5c,00,69,00,6e,00,74,00,65,00,6c,00,69,\
  00,64,00,65,00,2e,00,73,00,79,00,73,00,00,00

[HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\IntelIde]
"ErrorControl"=dword:00000001
"Group"="System Bus Extender"
"Start"=dword:00000000
"Tag"=dword:00000004
"Type"=dword:00000001
"ImagePath"=hex(2):73,00,79,00,73,00,74,00,65,00,6d,00,33,00,32,00,5c,00,44,00,\
  52,00,49,00,56,00,45,00,52,00,53,00,5c,00,69,00,6e,00,74,00,65,00,6c,00,69,\
  00,64,00,65,00,2e,00,73,00,79,00,73,00,00,00

[HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\atapi]
"ErrorControl"=dword:00000001
"Group"="SCSI miniport"
"Start"=dword:00000000
"Tag"=dword:00000019
"Type"=dword:00000001
"DisplayName"="標準 IDE/ESDI ハード ディスク コントローラ"
"ImagePath"=hex(2):73,00,79,00,73,00,74,00,65,00,6d,00,33,00,32,00,5c,00,44,00,\
  52,00,49,00,56,00,45,00,52,00,53,00,5c,00,61,00,74,00,61,00,70,00,69,00,2e,\
  00,73,00,79,00,73,00,00,00

P2Vで仮想化する前の元の環境で設定を変更できれば良いのですが、それが出来ない場合には仮想ディスクファイル(*.VHD)をマウントして編集します。レジストリを編集するにはレジストリエディタを起動し”ファイル→ハイプの読み込み”から、マウントした仮想ディスクの”\windows\system32\config\system”を開きます。

参考:P2V Migration Issues with Hyper-V: STOP: 0x0000007B

「対象のパスが長すぎます」のエラーが出てファイルを操作できないとき。

「対象のパスが長すぎます」のエラーが出てエクスプーラー上からファイルを削除する事が出来なくなったとき、コマンドプロンプトからファイル名の先頭に\\?\を付けてDELコマンドで削除すると良い。

DEL \\.\C:\Users\hogehoge\Desktop\abc長いファイル名xyz.txt

Windowsは本来なら32768文字までのファイル名を扱うことが出来る。しかし古いアプリケーションとの互換性を維持するために、普段使用できるファイル名は260文字までに制限している。先頭の\\.\は互換性のための制限を解除する指示に当たる。

SharpZipLibの日本語対応

SharpZipLib 1.2.0以前でtarファイルを作成すると日本語が文字化けしていたけど、何時の間にか日本語に対応していたんですね。TarOutputStreamのConstructorでEncodingを指定できるではないですか。

github(https://github.com/icsharpcode/SharpZipLib)から最新のソースコードをダウンロードしてきて、自らビルドしましょう。

WevDAV上のExcelファイルを更新すると”アップロードできませんでした この場所の保存内容をアップロードするには、サインインする必要があります。”のエラーになる

QNAPのNASの機能を使ってWevDAVの共有フォルダを作成しました。共有フォルダ上のファイルををOffice 2016で開くとファイル更新時に「アップロードできませんでした この場所の保存内容をアップロードするには、サインインする必要があります。」と言うエラーが発生します。調べたところなかなか根の深い問題で、どうにもMicrosoft Officeアップローダーの仕様上の問題に起因するようです。

ちなみにWevDAV共有フォルダ上のファイルをエクスプローラーで操作したり、Office以外のアプリケーションから読み書きする場合には問題がありません。

Microsoft OfficeアップロードセンターはOffice 2013以降に追加された機能です。通信が不安定な環境において、更新されたWebDAV上のファイルをキャッシュして、非同期的にWebDAVサーバーに送信する機能を提供しています。MicrosoftはOneDrive上のOfficeファイルを開くときに、Microsoftが独自に認証周りを拡張したWebDAVを使用しています。OneDriveのファイルをOfficeで直接扱うためのモジュールとして広く使われています。この独自に拡張しているというところが曲者で、Windows統合認証やMicrosoft Liveアカウント認証に対応していないサーバーの場合に、認証に失敗してしまうようなのです。

Windows 10の場合はタスクトレイに常駐しているMicrosoft OneDrive設定から「ファイルのコラボレーション」を無効にすると、Microsoft Officeアップローダーを止められるようです。Googleから”UPLOAD FAILED: You are required to sign in to upload your changes to this location”で検索すると色々と情報が見つかりますが、OfficeやOSのバージョンによって設定すべき項目が異なったり、公式な対策でもないようなのでなかなか面倒そうです。

この辺りまで調べたところで、WebDAVの使用はあきらめる事にしました。

参考:UPLOAD FAILED: You are required to sign in to upload your changes to this location

letsencryptの証明書更新で”‘Namespace’ object has no attribute ‘standalone_supported_challenges'”が発生する

OSをUbuntu 18.04LTSからUbuntu 20.04LTSに移行したところ、旧システムから移行してきた証明書の更新に、以下のようなエラーを表示して失敗しました。

> sudo letsencrypt renew
...
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Processing /etc/letsencrypt/renewal/www.example.net.conf
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Renewal configuration file /etc/letsencrypt/renewal/www.example.net.conf (cert: www.example.net) produced an unexpected error: 'Namespace' object has no attribute 'standalone_supported_challenges'. Skipping.
...

letsencryptのバージョンが上がったことによりstandalone_supported_challengesオプションがサポートされなくなったことが原因です。

/etc/letsencrypt/renewal/www.example.net.confを編集して、最後の行のstandalone_supported_challengesをコメントアウトすると正常に動作するようになりました。

# renew_before_expiry = 30 days
cert = /etc/letsencrypt/live/www.example.net/cert.pem
privkey = /etc/letsencrypt/live/www.example.net/privkey.pem
chain = /etc/letsencrypt/live/www.example.net/chain.pem
fullchain = /etc/letsencrypt/live/www.example.net/fullchain.pem
version = 0.31.0
archive_dir = /etc/letsencrypt/archive/www.example.net

# Options and defaults used in the renewal process
[renewalparams]
authenticator = standalone
account = 52bc4f19233c146191f7f576945ed0d9
server = https://acme-v01.api.letsencrypt.org/directory
# standalone_supported_challenges = "tls-sni-01,http-01"

参考:https://github.com/certbot/certbot/issues/6984