1. 程式人生 > >利用tar或dd在不同操作系統間傳輸文件的另類方法

利用tar或dd在不同操作系統間傳輸文件的另類方法

數據恢復 數據遷移 遷移方法

在不同操作系統之間進行文件傳送的方式有很多種。如果網絡可通,可以使用FTP、SFTP、NFS、SAMBA(CIFS)、HTTP等方式進行傳輸;如果網絡不通,則可以使用兩個操作系統之間共同支持的文件系統進行傳輸,比如軟盤、光盤或最常用的FAT文件系統等;還可以使用兩個操作系統共同支持的備份設備進行傳輸,比如磁帶備份(嚴格講,也是基於共同支持的依賴於硬件的文件系統)。
技術分享圖片
可現在我遇到的一個XENIX系統就麻煩得多了:網絡不工作(可能是我不會,呵呵),mkdev dos也不支持,試圖mount一個msdos文件系統也不成功,又沒有磁帶機等設備,數據量也很大,軟盤備份也不太可靠。

這個系統已經很老了,客戶已經報廢了這套系統,但裏面的數據希望能拷貝出來,遷移到新的系統上(新系統應該是現在主流的WINDOWS\LINUX或UNIX,傳入文件都不是大問題)。

我接手時,遇到很多問題,系統無法啟動,硬盤損壞等,後來雖然全部解決了(解決過程稍後有機會記錄),但COPY文件真是為難了我了。

一個好的辦法是,自己寫個文件系統的解釋程序(類似於驅動),這個方式會麻煩一些,同時需要對文件系統底層結構做下深入研究。這種做法我也做成功了,但畢竟適用性差,有點大材小用。先不講這個,看另外的方法:利用所有操作系統對硬盤IO的兼容性,用dd或tar直接在祼設備上進行文件傳輸:
dd是一個向設備進行字節完整輸入輸出的程序。
tar是一個備份/打包/壓縮程序。

為了操作方便,我在虛擬機下完成這個任務。

  • 1、將原數據硬盤掛接到新建的一個虛擬機環境下,在虛擬機環境下建一個flat硬盤(創建時即完全分配空間的硬盤,硬盤的大小應略大於導出數據總和),啟動xenix系統(這個系統和硬件關系不大)。
  • 2、啟動後執行mkdev hd對新硬盤自動mknod,分不分區無所謂。完成後,通過ls /dev/rhd*以及 fdisk -f /dev/rhdXXX獲取新硬盤設備路徑。
  • 3、進行數據遷移。
  • 第一種方法: 用dd if=要備份的文件 of=/dev/rhdXXX就可以把文件復制到/dev/rhdXXX這塊硬盤上了,把這塊硬盤掛到要導入數據的系統上,從硬盤(在虛擬機看來,實際上是外部操作系統下的一個文件)開頭用WINHEX截取要備份文件大小成目標文件即可。
  • 第二種方式(可以導出大量文件): tar -cvf /dev/rhdXXX / (把/下所有的文件打包輸出到/dev/rhdXXX設備上),然後操作同上,在另外的系統上截取數據即可(如果是在虛擬機裏,可以直接用tar或RAR等文件解壓vmdf文件,不需截取數據)
  • 第三種方式(tar與dd聯合): tar -cvf - / | dd of=/dev/rhdXXX (利用管道操作,與第二種方式相同)

利用tar或dd在不同操作系統間傳輸文件的另類方法