共通のファイルを持つディレクトリをあるパーティションから別のパーティションに移動するにはどうすればよいですか?
/mnt/X
にパーティションをマウントし、ディレクトリをハードリンクで共有するディレクトリがあるとします。このようなディレクトリを別のパーティションに移動する方法は、ハードリンクを保持したまま/mnt/Y
にしてください。
「ハードリンクと共通のファイルを共有するディレクトリ」の意味をわかりやすく説明するために、以下に例を示します。
# let's create three of directories and files
mkdir -p a/{b,c,d}/{x,y,z}
touch a/{b,c,d}/{x,y,z}/f{1,2,3,4,5}
# and copy it with hardlinks
cp -r -l a hardlinks_of_a
具体的には、ファイルの合計サイズが10Gで、各ファイルに10個のハードリンクがあるとします。問題は、10Gを使用してそれを宛先に移動する方法です(100Gでそれをコピーしてから重複排除を実行することについて誰かが言うかもしれません-それは私が求めているものではありません)
GNU cp -a
は、可能な限り多くの構造とメタデータを保持しながら再帰的にコピーします。ソースディレクトリ内のファイル間のハードリンクはその中に含まれています。特に-a
の他のすべての機能なしでハードリンク保持を選択するには、--preserve=links
を使用します。
mkdir src
cd src
mkdir -p a/{b,c,d}/{x,y,z}
touch a/{b,c,d}/{x,y,z}/f{1,2,3,4,5}
cp -r -l a hardlinks_of_a
cd ..
cp -a src dst
rsyncには-H
または--hard-links
これにはオプションがあり、停止して再起動できるという通常のrsyncの利点があり、前の実行中に/後に変更されたファイルを効率的に処理するために再実行できます。
-H, --hard-links
This tells rsync to look for hard-linked files in
the source and link together the corresponding
files on the destination. Without this option,
hard-linked files in the source are treated as
though they were separate files. [...]
rsync
のマニュアルページを読み、-Hを検索します。特定の警告に関する詳細がそこにあります。
POSIXはtar
ユーティリティを標準化していませんが、tar
アーカイブ形式を標準化しています。 tarアーカイブを操作するためのPOSIXユーティリティはpax
と呼ばれ、単一のプロセスでパックおよびアンパック操作を実行できるというボーナス機能があります。
mkdir dst
pax -rw src dst
ソースディレクトリにtarアーカイブを作成し、それをパイプ経由で送信し、宛先ディレクトリに解凍します。
# create src as before
(cd src;tar cf - .) | (mkdir dst;cd dst;tar xf -)
ソース: http://www.cyberciti.biz/faq/linux-unix-Apple-osx-bsd-rsync-copy-hard-links/
正確なコピーを作成するために必要なものは
rsync -az -H --delete --numeric-ids /path/to/source/ /path/to/dest/