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';

口唇ヘルペス再来襲(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分だとソフトフランスのような焼き上がりになる。

DIGA DMR-EX250VをSATA HDD化できなかった

こちらに書いた通り、DIGA DMR-EX250V(2006年5月15日発売)の内蔵HDDはWD2500BB-14RDA0で今となっては希少なIDEドライブである。製造から18年ほどが経ち、いつ壊れてもおかしくない状態と言えよう。SATA→IDE変換アダプタを使い入手の容易なSATA HDD、可能ならSSDに換装できないかとアレコレ試してみたものの、どうやってもF99エラーになってしまい成功していない。とりあえず備忘録がてら現状を書いておく。

試したこと

準備したもの:

SATA→IDE変換アダプタの詳細:

製品 変換チップ ジャンパ 備考
Master Slave CS3) ACD4)
YFFSFDC SATA-IDE 変換 PCBボードアダプタ JMS20330 × ×
スゴイアダプタ SSATA-TR150VH Ver.3 JMS20330らしい ×
玄人志向 SATAD-IDE 88SA8052 A1062-00D。StarTech IDE2SAT2と同じっぽい。取説にATA-7 Streaming Feature Set Supportとあり。

手順:

  1. 元のHDD WD2500BB-14RDA0をPCに繋ぎ、Linuxのddでセクタダンプ
    • PCの都合でIDE→SATA変換アダプターを経由しているが、影響はないハズ
  2. 上記イメージを同様に換装先のHDD WD5000AVCS-142DY1へ書き込み
  3. SATA→IDE変換アダプタ経由でWD5000AVCS-142DY1をDMR-EX250Vに接続
    • ジャンパはCS。CSが無ければ色々試す。

3つの変換アダプタを試してみたものの、レコーダーの電源投入後、HDDがスピンアップしアクセス音がして直ぐにF99エラーで電源が落ちてしまう。SATAD-IDEでは一瞬U99が出てからF99になるが、他のアダプタでは気に留めなかっただけで同じかもしれない。

元のHDDで起動後、換装先HDDにホットスワップする荒業もやってみたが、レコーダーがフリーズしてダメだった。

なんとなく、SATA→IDE変換器がキモのような気がしている。

調べたことをつらつらと

  • 価格.comに元と同型番HDDへのセクタコピーによる換装報告があるので、換装自体はできると思われる。
    • HDDの交換を行なうべく、同型式のHDD(WD2500BB)を入手してそのまま換装しましたが、
      「F99」のエラーメッセージが出るだけでうまくいきません。
      困っていたところ、「DMR-XW30」の掲示板で交換成功のスレを発見。
      http://bbs.kakaku.com/bbs/20274010287/SortID=11388303/
      (中略)
      コピーが始まってしばらくすると、READエラーが発生。
      (うっかりしてコピー元のHDDに録画データを残したままであったためか??)
      おそらく数十MB程度しかコピーされていないようでしたが、試しにレコーダーに取付けて、
      電源を入れると、HDフォーマットが自動で始まりました。
      その後、録画・再生を確認して、無事OKとなりました。

    • 上記リンク先のDMR-XW30(2006年9月1日発売)の例では、SAMSUNG HD400LDから日立のHDDにセクタコピーで換装できており、世代的にも行けそうな気はしている。ただし、HDDがAVコマンド(Streaming Feature Set)に対応してる必要はある気がする。
  • 1世代前のDMR-EX200V(2005年11月10日発売)はセクタコピー不要で行けるっぽい。リンク先ではHA250JCからHDT725032VLAT80に換装している。
  • DMR-XW300(2007年11月1日発売)はhttps://aucview.aucfan.com/yahoo/j419340315/

参考サイト

3)
Cable Select
4)
ATAPI CDの略らしい。EjectなどのATAPI固有コマンドに影響する模様
1 2 3 4 ... 83 84