本發明屬于計算機數據備份,具體為一種通過文件拷貝的方式遷移windows系統的方法。
背景技術:
1、由于windows系統在使用過程中,隨著各種應用程序的安裝、更新和臨時文件的生成,系統本身所占用的磁盤空間會逐漸增大,導致c盤的存儲空間變得越來越緊張。這不僅會影響系統的運行速度,還可能導致一些應用程序無法正常啟動或運行。此外,考慮到用戶對系統性能的需求,許多人希望將原本安裝在機械硬盤上的操作系統遷移到固態硬盤(ssd)上,以獲得更快的讀寫速度和更流暢的使用體驗。
2、現有技術中,例如公開號為cn116414797a的專利中記載的技術方案:一種系統文件拷貝的方法,通過將多種類型的硬盤接口集合成硬盤讀寫設備,該方法基于建立的拷貝將操作系統的文件拷貝到復制盤中的技術方案,能夠在不限制復制盤的類型和大小的情況下對操作系統文件進行拷貝。
3、現有技術中,通過將硬盤接口集合成硬盤讀寫設備的方式來將拷貝系統,存在在實際應用中,usb3.0接口的性能會受到其他因素的影響(如主機性能、文件大小、數量等),無法高效的將windows系統遷移到其他磁盤上面。
技術實現思路
1、本發明的目的在于提供一種通過文件拷貝的方式遷移windows系統的方法,以解決背景技術中提出的現有技術中的方案無法高效的將windows系統遷移到其他磁盤上面的問題。
2、為解決上述技術問題,本發明所采用的技術方案是:
3、一種通過文件拷貝的方式遷移windows系統的方法,包括以下步驟:
4、步驟s1,首先判斷備份系統環境是否為pe系統;如果是,則不需要創建快照;如果不是,則需要先對源系統分區創建快照;
5、步驟s2,遍歷源系統分區中的所有文件或文件夾;
6、步驟s3,判斷遍歷返回值中的文件名是否為特殊字符,如果是,則跳過并跳轉到步驟s6;如果不是,則進入步驟s4;
7、步驟s4,判斷文件屬性是否為文件夾;如果是文件夾,則進入步驟s5,如果是文檔,則復制文檔到目標分區并跳轉到步驟s6;
8、步驟s5,判斷文件夾是否為重定向文件夾,如果是,則在目標分區對重定向文件夾進行配置,使得重定向文件夾保持原有的指向;如果不是,則在目標分區中創建該文件夾,將源文件夾中的文件屬性設置到目標分區中創建的文件夾中,并將源文件夾的所有權和acl信息獲取出來并設置到新創建的文件夾中;
9、步驟s6,繼續查找剩余的文件或文件夾,直到拷貝完所有文件或文件夾;
10、步驟s7,修復mounteddevices以及修復系統引導,完成遷移。
11、根據上述技術方案,步驟s1中,創建源系統的快照時,通過isn?apshotmgr模塊中的create創建快照,快照創建成功后,使用isnap?shotmgr模塊中的getsymbolbydriveletter函數獲取快照的符號鏈接。
12、根據上述技術方案,步驟s2中,使用windows的api函數findfirstfile從源分區根目錄開始查找文件。
13、根據上述技術方案,步驟s3中,判斷文件屬性是否為文件夾具體為:根據遍歷返回值中的文件屬性判斷是否為文件夾,如果dwfileattributes&file_attribute_directory條件為真就說明該文件是文件夾,反之則是文件。
14、根據上述技術方案,步驟s5中,判斷文件夾是否為重定向文件夾具體為:如果dwfileattributes&file_attribute_reparse_poin條件為真,說明該文件夾被重定向到了其他文件夾,如果條件為假則是普通文件夾。
15、根據上述技術方案,步驟s5中,對于重定向文件夾的配置包括創建相同的文件夾,并設置文件夾屬性、獲取重定向目錄以及設定重定向目錄。
16、根據上述技術方案,在目標分區創建相同的文件夾,設置文件夾屬性具體為:使用windowsapicreatedirectory在目標分區創建該重定向文件夾,將從源文件中讀到的dwfileattributes的值使用api函數setfileattributes設置到新創建的文件夾中。
17、根據上述技術方案,從源文件夾中獲取重定向目錄具體為:使用api函數createfile函數打開源文件夾的句柄,使用deviceiocontrol函數并使用fsctl_get_reparse_point控制碼來獲取源文件夾中的重定向數據;
18、根據重定向數據中的鏈接類型判斷判斷數據類型,判斷方法是reparsetag==io_reparse_tag_mount_point,如果條件為真,則說明獲取到的數據是掛載點數據,里面包含了一個重定向的文件夾地址,反之,則沒有;
19、進一步的,數據類型包括io_reparse_tag_mount_point、io_reparse_tag_global_reparse、io_reparse_tag_cloud。其中io_reparse_tag_mount_point的類型對應reparse_data_buffer的聯合體中的mountpointreparsebuffer結構體,所需要的重定向文件夾就在mountpointreparsebuffer結構體中的pathbuffer里面。
20、根據reparse_data_buffer的結構中的pathbuffer,其中path里面就是重定向文件夾的路徑,保存其中重定向文件夾的地址,以便設置到目標分區新建的文件夾中。
21、根據上述技術方案,為目標分區中新創建的文件夾設定重定向目錄具體為:使用windowsapi函數createfile函數打開目標分區中創建的文件夾的句柄,初始化重解析結構的數據,其中reparsetag等于io_reparse_tag_mount_point,reparsedatalength的長度根據重定向目錄的實際長度計算;
22、接下來reparse_data_buffer的結構中的聯合體使用mountpointreparsebuffer的結構,mountpointreparsebuffer中的數據根據獲取到的重定向文件夾的數據填充,然后使用windowsapi函數deviceiocontrol函數并使用fsctl_get_reparse_point控制碼來設置目標分區中文件夾的重解析數據。
23、根據上述技術方案,將源文件夾的所有權和acl信息設置到目標分區新創建的文件夾中:
24、使用windowsapi函數getfilesecurity來獲取源文件或文件夾安全屬性的大小,使用heapalloc函數分配一段獲取到大小的內存空間并將空間數據全部初始化為0,使用windows?api函數getfilesecurity獲取源文件或文件夾的安全屬性,然后使用windowsapi函數setfilesecurity將獲取到的安全屬性設置到目標分區的文件或文件夾中去,最后釋放分配的內存空間。
25、與現有技術相比,本發明具有以下有益效果:
26、本發明中的方案,通過逐個文件和文件夾的遍歷與拷貝,確保源系統中的所有數據,包括系統文件、應用程序文件、用戶數據等,能夠完整地遷移到目標分區。在復制文件夾時,會將源文件夾的屬性(如權限、所有權、訪問控制列表acl等)復制到目標文件夾,確保用戶權限和文件安全性保持一致。對于重定向文件夾進行特殊處理,能夠保持這些文件夾的原有指向,例如“我的文檔”、“桌面”等,確保用戶的設置和習慣在遷移后仍能保持不變。通過修復mounteddevices和系統引導,確保新系統能夠正常啟動,避免因遷移導致的啟動問題。通過跳過特殊字符文件和靈活處理不同類型的文件,增強了遷移過程的用戶友好性,減少了用戶手動干預和操作錯誤的可能性。適用于多種windows系統的遷移,無論是個人用戶的數據遷移,還是企業環境中系統的遷移。