文章目录
- 一、场景带入
- 二、Windows下的硬链接和软链接
-
- [2.1 硬链接(Hard Link)](#2.1 硬链接(Hard Link))
- [2.2 软链接(符号链接,Symbolic Link)](#2.2 软链接(符号链接,Symbolic Link))
- [2.3 软链接和快捷方式](#2.3 软链接和快捷方式)
- [2.4 应用场景](#2.4 应用场景)
- 三、OneDrive中的应用
-
- [3.1 错误姿势](#3.1 错误姿势)
- [3.2 好像可行的尝试](#3.2 好像可行的尝试)
- [3.3 合理的解决方案](#3.3 合理的解决方案)
一、场景带入
OneDrive是一个非常好用的产品,但当你使用它进行自动备份时,会发现他只支持对几个特定的目录进行备份:
这时就想到了Linux下常见的概念"链接
",而Windows也支持链接功能。
二、Windows下的硬链接和软链接
更加详细的概念,可以看前面的链接,以前写的文章,Linux下的链接。
2.1 硬链接(Hard Link)
硬链接是指向同一文件内容的多个目录项,使得在不同位置的多个文件名指向同一个文件数据块。硬链接与源文件之间没有主从关系,它们是完全对等的。
特点:
- 共享数据:硬链接指向相同的文件数据块,因此修改任意一个硬链接会影响所有指向该数据块的硬链接。
- 不可区分:硬链接之间没有区别,所有链接都是平等的,没有"主"或"次"之分。
- 删除影响:删除一个硬链接不会删除文件数据,只有当所有指向该文件数据的硬链接都被删除后,文件数据才会被删除。
- 限制 :硬链接只能在同一卷(partition或者说一个分区、一个不是一类文件系统)上创建,不能跨卷创建。
创建方法:
在 Windows 中,可以使用命令行工具 mklink
创建硬链接。命令格式如下:
cmd
mklink /H <硬链接路径> <目标文件路径>
例如,创建一个名为 hardlink.txt
的硬链接,指向 original.txt
:
cmd
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
创建软链接。命令格式如下:
cmd
mklink [/D] <软链接路径> <目标路径>
其中,/D
参数用于创建指向目录的软链接。如果省略 /D
参数,则创建指向文件的软链接。
例如,创建一个名为 symlink.txt
的软链接,指向 original.txt
:
cmd
mklink C:\example\symlink.txt C:\example\original.txt
创建一个名为 symlinkDir
的软链接,指向 originalDir
目录:
cmd
mklink /D C:\example\symlinkDir C:\example\originalDir
2.3 软链接和快捷方式
Windows 的快捷方式(Shortcut
)与软链接(Symbolic Link)类似,但它们在实现和用途上有所不同。以下是两者的详细比较:
(1)Windows 快捷方式
-
特性
- 文件类型 :快捷方式是一个特殊的文件,通常具有
.lnk
扩展名。 - 内容:快捷方式文件包含目标文件或目录的路径,以及图标、工作目录、描述等其他信息。
- 创建工具:可以通过文件资源管理器的右键菜单创建,也可以使用脚本或编程方式创建。
- 功能:主要用于创建桌面或菜单中的快捷访问路径,用户双击快捷方式时,会打开其指向的目标文件或目录。
- 文件类型 :快捷方式是一个特殊的文件,通常具有
-
示例
在文件资源管理器中,右键点击文件或目录,选择"发送到"->"桌面快捷方式"即可创建一个快捷方式。
(2)软链接(Symbolic Link)
- 特性
- 文件类型:软链接是文件系统中的一种链接类型,可以指向文件或目录。
- 内容:软链接本质上是一个指向目标文件或目录路径的文件系统条目。
- 创建工具 :需要使用命令行工具
mklink
或 PowerShell 的New-Item
cmdlet 创建。 - 功能:提供与目标文件或目录相同的访问方式,用户访问软链接时,就像访问目标文件或目录本身。
(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也可以的,命令就是前面讲到的,都需要管理员权限打开终端命令行):
bash
New-Item -ItemType SymbolicLink -Path C:\Users\14134\Videos\VideoBackup -Target F:\download
CMD示例:
bash
mklink /D C:\Users\14134\Videos\test F:\download
软链接只是指向所链接的文件或目录,不会占用和目标相似的空间,只会占用极小的空间(最多几个字节左右),硬链接一点额外空间也不占。
但你在Windows中在软链接上右键、属性,他会显示目标文件或目录的大小,dir /s命令也是如此,这只是一个逻辑问题,便于你通过链接文件也能查看目标的大小信息。
用下面的方法就可以看到软链接文件本身的大小(powershell):
bash
# 替换为你的软链接文件路径
$linkPath = "C:\Users\14134\Videos\VideoBackup"
# 获取软链接文件信息
$linkInfo = Get-Item -Path $linkPath
# 输出软链接文件的大小
Write-Host "软链接文件大小: $($linkInfo.Length) 字节"
或者使用Disk Genius软件,可以看到这个文件夹是空的。
现在使用OneDrive备份"视频"这个目录,你会发现:
再使用硬链接:
OneDrive可以备份了:
同样的,目录链接
也是不能
备份的。
原因:
- OneDrive是跨设备、跨系统的备份系统;
- 硬链接可以代表目标本身,而符号链接只是目标的路径;
- 软链接若能备份,则会有这些危险:跨平台一致性、恶意链接、数据完整性、循环引用等。
3.2 好像可行的尝试
若是直接在OneDrive目录下创建软链接呢?
即将前面的"图片、视频、文档"等支持备份的目标直接更换为OneDrive文件夹:
bash
C:\Users\14134\OneDrive
bash
C:\Users\14134\Videos>mklink /D C:\Users\14134\OneDrive\VideoBackup F:\download
为 C:\Users\14134\OneDrive\VideoBackup <<===>> F:\download 创建的符号链接
可以看到OneDrive立刻开始了备份:
看起来解决问题了。
其实,问题不少:
- 本地或云端修改、增删的操作都不会自动与另一侧同步,需要手动 关/开 OneDrive的备份开关;
- 这是软链接本身特性以及OneDrive限制导致的;
- 这好像只用了OneDrive的备份、存储功能,并不能自动同步。
OneDrive 同步特定文件夹中的文件,例如桌面、文档和图片、OneDrive文件夹,是因为这些文件夹通常包含个人用户需要经常访问和更新的文件。OneDrive 会持续监控这些文件夹中的更改,并在检测到更改时自动将它们同步到云端。OneDrive 无法自动同步软链接指向的文件夹内容更改,主要有以下几个原因:
技术限制: OneDrive 同步功能是基于文件系统更改的。当文件或文件夹发生更改时,OneDrive 会收到操作系统通知,并相应地更新云端中的文件。然而,软链接是一种文件系统指针,指向另一个文件或文件夹的位置。当软链接指向的文件或文件夹发生更改时,OneDrive不会收到操作系统通知,
因为更改发生在软链接本身之外
。复杂性问题: 如果 OneDrive 能够自动同步软链接指向的文件夹内容更改,则需要额外的逻辑来跟踪软链接并识别何时需要更新它们。这将增加 OneDrive 的复杂性,并可能导致性能问题。
潜在风险: 允许 OneDrive 自动同步软链接指向的文件夹内容更改可能会带来潜在风险。例如,如果用户不小心删除或移动了软链接指向的文件或文件夹,OneDrive可能会继续尝试同步它们,导致数据丢失或损坏。
替代方案: 为了解决这些限制,OneDrive 提供了其他方法来同步软链接指向的文件夹内容。用户可以手动将软链接指向的文件夹复制到 OneDrive文件夹中,或者使用第三方备份工具来同步它们。
这些也是OneDrive尚未支持自动同步自定义目录的部分原因。
3.3 合理的解决方案
(1)将需要同步的内容本身放在支持同步的那些目录下面
包括:文档、图片、视频、音乐、桌面和OneDrive文件夹。
如果你没有给硬盘分区的好习惯,或者有一个1TB的系统盘,这是个很方便、好用的做法。
(2)编写脚本辅助
如果你一定要使用软链接的方式,我有一个参考:你在(仅)OneDrive
文件夹下删除内容的时候,它会同步你的软链接指向目标的更改。
可以写个bat脚本,就新建和删除辅助文件(OneDrive文件夹下),用来同步你的软链接更改。不过这依然是手动同步,和开关OneDrive的同步开关是一样的。
(3)借助同步软件
使用(1)
的方法虽然很好,但如果你想同步你的一个工作目录(放在了支持自动同步的那几个目录下),就可能会有这几个问题:
- 工作文件改动极其频繁,而OneDrive同步实时性极强,这可能会消耗一点点CPU和网络资源;
- 你只想定时备份,比如每天要下班的时候。
这时候,就可以考虑使用同步软件来完成这些需求了。
比如: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等软件使用。