คำสั่งนี้จะdd if=/dev/zero of=/dev/sda bs=1M
ประสบความสำเร็จหรือไม่หากคำสั่ง dd เดิมอยู่บน / dev / sda จะเสร็จสมบูรณ์หรือไม่เนื่องจาก dd อยู่ในหน่วยความจำในเวลานั้น
คำสั่งนี้จะdd if=/dev/zero of=/dev/sda bs=1M
ประสบความสำเร็จหรือไม่หากคำสั่ง dd เดิมอยู่บน / dev / sda จะเสร็จสมบูรณ์หรือไม่เนื่องจาก dd อยู่ในหน่วยความจำในเวลานั้น
คำตอบ:
มีสามสิ่งที่สามารถเกิดขึ้นได้:
จนถึงตอนนี้สำหรับทฤษฎี ตอนนี้สำหรับการทดสอบภาคปฏิบัติ
ฉันติดตั้ง Ubuntu 12.10 ใหม่บน VM (VMware เวิร์กสเตชันบน win7-x64 โดยใช้ตัวเลือกเริ่มต้นและดิสก์เสมือน 10 GB)
คำสั่ง dd เสร็จสมบูรณ์และฉันกลับไปที่สิ่งที่ดูเหมือนจะพร้อมท์ทำงาน ฉันสามารถป้อนคำสั่งใหม่แม้ว่าพวกเขาจะล้มเหลวด้วยเหตุผลที่ชัดเจน
Segmentation fault
และคุณอ้างว่ามันสำเร็จแล้ว ... ?
การทดสอบอย่างรวดเร็วในเครื่องเสมือนโดยใช้ Damn Small Linux บ่งชี้ว่าคำสั่ง dd เสร็จสมบูรณ์ตามที่คาดไว้ โปรแกรมถูกโหลดครั้งแรกในหน่วยความจำเพื่อให้ทำงานและมีความรู้สึกน้อยมากในการโหลดโปรแกรมที่เรียกใช้ซ้ำแล้วซ้ำอีกในระหว่างกระบวนการ ในที่สุด dd จะออกและรายงาน 'ไม่มีพื้นที่เหลือบนอุปกรณ์'
หลังจากนั้นระบบปฏิบัติการดูเหมือนว่าจะทำงานได้ตามปกติตั้งแต่แรกเห็น แต่หยุดทำงานหลังจากคำสั่งแรกมันไม่สามารถดำเนินการได้ด้วยเหตุผลที่ชัดเจนและไม่ตอบสนอง การตรวจสอบเนื้อหาฮาร์ดไดรฟ์อย่างย่อ ๆ แสดงว่าพาร์ติชั่นนั้นเป็นศูนย์จริง ๆ
จากmmap
หน้าบน Linux:
MAP_SHARED Share this mapping. Updates to the mapping are visible to other processes that map this file,
and are carried through to the underlying file. The file may not actually be updated until
msync(2) or munmap() is called.
MAP_PRIVATE
Create a private copy-on-write mapping. Updates to the mapping are not visible to other pro‐
cesses mapping the same file, and are not carried through to the underlying file. It is
unspecified whether changes made to the file after the mmap() call are visible in mapped
region.
ไฟล์ที่เรียกทำงานนั้นถูกแมปกับหน่วยความจำโดยเคอร์เนลผ่านการโทรภายในไปยังmmap
ฟังก์ชัน MAP_PRIVATE
แผนที่ชนิดมีการร้องขอ (มองในfs/binfmt_elf.c
ของต้นไม้มาเคอร์เนล)
ดังนั้นจึงทำให้พฤติกรรมของmmap
: ไม่ว่าจะเป็นการเปลี่ยนแปลงในไฟล์หรืออุปกรณ์บล็อกที่อ้างอิงไฟล์นั้นจะถูกแพร่กระจายกลับไปยังหน้าของการทำแผนที่ซึ่งได้รับการเพจและมีอยู่แล้ว
หน้านั้นเป็นไปตามมาตรฐาน API มากกว่าการทำงานของเคอร์เนลดังนั้น "ไม่ได้ระบุ" พฤติกรรมที่แท้จริงคือการเปลี่ยนแปลงไฟล์จะไม่แพร่กระจายกลับไปยังหน้าปัจจุบัน แน่นอนหากโปรแกรมข้ามไปยังหน้าของรหัสที่ไม่ได้รับการเพจและการลบได้เกิดขึ้นแล้วมันจะได้รับหน้าของศูนย์ทั้งหมด
แต่อาจเป็นไปได้ว่าเมื่อมีการdd
ลบตัวมันหน้าในทุกหน้าของรหัสที่จะต้องดำเนินการวนรอบการลบต่อไป มีความเป็นไปได้ที่เมื่อการวนซ้ำสิ้นสุดลงมันอาจตีโค้ดบางอย่างที่ไม่อยู่ในหน้าปัจจุบัน: เช่นพูดฟังก์ชั่นครอบคลุมข้ามขอบเขตหน้าเพื่อให้ได้คำสั่งคืนหน้า
แต่หน้านั้นอาจถูกแคชจากการdd
เรียกใช้ครั้งก่อนหน้าเช่นกัน
ใช่. แน่นอนว่ามันจะทำให้คุณเสียค่าใช้จ่ายมากที่สุดในระบบไฟล์ของคุณ แต่คุณคงรู้อยู่แล้วว่า ...
ฉันทำผิดพลาดเร็ว ๆ นี้ ผมตั้งใจจะ dd กิกะไบต์ img 2 ลงบน SD Card แต่ไม่ได้ไป SDA dd if=rasberrypi.img of=/dev/sda
โดยไม่ได้ตั้งใจ ตระหนักถึงความผิดพลาดของฉันและยกเลิก dd แต่หลังจากนั้นมีการเขียน ~ 600MB (บนดิสก์ที่ใช้ ~ 500GB) ตารางฉากกั้นถูกทำลาย
เดสก์ท็อป (ที่มีหน่วยความจำ 10 GB ขึ้นไปเป็นเวลาหลายสัปดาห์) ยังคงทำงานต่อไปอีกสองสามชั่วโมงหากไม่มีอะไรเกิดขึ้น จัดการเพื่อให้ได้รับการเปลี่ยนแปลงไฟล์สำคัญเมื่อเร็ว ๆ นี้เป็นดรอปบ็อกซ์ซึ่งเรียกดูในโครเมียมตามปกติ ในความเป็นจริงฉันสามารถเรียกใช้ dd ไปยังการ์ด SD ตามที่ฉันต้องการได้ แต่ใช้งานได้ดี
หลังจากสองสามชั่วโมงระบบไฟล์ของฉันเข้าสู่โหมดอ่านอย่างเดียวและโปรแกรมสุ่มเริ่มตาย ฉันถูก sshed ในระบบอื่น ๆ อีกมากมายฉันสามารถใช้เซสชันเหล่านั้นต่อไปได้ แต่การสร้างเซสชันใหม่ทำให้เกิดข้อผิดพลาดว่าไม่พบโปรแกรม ssh ในเวลานี้ฉันสามารถสลับแท็บที่เปิดอยู่ในโครเมี่ยมได้ แต่เนื้อหาของแท็บดูเหมือนจะ "หยุด" ถ้าฉันรีเฟรชฉันจะได้รับหน้าจอสีขาวตลอดกาล rsyslogd ใช้ CPU 100% (1 คอร์) ด้วยเหตุผลบางอย่างอาจจะสับสนว่าทำไมมันไม่สามารถล้างบันทึกลงดิสก์ ... อาจจะ
ฉันเปิดวิดีโอ 350 MB (และหยุดชั่วคราว) ใน VLC ฉันยังคงสามารถเล่นได้และข้ามไปยังส่วนใด ๆ ของวิดีโอ อาจเป็นเพราะการดาวน์โหลดล่าสุด
ฉันสามารถปิดระบบได้ตามปกติโดยใช้ GUI ไม่มีข้อผิดพลาด
ดังนั้นนี่จะไม่ตอบคำถามของคุณอย่างแน่นอน แต่บอกว่าจะเกิดอะไรขึ้นถ้าหากคุณลบล้างจุดเริ่มต้นของดิสก์ ..
สิ่งต่าง ๆ บนดิสก์ส่วนใหญ่ยังคงสามารถกู้คืนได้ แต่ฉันจะไม่รำคาญเพราะทุกสิ่งที่ฉันสนใจมีการสำรองไว้ (หวังว่า)
เป็นไปได้ว่าส่วนใหญ่จะไม่เสร็จสมบูรณ์เนื่องจากคอมโพเนนต์การดำเนินการอื่นจะขอไฟล์ที่หายไปและทำให้เคอร์เนลตกใจ ถ้าคุณต้องการทำให้ดิสก์เป็นศูนย์จริงๆให้ใช้ซีดีสด ไม่เช่นนั้นคุณจะไม่สามารถรับประกันผลลัพธ์ได้