Dapat menemukan partisi yang berdekatan


15

Akan

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

juga menghapus partisi setelah somepartitionatau berhenti di akhir somepartition?


5
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,

Bisakah saya membuat gambar partisi 'extended' menggunakan dd?

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.)


3
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.

0

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.

dd if=/dev/zero of=/path/to/mount_point/zero_file bs=4096
rm -f /path/to/mount_point/zero_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.


6
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
Panther
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.