2023/11/28(火)SDHCカードは壊れる(特にRaspberryPiのものは)

2023/11/28 23:07 PC(全般)
SDカード類はこれまで致命的に壊れた経験がなかったのだが、ここきて立て続けに壊れたのでちょっとメモ。
原因別に3つくらいあるっぽいが、よくわからないことも含めて記載しておく。

・物理的故障
チップ内の接触・接続や端子の損傷。
SDカード形状だと内部問題は起きづらそうだが、microSDカードだと曲げに弱く問題を起こしそう。
認識が怪しくなってきたりしたら要警戒。

・チップ寿命
チップに書き込む度にチップの寿命を消耗する。
温度や放射線ももちろん影響はする。
ファイルの読み書きが遅い・エラーが発生するとなったら要警戒。

・管理領域損傷
SDカードの管理を行っている領域の損傷…と書かれているものを良く見かけるのだがどの領域かわからない。
ここからは推測。

SDカードは著作権保護(CPRM)用の特殊管理領域(ユーザが読み書きできない)、記憶領域(ユーザが読み書きできる)に分かれる。
記憶領域内の先頭部分に、MBRやGPT用のセクタがあるはずでそこが読めなくなったり書き込み不良になると死。
CPRM領域に不良が起きた場合はちょっとよくわからないが、もしかしたらカードごと死ぬのかもしれない。
もしくはCPRM領域と記憶領域のさらに上のMBRのようなものがフラッシュメモリ内に有るのかもしれない。
チップコントローラのプログラム等は流石にSoCのフラッシュ領域とかチップ外に入ってると思う…多分。
ファイルリストが読めない・容量が間違って表示される・安定しないなどになったら要警戒。
発覚直後にOSで認識すらできなくなるケースも。
チップ寿命の特殊ケースということで一旦は理解する。

ざっと調べた限りSDカードでもウェアレベリングはしているとのこと。
そのため書き込み時の局所性はある程度緩和されているはず。
ただ、コスト・構造の両面でSSDのようなリッチなキャッシュ構成にはできないと思う。
SSDの場合は、DRAMや寿命が長いフラッシュメモリをキャッシュとして使用して、
メイン記憶領域のフラッシュメモリの書き込み回数を緩和するような仕組みになっていると理解している。

ウェアレベリングがFATや写真データ記録を前提にしたアルゴリズムになってる可能性も有るとのこと。
特定のファイルシステム、たとえばext4だと死にやすいとか、1kBytesサイズの細かいデータにサボりがちになるとかはあるかもしれない。

最近Raspberry Pi Zero Wで使っていたmicroSDHCカードが突然OSで認識できなくなったことがあった。
これが管理領域の破損だった可能性はある。
ただ、コントローラが生きてれば認識くらいすると思うのだが…

また、
Raspberry Piは本当に壊れやすいのか
あたりにもあるようにRasPiも一般的なLinuxと同様に、電源を気軽に入れたり切ったりしては駄目とのこと。

ただ、この記事のNGケースはファイル単位の問題のようで認識レベルの問題に発展するかは不明。

まとめと、今後の方針。
SDカード特にmicroSDカード形状のものは、
・同じフラッシュメモリをベースとしていてもSSDよりも壊れやすい。HDDよりも壊れやすいと言って良いかも
・壊れ方は様々だが、突然OSからの認識ができなくなるケースも頭に入れておく
・本来OSを入れるような用途に使うべきではない
・RasPiで使う場合はイメージを取っておくのとできるだけSDカードに書きに行かないような設定を行う
・容量には余裕を見る。50%以上空き容量がある状態を常用とする。
・バックアップは当たり前
・なくなって困るデータを入れない
・壊れたら即諦める。使い捨てと心得る
・古いものは壊れる前にどんどん廃棄。アクセスできなくなって入ってるデータがわからない状態になってからでは遅い
・OSから認識しない状態の発生原因は推測レベルまででよくわからず

なお、SDカード廃棄時は中身が読める場合は一応KillDiskでゼロフィル。
その上で、ペンチやニッパーで物理破壊して廃棄するので良さそう。

2023/10/22(日)ディスクのワイプあれこれ

2023/10/22 26:57 PC(全般)
HDD廃棄時のデータ削除ルールはDoDが有名だが、SSD時代に合わせて少し知識をアップデートしたい。
加えて、使っていたソフトがバギーだったことにも気づいたので、何年か使える定番の方法を決めたい。

削除対象はPATA, SATA(SSD/HDD), できればM.2 SSDのやり方も定まると嬉しい。

▼削除時の機器構成
メンテ用のサブPCとしてノートPCを確保してある。
そこにUSB HDDスタンドをつなぎ、HDDを挿す。
この状態で削除する。

課題として、この構成時に削除ソフトやOSが削除対象ドライブをきちんと認識してくれる必要がある。
USB接続経由にややハードルがある。

▼消去手法
JEITAの、
「パソコンの廃棄・譲渡時におけるハードディスク上のデータ消去に関する留意事項」
や、
消去方式「米国国防総省方式(DoD 5220.22-M)」 と今日におけるその利用について知っておくべきこと
などを確認。

まとめると、
・現在はDoDではなく、NISTのサニタイズ基準を標準として捉える人が多い
・データの削除には3段階(Clear/Purge/Destroy)の基準があり、このうちClearを目指すなら複数回の消去は効果が薄い。0クリア1回で十分
・複数回書き込むようなDoD Shortを適用するくらいなら、消磁など物理的な手段でPurge以上を選択肢として検討するべし
とのこと。

・HDD
Clearを目指す。ゼロフィルとする。
データ密度が高い現代のHDDにおいては、一度ゼロフィルすると読み出すことはかなり困難なようだ。
データ密度のボーダーは15GBで、それ以上なら複数回書き込みはおまじないレベルっぽい。
それ以上を求めるなら、おとなしく消磁装置か物理破壊装置に送る。
(物理破壊装置に送る場合でもできればゼロフィルはしておくべき)

正直ddコマンドでも良いのだろうが、「デバイス名を間違えたら死」のリスクはできればGUIで回避したいという気持ちがある。

・SSD
Purgeを目指す。というのは、Secure EraseができればそれでPurgeが実現できている。
Secure EraseがないとSSDの原理上消去保証が大変だが、無いやつは最初から買わない方針で。

▼使用ソフト(これまで)
Minitool Partition Wizard9 Free Edition (以下PW9)

パーティション操作の機能が豊富で、ワイプなどツールもたくさん備えている。
10以降はGPTとMBRの変換など一部機能がFree版から消えたため、9を愛用していた。
こいつだとUSB HDDもそこそこきちんと認識してくれる。

が、どうもこいつのワイプは信用出来ない。
何度か試していて、以下の事象が発生した。
・ワイプ処理を開始してもすぐに処理が戻ってくることがある(明らかにワイプが出来ていない)
・ワイプ処理を開始後、対象のディスクのアクセスランプが点灯しないことがある(おそらくワイプが出来ていない)
・ワイプでDoD Shortを選択したときにやたらと速い。
具体的には、MHT2040AT(40GB)を使用しての実験で、
ゼロフィル:37m50s
DoD short:36m40s
であった(DoD Shortを行っていない可能性が高い)

あまりにもあまりなので信用できないと判断する。

Minitool以外にもオールインワンのパーティション操作ツール(Paragon/EaseUS/AOMEI等)があるのだが、
個人的にこれらは共通のOEMかPartedMagicを元にしたツールだと思っている。

PW9が怪しいとなると、PWの新版・有料版、あるいは他社のツールもなんとなく信用し難い。
もちろん有料版もありなのだが、この手のツールは基本的にマイナーバージョンレベルのアップグレードも買い直しになる。
なかなかどれと決めるのが難しい。

▼結論
HDDはゼロフィルで消す。
ソフトはKillDisk Freeware Versionを使用する。

気になるなら2回ゼロフィル。
どうしてもDoD shortをやりたいなら、KillDiskの有料版を購入。

PW9のような複合ツールのワイプはおまけであることが多く、「確実に消した」がどうもスッキリしなさそう。
単機能のKillDiskは証明書の発行機能等があることからもわかるように、そこの信頼性が高い。

また、何回か使ってみたが、下記の機能が気に入った。
・2台同時にワイプできる
・ワイプ完了後に所要時間を表示できる
・Free版でもUSB機器の認識が早くて正確

DoD Shortとかをやりたいなら有料版(4kくらい?)に手を出せば良さそう。

SSDはSecure Eraseで消す。
Windows上でTxBenchからSecure Eraseが使える。
このとき、SATA接続だとセキュリティロックされてSecure Eraseが送れないことが多い。
USBにつないで実行する。

心配なら、前提条件のノートPCに繋いで~を逸脱してしまうが、加えてマザーボードのSecure Eraseで消す。

NVMeとか条件で制約がないかはちょっとまだ試せていない。
一旦方針だけ決めておくが、実践時にまた課題が出てくるかも。

実は、KillDiskの10000円くらいのバージョンにはSecure Eraseがついている。
これを買って1つのソリューションで綺麗さっぱりしてしまう手もありそう。

2023/10/22(日)Ext2Fsdは使うべきではない

2023/10/22 25:53 PC(全般)
メモ。

ext2~4をWindowsでマウントできるソフトとして、有名所でExt2Fsdというソフトがある。
実際これでうまくアクセスできるケースは有るのだが、上手く行かないケースがあまりに厳しいので覚書としてメモ。

今回、Linuxで使用していたHDDからデータを抽出する必要があり、
これを導入して計3回Windows10環境でマウントを行った。

対象はext3のパーティションを含むHDDで、USB HDDケースで接続した。

1回目→マウントできファイルの一覧が返ってくるがアクセスできない。そのうちエクスプローラが無反応になりすべての操作を受け付けなくなったためPC再起動
2回目→マウントでき、ファイルのリードは正常動作。
3回目→マウントできたがファイルの一覧が返ってこない。そのうちエクスプローラが無反応になりすべての操作を受け付けなくなったためPC再起動。無反応となっていたタイミングで、「マウントしようとしていたHDDのみならず、ありとあらゆるディスクライトでデータが0x00に化ける」現象が発生していた。

怖くてとても使えない。
マウントしようとしたHDDだけならまだわかるのだが全ディスク巻き込むのが相当きつい。
USB経由でアクセスしたのが悪さしている可能性は高そうだが、、、

1回目の事象を検知した段階で、2回目も3回目もメインPCでやるべきではなかった。
猛省。

2022/08/28(日)AutoIt!で動きが変

2022/08/28 20:31 PC(全般)
AutoIt!で作成したスクリプトで特定のアプリケーションに対し、
・Runで起動しないが、ShellExecuteだと起動する
・ControlGetTextで内容を取れるが、ControlSetTextで内容をセットできない
といった現象が発生。

原因は対象のEXEに、
「管理者としてこのプログラムを実行する」
チェックが入っていたから。

controlsettext not working - AutoIt General Help and Support - AutoIt Forums

UACの影響っぽい。

スクリプトの先頭に、
#RequireAdmin
を追加してやると問題解決した。

なるほどだけど、気づきにくいなあ。

2022/02/12(土)春M(SpringM)で「0による浮動小数点数除算」

2022/02/12 25:22 PC(全般)
春M(SpringM)で特定のファイルに対して以下の操作をした時に、「0による浮動小数点数除算」とダイアログが出ることがある。
[対象操作]
・ファイル削除
・コンテキストメニュー呼び出し

一度ダイアログが出てしまうと、プロセスがファイルハンドルを掴みっぱなしになってしまうようで、
SpringMのプロセスを削除するまでそのファイルは操作ができない。

うかつに操作しに行くと、そのプロセスがハングすることもある。

発生するファイルの条件を調べたところ、字幕付きのmp4ファイルで何らかの理由で字幕streamがデータ無しになっている場合に発生するようだ。

ffprobeで調べるとこんな感じ。
$ ffprobe.exe -select_streams s -show_streams -loglevel error "***.mp4"

[STREAM]
index=2
codec_name=mov_text
codec_long_name=MOV text
profile=unknown
codec_type=subtitle
codec_time_base=0/1
codec_tag_string=tx3g
codec_tag=0x67337874
width=704
height=396
id=N/A
r_frame_rate=0/0
avg_frame_rate=0/0
time_base=1/1000000
start_pts=0
start_time=0.000000
duration_ts=0
duration=0.000000
bit_rate=N/A
max_bit_rate=N/A
bits_per_raw_sample=N/A
nb_frames=1
nb_read_frames=N/A
nb_read_packets=N/A

~ 省略 ~
[/STREAM]
これで、duration_ts=0になっているファイルが発生条件ぽい。
字幕でなくてもvideoやaudioがduration_ts=0の場合もおそらく発生すると思われる(そのようなファイルが手元にないので未検証)。

とりあえず、オリジナルのmp4を破壊してよいのであればdurationが0のストリームを破棄してやれば良いようだ。
上記の場合はvideoとaudio残して、字幕だけ削るので、
$ ffmpeg.exe -i input.mp4 -c:v copy -c:a copy output.mp4
とか。

どのストリームを残すかはソース次第で。

このファイルは問題なく操作できた。

Delphiは外部DLL呼び出しの例外に対してセンシティブだというのは聞いたことがある気がするので、
それが関係しているかもしれない。

2021/12/31(金)Windowsのウィンドウ再配置問題を切替器で打開する

2021/12/31 16:47 PC(全般)

概要

よく知られている問題として、Windowsにはウィンドウの再配置問題がある。

HDMI・DisplayPortでモニタを接続している際に、モニタの電源を切ったりケーブルの挿抜を行うとOS側がこれを検知する。
この時、マルチディスプレイ(拡張)で使用している場合は、接続が生きている側のモニタにウィンドウが再配置されてしまう。

この問題を切替器で解決したので下記にあらましを記載する。

問題の内容

上でケーブルの挿抜と書いたが、物理的なスイッチ(あるいは相当)を行う切替器でも発生する。
ソース1,2とモニタを繋げている切替器で、ソース1&モニタ→ソース2&モニタと切り替えた場合ソース1側では挿抜検知となる。

この問題PnPの仕様としてはごく自然だが、日常的にはこの仕様が邪魔になることが多い。

初めてモニタを繋いだ時・構成を変えた時には有用だが、接続モニタの切り替えや電源OFFを日常的に行う運用をする場合はかなり煩わしいことになる。

特に、資料閲覧や動画視聴などいずれかのディスプレイのウィンドウ配置を決めて使用しているユーザにとってはかなり痛い。
こういった用途の場合、左右のディスプレイの解像度や縦横配置を揃えていない場合も多く、再配置によるウィンドウの乱れ方が大きい。

OS側

Windowsには現状この問題の挙動を変える方法が存在していない認識。
WindowsのInside Previewにこの問題のパッチが来ているという話があるが、完全な機能ではないと言われている。リリース時期も(リリースされるかも)不明。

PersistentWindows, MonitorKeeperなどウィンドウの位置を記憶・復帰するツールは多数あるが、アプリケーションごとの仕様・使い方・権限などの違いにより完璧な動作は難しい。
ヒューリスティック的な挙動にならざるを得ない。

モニタ側

さて、この問題はOS側以外にモニタ・ドライバの作りや設定によって挙動がある程度変わる。

モニタでは、EIZOのモニタはこの問題に対応するためにCompatible Modeというモードを備えている。
EIZO以外に明示的にこの機能を謳っているモニタは発見できていない。

この設定を変えるとモニタの電源を切った際にモニタ側が切断信号をOS側に送らなくなる。
電源を切るケースについてはモニタを選ぶことで対応可能である(EV2495で確認)。

ただし、EIZOはこういったOSDの機能では優秀なものの、パネル周りはピンキリで価格も割高。
EV2495についてもオレンジや水色でかなり不快な縦線が見えるパネルが使用されていたりする(EV2456から継続している問題なので、EV2456 縦縞などで検索するとサンプルがでてくる)。

モニタの選択肢があまりに少ないのは辛いので、できればモニタに依存しない対応方法にしたい。

グラボ側

グラフィックボード(おそらくドライバの作り)も影響するようだ。

私の場合、今年の8月にRadeon HD6450からRyzen 5700Gの内蔵GPUに変更した。
同じRadeon系列であるにも関わらず、HD6450では発生しなかった再配置問題が5700Gだと発生するように。
しかもHDMI・DisplayPort問わず発生する。

体験する前までこの問題はDisplayPort限定と認識していたため、かなり想定外だった。

実質同一チップメーカーでも発生するしないがある上、グラボの機能として有無を探すのがすごく難しい。

グラボでなんとかするのもつらそうなので、グラボに依存しない対応方法にしたい。

課題と制約

あわせて、モニタの接続周りでいくつか課題を抱えていたのでそれもいっぺんに解決してしまいたい。

・ゲーム機をつなぎたいがモニタ側にHDMI端子が足りない
・モニタ側の接続切り替え操作が機種によっては操作しづらいので簡単に操作できるようにしたい。最近のモニタではボタンが背面にあるものすらある。
・リモートワークをする機会が多く、私用PCと業務PC(ノート)をいずれもモニタに繋ぐ。素早く切り替えられるようにしたい。

構成的な制約は以下の通り。

・モニタは2枚(Display1~2)。一旦ともにWUXGA横配置とする。機種・解像度・縦横配置は自由に変更可能にしたい。

・PC1(私用PC)。2枚のディスプレイにつなぎ、メイン・拡張で使用。絶対に再配置されたくない。ほぼサーバなので恒常的に起動状態。

・PC2(業務PC)。ノート。2枚のディスプレイにつなぎ、メイン・拡張で使用。本体モニタは使用しない。業務時間中は再配置されたくない。業務が終われば電源OFF・ケーブル取り外しで、業務開始時に再配置されるのは特に問題ない。

・Switch。Switchにこだわらずゲーム機など、モニタ1枚を使用するHDMI機器を最大2台くらい繋げられると理想。

つまりソースが5~6本、シンクが2本。これを上手く接続したい。

対応手段

課題を整理すると、PCとモニタの間になにか問題を解決するための仲介役が必須になるようだ。

EDID保持・固定などで調べるといくつか製品が見つかる。

大まかに2系統あるようだ。

・アダプタ(ドングル):HDMI->HDMIかDP->DP。HDMIのソース側の電源で動く。
アダプタの機能として、モニタ側の電源OFFをソース側に伝えない。モニタのEDIDを学習してそれをソース側に伝える、もしくは設定した固定EDIDをソース側に伝える。製品ごとの固定EDIDを持つものも(この場合、モニタの解像度ごとにアダプタが必要)。
amazonで売っている製品名不明のものや、同人ハードのDPHPDMAなど。

・切替器:HDMIのものが多くDPのものは少なかったり高かったり。外部電源が必要。
切替器の機能として、モニタ側の電源OFFをソース側に伝えない。モニタのEDIDを学習してそれをソース側に伝える、もしくは設定した固定EDIDをソース側に伝える。
TESmartの切替器など。

これを組み合わせて問題を何とかする。

実構成

いろいろ考えた挙げ句、TESmartの切替器を軸に以下の構成に落ち着いた。

 +----------+             +----------+
 | Display1 |             | Display2 |
 +----+-----+             +----+-----+
      |                        |
      +-------+           +----+
              |           |
         +----+-----------+---+          +----------+
         |  OUT1        OUT2  |          |          |
         |                    |          |      +---+------------+
         |  TESmart           |          |      |  OUT1          |
         |   TES-HMA0402A1U   |          |      |                |
         |                    |          |      |  SANWA SUPPLY  |
         | IN1  IN2  IN3  IN4 |          |      |   SW-HD31ML    |
         +--+----+----+----+--+          |      |                |
            |    |    |    |             |      | IN1  IN2  IN3  |
   +--------+    |    |    +-------------+      +--+----+--------+
   |             |    +-+                          |    |
   |    +--------+--+   |                          |    +--------+
   |    | BENFEI    |   |                          |             |
   |    |  DP->HDMI |   |    +------------+    +---+--------+    |
   |    +---+-------+   |    | Plugable   +----+ PCduoduo   |    |
   |        |           |    |  UGA-4KDP  | DP |  DP->HDMI  |    |
   |        |DP         |    +-+----------+    +------------+    |
   |        |           |      | USB                             |
+--+--------+---+    +--+------+-----+                           |
| HDMI     DP   |    | HDMI   USB    |                      +----+-----+
|               |    |               |                      | Nintendo |
|      PC1      |    |  PC2(Laptop)  |                      |  Switch  |
|               |    |               |                      +----------+
+---------------+    +---------------+

以下に、接続している機器についての詳細を記載する。

TESmart TES-HMA0402A1U
4入力2出力のHDMI切替器。切替器の電源が生きている間は切断信号をソース側に伝達しない。OUTにつないだモニタ側のEDIDを記憶し、IN側によしなに流してくれるようだ。細かい挙動を突き詰めていないが不満に感じるポイントがない。切り替えはモニタ側でやるより早いケースが多いと思う。物理ボタンはOUTに対してIN1~4をローテーションで切り替えるボタンが2つ(OUT1, OUT2用)。物理ボタンだと一発で指定ソースを選べないが、リモコンが付属しておりそちらではソースを直接指定できる。6入力だったら最高だった。現状のゲーム機器等のコネクタを考えるとDPではなくHDMI切替器である必要がある。

BENFEI DP->HDMIアダプタ
amazonで売っている安売りのDisplayPort→HDMI変換アダプタ。製品名不明で、別ブランドから同じ形のものがたくさん出ている。かなりの曲者で、3台入手したうち2台はPlugable UGA-4KDPからの変換に使うとNo Monitor 640x480固定になってしまう(EDIDが取れない?)。インピーダンスがばらついてるとか、チップが変わったとかそういうもののような気がする。PC1のDisplayPortにつなぐ分にはいずれも問題なかった。
この手の変換アダプタは国内サプライメーカーで販売しているものも中身同じだったりして、金を出せば失敗しないかというとなんとも言えないのが辛い。

Plugable UGA-4kDP
もともとモニタに空いているポートがDisplayPortしかなかったのでこれを使用していた。新構成でも流用。

DisplayLinkのチップを使用しており、挙動はやや怪しい(たまに止まる)。
DisplayLinkは製品の質でユーザからの不満が多い印象もあるが、現状USB単独でモニタを増やせる機器(チップ)自体があまり選択肢がない。その中ではPnPでドライバが入るのでDisplayLinkの信用度はけっこうある。

PCduoduo DP->HDMIアダプタ
amazonで売っている安売りのDisplayPort→HDMI変換アダプタ。製品名不明で、別ブランドから同じ形のものがいくつか出ている。BENFEIで2連続失敗したので購入。こいつはPlugableにつないでも問題なかった(EDIDをちゃんと取れた)。

SANWA SUPPLY SW-HD31ML
以前から使っていた切替器。TESmart切替器と合わせて、6入力を実現するために使用。IN切り替えがローテーションではなく直接ボタンでやれるのが良い。内部的には物理切替器とほぼ同じなので、この切替器につないだ機器は再配置問題が発生し得る。一緒に使う可能性がない機器の組み合わせ、もしくはモニタ1枚を使用する機器をつなぐ。

ついでにHDMIケーブルをすべて、細い割に不具合もなさそうなELECOMのCAC-HD14USシリーズで統一。

ケーブルの取り回しも楽になって(本数は増えたが)楽になった。

結果

メリット

・再配置問題を気にせずにモニタの電源を切れる。

・モニタの切り替えで本体操作不要。リモコンですばやく楽に。どのように切り替えても、PC1では再配置問題は発生しない。

・HDMIを軸に統一したので配線の考え方がシンプルに。HDMIに変換してHDMIで配線すればよい。ケーブルの流用が効くし、取り回しも楽。

・これからは、モニタはHDMI一口あれば何を買っても大丈夫。モニタ購入時に端子の個数・形状を気にしなくてよい。またウィンドウ再配置問題の対応(EIZOのCompatible Mode相当)も気にしなくてよい。

・これからは、PC1用のグラボはHDMIもしくはHDMIに変換できるコネクタ(DVIかDisplayPort)が計2個あれば何を買っても大丈夫。グラボ購入時にウィンドウ再配置問題を気にしなくてよい。

デメリット・課題

・ケーブルが増えた

・SW-HD31MLにつないでいる機器は再配置問題が発生しうる。今の用途だと回避しなくても不満がないが、回避したいとなるとTESmart切替器2台以上の組み合わせか50k以上する業務用機器になるかも

・TESmart切替器の消費電力(測っていない)

・TESmart切替器が単一障害点になってしまうので、今後故障時に同等製品がないと(あるいはやたらと高くなってたりすると)死ぬ。

余談

そのうちUSB-C(DP Alt)だらけになってしまいそうな気がするが、Windows側がなんとかしないとデイジーチェーンだろうが何だろうがこの問題は改善しない(はず)。

しばらくこの構成でつなぎつつ、OS側が何とかしてくれるのを期待したい。
結局、OS側ではなんともならずDP時代にはTESmartのDP切替器を使ってそうな気もする。

2021/09/19(日)pycronが動かない

2021/09/19 25:39 PC(全般)
Windowsのタスクスケジューラにどうも馴染めないので、pycronというWindows用cron実装ソフトを利用している。

システムをクリーンインストールした際に、pycronが動かなくなってしまったのでその解決方法についてメモ。

なお、かなり古いソフトで公式サイトも消失している。
同名のソフトやライブラリもあって検索がまともに機能しない。
なかなかに厳しい。

問題は、pycronを標準のc:\Program Files (x86)\pycronなどにインストールした場合に発生する。
サービスとして起動したpycronが一切のタスクを実行しない。

原因はpycronサービスがcron設定ファイルcrontab.txtを読めていないから。
これはWindowsのVirtualStore機能でハマりが発生している。

pycronは、付属のcrontab.txt Editor(GUIのcrontab編集ツール)でcrontab.txtを作ったり、スクリプトのテスト実行ができる。
便利なのだが、これが問題を起こす。

crontab.txt Editorを非管理者権限で動かして設定を保存すると、自動的にWindowsのVirtualStore機能が働き、

C:\Users\********\AppData\Local\VirtualStore\Program Files (x86)\pycron

にcrontab.txtを出力する。

しかし、pycronはデフォルトで、pycron.exeと同一ディレクトリにcrontab.txtが存在する想定で動く。

サービスとして動くpycron.exeはローカルシステムアカウント(SYSTEM)で動くため、
c:\Program Files (x86)\pycron\crontab.txt
を直接読みに行き、crontab.txtが存在しないので動かないという事象になる。

混乱を招くポイントとして、非管理者権限で動かしたファイラーなどからは、
c:\Program Files (x86)\pycron
の中身は、実際のディレクトリ内容にVirtualStoreディレクトリの内容を上書きしたような状態で表示される。
同一名ファイルが有る場合でも、VirtualStore側が優先ということ。

ログファイルについても、crontab.txt Editorでテスト実行をするとまずVirtualStore側にpycron.logが出力される。
サービスのpycron.exeはc:\Program Files (x86)\pycron\pycron.logを出力するので、
手順と閲覧方法によってはVirtualStore側に隠されてしまってサービスのログファイルが見えないことになったりする。

なお、管理者権限で動かしたプログラムからは、素のc:\Program Files (x86)\pycronの内容が見える。

解決手段は下記どれか。
a) Program Files (x86)以外にインストールする
b) crontab.txt Editorを管理者権限で実行して、c:\Program Files (x86)\pycronにcrontab.txtを出力する
c) pycron.cfgを書いて、VirtualStore側のcrontab.txtを読むようにする
d) crontab.txtを手動でVirtualStore側からc:\Program Files (x86)\pycronにコピー

ただ、a)以外は、crontab.txt Editorの実行権限を間違えるたびにトラブルになりそうなのがなんとも嫌。
なので、a)案を採用した。

タスクスケジューラはcronと比べUIや設定オプションの煩雑さの割に、スケジュールの細かいコントロールができないのが不満。
WSLを使えばよいのだろうが、こっちはこっちでHyper-Vとサードパーティ仮想化ソフトの共存が難しい問題がある。
VMWareやVirtualBox資産が結構あるので切り替えが難しい。

ここらへんあと2,3年の技術進化で共存なり寄せなりスッキリできるようになるんじゃないかと期待してるけど、
今のところはpycronで凌ぐ方向で。

2020/12/23(水)Windows10 で拡張子に対して関連付けができない

2020/12/23 26:28 PC(全般)
Windows10 で関連付けができない問題。

環境はWindows10 Pro 1803 17134.471

設定→アプリ→規定のアプリからデフォルトアプリケーションを変えようとすると、指定後に設定画面が若干フリーズして消える。

再度設定画面を開いてもデフォルトアプリケーションが変わっていない。

下記にあるように、WindowsのKBのバグらしい。

既定のアプリが変更できないのはKBの不具合だった
Windows 10:"KB4462919"適用後、規定のアプリの変更ができなくなる - Microsoft コミュニティ

ということでWindows Updateが簡単な解決方法になりそうだが、当該PCは現在Windows Updateができない別の問題にあたっておりWindows UpdateがNG。

それ以外の方法でとりあえず解決したい。

今回のケースの場合、関連付けを変えたい拡張子のファイルに対して、

コンテキストメニュー(右クリック)→プログラムから開く→別のプログラムを選択→「このファイルを開く方法を選んでください」ダイアログで「常にこのアプリを使って.~ファイルを開く」にチェックを入れて、開きたいプログラムをクリック

で、とりあえず変更できた。

なお、当該情報はレジストリに保存されているらしい。

例としてMP4ファイルであれば、

\HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.mp4\UserChoice

になる(直接書き換える手もあり)。
このあたりを確認しながら設定をすれば良さそうだ。

2020/12/06(日)Thunderbirdでメール中のリンクが開かない

2020/12/06 20:07 PC(全般)
メーラーは未だにThunderbirdを使っているが、どこかのタイミングからメール中のリンクが下記メッセージで開かなくなった。

「このファイルには、この操作を実行するように関連付けられたアプリがありません。アプリをインストールするか、または既にインストールされている場合は、規定のアプリの設定ページで関連付けを作成してください。」

セキュリティ関連かと思ったが流石に不便。
開けるように改善したい。

Thunderbird - ふなWiki

にあるように、一度オプション
network.protocol-handler.warn-external.https
network.protocol-handler.warn-external.http
をtrueに設定すると、リンククリック時にブラウザを選択できる。
以降はリンクがブラウザで開くようになる。

デフォルトブラウザを設定したら、上のオプションはfalseに戻して良いようだ。

2020/11/03(火)Windows8.1でWindows Defenderが有効にできない

2020/11/03 16:12 PC(全般)
Windows8.1でWindows Defenderが有効にできない問題。

環境はWindows8.1 64bit。

長期に渡ってAvira Antivirusを入れて使っていたPCで、Aviraが暴走するケースが増えてきたのでAvira→Windows Defenderに切り替えようとした。

Aviraのアンインストールにも一苦労したのだが、アンインストール後でもWindows Defenderが有効にできない。

Windows Defenderを起動しようとすると、
「このアプリは無効になっており、コンピューターを監視していません。」
とダイアログが出て進まない。

【Windows 8.1】 マカフィーを削除後、 Windows Defender - マイクロソフト コミュニティ

が該当しそうに見えるのだが、どこからたどっても状況は同じ。
解決しない。

日本語answers.microsoft.comはノイジーである。

結局、下記手順を順に試して、
Problems starting Windows Defender in Windows 8/8.1/10 - Microsoft Community

「8. Enabling Windows Defender from Group Policy」
でやっと解決。

HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows Defender
キーがなかったので作成し、DWORD値で
DisableAntiSpyware:0
を作成したらWindows Defenderの画面が開くようになった。

その後は定義更新したら素直に監視状態までこぎつけた。

Windows8→8.1の過程でキーが作られなかったりしたのだろうか。謎。

Windows8.1自体がもうあまり寿命がないが、とりあえずこれで凌げそうである。
OK キャンセル 確認 その他