สามารถเขียนทับพาร์ติชั่นที่อยู่ติดกันได้


15

หากว่า

dd if=/dev/zero of=somepartition bs=512

ยังเช็ดพาร์ทิชันหลังจากsomepartitionหรือหยุดในตอนท้ายของsomepartition?


5
อุปกรณ์บล็อกที่เป็นตัวแทนของพาร์ทิชันเช่น/dev/sda1ถูกสร้างขึ้นโดยเคอร์เนลในลักษณะที่เป็นไปไม่ได้ที่จะเข้าถึงที่เก็บข้อมูลที่อยู่ติดกันผ่านทางพวกเขา (สมมติว่าตารางพาร์ติชั่นไม่เปลี่ยนแปลงหลังจากเคอร์เนลอ่านในครั้งสุดท้าย) หากคุณสามารถเข้าถึงที่เก็บข้อมูลที่อยู่ติดกันด้วยวิธีนี้จะถือว่าเป็นข้อบกพร่องอย่างมาก
David Foerster

คำตอบ:


18

เขียนทับพาร์ติชันด้วย dd

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

แต่ถ้าคุณตรวจสอบและตรวจสอบอีกครั้งคุณสามารถใช้งานได้

dd if=/dev/zero of=somepartition bs=512

หรือฉันจะแนะนำ

dd if=/dev/zero of=/dev/sdxn bs=4096

โดยที่xเป็นอักษรระบุไดรฟ์และnเป็นหมายเลขพาร์ติชันและขนาดบล็อก 4096 ไบต์ทำให้กระบวนการเขียนเร็วขึ้น

เป็นสิ่งสำคัญที่คุณต้องเขียนลงในพาร์ติชันในกรณีนี้ หากคุณเขียนลงในไดรฟ์ทั้งหมด (ส่วนหัวไดรฟ์) /dev/sdxไดรฟ์ทั้งหมดจะถูกเขียนทับ แต่การเขียนไปยังพาร์ติชั่นจะถูกขัดจังหวะในตอนท้ายของพาร์ติชั่นและพาร์ติชั่นด้านหลังจะถูกเก็บรักษาไว้ ( ตอนนี้ฉันทดสอบบน pendrive USB ใน Lubuntu 16.04 LTS ดังนั้นฉันรู้ว่ามันใช้งานได้จริง)

ข้อยกเว้นสำหรับพาร์ติชันเสริม

มีข้อยกเว้นสำหรับพาร์ติชันเสริม (ซึ่งเป็นคอนเทนเนอร์สำหรับโลจิคัลพาร์ติชันเพื่อให้มีพาร์ติชันมากกว่าสี่ในตารางพาร์ติชัน MSDOS) นี่คือคำอธิบายในลิงค์ต่อไปนี้

ฉันสามารถสร้างอิมเมจของพาร์ติชั่น 'Extended' โดยใช้ dd ได้ไหม

แต่มีปัญหาอื่นเช่นกัน ฉันทดสอบคำสั่งของคุณในสภาพแวดล้อมการทดสอบและ dd อ่านเพียงหนึ่งกิโลไบต์ (1024 ไบต์) เมื่อฉันต้องการให้มันสร้างภาพของพาร์ติชันเสริม

ฉันได้ทดสอบตอนนี้บน pendrive USB ใน Lubuntu 16.04 LTS และสิ่งนี้ใช้ได้กับการเขียน (เช่นเดียวกับการอ่าน) เฉพาะ kibibyte แรกเท่านั้นที่ถูกเขียนทับ

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


ฉันยอมรับแล้ว แต่ถ้าเป็นเช่นนี้ควรเป็นคำตอบที่ถูกต้อง
LogicBreaker

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

1
เมื่อเขียนไปยังพาร์ติชั่นเปล่าคุณไม่มีทางเลือกมากมาย ฉันย้ายไปไม่เช่นนั้นจะทำให้ผู้อื่นเข้าใจผิด
LogicBreaker

1
นี่คือเหตุผลที่ผู้ใช้ตามปกติไม่สามารถเข้าถึง / dev / * "files"
Thorbjørn Ravn Andersen

1
หากนี่เป็นเพียงสำเนาภาพถ่ายครอบครัวของคุณที่ไม่มีการสำรองข้อมูลคุณอาจเสียเวลาได้โดยการโจรกรรมไฟไหม้อุบัติเหตุหรือความล้มเหลวของฮาร์ดแวร์อย่างง่าย :-)
user334639

4

เขียนไปยังอุปกรณ์พาร์ทิชันจะไม่เขียนนอกพาร์ทิชันที่มี dd หรือสิ่งอื่นใด คุณจะต้องใช้อุปกรณ์ wholedisk เพื่อให้มีผลกระทบภายนอกพาร์ทิชันเดียว

(Caveat: ยกเว้นว่าดิสก์ของคุณมีตารางพาร์ทิชันที่มีพาร์ทิชันที่ทับซ้อนกันซึ่งไม่ควรเกิดขึ้น)


3
ข้อแม้อื่น: ถ้าคุณใช้บางอย่างเช่น LVM การเขียนลงในฟิสิคัลวอลุ่มสามารถส่งผลกระทบกับโลจิคัลวอลุ่มจำนวนมากได้
สูงสุด

4

ฉันคิดว่าคำถามของคุณอยู่บนพื้นฐานของความเข้าใจผิดขั้นพื้นฐานเกี่ยวกับวิธีการdd(และในความเป็นจริงระบบปฏิบัติการ Unix-like ทั่วไป):

ddสามารถพาร์ทิชันที่อยู่ติดกันไม่ได้เขียนทับเพียงเพราะddไม่สามารถเขียนทับพาร์ทิชัน, ระยะเวลา

ddเพียงแค่เขียนไปยังแฟ้ม แค่นั้นแหละ.

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

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

ดังนั้นในระยะสั้น: ddเขียนไปยังไฟล์ ไฟล์เหล่านั้นหมายถึงอะไรก็ไม่ddต้องกังวล ddไม่รู้อะไรเกี่ยวกับพาร์ติชัน


อืม ... กับ dd เพียงเขียนไฟล์คุณไม่สามารถใช้มันเขียนพาร์ติชันดิบ
LogicBreaker

1
แก้ไข. คุณไม่สามารถใช้ddสำหรับเขียนไปยังพาร์ติชันดิบ คุณสามารถเขียนลงไฟล์ได้เท่านั้น แน่นอนคุณสามารถเขียนไปยังไฟล์อุปกรณ์บล็อกซึ่งแสดงถึงพาร์ติชัน (เช่น/dev/sda1) แต่คุณไม่สามารถเขียนไปยังพาร์ติชันดิบได้ และเนื่องจากคุณสามารถเขียนไปยังไฟล์ที่แทนพาร์ติชันได้เท่านั้นคุณไม่สามารถเขียนผ่านจุดสิ้นสุดของพาร์ติชันได้เนื่องจากไฟล์จะแสดงเฉพาะพาร์ติชันไม่ใช่พาร์ติชันและบิตจะผ่านจุดสิ้นสุด
Jörg W Mittag

3
Jorg หมายถึงหนึ่งในแนวคิดหลักของปรัชญา Unix - "ทุกอย่างเป็นไฟล์" เช่นเคอร์เนลแสดง patitions อุปกรณ์พอร์ต ฯลฯ เป็นไฟล์ ดังนั้นทุกโปรแกรมที่สามารถเขียนลงไฟล์สามารถใช้เขียนพาร์ติชั่นหรืออุปกรณ์ได้ เป็นหน้าที่ของเคอร์เนลในการบังคับใช้ขอบเขตพาร์ติชัน คุณสามารถเปิด/dev/sdaในโปรแกรมแก้ไขข้อความและเปลี่ยนข้อมูลddไม่แตกต่างจากโปรแกรมอื่น ๆ ในแง่ของความสามารถในการเข้าถึงพาร์ติชัน คำตอบที่ดีมาก!
Sergey

1

มีสถานการณ์พิเศษที่อันตราย แต่หายากซึ่งสิ่งนี้อาจเกิดขึ้นได้แม้ว่าจะมีไดรเวอร์อุปกรณ์บล็อกแบบไม่บั๊กอยู่:

  • ตารางพาร์ติชันบนดิสก์มีการเปลี่ยนแปลงในลักษณะที่พาร์ติชัน x ถูกปรับขนาดให้สิ้นสุดในขอบเขตที่ต่ำกว่าเมื่อก่อน พาร์ติชัน y ด้านหลังจะถูกปรับขนาดเริ่มต้นบนขอบเขตที่ต่ำกว่าหรือเพิ่มพาร์ติชัน y ใหม่ลงในช่องว่าง
  • Partition y เต็มไปด้วยข้อมูลที่เกี่ยวข้องโดยวิธีการที่เป็นอิสระจากตารางพาร์ติชันเช่นการใช้ dd พร้อมตัวเลือก skip / count บนอุปกรณ์บล็อกดิสก์ทั้งหมด (เช่น / dev / sda)
  • ioctl ที่บอกให้เคอร์เนลอ่านตารางพาร์ติชันใหม่ไม่ได้ถูกใช้หรือล้มเหลวเนื่องจากอุปกรณ์ไม่ว่าง
  • Partition x ถูกเขียนโดยกระบวนการใด ๆ ที่พยายามเขียนลงไปจนกว่าจะพบเงื่อนไขข้อผิดพลาด

0

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

หากคุณระบุพาร์ติชันมันจะเขียนไปยังพาร์ติชันนั้นจนกว่าพาร์ติชันจะเต็ม

หากคุณทำผิดพลาดและทำให้ทั้งไดรฟ์ตัวอย่างเช่น = / dev / sda, dd จะเขียนไปยังไดรฟ์ทั้งหมดเริ่มต้นจนเสร็จสิ้นโดยไม่สนใจ (และเขียนทับ) ตารางพาร์ติชันของคุณ

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

dd if=/dev/zero of=/path/to/mount_point/zero_file bs=4096
rm -f /path/to/mount_point/zero_file

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


6
หากคุณสามารถเขียนไปยัง / dev / sdcX และจัดการเพื่อเขียนข้ามขอบเขตพาร์ติชันมันจะไม่ใช่ dd ที่เพิกเฉยต่อตารางพาร์ติชัน - มันจะเป็นไดรเวอร์อุปกรณ์บล็อกในเคอร์เนลที่กำลังบั๊กและไม่สนใจตารางพาร์ติชัน
rackandboneman

1
@sudodus ddไม่ได้อยู่ในระดับต่ำ ในความเป็นจริงมากที่สุดของสิ่งที่คนไม่ใช้จะได้รับการทำเพียงแค่เดียวกันกับdd catในความcatเป็นจริงจะเร็วกว่าเล็กน้อยเนื่องจากใช้บล็อกที่มีขนาดใหญ่กว่าการddตั้งค่าเริ่มต้น รหัสระดับต่ำทั้งหมดอยู่ในเคอร์เนล และคนขับรถไม่ได้จริงๆดูแลถ้าคุณกำลังใช้หรือdd cat
kasperd

1
@ Sudodus - ขอโทษสำหรับความสับสนฉันไม่ชัดเจนเท่าที่ฉันตั้งใจ dd สามารถเขียนต่อไปได้อย่างแน่นอนขึ้นอยู่กับสิ่งที่คุณบอกว่าทำ dd if=/dev/zero of=/dev/sda bs=512 count=1หรือdd if=/dev/zero of=/dev/sda bs=512เป็นตัวอย่าง ด้วยคำสั่งที่สองมันจะเขียนต่อไปและเติมทั้งดิสก์ "ละเว้น" พาร์ติชันตาราง หากคุณระบุพาร์ติชันdd if=/dev/zero of=/dev/sda1มันจะไม่ไปไกลกว่าพาร์ติชัน เรียงลำดับของขึ้นอยู่กับสิ่งที่คุณต้องการจะทำอย่างไรกับวัน
Panther

1
@Panther คำถามพูดโดยเฉพาะof=somepartitionดังนั้นกรณีที่คุณเขียนไปยังอุปกรณ์ดิสก์ทั้งหมดไม่ได้ใช้ ddไม่สามารถหลีกเลี่ยงข้อ จำกัด ของไดรเวอร์อุปกรณ์ได้
Barmar

1
@Bamar อ่านแล้วฉันได้แสดงความคิดเห็นแล้ว ฉันเห็นผู้ใช้หลายคนสับสน $ somepartition สำหรับ / dev / sda
Panther
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.