たまに掃除は必要!熱暴走…

イメージ
 そんなに暑くないのに… 本日、午前中にオンラインで打合せをしていると、突然マシンがダウン。 一瞬、停電か?と思ったもののディスプレイの電源は入っている。 あれっ?と思い、すぐさまノートで打合せを継続。 その間に、再度マシンの電源を投入。 問題なく起動する。 でも、CPU温度がたまたま目に入り、95℃を超えて徐々に上昇していく。 105℃あたりで再度マシンダウン。 これは、熱暴走によるダウンの可能性が高い。 以前、CPUをRyzen7→9にした頃は、60℃〜70℃程度だった記憶がある。 本当はGW中にSSDの載せ替えを行う予定だったけれど、忙しくて先延ばしにしていた。 その時やっていれば、多分掃除もしただろうに…。 ということで、午後からマシンを解体し、掃除をすることに。 ケース本体のFANはホコリがかなり溜まっている。 GPUのFANは問題ない。 電源とCPU FANはひどい。 一旦、CPU FANを取り外し、きれいにする。ついでにCPUグリスも塗り直しセット。 動作確認すると、投入直後で40℃台。 そりゃ、熱暴走も起こすわけだ。 せっかくバラしたので、SSDの載せ替えを実施。 OSは500GBで、ユーザ領域(/home)は1TBを使用しているもののAIのmodelをいくつも落としていたり、DockerのImageが多種置いてあるため、結構容量を食っている。 今回、2TBのSSD( Hanye SSD ¥17,800- で入手済)を用意してあるので、 1TB→2TB, 500GB→1TBと玉突きで移動させることを計画していたので実施する。 本当は、ddコマンドで移すつもりだったのだけれど、3月にお客さんのところで使いそうだったので、 ORICOのクローン機能付SSDアダプタ を入手済。 裸族のSSD版ですね…。1万円程度の品です。 これに、新品のSSDとこれまでの1TBのSSDを差し込んでクローン開始。 そこそこ時間はかかるものの、放置でOK。 ただ、HanyeのSSDについているヒートシンクが引っかかるため、一旦取り外してクローン後取り付ける必要があった。 続いて、500GB→先程の1TBに書き込み。 ただ、1TB(samsungの980pro)が、先程のクローンでかなり熱くなっていたため、速度低下が激しい感じ。1TB→2TBよりも時間がかかった感じ。 ...

ログの整理 #2

直しを入れてみた

前回のスクリプトでは、切り出したログを処理すると、対応するログオンIDが見つからないことがあり、ホスト名やIPが空欄になる現象が発生していた。
そこで、後から確認するためにログオンIDをフィールドに付加する仕様に変更した。

こうすることで、手動で該当するログとの突き合わせが可能になる。切り出したcsvだけだと情報が欠落してしまい、再度全部チェックしないといけなくなるを避けるためだ。

さらに仕様変更

ログファイルは、キーボードから入力(といっても、Drag&Dropで入力できるので面倒ではないのだけれど)して、画面に出力していたものを、直接csvファイルに落とすことにした。

ファイル名も面倒なので、入力したログファイルの拡張子をcsvに変更するだけにした。
まあ、少しは手間が省けることでしょう。

ということで、以下がそのスクリプトの全体。
今のところ、最低限のチェックしか入れていないので、暇があれば修正をしようと思う。

誰かのお役に立てれば幸いですが…。


#requires -version 2.0
# 2012/10/04 add field logon-id
#     direct write csv-file 
function GetValue([String]$category, [String]$key, [String[]]$properties)
{
  $b = $false;
  foreach ($property in $properties) {
    if ($b -eq $false) {
      if ($property.contains($category)) {
        $b = $true;
        continue;
      }
    } else {
      if ($property.contains($key)) {
        return [String]$property.Substring($property.IndexOf(":")+1).Trim();
      }
    }
  }
  return "";
}
function ConvertACL([string]$accessList)
{
  return $accessList.trim();
}
function GetLogonInfo([String]$logonid, [Object[]]$entrys)
{
  foreach ($entry in $entrys) {
    $properties = $entry.Message.Split("`n");
    #ID4663のログオンIDとID4624のログオンIDが一致するかどうか
    if ($logonid -eq (GetValue "新しいログオン:" "ログオン ID:" $properties)) {
      return (GetValue "ネットワーク情報:" "ワークステーション名:" $properties), `
          (GetValue "ネットワーク情報:" "ソース ネットワーク アドレス:" $properties);
    }
  }
  return "","";
}
#初期エントリポイント
$archive = Read-Host "Archive log file name";
if(Test-path $archive){
  $filename = $(Get-childitem $archive).name
  $name = $filename.split(".");
  if($name[1] -ne "evtx"){
    write-output "イベントログではありません。";
    exit 1;
  }
  $csvfile=$name[0]+".csv";
}else{
  write-output "ファイルが存在しません";
  exit 1;
}
$logons =  Get-winevent -Path $archive | Where-Object { $_.ID -eq '4624' };
$acslogs = Get-winevent -Path $archive | Where-Object { $_.ID -eq '4663' };
$i = 0;
Add-content -Path $csvfile -Value "日時,ユーザ名,ログオンID,ドメイン名,コンピュータ名,IPアドレス,ファイル名,操作,アプリケーション";
foreach ($entry in $acslogs) {
  $i = $i + 1;
  Write-Progress -Activity "Outputting Event" `
    -Status "Progress:" -PercentComplete ($i/$acslogs.count*100);
  $properties = $entry.Message.Split("`n");
  $csv = [String]$entry.TimeCreated.ToString("yyyy/MM/dd HH:mm:ss");
  $csv = $csv+","+(GetValue "サブジェクト:" "アカウント名:" $properties);
  $csv = $csv+","+(GetValue "サブジェクト:" "アカウント ドメイン:" $properties);
  $logonid = (GetValue "サブジェクト:" "ログオン ID:" $properties);
  $logoninfo = (GetLogonInfo $logonid $logons);
  $csv = $csv+","+$logonid
  $csv = $csv+","+($logoninfo[0]); #ワークステーション名
  $csv = $csv+","+($logoninfo[1]); #ソースネットワークアドレス
  $csv = $csv+","+(GetValue "オブジェクト:" "オブジェクト名:" $properties);
  $csv = $csv+","+(ConvertACL((GetValue "アクセス要求情報:" "アクセス:" $properties)));
  $csv = $csv+","+(GetValue "プロセス情報:" "プロセス名:" $properties);
  Add-content -Path $csvfile -Value $csv;
}
exit 0;

コメント

このブログの人気の投稿

Ubuntu24.04 でGUIが死んだ

VirtualBoxが異常

MEGAにも弱点があった?