mv
コマンドでフォルダーの名前を180GBに変更するのは危険ですか?
/data
180GBを含むフォルダーがあります。
コマンド/data
を使用/BD_FILES
してフォルダの名前を変更しますmv
。
それは安全ですか?
mv
コマンドでフォルダーの名前を180GBに変更するのは危険ですか?
/data
180GBを含むフォルダーがあります。
コマンド/data
を使用/BD_FILES
してフォルダの名前を変更しますmv
。
それは安全ですか?
回答:
フォルダが同じファイルシステム内にある場合、フォルダの名前を変更しても安全です。
それがマウントポイントである場合(/data
ちょっと私にはマウントポイントになりそうです、これで確認してくださいmount
)、データをルートパーティションに移動するmv
ため、単純な以外の何かをする必要mv /data /BD_FILES
がありますあなたが起こりたい)。
ファイルシステムをアンマウントし、空になったディレクトリの名前を変更し、/etc/fstab
このファイルシステムの新しい場所で更新してから、名前を変更した場所にファイルシステムを再マウントする必要があります。
言い換えると、
umount /data
mv /data /BD_FILES
(仮定/BD_FILES
はまだ存在しないと仮定し、その場合、最初に邪魔にならないように移動します)/etc/fstab
、マウントポイントをから/data
に変更/BD_FILES
mount /BD_FILES
これにはファイルのコピーは含まれません。ファイルシステムのマウントポイントとして機能するディレクトリの名前を変更するだけです。
ディレクトリの名前の変更に新しいファイルシステムへの移動が含まれる場合(ある/data
ディスク上に/BD_FILES
あり、別のディスク上にある場合、たとえば、より大きなパーティションに移動する場合によくあること) 、コピーが正常であることを確認できるまで、元のデータをそのままにしてデータをコピーすることをお勧めします。あなたはこれを行うことができます
rsync -a /data/ /BD_FILES/
たとえば、rsync
これが行うことと行わないことについてはマニュアルを参照してください(たとえば、ハードリンクは保持されません)。
フォルダーの名前を変更したら、既存の手順(フォルダーを使用するプログラムとユーザー、バックアップなど)が名前の変更を認識していることも確認する必要があります。
mv
だけを行うことを期待するリスクがありますが、rename
状況により、ファイルをコピーして元のファイルを削除することに気付いていません。rename
システムコールが行わmv
れ、背中の後ろで何か「巧妙な」ことを行わないことを絶対に確認する必要がある場合は、Pythonシェルを開いてを使用しますos.rename
。
mkdir /BD_FILES && mount -M /data /BD_FILES && rmdir /data
rsync
、それは再開可能だということです。
rsync -a
ほぼすべてのメタデータを保持しますが、ハードリンク、ACL、または拡張属性は保持しません(-HAX
そのために追加します)。
rename
ごとに、動作が異なるコマンドがあります。rename
それが何をするのかを確実にしたいときにコマンドを使用しないのに十分な理由だと思います。
名前を変更する(同じファイルシステムのソースとターゲット)場合は、単にディレクトリエントリの名前を変更します。成功してディレクトリに新しい名前が付けられるか、失敗した場合は何も変更されません*。
ソースとターゲットが異なるファイルシステム上にある場合、データをによってコピーする必要がありますmv
。最大ファイルサイズ、ファイル名の制限など、ファイルシステムの機能の違いが問題を引き起こす可能性があります。問題、最初のコピーファイルを避ける(するにはcp
、rsync
、...)とコピーが正常に完了した後、元の場所にあるファイルを削除します。
*ただし、たとえばman 2 renameのバグセクションで言及されているように、いくつかのコーナーケースがあります。
他の人が言ったように、フォルダの名前を変更しても、コンテンツに固有のリスクはありません。しかし、考慮したいリスクには別の種類があります。
元の場所を参照する既存の手順、スクリプト、ユーザー定義のショートカット、および構成は、この変更によって破損する可能性があります。たとえば、パスがデータベースに保存されている場合、それらの更新は大きな仕事になる可能性があります。
できることの1つは、新しいディレクトリ名のシンボリックリンクを作成することですが、古い名前はしばらくそのままにしておきます。これにより、この変更の影響を評価する時間が得られます。古い名前を一時的に削除し、問題があるかどうかを確認し、問題がある場合は、古い名前を再作成するだけで、更新する必要があるものを見つけながら作業を続けることができます。
次のようなコマンドで実行する必要があります。
ln -s /data /BD_FILES
mv thing1 thing2 ; ln --symbolic ./thing2 thing1
です。そのようにして、新しい名前を取得し、シンボリックリンクを削除することで、古い名前が存在しないことを簡単にテストできます。
名前の変更はアトミックです。唯一の合理的なリスクは、mv
何らかの理由ですべてをコピーすることを決定し、途中でクラッシュすることです。GNUをお持ちの場合mv
、mv -T
このリスクは取り除かれます。
mv -T
mv
フォルダー以外に移動することを伝えます。それを行うことを拒否するようになりますどのmkdir()
順番でフォルダを移動した場合、それが失敗する原因になるとそれが何らかの理由でコピーすることを決めました。
私はmv -T
数年前に修士論文に取り組んでいる間にバグを消すことに関与していました。以前は、あまりにも多くのエッジケースで間違ったことをしていた。
一方、ルートパーティションには180GBのユーザーデータがあります。これをおそらくルートパーティションから移動したいと思うでしょう。
mv
は、-i
オプションで電話してください。