วิธีการคัดลอกทั้งระบบไฟล์ลินุกซ์รูทไปยังฮาร์ดไดรฟ์ใหม่ด้วย ssh และ tar


18

ฉันต้องถ่ายโอนทั้งระบบไฟล์รูทของลินุกซ์ออกจากฮาร์ดไดรฟ์ที่ล้มเหลวไปยังคอมพิวเตอร์เครื่องอื่นด้วยพาร์ทิชันที่เปิดอยู่และพร้อมใช้งาน ฉันค่อนข้างแน่ใจว่าเกี่ยวข้องกับtarและsshแต่ฉันจำไม่ได้ว่าจะทำอย่างไร

ฉันกำลังใช้อิมเมจ live CD บนโฮสต์ใหม่ / เป้าหมายเพื่อเรียกใช้สิ่งนี้:

ssh user@failingharddrivehost "some tar command | piped into something else"


offtopic ไม่ใช่คำถามการเขียนโปรแกรม แต่ลองssh user@failingsys "tar cfz - /" > oldsys.tar.gz

คุณต้องการที่จะดูแลว่าคุณไม่ได้ tar / dev / (เช่น / dev / random, / dev / sdX, ... ) Ditto / proc /
Hennes

คำตอบ:


19

ใช้ rsync จากโฮสต์ใหม่คุณสามารถใช้

rsync -avP --numeric-ids --exclude='/dev' --exclude='/proc' --exclude='/sys' root@failedharddrivehost:/ /path/to/destination/

ฉันจะไม่ลองเกี่ยวกับสิ่งที่คล้ายกับ tar เพราะอาจไม่ทำงานเมื่อมีไฟล์ที่เสียหาย


ลงเอยด้วยการใช้ rsync ตามที่อธิบายไว้ข้างต้นโดย etagenklo และ @Hennes การโยกย้ายเป็นไปด้วยดี เพียงแค่ต้องแก้ไขด้วง แต่ก็ไม่ควรเลวร้ายเกินไป
CHK

8
ฉันจะเพิ่ม -AHX เป็นค่าสถานะเพื่อ rsync เช่นกันเพื่อรักษา acls, xattrs และ hardlinks ทำให้มีสำเนาต้นฉบับที่แน่นอนยิ่งขึ้น
Alexander Remesch

5
ฉันจะเพิ่ม -x เพื่อเพิกเฉยรายการที่ไม่ได้อยู่ในระบบไฟล์รูทจากนั้นคุณสามารถข้ามอาร์กิวเมนต์ --exclude สำหรับเส้นทางต่างๆ
อเล็กซ์

4

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

root@good_host$ cd good_partition; netcat -l -p 1234 | tar xvpmf -
root@bad_host$ tar -cv -f- --exclude=/proc --exclude=/sys / | netcat good_host.ip 1234

ซึ่งเปิดพอร์ตการรับฟัง 1234 บนเครื่องที่ดีnetcat -l -p 1234และท่อข้อมูลที่เข้ามาtarเพื่อแยก (รักษา mtime และสิทธิ์) โฮสต์ที่ไม่ดีส่งข้อมูลไปยังพอร์ตนี้ยังมีการใช้และtar netcatฉันรวม--excludeพารามิเตอร์บางอย่างเป็น/procและ/sysเป็นระบบไฟล์เสมือนและดังนั้นจึงไม่มีประโยชน์กับโฮสต์ใหม่ (โดยเฉพาะไฟล์ที่แสดง RAM ของคุณใน ( /proc/kcore) จะเพิ่มจำนวนข้อมูลที่ไม่จำเป็น)

อย่างไรก็ตามคุณควรที่จะทำการddดัมพ์พาร์ติชั่นของความล้มเหลวด้วย:

user@good_host$ cd good_partition; netcat -l -p 1234 > dump_of_bad_partition_1.dd
root@bad_host$ dd if=/dev/sda1 | netcat good_host.ip 1234

ที่ซึ่งคุณต้องปรับใช้/dev/sda1กับอุปกรณ์ที่เหมาะสม ทำเช่นนั้นกับพาร์ทิชันอื่น ๆ ในไดรฟ์ที่ล้มเหลวเช่นกัน

ด้วยการถ่ายโอนข้อมูลนั้นคุณมั่นใจได้ว่าคุณจะไม่พลาดข้อมูลเมตาที่สำคัญใด ๆ (เช่น ACL) ที่tarจะไม่บันทึก


3

ทำไมคุณรวมกับไดเรกทอรียกเว้น? แนวคิดที่ดีกว่าไม่ได้เชื่อมอุปกรณ์เดียวกันเข้ากับไดเรกทอรีอื่นหรือไม่ เมล็ดสมัยใหม่ช่วยให้วิธีนี้ ตัวอย่างเช่นคุณได้ติดตั้ง

/ dev / sda1 เป็น / ทำแล้ว: mkdir / CLEANROOT mount / dev / sda1 / CLEANROOT

หลังจากนี้คุณมี: / dev / sda1 เป็น / / dev / sda1 เป็น / CLEANROOT

นี่เป็นระบบไฟล์เดียวกันที่สามารถมองเห็นได้สองแห่ง แต่ / CLEANROOT ยังไม่มีการติดตั้งเพิ่มเติม จากนั้นคุณสามารถ tar หรือ rsync / CLEANROOT โดยไม่มีข้อยกเว้นใด ๆ แทนการคัดลอก / ด้วยการยกเว้น

แน่นอนคุณต้องคัดลอกพาร์ทิชันข้อมูลอื่นเมื่อคุณมีพาร์ทิชันบางส่วน

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


1

คุณมีการเข้าถึงโฮสต์ที่ล้มเหลวหรือไม่?

หากคุณบูตจากซีดีสด จากนั้นใช้:

  • เท (ดัมพ์ / กู้คืนระบบไฟล์ทั้งหมดรวมถึงการอนุญาต)
  • ไม่รวม Tar / กับ dev คุณสามารถรวมนี้กับการแสดงผลที่จะ std_out และท่อว่าแม้ว่า netcat ยกเว้นไวยากรณ์:
    tar --exclude='/dev'
  • หรือ rsync โดยไม่รวมค่าเดียวกัน เช่น
    rsync -zvr --exclude /dev/ / destination_computer_name_or_ip
  • หรือใช้ ddเช่นนี้:
    nc -l 4242 | gunzip | cat > my_full_disk_backup_of_PC_named_foo
    dd if=/dev/sda of=- bs=1M | gzip | nc -p 4242 name_of_the_destination

หากคุณไม่สามารถบูทจากซีดีสดได้โซลูชันส่วนใหญ่ข้างต้นบางส่วนจะยังคงเหมือนเดิม แต่:

  1. ไฟล์บางไฟล์อาจถูกใช้งาน / ล็อคอยู่
  2. ตรวจสอบให้แน่ใจว่าได้ยกเว้นไม่เพียง / dev / แต่ยัง / proc /
    เช่นtar --exclude='/dev' --exclude='/proc'

ใช่ฉันมีสิทธิ์เข้าถึงฟิสิคัล (และรูท) ทั้งสองโฮสต์ จะลอง rsync netcat หยุดทำงานเนื่องจากกล่องล้มเหลวโดยไม่ทราบสาเหตุ ระบบไฟล์เป้าหมายไม่ต้องการติดตั้ง มันล้มเหลวด้วย: #mount /dev/sda1 /mnt/fedora mount: unknown filesystem type 'LVM2_member'
CHK

1

นี่คือคำอธิบายของวิธีการคัดลอกไฟล์โดยใช้และtar sshโดยทั่วไปคุณจะเรียกใช้หนึ่งในสิ่งต่อไปนี้ขึ้นอยู่กับว่าคุณต้องการคัดลอก local -> remote หรือ remote -> local:

tar cf - files... | ssh remotehost -c 'cd /destination && tar xvf -'

ssh remotehost -c 'cd /destination && tar cf - files' | tar xvf -

0

คุณควรพิจารณาใช้ rsync

คำสั่ง follwoing ถือว่า 2 สิ่ง:

  1. คุณอยู่ในระบบพร้อมฮาร์ดไดรฟ์ที่ล้มเหลว
  2. พาร์ทิชันใหม่มีการติดตั้งลินุกซ์น้อยที่สุดและเปิดใช้งาน ssh

rsync / new_partition:/wherever/you/want/

หมายเหตุ: การติดตาม / มีความสำคัญไม่เช่นนั้นไฟล์ของคุณจะอยู่ในระดับไดเรกทอรีเดียวด้านบน


OP อาจต้องการใช้-aพารามิเตอร์ (และบางที-A) เนื่องจากรักษาเวลา, ความเป็นเจ้าของ, symlink (และบางที ACLs) ฯลฯ และ-e sshพารามิเตอร์เนื่องจากข้อมูลควรถูกถ่ายโอนไปยังคอมพิวเตอร์เครื่องอื่น ดังนั้นrsync -aAv -e ssh root@failingharddrivehost:/ /good_computer/newpartition_mountpoint
mpy
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.