一般的にはしょうもない話だが、しばらく悩んだ末にやっとスッキリしたのでメモとして。
私は通常 デスクトップ機 2台+モバイルノート 1台を使っていて、サブのデスクトップ機とモバイルノート機には アップグレードした Windows11と Puppyがデュアルブートするような構成で使っている。こうした使い方をしていると、全ての環境から 同じファイルにアクセスしたいというニーズが出てくる。こうしたニーズを満たすために以前は Googleドライブなどのクラウドを使っていたが、Puppyでは雑多な一時的データを保存するためにデータ容量が多く、O/Sのユーザ名とは切り離してフリーのメアドで使える Megaクラウドというサービス(無料の容量 15GB)を使っている。
しかし サブのデスクトップ機を Win11にアップグレードした頃から、この Megaのローカル同期フォルダーが Readonlyになっていて ファイルの更新、作成、削除などが出来ないことに気づいた。
実は ローカルの同期フォルダーは なるべくクラウドとのデータ転送量を減らす目的もあって、デュアルブートの Windows/Puppyは同じ内蔵ディスク上のフォルダーを同期させている。しかもデスクトップ機の方は O/Sと同一ドライブの別パーティションにある。フォルダーが Readonlyになったら Windows/Puppy双方から 更新ができなくなると思うが何故か Windows側からは普通に更新が出来てしまう。そこで クラウドアプリの Megasyncが同期フォルダーを掴んだままなのか? と思って 停止したり、アンインストールもしてみたが結局は Readonlyのままだった。
AIのGeminiなどにも聞いたり、「Linux Readonlyファイルの削除」などのワードで検索して rm -f コマンドなども試したが削除も出来ない。右往左往しているうちに
このページに辿り着いた。
このページの情報に基づいて
# mount -o remount, rw /mnt/sdaxとして 読み書きモードでリマウントしたら
# rm -rf /mnt/sdax/Mega_local/filename.txtと中のファイルを削除しようとしても Readonlyエラーは出なくなったが Roxファイラー上ではファイルは消えない。
そこでこのファイルを Geanyで開くと元のデータのまま開ける。そこで 全てを選択しておいて削除し保存したら Roxファイラーのファイル容量が「1B」になって、一旦閉じて再度開いても空白ファイルのまま。そこで
# rm -rf /mnt/sdax/Mega_local/filename.txtと強制削除したら Roxファイラー上の
ファイルが消えるどころか容量が元の値に戻ってしまった??再度同じ操作をして ファイル容量が 1B のまま Puppyを<save>で再起動してから再び Roxファイラーで見ると容量が元に戻ってしまって、開くと中身は削除前の状態で残ったまま。ますます訳がわからない!
次に試したのは、Puppyの起動時にドライブ sdax をマウントしていたのを外して、起動後にターミナルから以下のようにコマンドでマウントしようとしたら
# mount -o wr /dev/sdax /mnt/sdax
The disk contains an unclean file system (0, 0).
Metadata kept in Windows cache, refused to mount.
Falling back to read-only mount because the NTFS partition is in an
unsafe state. Please resume and shutdown Windows fully (no hibernation
or fast restarting.)
Could not mount read-write, trying read-only
とエラーが表示された。どうやら ntfsに独特の Windowsの隠しハイバネーションファイルが残って邪魔しているため、Linux側からは操作できなくしているらしい。そう言えば Windows11にアップグレードした後 休止モードを設定していなかったので、休止モードが「有効」になってしまったのか? ノートPCの方もデュアルブートだが、こちらは同期フォルダーは O/Sパーティションとは別ドライブのパーティションに設定してあるので同じような症状が出ないのか?
そこで再び検索を繰り返したら
こんなページがヒットした。
このページの内容に基づいて以下のコマンドを実行すると
# ntfsfix /dev/sdax
Mounting volume... The disk contains an unclean file system (0, 0).
Metadata kept in Windows cache, refused to mount.
FAILED
Attempting to correct errors...
Processing $MFT and $MFTMirr...
Reading $MFT... OK
Reading $MFTMirr... OK
Comparing $MFTMirr to $MFT... OK
Processing of $MFT and $MFTMirr completed successfully.
Setting required flags on partition... OK
Going to empty the journal ($LogFile)... OK
Checking the alternate boot sector... OK
NTFS volume version is 3.1.
NTFS partition /dev/sdax was processed successfully.
となって、どうやら Windows側の非表示キャッシュの消去が成功したらしい。そこで一旦シャットダウンして Windows側を起動してコマンドプロンプトから
$ powercfg.exe /h offを実行して休止モードを停止しておいて、再度 Puppyを起動して sdax を rwモードでマウントしたらエラーなくマウントできて、ファイルの更新も問題なく出来るようになった。・・・フゥ!!
しかし O/Sパーティション以外のドライブに何故ハイバネーションファイルが作られるのか? 謎だ。