您的位置:首页 > 娱乐 > 八卦 > 【Windows】硬链接和软链接(OneDrive同步指定目录?)

【Windows】硬链接和软链接(OneDrive同步指定目录?)

2024/10/6 16:28:37 来源:https://blog.csdn.net/weixin_43764974/article/details/140108764  浏览:    关键词:【Windows】硬链接和软链接(OneDrive同步指定目录?)

文章目录

  • 一、场景带入
  • 二、Windows下的硬链接和软链接
    • 2.1 硬链接(Hard Link)
    • 2.2 软链接(符号链接,Symbolic Link)
    • 2.3 软链接和快捷方式
    • 2.4 应用场景
  • 三、OneDrive中的应用
    • 3.1 错误姿势
    • 3.2 好像可行的尝试
    • 3.3 合理的解决方案

一、场景带入

OneDrive是一个非常好用的产品,但当你使用它进行自动备份时,会发现他只支持对几个特定的目录进行备份:

在这里插入图片描述
这时就想到了Linux下常见的概念“链接”,而Windows也支持链接功能。

【Linux】硬链接 和 软链接。

二、Windows下的硬链接和软链接

更加详细的概念,可以看前面的链接,以前写的文章,Linux下的链接。

2.1 硬链接(Hard Link)

硬链接是指向同一文件内容的多个目录项,使得在不同位置的多个文件名指向同一个文件数据块。硬链接与源文件之间没有主从关系,它们是完全对等的。

特点:

  • 共享数据:硬链接指向相同的文件数据块,因此修改任意一个硬链接会影响所有指向该数据块的硬链接。
  • 不可区分:硬链接之间没有区别,所有链接都是平等的,没有“主”或“次”之分。
  • 删除影响:删除一个硬链接不会删除文件数据,只有当所有指向该文件数据的硬链接都被删除后,文件数据才会被删除。
  • 限制硬链接只能在同一卷(partition或者说一个分区、一个不是一类文件系统)上创建,不能跨卷创建。

创建方法:

在 Windows 中,可以使用命令行工具 mklink 创建硬链接。命令格式如下:

mklink /H <硬链接路径> <目标文件路径>

例如,创建一个名为 hardlink.txt 的硬链接,指向 original.txt

mklink /H C:\example\hardlink.txt C:\example\original.txt

mklink用法(这是cmd命令,power shell不能直接用):
MKLINK [[/D] | [/H] | [/J]] Link Target

    /D      创建目录符号链接(软件)。默认(无参数时)为文件符号链接。/H      创建硬链接。/J      创建目录联接(软链接,不能跨区)。Link    指定新的符号链接名称。Target  指定新链接引用的路径(相对或绝对)。

/J和/D都可以创建软链接,/J的兼容性和透明性很好,但是它不能跨区。硬链接只能用于文件,不能用于目录。

2.2 软链接(符号链接,Symbolic Link)

软链接(符号链接)是指向另一个文件或目录的引用,它们包含目标文件或目录的路径,而不是实际的数据。软链接类似于快捷方式。

特点:

  • 指向目标:软链接指向文件系统中的另一个文件或目录,包含目标文件或目录的路径。
  • 独立性:软链接是独立的文件,可以位于与目标文件或目录不同的位置。
  • 灵活性:可以创建指向任何位置的软链接,无论是本地文件系统还是远程文件系统。
  • 方便更新:如果目标文件或目录发生变化,软链接无需修改,只需确保其指向的路径正确。

创建方法:

在 Windows 中,可以使用命令行工具 mklink 创建软链接。命令格式如下:

mklink [/D] <软链接路径> <目标路径>

其中,/D 参数用于创建指向目录的软链接。如果省略 /D 参数,则创建指向文件的软链接

例如,创建一个名为 symlink.txt 的软链接,指向 original.txt

mklink C:\example\symlink.txt C:\example\original.txt

创建一个名为 symlinkDir 的软链接,指向 originalDir 目录:

mklink /D C:\example\symlinkDir C:\example\originalDir

2.3 软链接和快捷方式

Windows 的快捷方式(Shortcut)与软链接(Symbolic Link)类似,但它们在实现和用途上有所不同。以下是两者的详细比较:

(1)Windows 快捷方式

  • 特性

    1. 文件类型:快捷方式是一个特殊的文件,通常具有 .lnk 扩展名。
    2. 内容:快捷方式文件包含目标文件或目录的路径,以及图标、工作目录、描述等其他信息。
    3. 创建工具:可以通过文件资源管理器的右键菜单创建,也可以使用脚本或编程方式创建。
    4. 功能:主要用于创建桌面或菜单中的快捷访问路径,用户双击快捷方式时,会打开其指向的目标文件或目录。
  • 示例
    在文件资源管理器中,右键点击文件或目录,选择“发送到”->“桌面快捷方式”即可创建一个快捷方式。

(2)软链接(Symbolic Link)

  • 特性
    1. 文件类型:软链接是文件系统中的一种链接类型,可以指向文件或目录。
    2. 内容:软链接本质上是一个指向目标文件或目录路径的文件系统条目。
    3. 创建工具:需要使用命令行工具 mklink 或 PowerShell 的 New-Item cmdlet 创建。
    4. 功能:提供与目标文件或目录相同的访问方式,用户访问软链接时,就像访问目标文件或目录本身。

(3)比较

  • 实现方式:快捷方式是一个独立的文件,包含了指向目标的路径和其他元数据;软链接是文件系统层级的链接,直接指向目标路径。
  • 访问方式:双击快捷方式会通过操作系统处理并打开目标;访问软链接时,操作系统直接将其视为目标文件或目录的一部分。
  • 用途:快捷方式通常用于用户界面的快捷访问;软链接用于文件系统级别的文件和目录组织。

Windows 快捷方式和软链接在实现和使用场景上有所不同。快捷方式更适合于用户界面的快捷访问和导航,而软链接则更适合于文件系统级别的链接和组织。尽管它们在功能上有相似之处,但它们并不完全相同。

2.4 应用场景

  • 硬链接:适用于需要在同一卷内共享数据而不复制文件内容的情况。例如,同一文件的多个副本保持一致。
  • 软链接:适用于需要跨卷、跨目录、甚至跨网络位置访问文件或目录的情况。例如,创建快捷方式或替代目录结构。

三、OneDrive中的应用

本节指的是你需要OneDrive的自动同步功能,而不是简单的云存储功能。

在 Windows 操作系统中,文档、图片、音乐和视频等文件夹是系统预定义的特殊文件夹,通常称为用户文件夹(User Folders)或个人文件夹(Personal Folders)。这些文件夹的主要作用是方便用户组织和管理不同类型的个人文件。

这些目录默认在用户目录下,也即操作系统所在分区下,如果你使用这些目录、且像传统做法一样给电脑分了C盘、D盘等、且C盘不太大,就可以在这些文件夹上右键—属性,在位置选项下修改默认存储位置。

OneDrive 通过客户端软件在本地创建一个同步文件夹(默认位于用户主目录下,断开OneDrive账户链接,在其他位置新建OneDrive文件夹即可改变默认位置,但没必要),并通过网络通信将本地文件夹与云端存储保持同步。这种机制允许用户在多个设备上访问和管理相同的文件,提供了数据备份和跨设备访问的便利性。通过文件系统监控、增量同步(只传改动部分)和冲突处理等技术,OneDrive 实现了高效和可靠的文件同步服务

3.1 错误姿势

文章开头讲到,Onedrive的自动备份功能,只能备份这几个目录,没有其他选项,要想给其他目录添加自动备份功能,可以在这些目录下面为目标文件或目录添加链接吗?

根据前面讲的,硬链接(/H)只能用于文件,不能跨区(或者说跨卷、跨越文件系统);软链接(/D)可以用于文件和目录,可以跨区;目录链接(/J)是不能跨区的用于目录的软链接。根据需要设置即可,通常选择软链接。

如,我在视频文件夹下为F盘的download 文件夹添加软链接:

命令(直接使用CMD也可以的,命令就是前面讲到的,都需要管理员权限打开终端命令行):

New-Item -ItemType SymbolicLink -Path C:\Users\14134\Videos\VideoBackup -Target  F:\download  

在这里插入图片描述

CMD示例:

mklink /D C:\Users\14134\Videos\test   F:\download

在这里插入图片描述


软链接只是指向所链接的文件或目录,不会占用和目标相似的空间,只会占用极小的空间(最多几个字节左右),硬链接一点额外空间也不占。

但你在Windows中在软链接上右键、属性,他会显示目标文件或目录的大小,dir /s命令也是如此,这只是一个逻辑问题,便于你通过链接文件也能查看目标的大小信息。

用下面的方法就可以看到软链接文件本身的大小(powershell):

# 替换为你的软链接文件路径
$linkPath = "C:\Users\14134\Videos\VideoBackup"
# 获取软链接文件信息
$linkInfo = Get-Item -Path $linkPath
# 输出软链接文件的大小
Write-Host "软链接文件大小: $($linkInfo.Length) 字节"

在这里插入图片描述
或者使用Disk Genius软件,可以看到这个文件夹是空的。


现在使用OneDrive备份“视频”这个目录,你会发现:
在这里插入图片描述


再使用硬链接:
在这里插入图片描述
OneDrive可以备份了:
在这里插入图片描述

同样的,目录链接也是不能备份的。


原因:

  • OneDrive是跨设备、跨系统的备份系统;
  • 硬链接可以代表目标本身,而符号链接只是目标的路径;
  • 软链接若能备份,则会有这些危险:跨平台一致性、恶意链接、数据完整性、循环引用等。

3.2 好像可行的尝试

若是直接在OneDrive目录下创建软链接呢?

即将前面的“图片、视频、文档”等支持备份的目标直接更换为OneDrive文件夹:

C:\Users\14134\OneDrive
C:\Users\14134\Videos>mklink /D C:\Users\14134\OneDrive\VideoBackup   F:\download
为 C:\Users\14134\OneDrive\VideoBackup <<===>> F:\download 创建的符号链接

可以看到OneDrive立刻开始了备份:
在这里插入图片描述


看起来解决问题了。

其实,问题不少:

  1. 本地或云端修改、增删的操作都不会自动与另一侧同步,需要手动 关/开 OneDrive的备份开关;
  2. 这是软链接本身特性以及OneDrive限制导致的;
  3. 这好像只用了OneDrive的备份、存储功能,并不能自动同步。

OneDrive 同步特定文件夹中的文件,例如桌面、文档和图片、OneDrive文件夹,是因为这些文件夹通常包含个人用户需要经常访问和更新的文件。OneDrive 会持续监控这些文件夹中的更改,并在检测到更改时自动将它们同步到云端。OneDrive 无法自动同步软链接指向的文件夹内容更改,主要有以下几个原因:

  1. 技术限制: OneDrive 同步功能是基于文件系统更改的。当文件或文件夹发生更改时,OneDrive 会收到操作系统通知,并相应地更新云端中的文件。然而,软链接是一种文件系统指针,指向另一个文件或文件夹的位置。当软链接指向的文件或文件夹发生更改时,OneDrive不会收到操作系统通知,因为更改发生在软链接本身之外

  2. 复杂性问题: 如果 OneDrive 能够自动同步软链接指向的文件夹内容更改,则需要额外的逻辑来跟踪软链接并识别何时需要更新它们。这将增加 OneDrive 的复杂性,并可能导致性能问题。

  3. 潜在风险: 允许 OneDrive 自动同步软链接指向的文件夹内容更改可能会带来潜在风险。例如,如果用户不小心删除或移动了软链接指向的文件或文件夹,OneDrive可能会继续尝试同步它们,导致数据丢失或损坏。

  4. 替代方案: 为了解决这些限制,OneDrive 提供了其他方法来同步软链接指向的文件夹内容。用户可以手动将软链接指向的文件夹复制到 OneDrive文件夹中,或者使用第三方备份工具来同步它们。

这些也是OneDrive尚未支持自动同步自定义目录的部分原因。

3.3 合理的解决方案

(1)将需要同步的内容本身放在支持同步的那些目录下面

包括:文档、图片、视频、音乐、桌面和OneDrive文件夹。

如果你没有给硬盘分区的好习惯,或者有一个1TB的系统盘,这是个很方便、好用的做法。

(2)编写脚本辅助

如果你一定要使用软链接的方式,我有一个参考:你在(仅)OneDrive文件夹下删除内容的时候,它会同步你的软链接指向目标的更改。

可以写个bat脚本,就新建和删除辅助文件(OneDrive文件夹下),用来同步你的软链接更改。不过这依然是手动同步,和开关OneDrive的同步开关是一样的。

(3)借助同步软件

使用(1)的方法虽然很好,但如果你想同步你的一个工作目录(放在了支持自动同步的那几个目录下),就可能会有这几个问题:

  1. 工作文件改动极其频繁,而OneDrive同步实时性极强,这可能会消耗一点点CPU和网络资源;
  2. 你只想定时备份,比如每天要下班的时候。

这时候,就可以考虑使用同步软件来完成这些需求了。

比如:https://www.goodsync.com/cn

该软件支持跨平台、双向同步、自动同步、文件过滤、脚本等功能。常见云存储均可链接,如:OneDrive、Google Drive、iCloud、Dropbox、MEGA、SFTP等(不过是付费的$20一年,一个月试用)。

一边选择本地文件夹,一边选择OneDrive(登录后选)的文件夹:
在这里插入图片描述

在设置中选择双向同步(如果只备份就选择单向),在自动选项下即可设置同步的时机,计划里面还可以设置定时同步:
在这里插入图片描述

设置后保持后台运行即可,测试发现同步功能确实好用,两端操作后同步很及时。

免费版不能自动实时同步,$20一年如果贵的话,网上有那种。或者试试别的备份软件,不展开说了。

(4)其他云存储

使用OneDrive相对来说是最划算的,Microsoft 365家庭版,一个人一年就几十,容量1TB。

Google Drive、iCloud、阿里云、百度云也可以用,基本都支持同步自定义文件夹。或者结合Alist、RaiDrive等软件使用。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com