這可能是以下內容的重複將檔案從 SSD 上的一個分割區移動到另一個分割區
當我將文件複製到 時C:\...\Downloads\
,C:\...\Desktop\
它會立即發生,但如果我複製相同的檔案(1.12 GB),則D:
需要相當長的時間。為什麼這樣?
答案1
首先,你的核心問題是:
為什麼同一磁碟上的跨分割區複製需要時間?
以下將詳細介紹,但從檔案系統的角度來看,具有多個分割區的單一磁碟並不是「同一磁碟」。從檔案系統的角度來看,分割區只是另一個“實體磁碟”,即使它只是兩個分割區所在的較大父實體磁碟上“邏輯”所分配的空間:
- 磁碟有分割區,
- 分區有檔案系統。
- 文件系統有文件。
請閱讀以獲得更多詳情。
注意:我使用 Linux/Unix/Mac OS X 術語,因為這是我的核心專業知識所在,但基本概念適用於 Windows 以及實際上任何作業系統。
為什麼作業系統/核心不簡單地移動資訊。位元組/磁區/位址指標/從一個檔案系統表到另一個分割區的檔案系統表分配給該檔案的任何內容?
這是因為控制和管理哪些磁區連接到哪些檔案的索引節點表是按磁碟、按分割區建構的。
因此,當您將某些內容複製到 時,
C:
所C:
發生的一切是在磁碟機上編輯索引節點條目,C:
以指示相同磁碟機上檔案的新路徑C:
。但是,當您從
C:
to複製某些內容時D:
,必須複製資料並且必須在D:
磁碟機上建立新的 inode 條目。
假設您想知道為什麼不將所有磁碟機資料保留在主C:
磁碟機上,而不是在每個裝置、每個分割區上進行操作?那麼,當該磁碟機或分割區移動到另一台電腦時會發生什麼?如果沒有分配表數據,磁碟D:
機看起來就像裸露且未使用的空間。如果C:
驅動器在這種情況下崩潰,您不僅會丟失驅動C:
器,還會丟失連接到D:
驅動器的更深層的檔案系統資訊。
您也編輯了您的問題來說明這一點:
我認為分區是邏輯上的而不是物理上的。
是和不是。分割區是合乎邏輯的在分區表的一側。但在檔案系統級別,檔案系統看到一個分區就好像它是另一個實體磁碟一樣。
而且你還問這個:
那麼為什麼作業系統或檔案系統控制器不簡單地將這些元資料複製
helloKitty.txt
到其他分割區表呢?
它做將元資料從一個地方複製到另一個地方。但它也會複製實際的文件數據,因為該數據在D:
從 複製之前不會存在C:
。而且它複製的元資料僅限於有關文件內容的基礎知識,因為當從磁碟C:
/分割區複製到D:
磁碟/分割區時,位元組和磁區資料會發生變化。
位元組的指標不會改變,它們是絕對的,因為分區是邏輯的而不是物理的。
在分區的上下文中,分區是「邏輯的」。在有關進入分區表的各個文件的資料的上下文中,儲存在該分區上的文件系統中的資料不是「邏輯的」。事情就是這樣,分區——根據維基百科的定義——描述如下;重點是我的:
磁碟分割區是將硬碟 (HDD) 劃分為多個稱為分割區的邏輯儲存單元的行為,將一個實體磁碟機視為多個磁碟,以便每個分割區可以使用不同的檔案系統。
答案2
文件系統不僅僅是每個文件內容的地址。它還必須追蹤分區的哪些部分未分配(「可用空間」),以及總共有多少可用空間。如果分割區中的檔案系統C:
要在分割區中儲存一些檔案數據D:
,則必須先查看檔案系統D:
的結構以找到一些可用空間,並且必須將該空間標記為在檔案系統中分配,D:
以便資料不會被指派。中建立的另一個文件覆蓋D:
。稍後,當您刪除似乎位於 filesystem 中的檔案時C:
,它必須D:
再次進入 filesystem 來將該空間標記為可用。
錯誤檢查會出現問題:通常,如果有空間被標記為已分配,但實際上不是檔案系統目錄結構中任何檔案的一部分,則這被視為錯誤。一致性檢查器(例如Windowschkdsk
或Linux/Unix fdisk
)會將該空間標記為空閒,或建立對應到該空間的文件,以便人們可以檢查資料並手動刪除它。但是,如果有問題的資料實際上是其他檔案系統中檔案的一部分,這將導致該空間被標記為空閒(立即,或當有人刪除「恢復」檔案時),而仍然有檔案正在使用它。
跨檔案系統邊界安全地分配檔案需要兩個檔案系統永久「了解」彼此的結構,以至於它們可能只是跨越多個分區的單一檔案系統。一些檔案系統實際上支援這一點:請參閱zfs
和btrfs
。它們的作用就像一種內建在檔案系統中的 RAID:它們可以使多個分割區(甚至在多個磁碟上)顯示為單一邏輯磁碟機。但分割區和磁碟是相互依賴的;你不能只拿一個來單獨使用它。
答案3
從這個角度來看,不同的分割區就像不同的磁碟。
每個分割區的區塊是連續分配的,您建議磁碟自動重新分割區,將屬於一個分割區的區塊分配給另一個分割區。
這種方法非常容易出錯,會降低磁碟效能,並會破壞日誌等其他功能。