最初の答え:GNU方式

最初の答え:GNU方式

共通ファイルを含むディレクトリをあるパーティションから別のパーティションに移動するには?

/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ユーティリティはまだ標準化していませんtarpax単一プロセスで圧縮および解凍操作を実行する追加機能を持つ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/

関連情報