題 將整個文件系統層次從一個驅動器複製到另一個驅


我想將整個文件系統層次結構從一個驅動器複製到另一個驅動器。每個目錄的內容以及Linux平台中的常規文件。非常感謝知道可能的Linux內置函數的最佳方法。文件系統是一個ext系列。


80
2017-07-07 03:30


起源


嗯...愛的地方在哪裡 dd? dd if=/dev/sda1 of=/dev/sdb1 bs=4096 - juniorRubyist
@juniorRubyist為dd +1。我總是使用它。但是要使用哪些標誌?我用 conv=notrunc,noerror,sync。 - BeniBela


答案:


我經常使用

> cp -ax / /mnt

假定/ mnt是安裝在/ mnt上的新磁盤,並且/上沒有其他掛載。

-x將它保存在一個文件系統上。

這當然需要以root身份或使用sudo來完成。

此鏈接有一些替代方案,包括上面的一個

http://linuxdocs.org/HOWTOs/mini/Hard-Disk-Upgrade/copy.html


30
2017-07-07 03:42





你想要的是什麼 rsync的

此命令可用於同步文件夾,並在中途中止時恢復複製。複製一個磁盤的命令是:

rsync -avxHAX --progress / /new-disk/

選項是:

-a  : all files, with permissions, etc..
-v  : verbose, mention files
-x  : stay on one file system
-H  : preserve hard links (not included with -a)
-A  : preserve ACLs/permissions (not included with -a)
-X  : preserve extended attributes (not included with -a)

要提高複印速度,請添加 -W (--whole-file),以避免計算文件的增量/差異。當源和目標都指定為本地路徑時,這是默認值,因為rsync的delta-transfer算法的真正好處是減少網絡使用。

還要考慮添加 --numeric-ids 避免按用戶/組名映射uid / gid值。


167
2017-07-07 03:36



天才,謝謝。順便說一下,我最終使用了 rsync -avxHAWX --numeric-ids --progress / mnt/ 但我應該這樣做 rsync -avxHAWX --numeric-ids --progress / mnt/ > ~/rsync.out。我懷疑將輸出傾注到終端會減慢進程。 :d - Chris K
--info=progress2 代替 --progress 對於大型傳輸非常有用,因為它可以提供整體進度,而不是(單個數百萬行)單個文件。 - Florian
我不得不更換 X 和 A 同 E,因為擴展屬性和ACL都包含在內 E 在我的Mac上。測試: rsync version 2.6.9 protocol version 29 - Jonathan Komar
此外 > ~/rsync.out, 2> ~/rsync.err 將所有錯誤保存在單獨的文件中。 - Aneel
如果你從其他文件夾複製而不是 /,請注意在源目錄上有一個尾部斜杠(或沒有)會產生影響: rsync source/ dest/ 複製裡面的一切 source/ 至 dest/,而 rsync source dest/ 複製文件夾 source 和里面的一切 dest/。 - semi-extrinsic


Michael Aaron Safyan的回答並未考慮稀疏文件。 -S 選項修復了。

此變體也不會隨著每個文件的進展而發送垃圾郵件,也不會執行增量同步,這會導致非網絡情況下的性能下降。

非常適合將文件系統從一個本地驅動器複製到另一個本地驅動器

rsync -axHAWXS --numeric-ids --info=progress2

20
2018-03-05 10:42



驚人。這確實做得很好 - Gildas
這應該是公認的答案,效果很好。例 55,431,669,792 57% 97.47MB/s 0:06:56 xfr#2888, ir-chk=5593/8534) - Drew


對於從一個驅動器到另一個驅動器的一次性本地複制,我猜 CP 足夠如上面Wolfmann所描述的那樣。

對於更大的工作,例如本地或遠程備份,最好的是 rsync的

當然,rsync使用起來要復雜得多。

為什麼rsync:

  • 這允許你複製(同步 複製)你的所有或部分驅動器A到 駕駛B,有很多選擇,比如 從中排除一些目錄 複製(例如排除/ proc)。

  • 另一個很大的優勢就是這個 本機工具監視文件 轉移:例如,對於大規模轉移, 如果連接中斷,它 將從斷點繼續。

  • 最後但並非最不重要的是,rsync使用 ssh連接,所以這允許你 遠程同步安全 “副本”。看看吧 人 頁 以及 這裡有一些 例子


6
2017-07-07 20:53





就像Michael Safyan在上面提到的那樣,我已經習慣了 rsync 以此目的。我建議使用一些其他選項來排除您可能不想複製的目錄。

此版本特別適用於基於Gnome和Debian / Ubuntu的系統,因為它包含特定於Gnome的用戶主目錄的子目錄,以及APT包緩存。

最後一行將被排除 任何 名為cache / Cache / .cache的目錄,對某些用途來說可能過於激進:

rsync -WavxHAX --delete-excluded --progress \
  /mnt/from/ /mnt/to/
  --exclude='/home/*/.gvfs' \
  --exclude='/home/*/.local/share/Trash' \
  --exclude='/var/run/*' \
  --exclude='/var/lock/*' \
  --exclude='/lib/modules/*/volatile/.mounted' \
  --exclude='/var/cache/apt/archives/*' \
  --exclude='/home/*/.mozilla/firefox/*/Cache' \
  --exclude='/home/*/.cache/chromium'
  --exclude='home/*/.thumbnails' \
  --exclude=.cache --exclude Cache --exclude cache

3
2018-02-06 06:11





向線程re rsync添加兩個有用的位:更改cypher,並使用 --update

根據沃爾夫曼的帖子, cp -ax 優雅,對當地人來說很酷。

然而, rsync 太棒了。進一步邁克爾的回答 -W改變密碼 也可以加快速度(儘管可以閱讀任何安全隱患)。

rsync --progress --rsh="ssh -c blowfish" / /mnt/dest -auvx

一些討論(和基準) 關於一個緩慢的CPU是實際瓶頸的地方,但它似乎幫助我在機器加載做其他並發事情時。

在像這樣的大型遞歸副本中使用rsync的另一個重要原因是因為 -u 開關(或 --update)。如果在復製過程中出現問題,你可以修復它,rsync將從它停止的地方開始(我不認為scp有這個)。在本地執行,cp也有一個-u開關。

(我不確定--update和--whole-file的含義是什麼,但在這類任務中它們似乎總是合理地為我工作)

我意識到這不是關於rsync功能的一個主題,但我使用的最常見的一些是:

  • --delete-後 等(如邁克爾在後續文章中提到的),如果你想將新系統同步回原來的地方或類似的東西。和,
  • - 排除  - 用於跳過目錄/文件,例如復制/創建新系統到新地方同時跳過用戶主目錄等(要么是從其他地方安裝家庭,要么創建新用戶等)。

順便說一句,如果我不得不使用windows,我使用來自cygwin的rsync來做大型遞歸副本,因為探險家想要從頭開始有點腦死亡(儘管我發現Finder更糟糕的是OS X)


2
2018-03-19 23:53





rsync的

“這種方法被認為比使用dd的磁盤克隆更好   因為它允許不同的大小,分區表和文件系統   使用,並且比使用cp -a複製更好,因為它   允許更好地控製文件權限,屬性,Access   控制列表(ACL)和擴展屬性。“

從:

https://wiki.archlinux.org/index.php/Full_system_backup_with_rsync

男人頁 這裡


2
2018-05-18 15:45