我听说您现在也可以在 Vista 中创建软链接。那么,UNIX/Linux/Vista 上的软(符号)链接和硬链接有什么区别?
使用一种比另一种有优势吗?或者它们只是服务于两个不同的目的?
有时,我必须对服务器上的数据文件执行几次大型迁移更改,我正在寻找一种好方法来执行此操作。我正在考虑使用 rsync 从根数据文件夹开始复制我的目录结构,创建指向所有原始文件的硬链接(其中一些文件相当大),并且我可以在目标树中仅覆盖需要迁移的文件。最后,我可以通过两次mv
操作安全地从旧文件切换到新文件。
但是,我似乎无法让 rsync 做到这一点。我试过
rsync -a --link-dest=$DATA $DATA $DATA/../upgrade_tmp
Run Code Online (Sandbox Code Playgroud)
但 rsync 不是创建文件的硬链接,而是完全复制它们。使用相同的源和链接目标目录是否有问题?
我正在考虑一种情况,我会创建一个目录副本,调整一些文件,然后对结果进行一些处理。这会经常做,也许一天几十次。(确切的用例是测试补丁提交;复制代码,修补它,构建/测试/报告/等。)
我正在寻找的东西可以通过创建一个新的目录结构并用来自原始目录的硬链接填充它来完成。但是,这只适用于您使用的所有工具删除和重新创建文件而不是就地编辑它们的情况。
有没有办法让文件系统对文件进行写时复制?
注意:我知道许多 FS 在块级别使用 COW(所有更新都是通过写入新块完成的),但这不是我想要的。
你知道一些 GUI 工具来创建 Hardlinks/SoftLinks/Junctions 吗?
想象一下,我有一个文件remote/A
,其同步到local/A
并且local/B
是硬链接local/A
。是否存在下一次remote/A
更改和同步rsync
不会删除local/A
而只会替换/添加某些部分从而更改local/B
(由于硬链接)的威胁?
目前我们有一个大问题:我们需要为我们的一位客户镜像文件系统。这通常不是问题,但这里是:
在这个文件系统上,有一个文件夹有数百万个硬链接(是的!数百万个!)。rsync
需要超过 4 天才能构建文件列表。
我们使用以下rsync
选项:
rsync -Havz --progress serverA:/data/cms /data/
Run Code Online (Sandbox Code Playgroud)
有谁知道如何加速这个 rsync 或使用替代方法?我们无法使用,dd
因为目标磁盘比源磁盘小。
更新:
由于原始文件系统是ext3
我们将尝试dump
和restore
. 我会让你保持最新状态
我的 Ubuntu 10.04.3 服务器上有两个分区。
分区 1:/mnt/storage/ 分区 2:/var/www/myweb/
现在当我运行以下命令时
$ ln /mnt/storage/sourcefile.txt /var/www/myweb/linkedfile.txt
我懂了
ln: 创建硬链接 `/var/www/myweb/linkedfile.txt' => `sourcefile.txt': 无效的跨设备链接
知道如何制作这个符号链接吗?
我有一个文件夹,其中包含一定数量的具有硬链接的文件(在同一文件夹中或其他地方),我想取消这些文件的硬链接,因此它们变得独立,并且对其内容的更改不会影响任何其他文件(它们的链接数变为 1)。
下面,我给出了一个解决方案,它基本上将每个硬链接复制到另一个位置,然后将其移回原位。
然而,这种方法似乎相当粗糙且容易出错,所以我想知道是否有一些命令可以为我解除文件的硬链接。
粗略的回答:
查找具有硬链接的文件(编辑:要同时查找具有硬链接的套接字等,请使用find -not -type d -links +1
):
find -type f -links +1 # files only
find -not -type d -links +1 # files, sockets etc.
Run Code Online (Sandbox Code Playgroud)
解除文件硬链接的粗略方法(将其复制到另一个位置,然后将其移回):
编辑: 正如 Celada 所说,最好在下面执行 cp -p,以避免丢失时间戳和权限。 编辑: 创建一个临时目录并复制到其下的文件,而不是覆盖临时文件,它最大限度地降低了覆盖某些数据的风险,尽管该mv
命令仍然存在风险(感谢@Tobu)。 编辑: 尝试在同一文件系统(@MikkoRantalainen)中创建临时目录。
# This is unhardlink.sh
set -e
for i in "$@"; do
temp="$(mktemp -d -- "${i%/*}/hardlnk-XXXXXXXX")"
[ -e "$temp" ] && cp -ip "$i" "$temp/tempcopy" && mv "$temp/tempcopy" "$i" && rmdir "$temp"
done
Run Code Online (Sandbox Code Playgroud)
因此,要取消硬链接所有硬链接(编辑 …
是否有可能为 unix 套接字创建硬链接?我正在创建一个监狱并且符号链接不起作用,所以我正在寻找一个解决方案,如何在 chrootted 环境中提供一个 unix 套接字。
我遇到的唯一想法是使用类似 netcat 的东西,但有没有可靠的可能性?