第一个答案: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 为此有一个-Hor--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 方式

GNUcp -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

第三个答案:POSIX 方式

尽管POSIX 已经tar标准化了归档格式,但尚未标准化该实用程序tar。调用用于操作 tar 档案的 POSIX 实用程序pax,它具有能够在单个进程中执行打包和解包操作的额外功能。

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/

相关内容