คัดลอกลำดับชั้นของระบบไฟล์ทั้งหมดจากไดรฟ์หนึ่งไปยังอีกไดรฟ์


95

ฉันต้องการคัดลอกลำดับชั้นของระบบไฟล์ทั้งหมดจากไดรฟ์หนึ่งไปยังอีก .. เนื้อหาของแต่ละไดเรกทอรีรวมถึงไฟล์ปกติในแพลตฟอร์ม Linux จะเป็นเรื่องที่น่ายินดีที่ได้ทราบวิธีที่ดีที่สุดในการทำเช่นนั้นกับ Linuxes ที่มีอยู่ในฟังก์ชั่น ระบบไฟล์เป็นตระกูลต่อ


1
อืม ... ความรักอยู่ddที่ไหน dd if=/dev/sda1 of=/dev/sdb1 bs=4096
juniorRubyist

@juniorRubyist +1 สำหรับวัน ฉันมักจะใช้มัน แต่ควรใช้ธงใด conv=notrunc,noerror,syncผมใช้
BeniBela

-1 สำหรับddเหตุผล 2 ประการคือประการแรกมันเป็นความคิดที่ดีที่จะทำการคัดลอกระดับบล็อกของระบบแฟ้มที่ติดตั้ง (ซึ่งเป็นกรณีที่/) และประการที่สองddจะไม่คัดลอกข้อมูลจากแหล่งข้อมูลที่ติดตั้งอยู่ภายในระบบแฟ้มเหมือนและ/boot /home
Eric

คำตอบ:


33

ฉันมักจะใช้

> cp -ax / /mnt

การสันนิษฐาน / mnt เป็นดิสก์ใหม่ที่เมาท์บน / mnt และไม่มีการเมาท์อื่นบน /

-x เก็บไว้ในระบบไฟล์เดียว

แน่นอนว่าต้องทำในฐานะรูทหรือใช้ sudo

ลิงค์นี้มีทางเลือกอื่นรวมถึงลิงค์ด้านบน

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


ในขณะนี้คือคำตอบเก่าที่ตายแล้วก็ยังคงเป็นที่น่าสังเกตว่าคุณมักจะไม่ต้องการคัดลอกทุกสิ่งที่นำเสนอใน/ไม่รวมเช่น/dev, /sys, /procเป็นต้นดังนั้นก่อนที่จะออกที่cpผมขอแนะนำให้ค้นหาวิธีการที่ดีกว่า (ยังมีการใช้ rsync)
Marcin Orlowski

2
@MarcinOrlowski WolfJM การใช้-xค่าสถานะหมายความว่าระบบไฟล์สังเคราะห์ที่คุณพูดถึงจะไม่ถูกคัดลอก
Jim L.

192

สิ่งที่คุณต้องการคือ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) เพื่อหลีกเลี่ยงการคำนวณ deltas / diffs ของไฟล์ นี่เป็นค่าเริ่มต้นเมื่อทั้งต้นทางและปลายทางถูกระบุเป็นเส้นทางท้องถิ่นเนื่องจากประโยชน์ที่แท้จริงของอัลกอริทึมการถ่ายโอนเดลต้าของ rsync คือการลดการใช้เครือข่าย

ลองพิจารณาเพิ่ม--numeric-idsเพื่อหลีกเลี่ยงการแม็พค่า uid / gid ด้วยชื่อผู้ใช้ / กลุ่ม


1
อัจฉริยะขอขอบคุณ Btw, I สิ้นสุดการใช้แต่ฉันควรจะทำrsync -avxHAWX --numeric-ids --progress / mnt/ rsync -avxHAWX --numeric-ids --progress / mnt/ > ~/rsync.outฉันสงสัยว่าการเทออกไปยังเทอร์มินัลทำให้กระบวนการช้าลง : D
Chris K

28
--info=progress2แทนที่จะ--progressเป็นประโยชน์สำหรับการถ่ายโอนจำนวนมากเนื่องจากจะให้ความคืบหน้าโดยรวมแทนที่จะเป็น (ล้านเส้นสำหรับ) แต่ละไฟล์
Florian

3
ผมต้องเปลี่ยนXและAด้วยEเพราะคุณสมบัติการขยายและ ACL ถูกปกคลุมไปด้วยEใน mac ของฉัน ทดสอบแล้วrsync version 2.6.9 protocol version 29
โจนาธานโคมาร์

1
นอกเหนือไป> ~/rsync.out, 2> ~/rsync.errจะบันทึกข้อผิดพลาดใด ๆ ในแฟ้มต่างหาก
Aneel

2
หากคุณกำลังคัดลอกจากโฟลเดอร์อื่น ๆ บางกว่า/ทราบว่ามีเฉือนท้าย (หรือไม่) ในไดเรกทอรีแหล่งที่มาทำให้ความแตกต่าง: rsync source/ dest/ทุกอย่างสำเนาภายในsource/เพื่อdest/ขณะrsync source dest/สำเนาโฟลเดอร์และทุกอย่างที่อยู่ภายในออกเป็นsource dest/
รอบนอก

45

คำตอบของ Michael Aaron Safyan ไม่ได้คำนึงถึงไฟล์ที่กระจัดกระจาย -Sตัวเลือกการแก้ไขที่

ตัวแปรนี้ไม่ได้เป็นสแปมเมื่อแต่ละไฟล์กำลังดำเนินการและจะไม่ทำการซิงค์เดลต้าซึ่งจะฆ่าประสิทธิภาพในกรณีที่ไม่ใช่เครือข่าย

สมบูรณ์แบบสำหรับการคัดลอกระบบไฟล์จากไดรฟ์ภายในเครื่องไปยังอีกเครื่องหนึ่ง

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

1
น่าอัศจรรย์ นี่เป็นการทำงานที่ดีจริงๆ
Gildas

1
นี่ควรเป็นคำตอบที่ยอมรับใช้งานได้ดี ตัวอย่าง55,431,669,792 57% 97.47MB/s 0:06:56 xfr#2888, ir-chk=5593/8534)
ดึง

1
<3 นี่คือที่สมบูรณ์แบบ
ทิม Strijdhorst

6

สำหรับการถ่ายสำเนาในเครื่องจากไดรฟ์หนึ่งไปอีกไดรฟ์ฉันเดาว่าพอเพียงcpตามที่อธิบายโดย Wolfmann ที่นี่ด้านบน

สำหรับผลงานที่ใหญ่กว่าเช่นการสำรองข้อมูลท้องถิ่นหรือระยะไกลเช่นดีที่สุดก็คือrsync

แน่นอน rsync มีความซับซ้อนมากขึ้นในการใช้

ทำไม rsync:

  • สิ่งนี้ช่วยให้คุณสามารถคัดลอก (ซิงโครไนซ์สำเนา) ทั้งหมดหรือบางส่วนของไดรฟ์ A ของคุณไปยังไดรฟ์ B พร้อมตัวเลือกมากมายเช่นการแยกไดเรกทอรีบางส่วนจากการคัดลอก (ตัวอย่างเช่นการยกเว้น / proc)

  • ข้อดีอีกอย่างคือเครื่องมือดั้งเดิมนี้ตรวจสอบการถ่ายโอนไฟล์เช่นการถ่ายโอนจำนวนมากหากการเชื่อมต่อถูกขัดจังหวะการเชื่อมต่อจะหยุดลงจากจุดพัก

  • และสุดท้าย แต่ไม่ท้ายสุด rsync ใช้การเชื่อมต่อ ssh ดังนั้นสิ่งนี้จะช่วยให้คุณสามารถ "คัดลอก" การซิงโครไนซ์ระยะไกลที่ปลอดภัยได้ มีลักษณะไปยังหน้าคน เช่นเดียวกับที่นี่สำหรับตัวอย่างบางส่วน


4

เช่นเดียวกับ 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

2

การเพิ่มบิตที่มีประโยชน์สองตัวในเธรดอีกครั้ง rsync: การเปลี่ยน cypher และการใช้--update:

ตามที่โพสต์ของ Wolfman cp -axนั้นสง่างามและเท่ห์สำหรับสิ่งของท้องถิ่น

อย่างไรก็ตามrsyncมันก็ยอดเยี่ยมเช่นกัน นอกเหนือจากคำตอบของไมเคิล-Wแล้วการเปลี่ยนเลขศูนย์ก็สามารถทำให้เร็วขึ้นได้เช่นกัน

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

มีการอภิปราย (และการวัดประสิทธิภาพ)รอบ ๆ สถานที่เกี่ยวกับ CPU ที่ช้าเป็นคอขวดที่เกิดขึ้นจริง แต่ดูเหมือนจะช่วยฉันได้เมื่อมีการโหลดเครื่องทำสิ่งอื่น ๆ พร้อมกัน

หนึ่งในเหตุผลสำคัญอีกข้อหนึ่งสำหรับการใช้ rsync ในสำเนาที่มีขนาดใหญ่และเรียกซ้ำได้เช่นนี้เป็นเพราะสวิตช์-u (หรือ- อัปเดต ) หากมีปัญหาในระหว่างการคัดลอกคุณสามารถแก้ไขได้และ rsync จะเลือกตำแหน่งที่มันค้างไว้ (ฉันไม่คิดว่า scp มีสิ่งนี้) ทำแบบโลคอล cp ยังมีสวิตช์ -u

(ฉันไม่แน่ใจว่าผลกระทบของ - อัปเดตและ - ทั้งไฟล์อยู่ด้วยกัน แต่พวกเขาดูเหมือนจะทำงานได้อย่างสมเหตุสมผลสำหรับฉันในงานประเภทนี้)

ฉันรู้ว่านี่ไม่ใช่หัวข้อเกี่ยวกับคุณสมบัติของ rsync แต่สิ่งที่ฉันใช้บ่อยที่สุดคือ:

  • - ลบ - หลังจากฯลฯ (ดังที่ไมเคิลพูดถึงในการติดตาม) หากคุณต้องการซิงค์ระบบใหม่กลับไปที่เดิมหรืออะไรทำนองนั้น และ,
  • - ไม่รวม - สำหรับการข้ามไดเรกทอรี / ไฟล์เช่นการคัดลอก / การสร้างระบบใหม่ไปยังสถานที่ใหม่ในขณะที่ข้ามไดเรกทอรีบ้านผู้ใช้ ฯลฯ (ไม่ว่าคุณจะติดตั้งบ้านจากที่อื่นหรือสร้างผู้ใช้ใหม่เป็นต้น)

บังเอิญถ้าฉันต้องใช้ windows ฉันจะใช้ rsync จาก cygwin เพื่อทำสำเนา recursive จำนวนมากเนื่องจาก explorer ของสมองตายเล็กน้อยที่ต้องการเริ่มจากจุดเริ่มต้น (แม้ว่าฉันจะพบ Finder เป็น OS X ยิ่งแย่ลง)


2

rsync

วิธีนี้ถือว่าดีกว่าการโคลนดิสก์ด้วย dd เนื่องจากอนุญาตให้ใช้ขนาดตารางพาร์ติชันและระบบไฟล์ที่แตกต่างกันและดีกว่าการคัดลอกด้วย cp -a ด้วยเช่นกันเพราะช่วยให้สามารถควบคุมการอนุญาตไฟล์ได้มากขึ้น , Access Control Lists (ACLs) และแอ็ตทริบิวต์ส่วนขยาย "

จาก:

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

หน้าคนที่นี่


2

ตามที่ระบุไว้ในการแสดงความคิดเห็นโดย juniorRubyist ddวิธีที่แนะนำที่นี่ควรจะใช้งาน เหตุผลหลักคือประสิทธิภาพการทำงานมันเป็นสำเนาแบบบล็อกต่อบล็อกแทนแบบไฟล์ต่อไฟล์

การโคลนพาร์ติชัน

# dd if=/dev/sda1 of=/dev/sdb1 bs=64K conv=noerror,sync status=progress

การโคลนดิสก์ทั้งหมด

# dd if=/dev/sdX of=/dev/sdY bs=64K conv=noerror,sync status=progress

อ้างอิง

  1. https://wiki.archlinux.org/index.php/disk_cloning

ddเป็นความคิดที่แย่มากด้วยเหตุผล 2 ประการ: การดำเนินการคัดลอกระดับบล็อกของระบบไฟล์ที่เมาท์ (ซึ่งเป็นกรณีของ/) จะส่งผลให้เกิดข้อผิดพลาดของระบบไฟล์เป้าหมายมากกว่าและddจะไม่คัดลอกข้อมูลจากแหล่งที่มาภายใน ระบบแฟ้มเหมือนและ/boot /homeลิงก์ของคุณใช้ได้สำหรับการโคลนดิสก์ไม่ใช่การโคลน "ลำดับชั้นไฟล์"
Eric

1

'dd' ยอดเยี่ยม แต่ ddrescue (apt install gddrescue) ดียิ่งขึ้น หาก dd ถูกขัดจังหวะจะไม่มีวิธีการรีสตาร์ท (เหตุผลที่ดีอีกข้อหนึ่งในการใช้ rsync) เมื่อคุณใช้ ddrescue กับ logfile มันจะติดตามว่ามีการคัดลอกบล็อกใดบ้าง

เมื่อทำการสำรองข้อมูลระบบ Windows / Linux สำหรับดูอัลบูตฉันใช้ ntfsclone สำหรับพาร์ติชัน Windows และ ddrescue สำหรับพาร์ติชัน Linux และ dd สำหรับ MBR (ฉันไม่ได้พยายามสำรองระบบบูทคู่โดยใช้ GPT / UEFI)

สิ่งที่ฉันชอบที่จะเห็นคือเครื่องมือ ddrescue ที่สามารถสร้างไฟล์เช่น ntfsclone ซึ่งพื้นที่ที่ไม่ได้ถูกจัดสรรถูกทำเครื่องหมายด้วยอักขระควบคุม สิ่งนี้ทำให้ภาพไม่สามารถติดตั้งได้โดยตรง แต่อนุญาตให้มีขนาดใหญ่เท่ากับข้อมูลที่บรรจุอยู่

มีคนมาด้วย ntfsclone "รูปแบบภาพพิเศษ" สำหรับ ddrescue ...


0

rsync เป็นโซลูชั่นที่สมบูรณ์แบบตามที่อธิบายไว้ข้างต้น

ฉันเพียงแค่เพิ่ม-S" จัดการไฟล์กระจัดกระจายอย่างมีประสิทธิภาพ " ในกรณีที่มีปริมาณนักเทียบท่า devicemapper หรือคล้ายกับที่จะคัดลอก


0

ฉันพยายามคำสั่ง rsync เสนอที่นี่ partcloneแต่ในที่สุดผมได้รับผลการทำความสะอาดมากขึ้นและเร็วขึ้นด้วย ถอนติดตั้งพาร์ติชันต้นทางและเป้าหมายจากนั้นรันต่อไปนี้:

partclone.ext4 -b -s /dev/sd(source) -o /dev/sd(target)
e2fsck -f /dev/sd(target)
resize2fs /dev/sd(target)

ทำตามขั้นตอนต่อไปนี้:

  1. โคลนพาร์ติชัน (เฉพาะส่วนที่ใช้ของ)
  2. ตรวจสอบให้แน่ใจว่าระบบไฟล์นั้นใช้ได้ (resize2fs บังคับใช้ขั้นตอนนี้)
  3. ปรับขนาดพาร์ติชันเป็นระบบไฟล์ใหม่

การทำงานข้างต้นในกรณีที่พาร์ติชันเป้าหมายมีขนาดเท่ากันหรือใหญ่กว่าแหล่งที่มา หากเป้าหมายของคุณเล็กกว่าต้นทาง (แต่พอดีกับข้อมูลทั้งหมด) ให้ทำดังนี้:

e2fsck -f /dev/sd(target)
resize2fs -M /dev/sd(target)
partclone.ext4 -b -s /dev/sd(source) -o /dev/sd(target)
resize2fs /dev/sd(target)

resize2fs -M ย่อขนาดระบบไฟล์ให้เล็กที่สุดก่อนทำการโคลนข้อมูล

โปรดทราบว่าpartcloneไม่มีการติดตั้งตามค่าเริ่มต้นในระบบส่วนใหญ่ ใช้ distro สดเช่นclonezillaหรือติดตั้ง partclone จากผู้จัดการแพ็คเก็ต distros ของคุณ ( apt-get install partcloneใน sytsems ที่ใช้เดเบียน)

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.