Block device yang mewakili partisi, misalnya /dev/sda1, dibuat oleh kernel sedemikian rupa sehingga tidak mungkin untuk mengakses penyimpanan yang berdekatan melalui mereka (dengan asumsi tabel partisi tidak diubah setelah kernel membacanya terakhir kali). Jika Anda dapat mengakses penyimpanan yang berdekatan dengan cara itu, itu akan dianggap sebagai bug yang sangat besar.
David Foerster
Jawaban:
18
Timpa partisi dengan dd
ddadalah alat yang sangat kuat tetapi juga berbahaya. Itu melakukan apa yang Anda katakan untuk dilakukan tanpa pertanyaan. Jadi, jika Anda menyuruhnya menghapus foto keluarga, ... dan itu adalah kesalahan mengetik kecil.
Tetapi jika Anda memeriksa dan mengecek, Anda dapat menggunakannya.
dd if=/dev/zero of=somepartition bs=512
atau saya sarankan
dd if=/dev/zero of=/dev/sdxn bs=4096
di mana xhuruf drive dan nnomor partisi dan ukuran blok 4096 byte membuat proses penulisan lebih cepat.
Penting bahwa Anda menulis ke partisi dalam kasus ini. Jika Anda menulis ke seluruh drive (ujung kepala drive) /dev/sdxseluruh drive akan ditimpa. Tetapi penulisan ke partisi akan terganggu pada akhir partisi dan partisi di belakangnya akan dipertahankan. (Saya menguji sekarang pada flashdisk USB di Lubuntu 16.04 LTS, jadi saya tahu itu berfungsi seperti itu.)
Pengecualian untuk partisi yang diperluas
Ada pengecualian untuk partisi extended (yang merupakan wadah untuk partisi logis, agar memiliki lebih dari empat partisi dalam tabel partisi MSDOS). Ini dijelaskan dalam tautan berikut,
Tapi ada masalah lain juga. Saya menguji perintah Anda dalam lingkungan pengujian, dan hanya membaca satu kibibyte (1024 byte) ketika saya ingin itu membuat gambar dari partisi extended.
Saya juga menguji ini sekarang pada flashdisk USB di Lubuntu 16.04 LTS, dan ini berlaku untuk menulis (juga membaca). Hanya kibibyte pertama yang ditimpa.
Jadi untuk meringkas, menimpa partisi primer dan partisi logis bekerja sesuai dengan deskripsi utama dalam jawaban ini. Tetapi jangan gunakan metode ini untuk menimpa partisi extended karena hanya kibibyte pertama yang akan ditimpa. Partisi logis partisi extended tidak akan lagi ditemukan melalui tabel partisi, tetapi data yang tersimpan di dalamnya masih ada.
Saya sudah menerima, tetapi jika memang demikian, ini seharusnya jawaban yang benar.
LogicBreaker
3
@ LogicBreaker, Mungkin Anda bisa memindahkan penerimaan. Tapi itu tidak penting. Lebih penting bagi Anda untuk memahami cara menggunakan dddan berisiko, sehingga Anda sangat berhati-hati saat menggunakannya. Semoga berhasil :-) Secara umum, Anda harus selalu memiliki cadangan semua file, yang Anda tidak mampu kehilangannya.
sudodus
1
Saat menulis ke partisi kosong Anda tidak memiliki banyak alternatif. Saya pindah, kalau tidak akan menyesatkan orang lain.
LogicBreaker
1
Inilah sebabnya mengapa pengguna biasanya tidak dapat mengakses file / dev / * ".
Thorbjørn Ravn Andersen
1
Jika ini adalah satu - satunya salinan foto keluarga Anda tanpa cadangan, maka Anda dapat kehilangan mereka setiap saat karena pencurian, kebakaran, kecelakaan, atau kegagalan perangkat keras sederhana :-)
user334639
4
Menulis ke perangkat partisi tidak akan menulis di luar partisi itu, dengan dd atau apa pun. Anda perlu menggunakan perangkat wholedisk untuk memiliki efek di luar satu partisi.
(Peringatan: kecuali jika disk Anda memiliki tabel partisi dengan partisi yang tumpang tindih, yang seharusnya tidak pernah terjadi.)
Peringatan lain: jika Anda menggunakan sesuatu seperti LVM, menulis ke volume fisik tentu saja dapat memengaruhi banyak volume logis.
Maks.
4
Saya pikir pertanyaan Anda didasarkan pada kesalahpahaman mendasar tentang bagaimana dd(dan sebenarnya sistem operasi mirip Unix secara umum) bekerja:
ddtidak dapat menimpa partisi yang berdekatan, hanya karena ddtidak dapat menimpa partisi, titik .
ddcukup menulis ke file . Itu dia.
Sekarang, jika Anda meneruskan ddfile yang mewakili banyak partisi, maka ddakan menimpa file itu . Tetapi dalam hal ini, itu tidak ddmenulis melewati akhir partisi. ddmasih akan menulis sampai akhir file, dan hanya sampai akhir file.
Tetapi, jika Anda meneruskan ddfile yang hanya mewakili satu partisi, maka ddtidak akan menulis melewati akhir partisi ini. Sekali lagi, ini tidak ada hubungannya dengan dd. ddcukup menulis ke file yang Anda suruh untuk menulis. Fakta bahwa file ini mewakili partisi tunggal (dalam hal ini) dipastikan oleh driver perangkat blok di kernel. ddtidak ada hubungannya dengan itu.
Jadi, singkatnya: ddmenulis ke file. Apa yang diwakili file-file itu, tidak ddmenjadi perhatian. ddtidak tahu apa-apa tentang partisi.
Mmh ... dengan hanya menulis ke file, Anda tidak bisa menggunakannya untuk menulis ke partisi mentah.
LogicBreaker
1
Benar. Anda tidak dapat menggunakan dduntuk menulis ke partisi mentah. Anda hanya dapat menulis ke file. Anda bisa saja menulis ke file perangkat blok yang mewakili partisi (seperti /dev/sda1), tetapi Anda tidak bisa menulis ke partisi mentah. Dan karena Anda hanya dapat menulis ke file yang mewakili partisi, Anda tidak dapat menulis melewati akhir partisi, karena file tersebut hanya mewakili partisi, dan bukan partisi dan sedikit melewati akhir.
Jörg W Mittag
3
Jorg mengacu pada salah satu ide utama filosofi Unix - "semuanya adalah file". Dengan demikian, kernel menyajikan paten, perangkat, port, dll sebagai file. Akibatnya, setiap program yang dapat menulis ke file dapat digunakan untuk menulis ke partisi atau perangkat. Adalah tugas kernel untuk menegakkan batas partisi. Anda dapat membuka /dev/sdadi editor teks Anda dan mengubah data, ddtidak berbeda dari program lain dalam hal dapat mengakses partisi. Jawaban yang sangat bagus
Sergey
1
Ada skenario khusus yang berbahaya tetapi jarang terjadi di mana ini dapat terjadi bahkan dengan driver perangkat non-buggy block:
Tabel partisi pada disk diubah sedemikian rupa sehingga partisi x diubah ukurannya menjadi berakhir pada batas yang lebih rendah dari sebelumnya. Baik partisi y di belakangnya diubah ukurannya mulai atas pada batas bawah, atau partisi baru y ditambahkan ke dalam ruang.
Partisi y diisi dengan data yang relevan dengan cara yang tidak tergantung pada tabel partisi, mis. Menggunakan dd dengan opsi lewati / hitung pada perangkat blok disk keseluruhan (mis. / Dev / sda)
Ioctl yang memberitahu kernel untuk membaca ulang tabel partisi tidak dikeluarkan, atau gagal karena perangkat yang sibuk
Partisi x ditulis oleh proses apa pun yang mencoba menulis ke sana sampai menyentuh kondisi kesalahan.
Anda harus berhati-hati dengan dd seolah-olah Anda membuat kesalahan Anda dapat menimpa lebih dari yang Anda tawar-menawar dan itu tergantung pada apa yang Anda gunakan untuk dd (OP tidak jelas dalam penggunaan dd dan sintaks yang tepat dari dd perintah).
Jika Anda menentukan partisi itu akan menulis ke partisi itu sampai partisi penuh.
Jika Anda membuat kesalahan dan meletakkan seluruh drive, misalnya = / dev / sda, dd akan menulis ke seluruh drive mulai selesai mengabaikan (dan menimpa) tabel partisi Anda.
Anda juga dapat menggunakan dd pada partisi untuk menimpa file yang dihapus (file yang dihapus mungkin tetap pada partisi dan ditemukan oleh berbagai alat pemulihan dengan berbagai tingkat keberhasilan hingga selesai ditulis. Dalam hal ini Anda dapat menggunakan dd untuk mengisi ruang kosong dengan menulis ke file.
Jika Anda bisa menulis ke / dev / sdcX dan berhasil menulis melintasi batas partisi, itu tidak akan berarti mengabaikan tabel partisi - itu akan menjadi pengandar perangkat blok di kernel yang buggy dan mengabaikan tabel partisi.
rackandboneman
1
@sudodus ddbukan level rendah itu. Sebenarnya sebagian besar hal yang dilakukan orang ddbisa dilakukan dengan cara yang sama cat. Bahkan catsedikit lebih cepat karena menggunakan blok yang lebih besar daripada yang dddilakukan secara default. Semua kode level rendah ada di kernel. Dan pengemudi tidak terlalu peduli jika Anda menggunakan ddatau cat.
kasperd
1
@sudodus - maaf atas kebingungan, saya tidak sejelas yang saya maksud. tentu bisa terus menulis, tergantung pada apa yang Anda katakan itu lakukan. dd if=/dev/zero of=/dev/sda bs=512 count=1atau dd if=/dev/zero of=/dev/sda bs=512contoh. Dengan perintah kedua ia akan terus menulis dan mengisi seluruh disk "mengabaikan" tabel partisi. Jika Anda menentukan partisi dd if=/dev/zero of=/dev/sda1itu tidak akan melampaui partisi. Semacam tergantung pada apa yang ingin Anda lakukan dengan dd.
Panther
1
@Panther Pertanyaannya secara spesifik mengatakan of=somepartition, jadi kasus di mana Anda menulis ke seluruh perangkat disk tidak berlaku. ddtidak dapat menyiasati batasan driver perangkat.
Barmar
1
@Bamar membaca saya sudah mengomentari itu. Saya telah melihat banyak pengguna bingung $ suatu bagian untuk / dev / sda
/dev/sda1
, dibuat oleh kernel sedemikian rupa sehingga tidak mungkin untuk mengakses penyimpanan yang berdekatan melalui mereka (dengan asumsi tabel partisi tidak diubah setelah kernel membacanya terakhir kali). Jika Anda dapat mengakses penyimpanan yang berdekatan dengan cara itu, itu akan dianggap sebagai bug yang sangat besar.Jawaban:
Timpa partisi dengan
dd
dd
adalah alat yang sangat kuat tetapi juga berbahaya. Itu melakukan apa yang Anda katakan untuk dilakukan tanpa pertanyaan. Jadi, jika Anda menyuruhnya menghapus foto keluarga, ... dan itu adalah kesalahan mengetik kecil.Tetapi jika Anda memeriksa dan mengecek, Anda dapat menggunakannya.
atau saya sarankan
di mana
x
huruf drive dann
nomor partisi dan ukuran blok 4096 byte membuat proses penulisan lebih cepat.Penting bahwa Anda menulis ke partisi dalam kasus ini. Jika Anda menulis ke seluruh drive (ujung kepala drive)
/dev/sdx
seluruh drive akan ditimpa. Tetapi penulisan ke partisi akan terganggu pada akhir partisi dan partisi di belakangnya akan dipertahankan. (Saya menguji sekarang pada flashdisk USB di Lubuntu 16.04 LTS, jadi saya tahu itu berfungsi seperti itu.)Pengecualian untuk partisi yang diperluas
Ada pengecualian untuk partisi extended (yang merupakan wadah untuk partisi logis, agar memiliki lebih dari empat partisi dalam tabel partisi MSDOS). Ini dijelaskan dalam tautan berikut,
Bisakah saya membuat gambar partisi 'extended' menggunakan dd?
Saya juga menguji ini sekarang pada flashdisk USB di Lubuntu 16.04 LTS, dan ini berlaku untuk menulis (juga membaca). Hanya kibibyte pertama yang ditimpa.
Jadi untuk meringkas, menimpa partisi primer dan partisi logis bekerja sesuai dengan deskripsi utama dalam jawaban ini. Tetapi jangan gunakan metode ini untuk menimpa partisi extended karena hanya kibibyte pertama yang akan ditimpa. Partisi logis partisi extended tidak akan lagi ditemukan melalui tabel partisi, tetapi data yang tersimpan di dalamnya masih ada.
sumber
dd
dan berisiko, sehingga Anda sangat berhati-hati saat menggunakannya. Semoga berhasil :-) Secara umum, Anda harus selalu memiliki cadangan semua file, yang Anda tidak mampu kehilangannya.Menulis ke perangkat partisi tidak akan menulis di luar partisi itu, dengan dd atau apa pun. Anda perlu menggunakan perangkat wholedisk untuk memiliki efek di luar satu partisi.
(Peringatan: kecuali jika disk Anda memiliki tabel partisi dengan partisi yang tumpang tindih, yang seharusnya tidak pernah terjadi.)
sumber
Saya pikir pertanyaan Anda didasarkan pada kesalahpahaman mendasar tentang bagaimana
dd
(dan sebenarnya sistem operasi mirip Unix secara umum) bekerja:dd
tidak dapat menimpa partisi yang berdekatan, hanya karenadd
tidak dapat menimpa partisi, titik .dd
cukup menulis ke file . Itu dia.Sekarang, jika Anda meneruskan
dd
file yang mewakili banyak partisi, makadd
akan menimpa file itu . Tetapi dalam hal ini, itu tidakdd
menulis melewati akhir partisi.dd
masih akan menulis sampai akhir file, dan hanya sampai akhir file.Tetapi, jika Anda meneruskan
dd
file yang hanya mewakili satu partisi, makadd
tidak akan menulis melewati akhir partisi ini. Sekali lagi, ini tidak ada hubungannya dengandd
.dd
cukup menulis ke file yang Anda suruh untuk menulis. Fakta bahwa file ini mewakili partisi tunggal (dalam hal ini) dipastikan oleh driver perangkat blok di kernel.dd
tidak ada hubungannya dengan itu.Jadi, singkatnya:
dd
menulis ke file. Apa yang diwakili file-file itu, tidakdd
menjadi perhatian.dd
tidak tahu apa-apa tentang partisi.sumber
dd
untuk menulis ke partisi mentah. Anda hanya dapat menulis ke file. Anda bisa saja menulis ke file perangkat blok yang mewakili partisi (seperti/dev/sda1
), tetapi Anda tidak bisa menulis ke partisi mentah. Dan karena Anda hanya dapat menulis ke file yang mewakili partisi, Anda tidak dapat menulis melewati akhir partisi, karena file tersebut hanya mewakili partisi, dan bukan partisi dan sedikit melewati akhir./dev/sda
di editor teks Anda dan mengubah data,dd
tidak berbeda dari program lain dalam hal dapat mengakses partisi. Jawaban yang sangat bagusAda skenario khusus yang berbahaya tetapi jarang terjadi di mana ini dapat terjadi bahkan dengan driver perangkat non-buggy block:
sumber
Anda harus berhati-hati dengan dd seolah-olah Anda membuat kesalahan Anda dapat menimpa lebih dari yang Anda tawar-menawar dan itu tergantung pada apa yang Anda gunakan untuk dd (OP tidak jelas dalam penggunaan dd dan sintaks yang tepat dari dd perintah).
Jika Anda menentukan partisi itu akan menulis ke partisi itu sampai partisi penuh.
Jika Anda membuat kesalahan dan meletakkan seluruh drive, misalnya = / dev / sda, dd akan menulis ke seluruh drive mulai selesai mengabaikan (dan menimpa) tabel partisi Anda.
Anda juga dapat menggunakan dd pada partisi untuk menimpa file yang dihapus (file yang dihapus mungkin tetap pada partisi dan ditemukan oleh berbagai alat pemulihan dengan berbagai tingkat keberhasilan hingga selesai ditulis. Dalam hal ini Anda dapat menggunakan dd untuk mengisi ruang kosong dengan menulis ke file.
Tergantung pada apa yang Anda lakukan, Anda mungkin ingin menggunakan alat alternatif untuk menghapus file dengan aman. Lihat Bagaimana cara menghapus file dengan cara yang aman? untuk opsi.
sumber
dd
bukan level rendah itu. Sebenarnya sebagian besar hal yang dilakukan orangdd
bisa dilakukan dengan cara yang samacat
. Bahkancat
sedikit lebih cepat karena menggunakan blok yang lebih besar daripada yangdd
dilakukan secara default. Semua kode level rendah ada di kernel. Dan pengemudi tidak terlalu peduli jika Anda menggunakandd
ataucat
.dd if=/dev/zero of=/dev/sda bs=512 count=1
ataudd if=/dev/zero of=/dev/sda bs=512
contoh. Dengan perintah kedua ia akan terus menulis dan mengisi seluruh disk "mengabaikan" tabel partisi. Jika Anda menentukan partisidd if=/dev/zero of=/dev/sda1
itu tidak akan melampaui partisi. Semacam tergantung pada apa yang ingin Anda lakukan dengan dd.of=somepartition
, jadi kasus di mana Anda menulis ke seluruh perangkat disk tidak berlaku.dd
tidak dapat menyiasati batasan driver perangkat.