Apa yang terjadi jika saya dd nol ke drive tempat dd berada?

10

Akankah perintah ini: dd if=/dev/zero of=/dev/sda bs=1Mberhasil jika perintah dd awalnya di / dev / sda? Apakah ini akan selesai karena dd ada di memori pada saat itu?

agz
sumber

Jawaban:

40

Ada tiga hal yang bisa terjadi:

  1. Perintah mulai, berjalan sampai selesai dan Anda akan kembali ke prompt. Karena disk secara efektif dihapus pada Anda tidak bisa berbuat banyak setelah itu, meskipun Anda mungkin beruntung dengan beberapa perintah built-in shell.
  2. Perintah dimulai. Di beberapa titik itu paged keluar karena tekanan memori. Biasanya ini bukan masalah karena bagian-bagiannya hanya bisa dimuat ulang dari disk (data tidak berubah) dari dari swap. Namun jika Anda hanya menghapus ini maka perintah dd akan gagal sebagian meskipun mengisi disk.
  3. Opsi ketiga adalah sesuatu dari BSD. MBR pada disk yang dipasang dilindungi dari penimpaan. Bahkan jika Anda menjalankan perintah sebagai root. Ada lusinan distribusi Linux, semuanya hanya sedikit berbeda. Sangat mungkin bahwa beberapa dari mereka meniru ini.


Sejauh ini untuk teorinya. Sekarang untuk ujian praktis.

Saya menginstal Ubuntu 12.10 baru di VM. (VMware workstation pada win7-x64, menggunakan opsi default dan disk virtual 10 GB).

Perintah dd selesai dengan sukses dan saya kembali pada apa yang tampaknya prompt bekerja. Saya bisa memasukkan perintah baru, meskipun itu akan gagal karena alasan yang jelas.

Cuplikan layar VM Ubuntu setelah menghapus disk

Hennes
sumber
9
Besar +1 untuk ujian praktis!
Doug Harris
10
Saya melihat Segmentation faultdan Anda mengklaim bahwa itu berhasil diselesaikan ...?
Alvin Wong
1
Iya. Itu membuat disk tidak dapat dibaca. Saya pikir itulah tujuannya. Untuk menghapus aman, Anda benar-benar harus mencoba sesuatu yang lain (seperti perintah hapus aman).
Hennes
salah satu jawaban terbaik yang pernah saya dapatkan. Terima kasih!
agz
6

Eksperimen cepat di mesin virtual menggunakan Damn Small Linux menunjukkan perintah dd memang selesai, seperti yang diharapkan; program ini awalnya dimuat ke dalam memori untuk dijalankan dan sangat tidak masuk akal untuk memuat yang dapat dieksekusi berulang kali selama proses. Akhirnya, dd akan keluar dan melaporkan 'tidak ada ruang yang tersisa di perangkat'.

Setelah itu, sistem operasi tampaknya berfungsi secara normal pada pandangan pertama, tetapi hang setelah perintah pertama tidak dapat lagi dijalankan karena alasan yang jelas dan menjadi tidak responsif. Pemeriksaan singkat dari isi hard drive menunjukkan partisi memang telah memusatkan perhatian.

Marcks Thomas
sumber
4

Dari mmaphalaman di 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.

File executable dipetakan ke memori oleh kernel melalui panggilan internal ke mmapfungsi. Suatu MAP_PRIVATEpemetaan tipe diminta (lihat fs/binfmt_elf.cpohon sumber kernel).

Jadi itu bermuara pada perilaku mmap: apakah perubahan dalam file, atau perangkat blok yang mendasari dimana file itu direferensikan, disebarkan kembali ke halaman pemetaan yang telah dipetakan dan telah ada.

Halaman itu didasarkan pada standar API, daripada perilaku kernel, karenanya "tidak ditentukan". Perilaku sebenarnya adalah bahwa perubahan pada file tidak disebarkan kembali ke halaman yang sudah ada. Tentu saja, jika program tiba-tiba melompat ke halaman kode yang belum dipetakan, dan penghapusan telah terjadi, maka itu akan mendapatkan halaman semua nol.

Tetapi, sangat mungkin, pada saat ddmenghapus itu sendiri, ia telah membuka semua halaman kode yang dibutuhkan untuk melanjutkan loop penghapusan. Ada kemungkinan bahwa sekali loop berakhir, ia mungkin mengenai beberapa kode yang ada di halaman yang tidak ada: seperti, katakanlah fungsi merentang melintasi batas halaman, sehingga untuk mencapai instruksi pengembalian, halaman harus diambil.

Tetapi halaman itu mungkin juga di-cache dari dddoa sebelumnya .

Kaz
sumber
1

Iya. Tentu saja, itu akan membuat Anda kehilangan sebagian besar filesystem Anda, tetapi mungkin Anda sudah tahu bahwa ...

Aaron Miller
sumber
0

Saya membuat kesalahan baru-baru ini. Saya bermaksud untuk membuat img 2 GB ke SD Card, tetapi melakukannya secara tidak sengaja dd if=rasberrypi.img of=/dev/sda. Menyadari kesalahan saya dan membatalkan dd, tetapi pada saat itu ~ 600MB (pada disk dengan ~ 500GB digunakan) telah ditulis. Tabel partisi hancur.

Desktop (dengan 10 GB memori dan hingga berminggu-minggu) terus berfungsi selama beberapa jam jika tidak ada yang terjadi. Berhasil mendapatkan file-file penting yang baru-baru ini diubah menjadi dropbox, biasanya diramban dengan chrome. Sebenarnya saya bisa menjalankan kartu SD ke SD seperti yang saya inginkan, bekerja dengan baik.

Setelah beberapa jam, filesystem saya masuk ke mode read only, dan program acak mulai mati. Saya sshed ke banyak sistem lain, saya bisa terus menggunakan sesi-sesi itu, tetapi membuat sesi baru memberikan kesalahan karena tidak dapat menemukan program ssh. Saat ini saya bisa beralih tab terbuka di chrome, tetapi isi tab tampaknya telah "digantung". Jika saya menyegarkan, saya mendapatkan layar putih selamanya. rsyslogd mengambil 100% cpu (1 core) untuk beberapa alasan, mungkin bingung mengapa ia tidak dapat menyiram log ke disk ... mungkin.

Saya membuka 350 MB video (dan berhenti sebentar) di VLC, saya masih bisa memutarnya, dan melompat ke bagian mana pun dari video. Mungkin karena ini unduhan terbaru.

Saya bisa mematikan sistem secara normal menggunakan GUI, tidak ada kesalahan.

Jadi ini tidak menjawab pertanyaan Anda dengan tepat, tetapi memberi tahu apa yang terjadi jika Anda menghapus awal disk ..

Sebagian besar hal pada disk masih dapat dipulihkan, tetapi saya tidak akan repot karena (semoga) semua yang saya pedulikan didukung.

sajal
sumber
-1

Kemungkinan besar itu tidak akan selesai, karena beberapa komponen pelaksana lainnya akan meminta file yang hilang dan panik kernel. jika Anda benar-benar ingin membidik disk, gunakan live CD; jika tidak, Anda tidak akan pernah bisa menjamin hasilnya.

Frank Thomas
sumber
2
Meminta file yang hilang tidak akan membuat kernel panik. Jika itu terjadi, mesin akan mogok jika mereka hanya memiliki satu disk yang tidak dapat diandalkan.
David Schwartz
@ DAvid Schwartz, jika itu masalahnya, maka #rm -rf / akan benar-benar menghapus seluruh sistem file. Dari percobaan saya tahu bahwa bukan itu masalahnya. sistem tidak dapat tetap berjalan lama sepenuhnya dari ram kecuali beberapa jenis teknologi ramdisk diimplementasikan, yang tidak standar.
Frank Thomas
@FrankThomas: Apakah panik kernel?
David Schwartz
ya, shutdown blackscreen.
Frank Thomas