共通ファイルを含むディレクトリをあるパーティションから別のパーティションに移動するには?
/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にコピーしてから重複排除を実行すると言うこともできます。これは私が尋ねるものではありません。)
答え1
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 を検索します。特定の警告の詳細があります。
答え2
最初の答え:GNU方式
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
答え3
3番目の答え:POSIX方式
POSIXはアーカイブ形式を標準化しましたが、tar
ユーティリティはまだ標準化していませんtar
。pax
単一プロセスで圧縮および解凍操作を実行する追加機能を持つtarアーカイブを操作するためのPOSIXユーティリティを呼び出します。
mkdir dst
pax -rw src dst
答え4
源泉: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/