昨日職場のPCで発生した予期せぬアクシデントについてメモ...
環境
OS :Windows7 32bit
メーカー :Fujitsu
リカバリ領域:有
アクシデント内容
考慮不足によるOSファイルの誤削除が発生
あらすじ
現場で、本番機のログをローカル端末に落として集計、調査をする機会がある。
本番ログの為、ローカル端末ではあまり保持しておきたくないし、削除漏れで漏洩ってことがないように
端末起動時に本番機のログ削除バッチを仕掛けている。
▼下記がそのバッチの内容
@echo off
echo ##############################
echo # 本番機ログ削除処理
echo ##############################
rem 本番機ログ設置ディレクトリに移動
cd C:\work\本番機ログ設置場所
rem 本番機ログをすべて削除
rmdir /S /Q .
rem こんな感じに書いてましたと。**
上記バッチをWindowsのStartupに設置して毎日起動時に動かしてログ削除を実行してました。
特段問題なく動作して、本番機のログはこのディレクトリに設置するようにしていたので、
端末に放置されることもなく運用出来てました。
ある日
端末のフォルダ整理をしようと思い、「本番機ログ設置ディレクトリ」を移動することにしました。
▼移動先ディレクトリ
C:\050_集計\本番機ログ設置ディレクトリ
さてさて移動も終わって特に何も考えることなく翌日を迎えました。。。
翌日
昨日、ディレクトリを移動したことも忘れて、いつもの様に端末を立ち上げて
仕事を始めようと思った時です。。
黒い窓から、どんぶらこ、どんぶらことエラーメッセージが流れてキました。
何事かと、思いつつ、削除バッチが動いているんだなと思っていたが
画面を見ているとなんだか様子がおかしい。。
******.dllは削除出来ませんでした。
******.dllは削除出来ませんでした。
******.dllは削除出来ませんでした。
******.dllは削除出来ませんでした。
..........
終いには、画面上に、
「Windowsは不正にインストールされた可能性があります...」
「Windowsは正規品ではありません」
画面右下を見ると、
「このWindowsのコピーは正規品ではありません。」
と、書かれてあったり。。
とりあえず黒い画面を止めて、過去の自分を振り返って見る。と、
原因はディレクトリ移動したことだとわかった。。。
ディレクトリ移動で前述のcdコマンドが落ちて
カレントディレクトリが[C:\WINDOWS\system32]
のまま remdir /S /Q . コマンドを実行してしまった為、WindowsOSの大事なファイルも削除しまくってしまったらしい。
やばいことになったので、とりあえず再起動と思って再起動した
が、OSが破損して再起動できなくなった。。。
ShibouFlag = true; 状態。
この後、Windowsの回復領域を使用して、修復を実行し、一命を取り留めた。
どうやらこうゆうときは
コントロール パネル\すべてのコントロール パネル項目\回復
より、システムの復元をするとOSの大事なとこは取り戻せるみたい!
でも「このWindowsのコピーは正規品ではありません。」
というエラ-を解消することは出来なくて、リカバリを余儀なくされました。。
ファット端末だったんでかなり焦りましたが無事、データを他の端末に一旦移して、OSのリカバリ対応出来ました。
ここで解説・振り返り
なんで私がバッチを
-------- [1]
①rmdirコマンドで本番機ログ設置場所を直接削除
rmdir /S /Q C:\work\本番機ログ設置場所.
ではなく!
-------- [2]
①cdコマンドで本番機のログ設置場所に移動
cd C:\work\本番機ログ設置場所
②rmdirコマンドでカレントディレクトリ全部削除
rmdir /S /Q .
の手順にしたのかと言いますと、[1]の方法だと、
workディレクトリ直下も削除されてしまうからです。。。
これではもともこもないです。
一番いい方法は...
敗因はなにか?
*エラー処理してない
*/Q オプション(削除時に対話無で実行)は余計だろ
ということで下記で対応しようと思ってます。。
@echo off
echo ##############################
echo # 本番機ログ削除処理
echo ##############################
rem 本番機ログ設置ディレクトリに移動
cd C:\work\本番機ログ設置場所
if not %errorlevel% == 0 (
echo .
echo ## 対象ディレクトリが存在しません!処理を終了します ##
echo .
pause
exit
)
pause
rem 本番機ログをすべて削除
rmdir /S .
これで円満なリスク管理ができる。。はず。
この記事が誰かの力となり、余計なリカバリ作業の削減につながれば幸いです。