web-dev-qa-db-ja.com

巨大なフォルダの名前を変更する:それは危険ですか?

mvコマンドを使用してフォルダーの名前を180 GBに変更するのは危険ですか?

180GBのフォルダ/dataがあります。

mvコマンドを使用して、/dataフォルダの名前を/BD_FILESに変更します。

それは安全ですか?

20
yael

同じファイルシステム内にある場合、フォルダーの名前を変更しても安全です。


mount point/dataは、私にとってはマウントポイントである可能性があるようです。mountでこれを確認してください)の場合は、 mv /data /BD_FILESはデータをルートパーティションに移動するので、単純なmvです(これは意図したとおりではない可能性があります)。

ファイルシステムをアンマウントし、空になったディレクトリの名前を変更し、/etc/fstabをこのファイルシステムの新しい場所で更新してから、名前を変更した場所にファイルシステムを再マウントする必要があります。

言い換えると、

  1. umount /data
  2. mv /data /BD_FILES/BD_FILESがまだ存在しないと想定します。その場合、最初に邪魔にならないように移動します)
  3. /etc/fstabを更新し、マウントポイントを/dataから/BD_FILESに変更します
  4. mount /BD_FILES

これには、ファイルのコピーは含まれません。ファイルシステムのマウントポイントとして機能するディレクトリの名前が変更されるだけです。


ディレクトリの名前の変更に新しいファイルシステムへの移動が含まれる場合(/dataが1つのディスク上にあり、/BD_FILESが別のディスク上にある場合など)は、たとえば、より大きなパーティションに物を移動する場合は、元のデータをそのままにして、コピーに問題がないことを確認できるまで、データをコピーすることをお勧めします。あなたはこれを行うことができます

rsync -a /data/ /BD_FILES/

たとえば、これが何をして何をしないかについては、rsyncマニュアルを参照してください(たとえば、ハードリンクは保持されません)。


フォルダーの名前を変更したら、既存の手順(フォルダーを使用するプログラムとユーザー、バックアップなど)が名前の変更を認識していることも確認する必要があります。

71
Kusalananda

ディレクトリ内のすべてのファイルの名前を変更するのではなく、/one file in /の名前を変更します。その理由は:

  1. ディレクトリはファイルであり、
  2. ファイルシステムは、実際のテキストではなく、iノードを実際に考慮します。

したがって、ファイルの数やデータの量に関係なく、ディレクトリの名前を変更するのは簡単です。

16
RonJohn

名前を変更するだけの場合(同じファイルシステムのソースとターゲット)、それは単にディレクトリエントリの名前の変更です。成功してディレクトリに新しい名前が付けられるか、失敗した場合は何も変更されません。 *

ソースとターゲットが異なるファイルシステムにある場合、データはmvによってコピーされる必要があります。最大ファイルサイズ、ファイル名の制限など、ファイルシステムの機能の違いが問題を引き起こす可能性があります。問題を回避するには、まずファイル(cprsync、…)をコピーし、コピーが正常に完了したら、元の場所にあるファイルを削除します。

*ただし、いくつかのコーナーケースがあります。たとえば、[〜#〜]バグ[〜#〜]man 2 rename のセクションに記載されています

14
sebasth

他の人が言ったように、フォルダの名前を変更しても、内容に固有のリスクはありません。しかし、考慮した方がよい別の種類のリスクがあります。

元の場所を参照する既存のプロシージャ、スクリプト、ユーザー定義のショートカット、および構成は、この変更によって壊れる可能性があり、たとえば、パスがデータベースに格納されている場合、それらの更新は大きな仕事になる可能性があります。

できることの1つは、新しいディレクトリ名にシンボリックリンクを作成することですが、しばらくの間は古い名前をそのままにしておきます。これにより、この変更の影響を評価する時間が得られます。古い名前を一時的に削除して問題がないかどうかを確認し、問題がある場合は、古い名前を再作成して、更新が必要なものを把握しながら作業を続行できるようにします。

次のようなコマンドで実行できます:ln -s /data /BD_FILES

8
barbecue

名前の変更はアトミックです。唯一の合理的なリスクは、mvが何らかの理由ですべてをコピーすることを決定し、途中でクラッシュすることです。 GNU mvがある場合、_mv -T_はこのリスクを取り除きます。

_mv -T_はmvにフォルダ以外の場所に移動していることを伝えます。これにより、mkdir()の実行が拒否され、フォルダを移動して何らかの理由でコピーすることにした場合に失敗します。

私は、数年前に修士論文を作成しているときに_mv -T_からバグを揺さぶるのに関与していました。これは、あまりにも多くのEdgeケースで間違った処理を行っていました。

一方、ルートパーティションには180GBのユーザーデータがあります。あなたはおそらくこれをルートパーティションから移動したいと思うでしょう。

3
Joshua