Jawaban:
Ada tiga hal yang bisa terjadi:
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.
Segmentation fault
dan Anda mengklaim bahwa itu berhasil diselesaikan ...?
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.
Dari mmap
halaman 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 mmap
fungsi. Suatu MAP_PRIVATE
pemetaan tipe diminta (lihat fs/binfmt_elf.c
pohon 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 dd
menghapus 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 dd
doa sebelumnya .
Iya. Tentu saja, itu akan membuat Anda kehilangan sebagian besar filesystem Anda, tetapi mungkin Anda sudah tahu bahwa ...
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.
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.