start

Windowsのローカルユーザーのパスワードをネットワーク越しに変更する

Ctrl+Del+Altからのパスワード変更画面で、ユーザー名をリモートコンピュータ名\ユーザー名とすると、ローカルPCアカウントと同じ要領でリモートPCのローカルアカウント(ややこしい)のパスワードを変えられるそうなんだけど、最近のWindowsでは以下のおまじないが必要だそう。

  1. コマンドプロンプトで以下のコマンドを実行(レジストリ追加)
    • REG ADD HKLM\SYSTEM\CurrentControlSet\Services\LanManServer\Parameters /v NullSessionPipes /t REG_MULTI_SZ /d SAMR /f
    • REG ADD HKLM\SYSTEM\CurrentControlSet\Control\Lsa /v RestrictRemoteSamAuditOnlyMode /t REG_DWORD /d 1 /f
  2. Windowsファイアウォールで「Netlogonサービス」を許可

ファイヤウォールの穴あけまで言及してるサイトが殆どなくて結構ハマった。

C#の0がenum値に暗黙キャストされてinvokeStaticで例外出て超ハマった

僕はついさっき知ったばかりなんですけど、C#の数値0ってあらゆるenum値に暗黙的キャストされるんですってね。要するに、0だけはキャスト不要で列挙型の値として変数に代入できちゃったりするということ。コードで示すと以下のようなかんじ。

using System;
 
public class Program
{
    enum Hoge { A, B }
    enum Piyo { C, D }
 
    public static void Main()
    {
        Hoge h1 = 0,   h2 = 0.0f;
        Piyo p1 = 0x0, p2 = 0.0m;
        Console.WriteLine($"{h1}, {h2}");
        Console.WriteLine($"{p1}, {p2}");
    }
}

このコードは何の警告もなくビルドが通り、以下の実行結果が得られる。

A, A
C, C

浮動小数点数やDecimalのゼロも同様の扱いっていうのが、なかなかのキモいポイント。C#のenumってC/C++のそれと違ってそれなりに厳密なので、自分的には結構衝撃的な仕様だった。まぁ、分かってしまえばどうってことはない。

で、ここからが本題。

そんな0のenumへの暗黙的型変換のおかげで、意図せぬメソッドのオーバーロード解決が行われ、小一時間ハマった。

以下のような処理メソッドAddと、それに対する単体テストAddTestを考える。対象メソッドはプライベートな静的メソッドなので、テスト呼び出しにはPrivateType.InvokeStaticメソッドを使っているが、至ってシンプルなコードである。

何の疑いもなく動くと思いきや、ケース3のテストでのみMissingMethodException例外が発生し、Addメソッドの呼び出しに失敗するのだ!

// 加算
private static decimal? Add(decimal? v1, decimal? v2)
{
    return v1 + v2;
}
 
// Addメソッドの単体テスト
void AddTest()
{
    var privateType = new PrivateType(typeof(AddClass));
 
    // ケース1
    var value = (decimal?)privateType.InvokeStatic("Add", 1.0m, 1.0m); // OK
    Assert.AreEqual(2, value);
 
    // ケース2    
    value = (decimal?)privateType.InvokeStatic("Add", 1.0m, 0.0m); // OK
    Assert.AreEqual(1, value);
 
    // ケース3
    value = (decimal?)privateType.InvokeStatic("Add", 0.0m, 1.0m); // MissingMethodException例外が発生!
    Assert.AreEqual(1, value);
}

MissingMethodExceptionは読んで字のごとく、メソッドが見つからなかった場合に投げられる例外だ。

ケース1~2は通っているのに見つからないとは一体…!?という感じなのだが、これまでの説明からお気づきであろう、ケース1~2と3では呼び出されるInvokeStaticのシグネチャが違うのだ。同メソッドは引数違いで10個ほどのオーバーロードが定義されており、それぞれ以下のシグネチャのものが呼び出される。

  • ケース1~2
    • InvokeStatic(String, params Object[])
  • ケース3
    • InvokeStatic(string, System.Reflection.BindingFlags, params Object[])

ケース3では、第二引数の0.0mがBindingFlagsに暗黙キャストされた結果、引数を1つ持つAddメソッドを呼び出そうとして例外を吐くというわけ。なんじゃそりゃー!分かるわけネェーッ!!意図通り動かすにはprivateType.InvokeStatic(“Add”, (decimal?)0.0m, 1.0m)のように、明示的にキャストし正しいオーバーロード解決を導いてあげればよい。

この暗黙型変換を禁止ないし警告出してくれるコンパイルオプションとかないのかしら…ハマった時に死ぬほどわかりづらいんですけど……

PowerEdge T330/PERC H330環境でPVE 8がEFI stubうんちゃらで起動できない件

PowerEdge T330とITファームを書き込んでHBA化したPERC H330環境で、H330に接続したストレージにインストールしたProxmox VE 8.0-2を起動しようとすると、EFI stub: Loaded initrd from LINUX_EFI_INITRD_MEDIA_GUID device pathと出て止まってしまう。マザボから生えてる内蔵SATAの方だと問題ない。

PVEのフォーラムでも同様の現象が報告されている。

ZFSがらみの何かっぽくext4なら大丈夫らしい。根本的な解決策は見当たらないが、PVE 7をインストールしアップデートでPVE 8にした場合は起動するそうで、試しにやってみたら確かに問題なくPVE 8が立ち上がった。すんごい気持ち悪いんですけど。

BIOSとiDRACあたりとの相性かと思い数時間かけて頑張って更新したが、完全な無駄足になってしまった…。更新後はJava版の仮想コンソールが何故か起動に失敗すること多いし、PVEで仮想コンソールのキー入力が全く効かないわ、ACPIシャットダウンが機能しないわでマジで意味がわからん。ただの無駄足であってくれた方がなんと良かったことか……

一応PVEの動作に問題はなさそうだけど、どうしたものか。

5年半使ったIntel DC S3500 240GBの状態とベンチマーク

ファイルサーバで使ってたInte SSD DC S3500 240GB (SSDSC2BB240G4)がお役御免となった。購入記録を採ってるわけじゃないけど、たぶんこの時のSSD⇒Intel SSDSC2BB240G4 (DC S3500 240GB) のベンチマーク。のちに同じSSDを中古購入し、2台でRAID組んでWindows Serverのシステム領域兼記憶域階層のSSD層として使っていた。先に買った方、つまり当時のベンチマークがある方の使用時間は5年半ほどになる。

経年でどの程度パフォーマンスが変わったのか比較してみた。

5年半前
S.M.A.R.T.
CrystalDiskMark 6
-----------------------------------------------------------------------
CrystalDiskMark 6.0.2 x64 (C) 2007-2018 hiyohiyo
                          Crystal Dew World : https://crystalmark.info/
-----------------------------------------------------------------------
* MB/s = 1,000,000 bytes/s [SATA/600 = 600,000,000 bytes/s]
* KB = 1000 bytes, KiB = 1024 bytes

   Sequential Read (Q= 32,T= 1) :   504.027 MB/s
  Sequential Write (Q= 32,T= 1) :   290.264 MB/s
  Random Read 4KiB (Q=  8,T= 8) :   312.603 MB/s [  76319.1 IOPS]
 Random Write 4KiB (Q=  8,T= 8) :   263.048 MB/s [  64220.7 IOPS]
  Random Read 4KiB (Q= 32,T= 1) :   311.353 MB/s [  76013.9 IOPS]
 Random Write 4KiB (Q= 32,T= 1) :   253.603 MB/s [  61914.8 IOPS]
  Random Read 4KiB (Q=  1,T= 1) :    21.859 MB/s [   5336.7 IOPS]
 Random Write 4KiB (Q=  1,T= 1) :    66.980 MB/s [  16352.5 IOPS]

  Test : 4096 MiB [I: 0.0% (0.1/223.6 GiB)] (x3)  [Interval=5 sec]
  Date : 2023/10/11 0:36:19
    OS : Windows 10 Professional [10.0 Build 19045] (x64)
    Intel DC S3500 240GB SSDSC2BB240G4 (2)
-----------------------------------------------------------------------
CrystalDiskMark 6.0.0 x64 (C) 2007-2017 hiyohiyo
                          Crystal Dew World : https://crystalmark.info/
-----------------------------------------------------------------------
* MB/s = 1,000,000 bytes/s [SATA/600 = 600,000,000 bytes/s]
* KB = 1000 bytes, KiB = 1024 bytes

   Sequential Read (Q= 32,T= 1) :   509.971 MB/s
  Sequential Write (Q= 32,T= 1) :   285.330 MB/s
  Random Read 4KiB (Q=  8,T= 8) :   312.081 MB/s [  76191.7 IOPS]
 Random Write 4KiB (Q=  8,T= 8) :   271.718 MB/s [  66337.4 IOPS]
  Random Read 4KiB (Q= 32,T= 1) :   271.167 MB/s [  66202.9 IOPS]
 Random Write 4KiB (Q= 32,T= 1) :   252.995 MB/s [  61766.4 IOPS]
  Random Read 4KiB (Q=  1,T= 1) :    33.345 MB/s [   8140.9 IOPS]
 Random Write 4KiB (Q=  1,T= 1) :    94.851 MB/s [  23157.0 IOPS]

  Test : 4096 MiB [D: 0.1% (0.1/223.4 GiB)] (x3)  [Interval=5 sec]
  Date : 2018/03/01 1:41:52
    OS : Windows 10 Professional [10.0 Build 16299] (x64)
    Intel SSDSC2BB240G4
CrystalDiskMark 8 なし
------------------------------------------------------------------------------
CrystalDiskMark 8.0.4 x64 (C) 2007-2021 hiyohiyo
                                  Crystal Dew World: https://crystalmark.info/
------------------------------------------------------------------------------
* MB/s = 1,000,000 bytes/s [SATA/600 = 600,000,000 bytes/s]
* KB = 1000 bytes, KiB = 1024 bytes

[Read]
  SEQ    1MiB (Q=  8, T= 1):   498.060 MB/s [    475.0 IOPS] < 16791.21 us>
  SEQ    1MiB (Q=  1, T= 1):   404.748 MB/s [    386.0 IOPS] <  2588.56 us>
  RND    4KiB (Q= 32, T= 1):   312.375 MB/s [  76263.4 IOPS] <   418.26 us>
  RND    4KiB (Q=  1, T= 1):    26.909 MB/s [   6569.6 IOPS] <   151.62 us>

[Write]
  SEQ    1MiB (Q=  8, T= 1):   287.891 MB/s [    274.6 IOPS] < 28986.44 us>
  SEQ    1MiB (Q=  1, T= 1):   288.068 MB/s [    274.7 IOPS] <  3631.40 us>
  RND    4KiB (Q= 32, T= 1):   265.559 MB/s [  64833.7 IOPS] <   492.03 us>
  RND    4KiB (Q=  1, T= 1):    75.663 MB/s [  18472.4 IOPS] <    53.74 us>

Profile: Default
   Test: 2 GiB (x3) [I: 0% (0/224GiB)]
   Mode: [Admin]
   Time: Measure 5 sec / Interval 5 sec 
   Date: 2023/10/11 0:36:08
     OS: Windows 10 Professional [10.0 Build 19045] (x64)
Comment: Intel DC S3500 240GB (SSDSC2BB240G4) (2)

ランダムリード・ライトが若干遅くなっているように見えなくもないが、4KiB 32QT1は速くなって良くわからん。240GBのSSDに対して93TB書き込んでるけど、問題になるような性能低下はなさそう。損耗率から計算すると残り280TBほど書き込めるようだ。

かたわれのSSDは結構深刻な状態で、ランダムライト速度が半分以下になってしまっている。

------------------------------------------------------------------------------
CrystalDiskMark 8.0.4 x64 (C) 2007-2021 hiyohiyo
                                  Crystal Dew World: https://crystalmark.info/
------------------------------------------------------------------------------
* MB/s = 1,000,000 bytes/s [SATA/600 = 600,000,000 bytes/s]
* KB = 1000 bytes, KiB = 1024 bytes

[Read]
  SEQ    1MiB (Q=  8, T= 1):   496.475 MB/s [    473.5 IOPS] < 16845.23 us>
  SEQ    1MiB (Q=  1, T= 1):   399.525 MB/s [    381.0 IOPS] <  2621.80 us>
  RND    4KiB (Q= 32, T= 1):   312.067 MB/s [  76188.2 IOPS] <   418.81 us>
  RND    4KiB (Q=  1, T= 1):    30.675 MB/s [   7489.0 IOPS] <   133.11 us>

[Write]
  SEQ    1MiB (Q=  8, T= 1):   285.882 MB/s [    272.6 IOPS] < 29174.83 us>
  SEQ    1MiB (Q=  1, T= 1):   285.205 MB/s [    272.0 IOPS] <  3673.12 us>
  RND    4KiB (Q= 32, T= 1):    92.268 MB/s [  22526.4 IOPS] <  1419.45 us>
  RND    4KiB (Q=  1, T= 1):    43.706 MB/s [  10670.4 IOPS] <    93.19 us>

Profile: Default
   Test: 2 GiB (x3) [D: 0% (0/224GiB)]
   Mode: [Admin]
   Time: Measure 5 sec / Interval 5 sec 
   Date: 2023/10/10 22:06:50
     OS: Windows 10 Professional [10.0 Build 19045] (x64)
Comment: Intel DC S3500 240GB (SSDSC2BB240G4)

セキュアイレースしても目立った改善は見られなかった。

Secure Erase前

Secure Erase後

S.M.A.R.T.はメディア消耗指標は問題なさそうだが、電源断保護失敗で異常が検出されており、そのためか電源投入回数が跳ね上がっている。

電源断保護失敗でパフォーマンス低下ってのも良くわからんけど、内蔵の電源回路が不調→コントローラリセット→すぐ回復→辛うじて書き込みは継続、って感じなのかなー?

若干の不安はありつつも、別サーバでZFSのRAID-1構成で引き続き頑張ってもらう予定。

HGST HUC101812CSS200のベンチマーク

中古のPowerEdget T330を買ったらHGST HUC101812CSS200が付いていた。仕様はこんな感じ。

ドライブ名 Ultrastar C10K1800-1200
モデル名 HUC101812CSS200
容量 1.2TB
セクタサイズ 512n
回転数 10520RPM
インタフェース SAS 3.0 (12Gbps)
フォームファクタ 2.5インチ, 15mm厚

実物のSASドライブを見るのも触るのも何気にこれが初めてだったりする。見せてもらおうか、SASドライブの性能とやらを!

(参考:ST2000LM007)

------------------------------------------------------------------------------
CrystalDiskMark 8.0.4 x64 (C) 2007-2021 hiyohiyo
                                  Crystal Dew World: https://crystalmark.info/
------------------------------------------------------------------------------
* MB/s = 1,000,000 bytes/s [SATA/600 = 600,000,000 bytes/s]
* KB = 1000 bytes, KiB = 1024 bytes

[Read]
  SEQ    1MiB (Q=  8, T= 1):   218.497 MB/s [    208.4 IOPS] < 38209.34 us>
  SEQ    1MiB (Q=  1, T= 1):   217.400 MB/s [    207.3 IOPS] <  4816.72 us>
  RND    4KiB (Q= 32, T= 1):     4.499 MB/s [   1098.4 IOPS] < 28893.87 us>
  RND    4KiB (Q=  1, T= 1):     2.191 MB/s [    534.9 IOPS] <  1867.12 us>

[Write]
  SEQ    1MiB (Q=  8, T= 1):   216.078 MB/s [    206.1 IOPS] < 38515.68 us>
  SEQ    1MiB (Q=  1, T= 1):   100.678 MB/s [     96.0 IOPS] < 10410.15 us>
  RND    4KiB (Q= 32, T= 1):     3.303 MB/s [    806.4 IOPS] < 39386.47 us>
  RND    4KiB (Q=  1, T= 1):     1.001 MB/s [    244.4 IOPS] <  4085.40 us>

Profile: Default
   Test: 1 GiB (x5) [H: 0% (0/1118GiB)]
   Mode: [Admin]
   Time: Measure 5 sec / Interval 5 sec 
   Date: 2023/10/09 0:26:57
     OS: Windows 10 Professional [10.0 Build 19045] (x64)
Comment: HGST HUC101812CSS200 (SAS/1.2TB/10000RPM)

スクショの上がHUC101812CSS200で、下が参考用のST2000LM007の結果。後者はSMRなんでだいぶ不利な結果だと申し添えておく。

2.5インチでシーケンシャルリード、ライトが200MB/s超ってかなり速い気がする。ランダムアクセスもHDDにしては速めなような……さすがSASドライブってところ?まぁ、こんな単純なベンチでは何もわからんのだろうけど。ゼロフィルは1200243695616バイトを6624秒で完了ってわけで、平均182MB/sとなった。

それはそうと、SASってS.M.A.R.T.が取得できないんすな。

当初、PERC H330経由なのが原因かと思ってITファームでHBA化してもダメで、なんでぇ?と思いきや、そもそもS.M.A.R.T.はATA規格の仕組みなので、SASでは取得できないのが正しい、と。SASでドライブの状態が取得できないかと言えばもちろんそんなことはなく、KCQ (Key Code Qualifier)って仕組みで取れるそうな。UNIX系で有名なsmartmontoolsでは、ドライブごとにS.M.A.R.T.とKCQを使い分け、統一的な結果を表示してくれるため、SASドライブでもあたかもS.M.A.R.T.が使えているように見えるとかなんとか。実際のログはこんな感じ。

# smartctl -a /dev/sdc
smartctl 7.3 2022-02-28 r5338 [x86_64-linux-6.2.16-15-pve] (local build)
Copyright (C) 2002-22, Bruce Allen, Christian Franke, www.smartmontools.org

=== START OF INFORMATION SECTION ===
Vendor:               HGST
Product:              HUC101812CSS200
Revision:             FU29
Compliance:           SPC-4
User Capacity:        1,200,243,695,616 bytes [1.20 TB]
Logical block size:   512 bytes
Formatted with type 2 protection
8 bytes of protection information per logical block
LU is fully provisioned
Rotation Rate:        10000 rpm
Form Factor:          2.5 inches
Logical Unit id:      0x5000cca02d7e9154
Serial number:        xxxxxxxx
Device type:          disk
Transport protocol:   SAS (SPL-4)
Local Time is:        Sun Oct 15 23:50:26 2023 JST
SMART support is:     Available - device has SMART capability.
SMART support is:     Enabled
Temperature Warning:  Enabled

=== START OF READ SMART DATA SECTION ===
SMART Health Status: OK

Current Drive Temperature:     43 C
Drive Trip Temperature:        50 C

Accumulated power on time, hours:minutes 49469:04
Manufactured in week 36 of year 2017
Specified cycle count over device lifetime:  50000
Accumulated start-stop cycles:  58
Specified load-unload count over device lifetime:  600000
Accumulated load-unload cycles:  2118
Elements in grown defect list: 0

Vendor (Seagate Cache) information
  Blocks sent to initiator = 1590129651089408

Error counter log:
           Errors Corrected by           Total   Correction     Gigabytes    Total
               ECC          rereads/    errors   algorithm      processed    uncorrected
           fast | delayed   rewrites  corrected  invocations   [10^9 bytes]  errors
read:          0       10         0        39     257428       3792.083           0
write:         0        0         0         0      39447       5364.802           0
verify:        0       97         0       391      94932        795.533           0

Non-medium error count:        0

SMART Self-test log
Num  Test              Status                 segment  LifeTime  LBA_first_err [SK ASC ASQ]
     Description                              number   (hours)
# 1  Reserved(7)       Completed                  64       3                 - [-   -    -]
# 2  Background short  Completed                  96       1                 - [-   -    -]

Long (extended) Self-test duration: 8851 seconds [147.5 minutes]

ECCのエラー訂正数とかも取れて、ガチのエンプラ用ドライブしゅごい。まだまだ知らないことだらけですわ。

  • start.txt
  • 最終更新: 2022-07-27 15:26
  • by Decomo