การใช้อิมเมจไดรฟ์ของไดรฟ์ทำงานปัจจุบันปลอดภัยหรือไม่


12

ฉันต้องสำรองข้อมูลฮาร์ดดิสก์ของฉัน ฉันต้องการที่จะใช้ddและวางภาพบน HDD ภายนอก

  • ฉันสามารถใช้สิ่งนี้ddจากระบบปฏิบัติการที่อยู่ใน hdd เองหรือฉันต้องบูตจากอุปกรณ์อื่นเช่น LiveCD หรือไม่?
  • โดยทั่วไปแล้วการถ่ายภาพของอุปกรณ์จะปลอดภัยหรือไม่หากติดตั้งอุปกรณ์และใช้งานได้
  • จะทำอย่างไรถ้าอุปกรณ์ถูกเมานต์ แต่ฉันแน่ใจว่าไม่มีการดำเนินการ I / O อื่นขณะที่ddกำลังทำงานอยู่

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

แต่ฉันสนใจddเพราะฉันต้องการสำรองข้อมูลด้วยอุปกรณ์เก็บข้อมูลอื่นและคัดลอกข้อมูลที่เก็บไว้ในพื้นที่ว่าง ตัวอย่างเช่นเครื่องอ่าน e-book ของฉันใช้พื้นที่ที่ไม่แบ่งพาร์ติชันเพื่อเก็บ uboot เคอร์เนลและข้อมูลอื่น ๆ


เป็นสิ่งสำคัญที่ระบบไฟล์ที่คุณใช้ซึ่งคุณสนใจ? บางคุณสมบัติมีเฉพาะสำหรับงานนี้
Vality

คำตอบ:


11

โดยทั่วไปแล้วจะไม่ปลอดภัย FS ถือว่าการดำเนินการนั้นถูกเขียนตามลำดับที่แน่นอนเพื่อให้สามารถเขียนข้อมูลใหม่ของไฟล์จากนั้นทำตัวชี้ไปยังข้อมูลอื่นรายละเอียดที่แน่นอนขึ้นอยู่กับระบบไฟล์ ลองนึกภาพถ้าเกิดขึ้นต่อไปนี้:

  1. dd อ่านจากตำแหน่ง X ซึ่งมีขยะหรือข้อมูลบางส่วน
  2. ระบบไฟล์เขียนไปยังตำแหน่ง X
  3. ระบบไฟล์เขียนไปยังตำแหน่ง X + 1 ตัวชี้ไปยังตำแหน่ง X
  4. dd อ่านจากตำแหน่ง X + 1 ลิงก์ไปยังตำแหน่ง X

จากมุมมองของการสำรองข้อมูลคุณจะได้รับข้อมูลขยะ อย่างไรก็ตามมีหลายวิธีในการแก้ไขปัญหา:

  • ตรึงระบบไฟล์โดยคำสั่งเฉพาะระบบไฟล์ (ฉันเชื่อว่าxfs_freezeเป็นหนึ่งและฉันไม่รู้จักอื่น ๆ - แต่ตัวเลือกดังกล่าวมีอยู่อย่างน้อยในทางทฤษฎี)
  • สร้างภาพรวม lvm และคัดลอกจากมัน การคัดลอกจะเป็นถ้าคุณรีบูทคอมพิวเตอร์ (ลบด้วย HDD ที่จัดลำดับใหม่) ดังนั้นมันจะเป็นระบบไฟล์สกปรก แต่การคัดลอกจะเป็นแบบอะตอมมิก โปรดทราบว่าบางระบบไฟล์เช่น XFS จะต้องมีการแช่แข็งก่อน
  • ใช้ rsync ตามที่ผู้อื่นแนะนำ ตอนนี้การถ่ายสำเนามีความปลอดภัยและคุณไม่จำเป็นต้องใช้ LVM แต่การทำสำเนานั้นไม่ใช่แบบอะตอมมิก ดังนั้นในขณะที่มันหลีกเลี่ยงปัญหาข้างต้นในระดับระบบแฟ้มก็อาจยังคงพบปัญหาเกี่ยวกับไฟล์ (ค่อนข้างไม่น่าเป็นไปได้ แต่มีใครสามารถจินตนาการไฟล์ที่ขาดหายไปในขณะที่ mv จะถูกดำเนินการในพื้นหลังเป็นต้น)
  • ใช้ระบบไฟล์ที่มีสแนปชอตเช่นbtrfs , tux3 , zfs , nilfs ... จากนั้นคุณหลีกเลี่ยงปัญหาทั้งสอง - คุณสามารถสร้างสแนปชอตและคัดลอกจากมันโดย rsync ที่มีอะตอมมิกแบบเต็ม อย่างไรก็ตามโปรดทราบว่าระบบไฟล์ดังกล่าวมักจะมีการทดลอง

ในฐานะโน้ตสุดท้าย - ddอาจไม่ใช่วิธีสำรองที่ดีที่สุด มันคัดลอกดิสก์เต็มซึ่งมักจะสิ้นเปลืองเมื่อคุณคัดลอก 'ขยะ' เช่นกัน หากคุณจำเป็นต้องมีดิสก์อิมเมจบางอย่างเช่นpartimageอาจจะดีกว่า หากคุณไม่มีตัวเลือกที่ดีกว่าคือใช้ทั้ง rsync, tar ในโหมดดิเฟอเรนเชียล / แบบเพิ่มหน่วยเป็นต้นหรือระบบสำรองข้อมูลเต็มรูปแบบเช่นbacula , tarsnapหรืออื่น ๆ อีกมากมาย การคัดลอกข้อมูลอาจทำสิ่งมหัศจรรย์สำหรับขนาดของการสำรองข้อมูล


1
+1 นี่เป็นคำตอบเดียวที่จริง ๆ แล้วพยายามตอบคำถามนี้ทำอย่างยอดเยี่ยมสำหรับการอ่านสิ่งที่ op ถามและไม่คุยโวว่า dd ไม่ดี
Vality

+1 สำหรับคำตอบที่ดี แต่ฉันไม่เห็นด้วยกับการคุยโว ดีดีไม่เลว มันไม่เหมาะสมสำหรับสิ่งนี้และอธิบายว่าทำไมในกรณีนี้เป็นสิ่งที่ดี
Hennes

หัวข้อย่อย 4 มีข้อ จำกัด เหมือนกับ # 2 ใช่ไหม แอปพลิเคชันอาจอยู่ในระหว่างการออกการเขียนและสแน็ปช็อตไม่รู้จักธุรกรรมระดับแอปพลิเคชัน
Ben Voigt

ขอบคุณมันตอบคำถาม คำตอบของ goldilocks ก็ดีเช่นกัน แต่ฉันสนใจที่จะสำรองข้อมูลไม่เพียง แต่ HDD ของฉัน แต่ยังรวมถึงอุปกรณ์เก็บข้อมูลอื่น ๆ และบางทีฉันต้องเขียนมันก่อน
Marco Sulla

@BenVoigt - เพื่อขยาย - มันกำจัดหนึ่งเลเยอร์ (ระบบไฟล์) และ AFAIK เป็นหนึ่งที่ 'เปราะบางมากขึ้น' ในบางกรณีคุณสามารถค้นหาไฟล์ที่เขียนครึ่งหนึ่งได้ แต่หากแอปพลิเคชันไม่จัดการกับมันไฟล์นั้นอาจเสียหายได้ในหลาย ๆ สถานการณ์เช่นกัน (OOM, crash เป็นต้น) ดังนั้นแอปพลิเคชันที่เขียนอย่างถูกต้องควรจัดการกับมัน
Maciej Piechotka

7

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

  • มันจะเสียเวลามากในการคัดลอกส่วนที่ว่างเปล่าของพาร์ติชัน

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

ใช้cp -aหรือrsyncแทน แน่นอนว่าคุณต้องสร้างพาร์ติชันปลายทางดังนั้นมันจึงไม่ง่ายอย่างที่จะทำ แต่มันปลอดภัยและยืดหยุ่นกว่า หากคุณต้องการสร้างภาพระบบไฟล์ดูด้านล่าง

ddหากคุณมีความประสงค์ที่จะคัดลอกระบบแฟ้มรากอย่างไม่ได้ใช้ คุณต้องใช้สิ่งที่ชอบrsync -ax(หรือcp -axในไดเรกทอรีระดับบนสุดของแต่ละบุคคล) เนื่องจากมีพวงของสิ่งที่จะต้องไม่ถูกในการคัดลอก บน Linux สิ่งนี้รวมถึง:

/dev
/lost+found
/mnt
/proc
/run
/sys
/tmp

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

หากคุณต้องการสร้างไฟล์รูปภาพของระบบไฟล์รูท (หรือระบบไฟล์ใด ๆ ) ให้สร้างไฟล์รูปภาพเปล่า - นี่เป็นการใช้งานที่เหมาะสมสำหรับdd:

dd if=/dev/zero of=whatever.img bs=1024 count=1000000

นั่นเป็นรูปขนาด 1024 MB (1000000 * 1024) ปรับcountถ้าคุณต้องการมันขนาดอื่น ๆ สร้างเช่นextระบบไฟล์ในไฟล์ :

mke2fs whatever.img

มันจะเตือนคุณว่านี่ไม่ใช่อุปกรณ์บล็อกจริง ดำเนินดำเนินการต่อ. ตอนนี้เมานต์ไฟล์ภาพ:

mount whatever.img /mnt/img

/mnt/imgจะต้องมีอยู่ แต่สามารถทำอะไรก็ได้ ขณะนี้คุณสามารถrsync(หรือcp -a) /mnt/imgลง เนื้อหาจะยังคงอยู่ภายในwhatever.imgเมื่อคุณเลิกเมานท์

อย่างไรก็ตาม ...

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

tar -czf myarchive.tar.gz [the directory path]

จากนั้นคุณสามารถปรับใช้ในพาร์ติชันที่มีอยู่ (ว่างหรืออย่างอื่น) โดยวางไว้ในระดับบนสุดและใช้:

tar -xzf myarchive.tar.gz

ระวังว่าจะเขียนทับไฟล์ที่มีอยู่หากเส้นทางของพวกเขาตรงกับสิ่งที่เก็บไว้ มิฉะนั้นจะทำให้ลำดับชั้นไดเรกทอรีที่มีอยู่เดิม


+1 ที่เขียนไปยังไฟล์รูปภาพเปล่านั้นลื่นมาก แต่ข้อดีอะไรบ้างที่มีการบันทึกลงในไฟล์. tar หรือ. tgz
Creek

@Creek มันไม่มีข้อดีใด ๆ ยกเว้นภาพที่เชื่อมต่อได้ ฉันเสริมว่าในกรณีที่เป้าหมายของ OP ที่นี่คือการสร้างภาพที่สามารถใช้งานได้ดิบ มิฉะนั้นจะเป็นการดีกว่าถ้าใช้ไฟล์เก็บถาวรเนื่องจากไฟล์เก็บถาวรไม่มีขนาดคงที่ ฉันจะเพิ่มคำเตือนที่ชัดเจนเกี่ยวกับเรื่องนั้น
goldilocks

Gotcha ฉันไม่คิดอย่างนั้น ยังคงเป็นวิธีที่ยอดเยี่ยมสำหรับการจัดเก็บไฟล์
Creek

2
@mpy ทั้ง GNU coreutils cpและ rsync มีตัวเลือก-xเพื่อหลีกเลี่ยงการเรียกซ้ำไปยังระบบไฟล์อื่น ๆ คำตอบที่ดีที่สุดของ Maciejอธิบายว่าทำไมจึงddไม่เหมาะสมที่นี่อย่างแน่นอน (เกือบจะรับประกันได้ว่าจะผลิตสำเนาที่ใช้ไม่ได้เว้นแต่คุณจะใช้ความระมัดระวังตามที่ระบุโดยMarkเนื่องจากการเขียนที่จะเกิดขึ้นระหว่างการคัดลอก)
Gilles 'หยุดความชั่วร้าย'

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

1

rsync เป็นเครื่องมือทางเลือกสำหรับการสำรองข้อมูลระบบไฟล์และสามารถทำการสำรองข้อมูลที่บูตได้ของระบบปฏิบัติการปัจจุบัน

คำเตือนบางอย่าง:

  • คุณต้องเพิ่มตัวเลือกซุปอักษรที่เหมาะสม
  • เส้นทางค่อนข้างสำคัญ
  • จำเป็นต้องมีรายการการยกเว้นและจะแตกต่างกันไปสำหรับแต่ละระบบปฏิบัติการและแต่ละการกำหนดค่า

ข้อดีบางประการของ rsync เหนือวิธีอื่นเช่น tar:

  • คุณสามารถหยุดและเริ่มการสำรองข้อมูลได้ตลอดเวลา
  • ตัวเลือกมากมายสำหรับการจัดการไฟล์ที่ถูกแทนที่เช่นลบตามต้องการลบก่อนย้าย .....
  • กลับมา (หรือซ้ำ) การสำรองข้อมูลที่มีมากเร็วกว่าวิธีการอื่น ๆ ไฟล์ก่อนหน้านี้คัดลอกจะถูกข้าม (การเพิ่มความเร็ว 20x เป็นเรื่องปกติ)
  • ตัวเลือก --link-dest สามารถสร้างการสำรองข้อมูลที่มีรุ่นในขณะที่คัดลอกไฟล์ใหม่เท่านั้น

การสำรองข้อมูลอิมเมจมีที่ของพวกเขา แต่พวกเขาคัดลอกไดรฟ์ตรงตามที่เป็นอยู่รวมถึงปัญหาใด ๆ ที่คุณอาจมี การสำรองข้อมูลไฟล์ทำให้ไดเรกทอรีใหม่และมีผลข้างเคียงของการจัดเรียงข้อมูลเชิงเส้น (จัดเรียงข้อมูล) ไดรฟ์ของคุณในกระบวนการ หากคุณต้องการทำสำเนา 10 ชุดที่เหมือนกันของระบบปฏิบัติการปัจจุบันของคุณฉันจะใช้ rsync สำหรับต้นแบบการคัดลอกจากนั้น dd (หรือคล้ายกัน) สำหรับส่วนที่เหลือ


1

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

  1. ปิดโปรแกรมที่ไม่จำเป็นทั้งหมด (โดยพื้นฐานแล้วทุกอย่างยกเว้นรูทเชลล์ที่คุณทำงานอยู่ - อย่าทดลองใช้จากเทอร์มินัล X ใช้เชลล์คอนโซลจริง) โหมดผู้ใช้คนเดียวอาจช่วยได้
  2. หากคุณติดตั้งดิสก์อื่นนอกเหนือจากรูทของระบบ อย่า unmount ระบบไฟล์เสมือนเช่น / proc, / sys หรือ / dev
  3. ล้างข้อมูลแคชในดิสก์ที่เหลืออยู่: sync
  4. remount mount -o ro /ระบบแฟ้มรากอ่านอย่างเดียว:
  5. ใส่ฮาร์ดไดรฟ์ภายนอกของคุณ (คุณอาจได้รับคำเตือนว่าไม่สามารถเขียน/etc/mtabได้
  6. ทำการสำรองข้อมูลของคุณ
  7. ถอดเมาท์ฮาร์ดไดรฟ์ภายนอกของคุณ
  8. Reboot คุณทำค่อนข้างยุ่งเหยิงกับระบบของคุณที่นี่และการรีบูตเครื่องเป็นวิธีที่เร็วที่สุดที่จะทำให้ระบบกลับมาเป็นปกติ

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


โปรดทราบว่าขั้นตอนที่ 4 อาจเป็นอันตรายต่อระบบไฟล์บางระบบเนื่องจากเขียนได้แม้ในโหมดอ่านอย่างเดียว นอกจากนี้ในระบบที่ทันสมัยกว่า (Linux 3.something ที่ฉันเชื่อ) คุณสามารถเชื่อมโยง/etc/mtabไปถึงได้/proc/self/mount- ซึ่งจะทำงานแม้ว่าคุณจะมีสิ่งต่าง ๆ เช่น chroots หรือ fs namespaces
Maciej Piechotka

1
@MaciejPiechotka ฉันไม่ได้ตระหนักถึงระบบไฟล์ใด ๆ ที่เขียนในขณะที่ติดตั้งในโหมดอ่านอย่างเดียวและฉันจะพบว่ามันแปลกมาก ระบบไฟล์บางระบบจะเขียนเมื่อทำการเมาท์ในโหมดอ่านอย่างเดียวหากระบบไฟล์ไม่ได้ถูก unmount ก่อนหน้านี้อย่างสมบูรณ์ดังนั้นขั้นตอนmount -o remount,ro /อาจจะเขียน แต่เมื่อคำสั่งนี้ส่งคืนการเขียนที่ตามมาจะเกิดขึ้นในสถานการณ์ใด
Gilles 'หยุดความชั่วร้าย'

“ โปรแกรมที่ไม่จำเป็น” ที่จะปิดตัวลงอย่างยิ่งจะต้องรวมระบบย่อยการบันทึกซึ่งฉันจะไม่พิจารณาว่าไม่จำเป็น
Gilles 'หยุดความชั่วร้าย'

@Gilles เพื่อจุดประสงค์ในการสร้างอิมเมจของดิสก์สำหรับบูตดิสก์โปรแกรมใด ๆ ที่ไม่เกี่ยวข้องโดยตรงในการสร้างอิมเมจนั้นไม่จำเป็น
มาร์ค

อาจจะมีมูลค่าการกล่าวถึงโหมดผู้ใช้คนเดียวสามารถช่วยได้ที่นี่
Vality

1

ใช้Clonezillaอย่างจริงจัง มันเป็นยูทิลิตี้เหมือน Norton Ghost แบบโอเพ่นซอร์สที่ดีที่สุดบน Linux มันจะทำทั้งพาร์ทิชันและการโคลนดิสก์เต็มรูปแบบทั้งดิสก์ต่อดิสก์หรือระบบดิสก์ต่อไฟล์ (บันทึกเป็นไฟล์) สนับสนุนระบบไฟล์ Linux ส่วนใหญ่, NTFS, FAT32 และอื่น ๆ มันสามารถบันทึกลงในดิสก์ภายในไดรฟ์ภายนอกหรือแม้กระทั่งผ่านเครือข่ายบน SMB หรือ NFS ที่ใช้ร่วมกัน

มันใช้งานง่ายมากและจะช่วยให้คุณประหยัดเวลาได้มาก

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


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