NASの消せないディレクトリ(フォルダ)を消す
ものはBuffaloのTerastation、TS-TGL/R5です。
作業ファイルの共有用に簡易なNASを使うことがあると思いますが、これ、どうしても消せないファイルやディレクトリができてしまうことがあります。私の場合は、対処できた結果わかったのですが、大まかに言って、
(共有ディレクトリ)/(サブディレクトリ)/(サブディレクトリ)/(文字化けしたサブディレクトリ)/(文字化けしたサブディレクトリ)/(破損したファイル)
という結構強力な組み合わせのエラーが発生していました。
普通らしい方法から順に、メーカー保証外のやり方へと試します。
●まずはNASのWeb管理画面から、消せないディレクトリのある共有フォルダのアクセス制限を解除しました。しかし、削除できない。
●やはりNASのWeb管理画面で、今度はその共有フォルダを削除しました。しかし、同じ名前で再度作ると消せなかったディレクトリは復活してしまう。ゾンビです。
……あとでわかりましたが、消えたように見えても、sshでアクセスしてrm -rfしても最下層に「Invalid Argument」で消せないファイルが残り、ディレクトリは消えていません。このため、共有フォルダを同じ名前で作ると復活してしまいます。
ここから先はメーカー保証外です。
●LinuxBox化
そのままではどうにもならないので、LinuxBox化してsshで入れるようにしました。しかし、ファイル名(sjisの「~」?)が原因と思われアクセスできず、LinuxでもWindowsでも消せない。ただし、文字化けしていない親ディレクトリごと移動することはできた(同じディスク上だったからかもしれない)。
ここまで黒星だったのですが、
○inodeで探してリネーム、それから削除する。
これはLinuxbox化すれば、ターミナルから実行できます。
参考サイト: https://log4hc.wordpress.com/2011/10/04/strangecharacters_in_filename-the-unix-and-linux-forums/
ls -li ←inode番号が分かる。
find . -inum 1879048448 -ok mv ‘{}’ temp.bin \;
inode番号(例:1879048448)を指定し、、読める名前(例:temp.bin)にリネームすればOKです。これで文字化けしたフォルダはなんとかなりました。しかしその最下層でls -lで「Invalid argument」を出すファイルはまだどうにもならない。
○/sbin/xfs_repairを使う。
NASがxfsの場合、これはLinuxbox化すれば、ターミナルから実行できます。TS-TGL/R5にはもとから入っていました。
# xfs_repair -n /dev/md1 ← 最初はdry run。良さそうだったので、
# xfs_repair /dev/md1 ← -nを取って実行。
これで「Invalid argument」を出していたファイルも消えました。
オプションの-Lを付けろというネット記事もありますが、それはリスクが高い最後の手段のようです。
詳しい人ならサッサとできるのでしょうが、xfsなど直接いじったことなど今回が初めてです。ちょっと手こずりました。でも次回はもっとスムーズにできるかな♪