Zopfcode

かつてない好奇心をあなたに。

Buffalo NASで万単位のファイルを素早く削除 + 日本語フォルダにcdする話。

長いタイトルで申し訳ないんですが…

今日、5年以上前からパソコンのお世話をしているとある会社に行きました。 作業内容はというと、NASに外付けハードディスクを接続してバックアップ設定をするというものでした。

そのついでにNAS内の「ゴミ箱」であるtrashboxフォルダを掃除しようと思って、Samba(Windowsネットワーク共有フォルダ)越しに削除をするんですが、これがとても遅くて。 残り1時間とか言われて笑っちゃう。

そこで、NAS内で稼働しているLinuxにSSHして、NAS内でrmすることにしました。 その過程で得たノウハウを備忘録として書いておきます。誰かのニッチな需要を満たせたら幸いです。

作業を行ったNASは「LS-WHGL/R1」シリーズの2TB版、 SSHクライアントはTera Termです。


はじめに流れをまとめておくと、

  1. Buffalo NASのセキュリティホールを突いてSSHできるようにする
  2. SSH接続する
  3. (日本語フォルダ内にtrashboxがある場合)下準備をして日本語フォルダにcdできるようにする
  4. trashboxまでcd、ls | xargs rm -rfする

という感じです。

Buffalo NASのrootを取ってSSHできるようにする

検索すると親切な説明のあるサイトがいくつか出てくると思うので、 すいませんが手順は割愛します。

実際にSSH接続して、trashboxまでcd…と思いきや

SSHできるようにしたら、実際にsshを叩いてNASに接続します。

/mnt/array1 にある実際のRAIDアレイに入ると共有フォルダがあります。

続いて、共有フォルダにcd…とここでつまずきました。日本語のフォルダにcdできないのです。 IMEから漢字を入力すると全部ハイフンになってしまいます。

(なお、ここでは日本語フォルダを"あいうえお"とします。)

sh-2.05b$ cd /mnt/array1
sh-2.05b$ ls
BACKUP         spool          あいうえお
(arg: -1) cd --------
sh: cd: --: invalid option
cd: usage: cd [-L|-P] [dir]

lsはできていることから、幸いにも2バイト文字の処理そのものは正常にできていることがうかがえます。 つまり、SSH越しで2バイト文字は打てないが、NAS内でパスを処理させればいけそうな気がしますね。

そこで、新規にtestという共有フォルダを作り、その中にフォルダ名が書かれたテキストpath.txtを置いて処理させることにしました。 catからパイプでつないでcdする方法はStackOverflowのこの手法を参考にしました。

sh-2.05b$ pwd
/mnt/array1
sh-2.05b$ cd test
sh-2.05b$ ls
path.txt
sh-2.05b$ cat path.txt | nkf -j --utf8
あいうえおsh-2.05b$ cd ..
sh-2.05b$ cd $(cat /mnt/array1/test/path.txt | nkf -j --utf8)
sh-2.05b$ pwd
/mnt/array1/あいうえお
sh-2.05b$

path.txtは当初UTF-8で保存してcdに渡していたのですがなぜかうまくいきませんでした。

今回のケースの場合、あえてShift-JISで保存しておき、nkf -j --utf8でUTF-8に変換させ渡すと不思議とうまくいきました。

改めてtrashboxを掃除

あとは、trashboxcdして、rmするだけです。

sh-2.05b$ pwd
/mnt/array1/あいうえお
sh-2.05b$ cd trashbox
sh-2.05b$ ls | xargs rm -rf
sh-2.05b$

やったね!