巨大なフォルダーの名前変更:危険ですか?


19

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

/data180GBを含むフォルダーがあります。

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

それは安全ですか?


14
なぜ、どのように危険なのでしょうか?不明な場合mvは、-iオプションで電話してください。
デザート

5
あなたの環境には、それが危険であるかもしれないと思うようにする何かがありますか?
ジェフシャラー

2
行為自体が問題を引き起こすリスクがあるのか​​、それとも問題のある影響が生じるリスクがあるのか​​、ということですか?/ dataフォルダーがあることを期待しているプログラムがある場合、名前を変更すると問題が発生する可能性があります。
累積

3
補足:バックアップを検証した場合、ほとんどすべてが安全です。安全でないと安全なものはありません。言い換えれば、「安全ですか」と尋ねるとき、最初に考えることは「バックアップを検証しましたか?」
RedGrittyBrick

2
私はこのOSによるデータで巨大なフォルダを移動する際に問題となる可能性平均リスクは例や緩いデータの途中で移動を停止可能性
ヤエル

回答:


71

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


それがマウントポイントである場合(/dataちょっと私にはマウントポイントになりそうです、これで確認してくださいmount)、データをルートパーティションに移動するmvため、単純な以外の何かをする必要mv /data /BD_FILESがありますあなたが起こりたい)。

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

言い換えると、

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

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


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

rsync -a /data/ /BD_FILES/

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


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


9
システムコールmvだけを行うことを期待するリスクがありますが、rename状況により、ファイルをコピーして元のファイルを削除することに気付いていません。renameシステムコールが行わmvれ、背中の後ろで何か「巧妙な」ことを行わないことを絶対に確認する必要がある場合は、Pythonシェルを開いてを使用しますos.rename
カスペルド

3
比較的最近ではLinuxがあなたの代わりにマウントポイントを移動することができカーネル:mkdir /BD_FILES && mount -M /data /BD_FILES && rmdir /data
デビッド・フェルスター

2
@MichealJohnsonこれはおそらくLinuxシステムで動作します、はい。きちんと事はrsync、それは再開可能だということです。
クサラナナンダ

3
@MichealJohnson Oneは、明らかに使いやすいツールを使用しています。はい、rsync -aほぼすべてのメタデータを保持しますが、ハードリンク、ACL、または拡張属性は保持しません(-HAXそのために追加します)。
クサラナナンダ

3
@Maxディストリビューションrenameごとに、動作が異なるコマンドがあります。renameそれが何をするのかを確実にしたいときにコマンドを使用しないのに十分な理由だと思います。
カスペルド

16

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

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

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


14

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

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

*ただし、たとえばman 2 renameのバグセクションで言及されているように、いくつかのコーナーケースがあります。


>「成功し、ディレクトリに新しい名前が付けられるか、失敗した場合、何も変更されません」。どのように保証されますか?すべてのファイルシステムに当てはまりますか?これに関するドキュメントはありますか?
ターバンオフ

名前の変更は単一のシステムコールですが、man renameの BUGSセクションにはNFSに関する注意事項があります。NFSの使用時にエラーが返された場合でも名前の変更は成功します(manページの詳細を参照)。私も答えにメモを追加しました。カーネル内のファイルシステムが、名前変更が失敗した場合にディレクトリエントリが消えることを許容できると考えるとは思わない。
セバスト

8

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

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

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

次のようなコマンドで実行する必要があります。 ln -s /data /BD_FILES


4
誰もまだ言及していないもう1つの軽度のリスクは、そのフォルダのバックアップ戦略によっては、180GBの「新しい」データが突然表示され、バックアップされます。
ケント

のようなものが好きmv thing1 thing2 ; ln --symbolic ./thing2 thing1です。そのようにして、新しい名前を取得し、シンボリックリンクを削除することで、古い名前が存在しないことを簡単にテストできます。
can-ned_food

3

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

mv -Tmvフォルダー以外に移動することを伝えます。それを行うことを拒否するようになりますどのmkdir()順番でフォルダを移動した場合、それが失敗する原因になるとそれが何らかの理由でコピーすることを決めました。

私はmv -T数年前に修士論文に取り組んでいる間にバグを消すことに関与していました。以前は、あまりにも多くのエッジケースで間違ったことをしていた。

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


「ルートパーティション」に何かがあるかどうかは、名前だけではわかりません。
ピーター

@Peter:ルートパーティション上にない場合は、マウントポイントです。マウントされたマウントポイントの名前をmvコマンドで変更することはできません。
ジョシュア
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.