文章目錄
- 一、場景帶入
- 二、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 快捷方式
-
特性
- 文件類型:快捷方式是一個特殊的文件,通常具有
.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也可以的,命令就是前面講到的,都需要管理員權限打開終端命令行):
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立刻開始了備份:
看起來解決問題了。
其實,問題不少:
- 本地或云端修改、增刪的操作都不會自動與另一側同步,需要手動 關/開 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等軟件使用。