Server

WindowsServerのスナップショットの作成ができない原因と解決する方法!

投稿日:

こんにちは!

僕はエンジニアとして2018年くらいからはサーバーの保守をしています。

今回は稼働中のWindowsサーバ-でスナップショットの作成を行いました。

しかし、スナップショットの作成でエラーが発生し、スナップショットの作成すらできませんでした。

ただ、この現象が出るのは一部のサーバーだけで、問題なくスナップショットが作成できるサーバーもありました。

解決はしましたが、Windowsサーバーの環境によっては、私と同じような問題に直面する可能性もあります。

そこで今回は、

  • WindowsServerのスナップショットの作成で失敗するときの解決方法
  • WindowsServerのスナップショットの作成で失敗した現象
  • イベントログの調査内容
  • スナップショットの作成で失敗する原因

について書いていきます。

WindowsServerのスナップショットが作成できないときの解消法

まずは、結論として私が解消できた、Windowsサーバーのスナップショットが取得できないときの方法について紹介します。

今回スナップショットを取得しようとしたサーバーではSQLServerを利用していました。

原因と解決するまでの経緯は後述しますが、SQLServerのワーカースレッドの最大数を上げることで解消しています。

SQLServerのワーカースレッドの設定方法はSQLServerManagementStudioより行います。

  1. SQLServerManagementStudioで対象のサーバーに接続
  2. サーバーのプロパティを表示
  3. ページの選択から「プロセッサ」を選択
  4. スレッドの「ワーカースレッドの最大数」を変更

私の場合は「ワーカースレッドの最大数」がもともとデフォルトの「0」だったので「1024」としました。

SQLServerのワーカースレッドの値を変更後、再度サーバーが稼働している状態でスナップショットを取得してみると、問題なく完了しました。

このようにSQLServerの設定によって解決しているので、SQLServerを利用しているWindowsサーバーであれば有効な方法です。

もし私と同じような環境でスナップショットの問題に直面している場合は、ここから先も読んでみてください。

WindowsServerのスナップショット作成で失敗した現象

今回は稼働中のWindowsサーバーでスナップショットの作成をしてみました。

スナップショットを取るサーバーはWindowsServer2012R2です。

スナップショットの作成自体は難しくはありませんが、「Internal error」というエラーが発生しました。

スナップショットを取得したときのサーバーの状態が良くなかったのかと思ったので、一応サーバーを利用していない時間に再起動して再度行ってみました。

しかし、スナップショットが取れない現象は変わりませんでした。

次に「サーバーを停止した状態」で再度スナップショットの作成を試してみると、エラーの通知なく作成できました。

スナップショットの作成ができたとはいえ、基本的にサーバーは必要がない限り停止したくはないので、稼働中でもスナップショットの作成をできるようにしたいんですよね。

とっさの障害のようなことが起きたときは、稼働中のスナップショットの取得が必要なこともあるので。

というか、Windowsサーバーで「VSS」が有効なので、本来稼働中でスナップショットが取得できないのは異常と考えるべきですよね。

「VSS」は今回の例で言うと、スナップショットの作成時点の状態を取得する機能で、プログラムが稼働中でもスナップショットの作成ができます。

今回スナップショットを作成したいサーバー以外でも同じ現象が出るのかを確認するために、他の稼働中のサーバーでも試してみました。

ここでは今回の対象サーバーと比較したいので、サーバーを停止せずにスナップショットの作成をします。

稼働中の状態でスナップショットの作成をしてみると、ここで試したサーバーでは稼働中でも問題なく作成できました。

よって、稼働中のサーバーでスナップショットが作成できるサーバーとできないサーバーがあることが分かりました。

スナップショットが取れない原因の特定までに至った調査

結果としては、SQLServerのワーカースレッドの値の変更によって解決しましたが、原因特定に至るまでの調査について紹介します。

私と同じようなログがあって、スナップショットの作成が失敗する場合は、同じ原因の可能性があります。

VSS関連のログ調査

まずは稼働中にスナップショットを取れないので、VSSサービス関連のログを見てみます。

サーバーを停止するとスナップショットが取れるようになるので、VSS関連に原因がある可能性が高いと考えたからです。

Windowsのイベントログで以下の内容がありました。

ログ名:GCE-VSS-Agent/Operationalで以下のエラーが表示されていました。
Failed to create the snapshot for the persistent disk (target:1, lun:0).

スナップショットが失敗したときのログですね。

ここで、Windowsのサービスを見てみると「GoogleVssProvider」のサービスが停止していました。

これが原因と思い「GoogleVssProvider」のサービスを開始して、再度スナップショットを取ってみます。

しかし、これでも同じエラーが出てスナップショットの作成に失敗しました。

念のためWindowsのサービスからGoogleVssAgentを再起動してみて試してみることにします。

ダメもとでしたが、やはりこれでも同じエラーが出てスナップショットが取れませんでした。

次に、スナップショットを取ろうとした時の時間帯を確認すると以下のエラーがありました。

警告,2019/10/05 11:39:30,VSS,8229,なし,"エラー 0x800423f4, ライターで一時的でないエラーが発生しました。
 バックアップ処理を再試行しても、おそらくエラーは再発します。により、VSS ライターはイベントを拒否しました。
 イベントの処理中にVSS ライターがライターコンポーネントに加えた変更は、要求側では利用できません。
 VSSライターをホストしているアプリケーションからの関連イベントについては、イベントログを参照してください。

操作:
   PrepareForSnapshot イベント

コンテキスト:
   実行コンテキスト: Writer
   ライター クラス ID: {a65faa63-5ea8-4ebc-9dbd-a0c4db26912a}
   ライター名: SqlServerWriter
   ライター インスタンス名: Microsoft SQL Server 2012:SQLWriter
   ライター インスタンス ID: {b1f56ad6-0cc8-41e4-91f3-9aa8865dfbd3}
   コマンド ライン: ""C:\Program Files\Microsoft SQL Server\90\Shared\sqlwriter.exe""
   プロセス ID: 1512"

このログからVSS Writerでエラーが発生していることが分かります。

ここでのエラーにより、このイベント以降でのスナップショットの取得ができないと推測しました。

そこで、VSS Writerのステータスを確認することにしました。

VSS Writerのステータス

VSS Writerのステータスを確認するために、管理者権限でコマンドプロンプトから以下のコマンドを実行します。

vssadmin list writers
コマンドを実行すると以下の結果がでました。

vssadmin 1.1 - ボリューム シャドウ コピー サービス管理コマンド ライン ツール
(C) Copyright 2001-2013 Microsoft Corp.
応答を待っています。
シャドウ コピーが準備中の場合は遅れる可能性があります。
ライター名: 'Task Scheduler Writer'
   ライター Id: {d61d61c8-d73a-4eee-8cdd-f6f9786b7124}
   ライター インスタンス Id: {1bddd48e-5052-49db-9b07-b96f96727e6b}
   状態: [1] 安定
   最後のエラー: エラーなし
ライター名: 'SqlServerWriter'
   ライター Id: {a65faa63-5ea8-4ebc-9dbd-a0c4db26912a}
   ライター インスタンス Id: {b1f56ad6-0cc8-41e4-91f3-9aa8865dfbd3}
   状態: [8] 失敗
   最後のエラー: 再試行できないエラー
ライター名: 'Shadow Copy Optimization Writer'
   ライター Id: {4dc3bdd4-ab48-4d07-adb0-3bee2926fd7f}
   ライター インスタンス Id: {e046d4ac-f362-48dd-a2f6-1b5940065b89}
   状態: [1] 安定
   最後のエラー: エラーなし
ライター名: 'COM+ REGDB Writer'
   ライター Id: {542da469-d3e1-473c-9f4f-7847f01fc64f}
   ライター インスタンス Id: {b83d0df6-6bd7-4a8c-b0be-440828f51611}
   状態: [1] 安定

コマンドの結果、ステータスで失敗となっているのは、「SqlServerWriter」の部分だけです。(赤文字部分)

この結果から、SQLServerが悪さしてる可能性を考えました。

WindowsServerのスナップショットの作成で失敗する原因

VSS Writerのステータスから、SQLServerに関する部分がスナップショットが取れない原因と思い、イベントログを確認します。

イベントログでSQLServerに関するエラーから200近くのデータベースがあることが分かりました。

ここで、スナップショット取得時に大量のワーカースレッドを消費して、SQL Serverのワーカースレッドが上限に達してると推測しました。

データベース数はサーバーによって違うので、これならスナップショットが取れるサーバーと取れないサーバーがあることも納得できます。

最初に紹介した解消法の通り、SQL Serverのワーカースレッドの設定を変更すると、スナップショットが取れない問題が解決しました。

以上のことから、原因はスナップショット作成時にSQLServerのワーカースレッド数が確保できていなかったということでした。

まとめ

WindowsServerのスナップショットが作成できなかった原因は、SQLServerのワーカースレッド数が上限に達していたからでした。

なので、SQLServerを利用している場合の解消法になりますが、スナップショットの作成が失敗するときは、SQLServerのデータベース数や「ワーカースレッドの最大数」を見直してみるのがいいですね。

SQLServerを利用している場合は、SQLServer周りのイベントも確認が必要ということが分かりました。

あとは、VSS関連のサービスの動作も確認して、停止している場合はサービスを開始させてみて試してみてください。

-Server

Copyright© 現役ITエンジニアが贈る悩めるITエンジニアのためのキロク , 2020 All Rights Reserved Powered by STINGER.