小容量SSDをごまかしながら使うと酷い目に遭う話

問題の説明

数年前ぐらいの、プチフリーズはあんまり起きなくなった時代の、そこそこ小さめのSSD(~256GB)で、最近立て続けに謎現象が起きました。

読み出しが異様に遅くてタイムアウトするせいでWindowsがきちんと起動しない、当然自動修復も動かない、という現象です。

とりあえずの解決方法

手持ちの最近のそれなりに新しくて大容量なSSD(1TB・2TBぐらい)に、時間をかけてセクタバイセクタでコピーしました。

そうしたら、なぜかさくっと起動するし、データも壊れていないではありませんか。謎すぎる。

コピー自体は適当な専用ツールがあると楽です。

www.kuroutoshikou.com

www.century.co.jp

コピーが終わっても、そのままだと小容量SSDの時と同じ容量しかないので、パーティション編集ツールで拡大します。

最近自分が使っているのは、Paragon Partition Managerですかね。

www.paragon-software.com

何が起きたのか

解決はしたんですけど、何が起きたのかさっぱりわからないんですよね。

取り外した旧い小容量SSDをいったんSecure Eraseしたら、ちゃんと書き込めましたし。CrystalDiskInfoで眺めても、TBWの理論値までは程遠い状態でしたし。

特定の領域だけ劣化して読み出しリトライが何度も起きて、プチフリーズどころかメガフリーズ状態?になったんじゃないかなあ、とか雑に推測してます。

いまどきのSSDは読み書き共に超性能Upしてますし、ごまかしながら使って酷い目に遭うよりは、さっさと置き換えよう!というのを、今回のとりあえずの結論にしたいと思います。

2024/4/1-4/3朝 障害報告

2024/4/1-4/3朝に、下記の問題が発生していました。

サービスをご利用の方にご迷惑をおかけしているかどうかわかりませんし、もう3回目なのでそろそろ謝るのも飽きましたので、適当にそんなこともあったんやな~と読み流してください。

障害発生日時

2024/4/1-4/3朝

障害の内容

SSP BUGTRAQの設備インフラを構成するリージョンの1つとの通信エラー率が上がっていたので、以下の現象が起きていた

  • うかどんの検索機能が時々おかしくなる
  • ぽなのメールアドレスが時々不達になる
  • BOTインフラの反応が時々なくなる

障害原因

わかんないけどルータ再起動したら直った。

再発防止策

安物のルータを使わない。

責任者に対する処分

所長剥き放題1週間

2024/3/??-3/30 障害報告

約1週間ほど?下記の問題が発生したまま気づいておりませんでした。 サービスをご利用の方にご迷惑をおかけし、たいへん申し訳ありませんでした。

障害発生日時

2024/3/不明(メンテ履歴から逆算して1週間前ぐらい) から 3/30 20時まで

障害の内容

伺か系Discordの読み上げBOTが停止していた

障害原因

読み上げBOTが依存するサービス(Redis)が停止していた なぜ起きたか調べたところ、メンテナンス時に要らないと思ってアンインストールしてしまっていた

再発防止策

サーバメンテナンスをノリと勢いでやらない

責任者に対する処分

エミリ剥き放題1週間

2024/3/8-3/15 障害報告

約1週間ほど、下記の問題が発生したまま気づいておりませんでした。

サービスをご利用の方にご迷惑をおかけし、たいへん申し訳ありませんでした。

障害発生日時

2024/3/8 12時半 から 3/15 21時まで

障害の内容

障害原因

  • サービス提供インフラ内において、3/8昼に交換したL2スイッチで、802.1Q VLANのPVIDを設定し忘れた結果、untaggedな全パケットが破棄されていた。
  • 異常通知のメールが届いていたにもかかわらず、完全に気づいていなかった

再発防止策

  • 異常通知がメールだけでは足りないので、もう一つリアルタイム性のある手段を確保する => Discordへの通知を仕掛けた
  • クリティカルなネットワーク構成の変更をノリと勢いでやらない

責任者に対する処分

  • エミリ剥き放題1週間

パソコンが壊れた高校校歌斉唱

春も近づいてきたのでやたら寒いですね。

激しい温度変化のせいでパソコンがよく壊れる時期がやってまいりました。とてもつらい。今日も1台ぶっこわれて半泣きでござる。

Windows 10/11をクリーンインストールする時のメモ

今日は自分用のメモです。忘れがちなので。

ぶっ壊れたPCを修理している時に、いつも忘れるやつのメモ。

Windowsのシリアルとかどうするの

メーカー製PC(Lenovo,HP,DellとかのBTO含む)にはUEFIにシリアル相当の情報がすでに書き込まれているから気にしなくていい。

クリーンインストールしても、そもそもシリアル聞いてくる画面が出ずに最後まで行ってしまう。

Windows 11の境界線

  • Ryzenの2世代目以降
  • Coreの8世代目以降

残りのごちゃごちゃめんどいやつは、だいたい上記の条件を満たしたPCにもれなくついてくるから気にしなくてよい。

TPMだけはBIOS/UEFI設定が要るかもしれない。CPU組み込みのTPM機能は、めんどくさいことに名前がTPMではない場合がある。以下参照。

電池を交換しろ

BIOS/UEFIのパラメータ保存用に、だいたいCR2032のボタン電池が入っている。

せっかくフタを開けたのだからさっさと何も考えず交換しろ高校校歌斉唱

クリーンインストールする前にパーティションを切るやつ

SSDないまどきは、4Kセクタは考えなくて良いけど、いまどきなんも考えなくてもSSDでさえTB単位で、容量が有り余ってるので、UEFIパーティションは大きめに切っている(260MB)

solomon-review.net

Windows 10/11のブート可能USBメモリを作るやつ

インストールメディア作成ツールから作れる。

MSアカウントを作るのをスキップする(Homeのみ)

ネットワークに接続しましょう、の画面まで進めて(進めなくてもいけるかも)

Shift-F10

して

cd OOBE
BypassNRO
あるいは
OOBE\BypassNRO

要件チェックを飛ばしてWindows 11にするやつ

レジストリ

HKEY_LOCAL_MACHINE\SYSTEM\Setup\MoSetup

DWORD AllowUpgradesWithUnsupportedTPMOrCPU = 1

終わったらWindows 11のメディアを別に作成して、そこからセットアップ(アップグレードツールではだめ)

注:

  • せめてTPM 2.0はついてるマシンにしよう。
  • MBRでセットアップされてるマシンとかもう捨ててほしい(GPT/UEFIにして)
  • 目安はCoreの6-7世代ぐらい。それより前のやつはさすがにそろそろ捨てて…

自動ログイン

そもそも自動ログインすべきではないというお題目はさておき、現実問題としてどうにかしないといけない場合に。

レジストリ

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\PasswordLess\Device

からの

DWORD DevicePasswordLessBuildVersion = 0 (元は2)

してからファイル名実行で

conrol userpasswords2

ドライバの更新

インストール後の追加用メモ

今日の写真

今日の写真は、岩手の貨物専業鉄道の線路近くで撮った、夜の赤信号です。

確か赤信号がどうこういう企画のタイトル用に提供した覚えがあるなあ。

岩手開発鉄道 日頃市線 岩手石橋駅 場内信号機

宅内の乱 (2024)

昨日は桃の節句(ひなまつり)でした。
正直ひな人形なんてもう何年も見てないので、いまいちその感覚がなかったんですけど。

あかりをつけましょ 爆弾に~♪

なんて歌ってたアホウには縁遠い話ですね、ハイ。

自宅内のLANをできるだけ安く強化しよう

さて、インターネット接続はもちろん、宅内にNASを置いてファイル置き場やバックアップしようとか考えはじめると、どうしても宅内ネットワークのパフォーマンスが気になりはじめます。

これを改善するために、宅内に光ファイバーを張り巡らせ、10Gbps光ネットワークを構築したという猛者まで居たりしますが、まあ全部交換するとゲーミングパソコン1台分ぐらいは確実に持っていかれるので、冗談じゃねえ!そんな予算あるか!ってなると思います。

なので、フツーの(1Gbps) LAN + お安いWiFi APなどの組み合わせで、なるべくコスパの良いネットワークを組むにはどうすればいいか、というのが、大多数のみなさんのお悩みポイントになってくるんじゃないでしょうか。

ルータの性能は大事

そんな制約の中で、各種ネットワーク機器のうち、一番性能にこだわりお金をかけるところはどこでしょう。私はルータだと思ってます。なぜか。

WiFi APやら有線ハブやらは、すでにパケットを処理するための専用のチップを内蔵しており、なるべくパケットの中継でロスがないように十分最適化されている場合が多いのですが、ルータの内部でやっているあれやこれや、NATとかファイアウォールとかDHCPとかDNSとかPPPoEとか、そういうのは多少のアクセラレーション手法はあるものの、基本的に汎用のCPU処理になります。

つまり、これだけはそれなりにお高い機器で性能でぶん殴る脳筋メソッドしか解法がないわけです。

とはいえ、ここでクソ高い業務用ルータとか買ってられんわ!とか思うのが普通ですが、そこで目をつけるのがプロバイダのルータレンタルサービスです。

まあ、中には市販品をレンタルしてお茶を濁している会社もそれなりにあるらしいんですけど、自社サービスのパフォーマンスをアピールするために、ガチ業務用でほぼワイヤースピード(≒1Gbps、あるいは契約した速度)のルーティング性能があるヤバいやつを月ン百円とかでむちゃくちゃ安く貸してくれるところも結構あります。

なので、市販品のルータ買ってつながなきゃ…と考える前に、あなたのプロバイダがどんなルータを貸し出しているか、一度確かめてみてはいかがでしょうか。

逸般の誤家庭は知りませんが、ふつうは光ケーブルなり何なりを引き込んで、その先にONUをくっつけて、ONUのLANポートからルータにつないで、ルータのLANポートにNASやプリンタをつないで、ルータ内蔵の無線機能を設定して終わり、なところが多数でしょうし、ネットワーク機器に一切投資せずに、高速なネットワークを構築できるかもしれませんよ。

ちなみに、私はeo光のレンタルルータサービスを活用しています(ステマ
オプテージさんから1銭ももらっていないのに、わざわざアピールしているのはなぜか、察していただければ幸いです。

eonet.jp

今日の写真

今日の写真は、妙見山にあった「シグナス森林鉄道」です。

なぜか急こう配を登るためのラックレールまである、鉄道会社が全力で遊覧鉄道作ったらヤバくなりましたという変態物件だったのですが、すでに廃止されてしまいました。今はもうケーブルカーすらなくなったみたいですけど…

シグナス森林鉄道の機関車とラックレール

unboundでDNSを使った自前広告フィルタを実装する

なんか最近やたらと広告の表示がでかくなってきました。
全面にどーんと表示したり、サイトの5割ぐらいが広告だったりします。

無料閲覧できる記事のサイトの裏では、サーバ維持と記事を書く人の給料のため(あるいは個人の収益のため)に、たくさんお金が必要であることは言うまでもないとは思いますが、サイトの閲覧に支障が出るほどのコレはアカンやろ、程度の問題を過ぎてしまってるやろ、なんて思います。

とはいえ、いちいち自分の管制下のスマホとPCに全部広告ブロッカー入れるとかやってられないし、広告ブロックつきの公開DNSサービスはいまいち応答が遅いし…と悩んでいたので、ならば自分で広告ブロックつきキャッシュDNSサーバを立ててみようと試してみたメモを置いておきます。そう、なければ作れば良いのだ。

用意するもの

  • どこのご家庭にでもあるFreeBSD😈サーバ (必須)
    あなたは当然FreeBSDを使っていると思いますし、各家庭への普及率は300%を超えると思いますが、たいへん遺憾ではありますが、万が一そうでなければ、unboundとpythonが動く環境であれば問題ありません。
    LInux🐧サーバとかならまあいいでしょう。
  • どこのご家庭でも契約しているChatGPT (オプション)
    あなたは当然ChatGPTを使って…普及率は300%…(以下略)
    ぶっちゃけコードを書くのがめんどくさいので丸投げしましょう。
    もしかしたら、Gemini Advancedとかでもいいかもしれません。

作り方

とりあえずunboundをインストールする

DNSサーバといえばなんでしょう。
とりあえずbind!って答えた人は容赦なくインターネット老人会送りです。

なんかいまどきはローカルDNSキャッシュサーバに特化した、もっといい実装があるとかないとかいう噂も聞きますが、とりあえずみんなだいたい使ってるunboundを今回は採用します。

pkg install python312
pkg install unbound (FreeBSD)

とか

sudo apt install python3
sudo apt install unbound (Debian/Ubuntu)

とかやるといいと思います。

ブロック用定義ファイルを出力する

AdGuard開発チームが、AdGuard DNS用のブロックリストを公開しているので、ありがたく利用させてもらいます。

ただ、filter.txtは独自形式になっているので、

||hogehoge.com

こういうのを、unboundが理解できるように、

local-zone: "hogehoge.com" redirect

local-data: "hogehoge.com A 0.0.0.0"

こんな感じに書き換えてやる必要があります。
参考:0.0.0.0は無効なIPなので、これで「指定のドメイン(ゾーン)の名前引きをすると無効な応答を返す」という指示になります。

めんどくさいですね。こういうことはChatGPTに丸投げして、変換スクリプトを書いてもらいましょう。

import urllib.request
import subprocess

def fetch_and_process_adguard_list(url, exclusion_words):
    with urllib.request.urlopen(url) as response:
        data = response.read().decode('utf-8')

    domains = set()
    for line in data.splitlines():
        if line.startswith("||"):
            domain = line[2:].split("^")[0]
            if not any(exclusion_word in domain for exclusion_word in exclusion_words):
                domains.add(domain)

    processed_lines = []
    for domain in domains:
        processed_lines.append(f"local-zone: \"{domain}\" redirect")
        processed_lines.append(f"local-data: \"{domain} A 0.0.0.0\"")

    return processed_lines

def main():
    url = "https://adguardteam.github.io/AdGuardSDNSFilter/Filters/filter.txt"
    output_path = "/usr/local/etc/unbound/blocklist.conf"
    exclusion_words = [
        'amazonaws.com',
        'googlesyndication.com',
        'analytics.google.com',
        'google-analytics.com',
        'googleanalytics.com',
        'posthog',
        ]

    processed_data = fetch_and_process_adguard_list(url, exclusion_words)

    with open(output_path, "w") as file:
        file.write("\n".join(processed_data))

    subprocess.run(["/usr/local/sbin/unbound-control", "reload"])

if __name__ == "__main__":
    main()

いい感じで書いてもらえましたね!一番下のスクリプトを適当なところに "cron-blocklist.py" とかいう感じで保存して、cronで定期実行しましょう。

何?cronの設定方法がわからん?貴様モグリだな?
私もわからんので、これもChatGPTに聞きました。

毎日朝の4時半に上記のスクリプトをcronで実行するには、crontabファイルに適切なエントリを追加します。まず、コマンドラインで crontab -e を実行して、crontabファイルを編集します。次に、以下の行をファイルに追加します。

30 4 * * * /usr/bin/python3 /path/to/your/script.py

ここで /usr/bin/python3 はPythonの実行可能ファイルのパス(Pythonがインストールされている場所)です。これはシステムによって異なる場合があるので、正しいパスを使用してください。which python3 コマンドを実行することで、Pythonのパスを見つけることができます。

unboundの設定ファイルに追記する

注意:上のサンプルスクリプトでは、
/usr/local/etc/unbound/blocklist.conf
に変換済みのブロックリストが出力され、
/usr/local/sbin/unbound-control
にunbound-controlの実行ファイルが存在する前提になっています。

これはFreeBSDを前提としたパスなので、Linuxをお使いの方は適当に書き換えてください。ただし、
/etc/unbound/unbound.conf.d/
の中だと自動で読み込まれてしまってエラーになるんじゃないかと思うので、別の場所にしましょう。

次に、unbound.conf ( FreeBSDなら /usr/local/etc/unbound/unbound.conf ) を適当なエディタで開いて、

server:

と書いてある行を探して、それ以降に

include: "/usr/local/etc/unbound/blocklist.conf"

と書いて、ブロックリストを読み込むようにしてください。
(Linuxなら適当にパスを書き換えてください)

終わったらunboundを起動/再起動しましょう。

(初回起動)
sudo sysrc unbound_enable="YES"
sudo service unbound start

(再起動)
sudo service unbound restart

これでだいたいちゃんと動くと思います。たぶん。

あとがき

正直自分で作らなくでも

adguard-dns.io

上記のAdGuard DNSを設定すれば、同等の環境が得られます。

  • DNSの応答がキャッシュされている場合の応答がものすごく速い
  • 他社(AdGuard DNS)のサーバにDNSの名前引きパケットを飛ばさなくて良いから、混雑の影響やパケット往復時間のロスを削減できる

ぐらいが利点かなあ、なんて思います。
私が作ろうと思い立ったのはこの利点がほしいからですが、ぶっちゃけ普通の人類がミリ秒単位の遅延が感じ取れるわけがないので、気にしなくて良いです。

なので、ヤバい人類用とかヤバいAI用とかに活用していただければと思います。

以上、物好きが適当に作ってみたログということで、笑って許してくださいね!

3/27追記

例外設定にposthogを追加しないと、OpenAI APIの呼び出しがおかしくなるので、サンプルコードに追記しました。