start

WD SN640のファームウェア更新とかベンチマークとか

こちらのページによれば、Western Digital Ultrastar DC SN640 U.2 NVMe SSDシリーズの初期ファームには、まれにSSDがタイムアウトし、機能不全を引き起こす可能性のあるバグがあるらしい。回復手段はSSDのフォーマットで、言わずもがなデータは失われることになる。あな恐ろし。

配布されている修正版ファームウェアはR1110021, R1410004で、手持ちのSN640はR1110012なので発生する可能性がありそう。というわけで更新してみる。

やり方は上記サイトに書いてある通り。Linux環境ならnvmeコマンドでSSDのFWをダウンロードし、適用し、マシンを再起動する。

nvme fw-download /dev/nvme0 --fw=FW.vpkg
nvme fw-commit /dev/nvme0 -a 1

こんな感じでR1110021に更新されていることが分かる。

# nvme list | grep WUS4
/dev/nvme2n1    /dev/ng2n1    A06F8XYZ    WUS4BB076D7P3E3    1    7.68  TB /   7.68  TB    4 KiB +  0 B    R1110021
/dev/nvme1n1    /dev/ng1n1    A066EXYZ    WUS4BB076D7P3E3    1    7.68  TB /   7.68  TB    4 KiB +  0 B    R1110021
/dev/nvme0n1    /dev/ng0n1    A0647XYZ    WUS4BB076D7P3E3    1    7.68  TB /   7.68  TB    4 KiB +  0 B    R1110021

なお、このSN640たちは例によって中古で、いずれも2PB以上読み書きされている。データシート上の寿命は11210TBW(4kランダムライト時)であるから、S.M.A.R.T.が示すとおりまだまだ余裕がありそう。

CrystalDiskMarkとCrystalDiskInfoの結果は以下の通り。PCIeパススルーでVMで測定したものなので、値は参考程度に。

------------------------------------------------------------------------------
CrystalDiskMark 9.0.1 x64 (C) 2007-2025 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):  2794.207 MB/s [   2664.8 IOPS] <  2999.14 us>
  SEQ  128KiB (Q= 32, T= 1):  3284.428 MB/s [  25058.2 IOPS] <  1272.22 us>
  RND    4KiB (Q= 32, T=16):   600.710 MB/s [ 146657.7 IOPS] <   615.42 us>
  RND    4KiB (Q=  1, T= 1):    38.750 MB/s [   9460.4 IOPS] <   105.45 us>

[Write]
  SEQ    1MiB (Q=  8, T= 1):  2009.656 MB/s [   1916.6 IOPS] <  4162.21 us>
  SEQ  128KiB (Q= 32, T= 1):  2015.298 MB/s [  15375.5 IOPS] <  2077.10 us>
  RND    4KiB (Q= 32, T=16):   523.224 MB/s [ 127740.2 IOPS] <   237.16 us>
  RND    4KiB (Q=  1, T= 1):   140.593 MB/s [  34324.5 IOPS] <    28.90 us>

Profile: Default
   Test: 1 GiB (x3) [E: 0% (0/7154GiB)]
   Mode: [Admin]
   Time: Measure 5 sec / Interval 5 sec 
   Date: 2025/06/22 13:52:58
     OS: Windows 10 Pro 21H2 [10.0 Build 19044] (x64)
Comment: WD SN640 7.68TB (WUS4BB076D7P3E3) on VM

シーケンシャルは概ねデータシートどおりだが、ランダムのIOPSが1/2~1/3と振るわないのはパススルーの影響なのかしら?

FreeBSD環境で更新日が1970年1月1日になったNextcloudのファイルを直す

数年前のある日、突然Nextcloudのクライアントが「ファイルの更新日時が不正」というエラーを吐いてファイルの同期ができなくなった。確認してみると、大量のファイルの更新日時(mtime)が1970年1月1日になってるやんけえええええええ!!!!

どこをどうみてもUNIXエポックです、本当にありがとうございました。デスクトップクライアントv3.4.0でのやらかしらしい?

同期を再開させるだけなら、touchでmtimeを現在日時に更新してやればよい。でもワタクシはファイル探すときに結構mtime使うんですよね、なので極力元に戻したい。幸い、作成日時(ctime)とアクセス日時(atime)のいずれかは無事なようなので、それらからmtimeの復元を試みる。公式でmtime correction tool kitという、名前のとおりの復旧ツールが用意されているが、こちらはLinux環境向けでFreeBSDでそのまま使うことはできない1)ので、これらを参考に手動で直す。

まずは、mtimeが1970/1/1になったファイルを抽出する。Nextcloudのデータフォルダは/mnt/nextcloud/dataとする。

findで「mtimeがUNIX時間の0である」と指定する方法がわからなかったので、「mtimeが40年前(2024年9月時点で1984年9月)より新しい」とした。単位は分であることに注意。で、該当するファイルの作成日時(birthtime)、作成日時(ctime)、更新日時(mtime), 最終アクセス日時(atime), ファイル名をファイルに書き出す。

# cd /mnt/nextcloud/data
# find . -mmin +21024000 -print0 | xargs -0 stat -f "%SB,%Sc,%Sm,%Sa,\"%N\"" -t "%s" > /tmp/epoch_time_file_list.csv

CSVをExcelで開き、諸々整形する。UNIX時間→Excel日時の変換数式は=(UNIX時間のセル+32400)/86400+25569で、セル書式をyyyy/mm/dd hh:mm:ssとすればよい。

とりあえず、各種タイムスタンプの中で最も新しい値をmtimeとして採用することにした。どうもNextcloudに突っ込んだ時点でmtime以外の情報は消失しているような気がする2)ので、こんなに頑張っても仕方ないと思いつつ、現在日時にするのはなんか嫌なので。

Excelからタイムスタンプ,ファイルパスのCSVを書き出し、以下のようなスクリプトに食わせればmtime, atimeがそれなりに復旧できる。

#!/usr/local/bin/bash

while IFS=, read datetime file
do
    touch -t $datetime "$file"
done < $1

それにしてもだなー、Nextcloudがmtimeしか保持してないっぽいのは結構衝撃。デバイス間の同期が楽で、意識することなく履歴付きバックアップにもなるなーと思って建てたけど、自分の用途には合わないかなぁ…便利なんだけどさー。zipなんかも更新日時しか保持しないし、アクセス日時はともかく、みんな作成日時とか気にしないのかしら…?

他のクラウドストレージはどうなんだろう、と気になってたらDropboxとGoogle Driveを調べてる方がいた。子曰く、どちらも基本的に同期クライアントを使った場合は更新日時は保持されるとのこと。デスヨネー。

結局、ファイル属性含めて保持しておきたいなら、ローカルストレージかSMBでせっせとバックアップするしかないのかねぇ。理想の形はMacのTimeMachine。設定したら知らぬ間にバックアップがとられてて、イザって時に大助かりというやつ。WindowsもVSS(復元ポイント)で似たようなことはできるが、如何せんUIがダメダメすぎる。TimeMachine並にイケててリッチにしろとは言わないが、ファイル/フォルダのプロパティに押し込まれててアクセス性が最悪すぎる。

かといってOneDriveは仕様が素晴らしすぎて全く使う気になれないし。

Windowsのバックアップソリューション、もっとなんとかならんものか。


1)
コマンドの書式が微妙に異なり動かない
2)
DB上はmtime, mtime_storageというフィールドしかない。初回アップロードを行ったオリジナルのローカルファイルが無くなると、ctime等は失われると思われる。

DokuWikiのBlogTNGのスパムコメントをSQLで一層

作業メモ。

コメント元のIPアドレスをコメント数に並べ替え。

SELECT COUNT(ip), ip FROM comments GROUP BY ip ORDER BY count(ip);

IPアドレスと一致するコメントを削除。

DELETE FROM comments WHERE ip='x.y.z.w';

[url=httpを含むコメントを削除。

DELETE FROM comments WHERE text LIKE '%[url=http%';

<a href=“httpを含むコメントを削除。

DELETE FROM comments WHERE text LIKE '%<a href="http%';

口唇ヘルペス再来襲(5年ぶり5度目)

2024年5月30日、口唇ヘルペスが再びやってきた。5年半ぶり、5度目の来訪である。前回は2019年4月16日で、更に前の発症歴と照らすと4~5年周期で来るようだ。

午前中あたりから上口唇白唇部に違和感があり、午後から罹ったことは分かるであろうチクチク感と経度の水膨れが見られ、再発を確信。すぐさまドラッグストアに駆け込んで、今回はアラセナSクリームを買ってみた。

塗り始めて3日目だが、何となくヘルペシアより効きが良いような…?まぁ、元の症状が従来より軽めな気もするけど。

今回は発症の原因になりそうなことは無いんだけどなー。病気も髭剃りもしてないし。しいて言えば仕事でお疲れモードだったことくらい?

以下、症状の変化の記録。

日付 症状
5/30 発症。2mm弱の軽い水膨れ状態
5/31 水膨れが4mm程度に成長。唇に1か所転移したっぽいが、少し腫れぼったい程度で軽症
6/1 ピリピリ感継続中。薬を塗ったところは表皮?がはがれて、その下に新たな水ぶくれが出来るような状態
6/2 たまにピリピリ。患部はジュクジュクで一進一退の攻防の様相
6/3 大きな変化はなし
6/4 血が固まったような固めのかさぶたに移行。治る方向に傾いてきた感じ。
6/5 かさぶた状態でピリピリ感はもうない。唇の腫れっぽさもなくなる。
6/6 かさぶたがはがれ、赤っぽい感じに。ジュクジュクはしていない。
6/7 大きな変化はなし。唇もほぼ治りかけだが、食器などが当たると少し痛い
6/8 大きな変化はなし
6/9 小さなかさぶた状態

ロシアの白パン、シティ・ローフが簡単だけど素朴で美味しい

朝食用のパンを自分で焼くようになって1年ほどになる。

市販のパンは毎日食べるには甘すぎぃ!!って所から始めた自作なんだけれども、最初はフライパンでお手軽に作る方向だったのに、オーブンを使った普通のパン→天然酵母を使ったパン→型買って食パン→クリームパンを作ってみたり、小麦粉の種類を様々試してみたりと、生来の凝り性が災いし着々と沼っているのである。

最近はハード系のパンや黒パン欲が出ているのだが、色々と面倒なんですな。材料がちょっと違ったり、フランスパンにはフランスパンの型が必要だったり、ライ麦粉は良いお値段だし。

そんな中、嫁が「シティ・ローフ:家庭で焼けるソ連風の朝食パン」なるものを見つけてきた。前発酵があり少し面倒ではあるものの、材料・手順ともにシンプル。なのにこれがなかなかどうして超美味しいじゃありませんか。

シティ・ローフが作れなくなると、うちのQoLが激下がりなので、レシピを転載させていただく。

前発酵生地用

材料 分量 備考
強力粉 225g
125g 30℃くらいに温める
ドライイースト 2g

生地用

材料 分量 備考
強力粉 190g
100ml
バター 10g
砂糖 17g 半量にするとほんのり甘い程度になる。お好みで。
6g

前発酵生地のおかげか、分量や材料には結構寛容に思う。うちでは強力粉の一部を全粒粉に置き換えたり、砂糖を半量にしているが失敗知らず。

前発酵生地

  1. 材料を混ぜる

 * はじめに水っぽさがなくなるまで指先で混ぜると、手のひらがベタベタしなくて済む

  1. 生地がまとまり滑らかになるまで、手のひらで数分こねる
  2. 生地ができたらボウルの底に広げ、乾かないように濡れ布巾やラップをかぶせ2時間程度発酵させる

 * 元レシピによれば「大きく膨らんでから少し縮み始めたら出来上がり」だそうだが、ここまで行かなくても問題なさそう

生地

  1. できあがった前発酵生地に、砂糖、塩を溶いた水を加える
  2. 更に強力粉、室温に戻したバターを加える
  3. 生地が一体化するまで10分程度こねる
    • ここでも、はじめに指先で混ぜておくと、手がベタベタせずに済む
  4. 生地が滑らかになったら生地を丸め、薄く油を塗ったボウルに入れる
    • 生地捏ねで使ったボウルでOK
  5. 乾燥しないように1.5時間ほど発酵させる。大きさが倍になったら完了

焼成

  1. 膨らんだ生地を作業台に置き、拳で空気を抜く
  2. 三等分に丸め、乾燥しないように10分ほど休ませる
  3. 1つの塊を厚さ1cmほどに伸ばす
  4. 祝儀袋を折る要領で、左右を三つ折りにする
  5. さらに上下を閉じるように二つ折りし、餃子の皮を閉じる要領で開いてる面を閉じる
  6. レモンのような形に成形する
    • ピロシキのような形、と言った方が分かりやすいかも。
  7. クッキングシートを引いた天板に置き、乾かないように45分ほど発酵させる
    • かなり膨らむので間隔は十分に空ける
  8. 220℃に予熱したオーブンで15~20分焼く
    • 焼き時間はオーブン依存とはいえ、20分はやり過ぎな気がする。まずは13~16分くらいで様子を見るのが良いと思う。13分だとソフトフランスのような焼き上がりになる。
  • start.txt
  • 最終更新: 2022-07-27 15:26
  • by Decomo