人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

Linuxで、指定したディレクトリをまるごと削除する最も高速な方法を教えてください。

ディレクトリ a の中に 20 万個のファイルがあります。
このディレクトリをまるごと削除したいのですが、rm -rf a だとかなり時間がかかるようです。
もっと速く消せる方法があれば教えてください。

※今回僕が扱っているのは NFS でマウントしたデータなので、rm -rf a で時間がかかるのはそのせいもありそうです (マウントしている先の NFS サーバは直接触れません)。そのため、できるだけ、特定のファイルシステムに依存しないやり方 (または、NFS を前提にしたやり方) をご回答頂けると嬉しいです。

※と言いつつ、今後役に立つかもしれないので、「ext3 ならこの方法で爆速だよ」みたいな回答にもポイントを配分させて頂きます。

●質問者: sardine
●カテゴリ:コンピュータ
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● パパトモ
●100ポイント

こんな方法があります。NFSではありませんが・・・

http://tomslabo.exblog.jp/13049582/

Winodwsが必要ですが・・・
もしかすると、Macから接続して削除した方が早いかもしれませんね。


sardineさんのコメント
回答ありがとうございます。 Samba 自体は使えないのですが、記事を読む限り、次の y-kawaz さんの回答と 同じように、「いったん移動しておいて、後で削除する」という仕組みみたいです。 であれば、NFS 経由でもできそうです。

2 ● y-kawaz
●130ポイント ベストアンサー

ファイル数が多いものに関しては一般的な手段はありません。諦めて一晩とかかけてでも rm -rf をするしか無いともいます。

ただ、一刻も早くそのディレクトリを空にしたいだけであれば、以下のようにリネームによる対応が高速です。とりあえず空にしてちゃんとした削除は時間をかけて行う感じです。

mv a a.delete; mkdir a; rm -rf a.delete &

sardineさんのコメント
回答ありがとうございます。 パパトモさんの回答とも共通しますが、「とりあえず空にしてちゃんとした削除は 時間をかけて行う」というのは恥ずかしながら思いつかなかったので、 参考になりました。 nohup も組み合わせて、「寝る前に実行しておいて、次の朝にはきれいに 消えている」というのがよさそうですね。

y-kawazさんのコメント
Windowsだとディレクトリaの中のファイルが使用中だったときにロックが掛かっててリネームできないということがよくありますが、Linuxの場合は普通オープン中のファイルはファイルディスクリプタで認識してるので、仕様中かどうかを余り気にすることなくリネームもできるので楽ちんです。

sardineさんのコメント
……うぐっ。以前に Linux の仕様を知らなくて失敗した記憶が蘇りました。 管理者に「ディスクフルになってるよ」と言われ、あわてて rm したのが 今まさにどんどん書き込まれている最中のログファイルだったのでした。 ls しても大きなファイルは見つからないのに、df するとディスク使用率が100%から 減ってなくて、泣きそうになりました……。 しかし、mv も rm もいつでもできるというのは、今回質問させて頂いたような場合は 確かに便利ですね。 とりあえずどかしてから、ファイルを閉じるなり削除するなり考えればいいんですね。 ピンチの時に覚えておくと役立つことがありそうです。 重ねての有用な回答、ありがとうございます!

y-kawazさんのコメント
巨大ログを吐いてるプロセスをそのままに削除して見えない容量で混乱するのは結構あるあるな気が。 そういうときはリネームや削除して再起動が普通ですが、プロセスそのままでも echo > big_log て感じに上書きで空にしてしまうという荒技をたまにやりますw では、おやすみなさい。

sardineさんのコメント
その手があったか! なんかチャットみたいになってますが、追加での回答ありがとうございました。 おやすみなさい!
関連質問

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ