Dd = / dev / sda = / dev / sda olursa ne yapar?


19

Düzenlendi: veriyi yok etmek istemiyorsanız bunu test etmek için çalıştırmayın.

Birisi ne aldığımı anlamama yardımcı olabilir mi?

  1. dd if=/dev/zero of=/dev/sda bs=4096 count=4096

    S: Neden özellikle 4096 count?

  2. dd if=/dev/zero of=/dev/sda bs=512 count=4096 seek=$(expr blockdev --getsz /dev/sda - 4096)

    S: Bu tam olarak ne yapıyor?


4
Bu kötü amaçlı kodu nereden buldun
Suici Doga

10
Bu kötü amaçlı bir kod değil.
Michael Hampton

12
@MichaelHampton: s / kötü amaçlı / yıkıcı / Yıkıcı kod yayınlamak kendi başına kötü amaçlı değilken, verileri IS'yi yok edebileceğine dair açık bir uyarı olmadan yayınlamak.
Ben Voigt

1
İnternet'teki bir kişi size böyle bir komut çalıştırmanızı söylediğinde DD'yi 'Disk Destroyer' olarak düşünmek en iyisidir.
Bobby Sacamano

3
aslında DD veri açıklaması anlamına gelir
Suici Doga

Yanıtlar:


43

gg if = / dev / sıfır = = dev / sda bs = 4096 sayım = 4096 S: neden 4096 özellikle sayaç için kullanılıyor?

Bu, sürücünün ilk 16 MiB'sini sıfırlayacaktır. 16 MiB, çok uzun sürmeyecek kadar küçükken, herhangi bir "disk başlangıcı" yapısını tıkamak için muhtemelen fazlasıyla yeterlidir.

gg if = / dev / sıfır = = dev / sda bs = 512 sayım = 4096 arama = $ (ifade bloğu --getsz / dev / sda - 4096)

S: Bu tam olarak ne yapıyor?

blockdev --getsz"512 bayt sektörlerde" blok cihazın boyutunu alır. Yani bu komut, sürücünün son 2 MiB'sini sıfırlamak için tasarlanmış gibi görünüyor.

Ne yazık ki bu komut sözdizimi açısından bozuk. Komutun başlangıçta

dd if=/dev/zero of=/dev/sda bs=512 count=4096 seek=$(expr `blockdev --getsz /dev/sda` - 4096)

ve backticks, insanların farklı ortamlar arasında kopyalayıp yapıştırma çizgisi boyunca bir yerde kayboldu.

Eski bölüm tabloları, LVM meta verileri, raid meta verileri vb. Bir sürücüyü yeniden kullanırken sorunlara neden olabilir. Sürücünün başlangıcındaki ve sonundaki bölümleri sıfırlamak, genel olarak bu sorunları önleyerek sürücünün tamamını sıfırlamaktan çok daha hızlı olur.


4
Teşekkür ederim. Bu cevap aradığım şey için en uygun olanı gibi görünüyor. İki komut delpart'tan sonra kullanılır. Temiz olarak yeniden kullanmak üzere bir diski silmek için kullanılırlar.
JH

expr blockdev --getsz /dev/sda - 4096sözdizimi hatası olur expr. Bence amaçlanan komut buydu ...seek="$(expr "$(blockdev --getsz /dev/sda)" - 4096)". Veya daha iyisi:...seek="$(($(blockdev --getsz /dev/sda) - 4096))"
Stéphane Chazelas

1
Benim tahminim aslında komutta backticks vardı ve bir noktada yemişlerdi.
plugwash

16

Bu, kurtarma için yararlı önemli yapılar içeren sabit sürücünüzün ilk 4096*4096=16MBve sonuncularını silecektir 512*4096=2MB. Bu kodun kötü niyetli olarak gönderildiğini varsayıyorum.

Hiçbir zaman açıkça countbaşka bir tanesinin belirtilmesinin 1yararlı olduğu bir durumla karşılaşmadım . Ben var ben MBR arkasına herhangi bir iz bırakarak değildi sağlamak istiyorsa öncelikle blok sildim ...


8
Bu neccisely kötü amaçlı değil, mevcut olan hasarlıysa yeni bir etiket yazmayı reddeden bazı kötü biçimlendirme programları yaşadım ve bu yüzden ilk birkaç baytı manuel olarak sıfırlamak zorunda kaldım.
Shelvacu

1
@shelvacu Sürücü bu şekilde manipüle edilirse şaşırırdım sda. Daha muhtemel sdbveya sdc. Ama tabii ki yanlış olabilirim ...
yo '

7
Bu kötü amaçlı değil. Diskin başlangıcındaki GPT'yi ve diskin sonundaki yedek GPT'yi siler.
Michael Hampton

2
@shelvacu: Yıkıcı. Yıkıcı komutlar ne yaptığını açıklamadan yayınlandıysa, kötü amaçlıdır. Eğer onlara bir açıklama eşlik ettiyse, OP neden burada bunu soruyor?
Ben Voigt

2
Öyleyse, kimin aklında, amacını bilmeden bulunan kodları herhangi bir yere kopyalayacak / yapıştıracak? Kötü değil, çünkü metroda bulabileceğim garip herhangi bir cihazı sallamayacağım.
Magno C

4

Bu komutlar sda cihazınızın üzerine sıfırlar yazar - birincisi ilk 16MB'yi (blok boyutu 4096 ve 4096 blok sayısı) yapar ve ikincisi son 2MB'nin (4096 blokları ile 512 blok boyutu) sıfırlarla yazar. (teknik olarak silinmez ve bu benim ilk noktam ile ilgilidir.)

(bu, tamlık için burada da dahil olmak üzere diğer cevaplarda daha önce bahsedilen bölümdü)

Bahsetmeye değer başka bir şey, blok boyutunun etkilere sahip olmasıdır, ancak bunlar genellikle sadece yüksek hacimli işlemlerde görülür. Komutu yürütmenin en etkili (en hızlı) yolu, komutun blok boyutunun cihazın erişim boyutuyla eşleşmesi, aksi takdirde zamanın boşa gitmesidir.

İlgileniyorsanız, 1 milyon blok öbek içeren bir dosya ve 1 milyon blok öbek içeren bir dosya oluşturmayı deneyebilir ve farkı görebilirsiniz:

[user@host tmp]$ time dd if=/dev/zero of=/tmp/test1 bs=1 count=1000000
1000000+0 records in
1000000+0 records out
1000000 bytes (1.0 MB) copied, 2.44439 s, 409 kB/s

real    0m2.447s
user    0m0.177s
sys     0m2.269s
[user@host tmp]$ time dd if=/dev/zero of=/tmp/test2 bs=1000000 count=1
1+0 records in
1+0 records out
1000000 bytes (1.0 MB) copied, 0.00155357 s, 644 MB/s

real    0m0.003s
user    0m0.001s
sys     0m0.002s
[user@host tmp]$ ls -al test*
-rw-rw---- 1 user grp 1000000 Apr  8 15:51 test1
-rw-rw---- 1 user grp 1000000 Apr  8 15:51 test2

Gördüğünüz gibi, blok boyutu verimlilik üzerinde büyük bir etkiye sahiptir. Bu belki de OP'nin bir kenar çubuğu, ama yine de alakalı olduğunu hissediyorum.

TL; DR: İnternette bulduğunuz veya güvendiğiniz birinin size verdiği rastgele kodu çalıştırmayın. Gününü mahvedecek.


7
+1Don't execute arbitrary code you find on the net
Sergiy Kolodyazhnyy

7
"Bu işlemin çok sıkıcı ve / veya pahalı olduğunu ve son derece özel ekipman gerektirdiğini unutmayın." Bu yanlış bilgiyi yaymayı bırak. Bu teorik olarak mümkün olan son kez onlarca yıl önce, artık birçok neslin artık kullanılmayan teknolojide oldu. Hiç kimse, para ödülü ile ilgili kamu sorunlarına yanıt olarak bile, modern sürücülerde bu tür bir iyileşme göstermedi, örneğin hostjury.com/blog/view/195/…
Andrew Medico

Bu bölümü kaldırdım - sanırım bunu ilk duyduğumdan beri bir süre geçti. Ancak şunu söyleyeceğim, "teorik olarak" operatif kelimeydi, ama araştırıyorum.
Tim S.

2

Diğerleri ne yaptığını açıkladı, ben de bunu atlayacağım.

Nokta ddayrı olan bsve countargüman olduğunu bsyazılır ne kadar kontrol eder bir anda . İçin gerçekten büyük değerlerin bsbelirtilmesi programda gerçekten büyük bir arabellek gerektirecek ve aygıtın blok boyutundan daha küçük değerlerin belirtilmesi yavaş olacaktır, çünkü çekirdek cihaza yazmak için tüm bir blok oluşturmalıdır (bunun gibi durumlarda muhtemelen tam bir blok olana kadar yazmaları arabelleğe alır, diğer durumlarda zaten diskte ne olduğunu okumak zorunda kalabilir). İki komut için farklı değerler kullandığından bs, bunları iki farklı sitede bulmuş olabileceğinizi düşündürüyor. 512 baytlık bir blok boyutuna sahip olan sabit diskler,bs=512ancak (6-8 sanırım) yıllar önce 4096 bayt blok büyüklüğünde diskler yapmaya başladılar ve bs=4096modern diskler için daha iyi bir seçim yaptılar .


1
Tatlı nokta bsbundan çok daha yüksek . Tek bir SATA komutu birden çok sektörü okuyabilir veya yazabilir, böylece çekirdek bunları göndermeden önce G / Ç'leri birleştirir. Her Yerden bs=64kiçin bs=1024k(L3 önbellek boyutu genellikle 4-8MiB olduğunu) kabul edilebilir. bs=128kModern Intel CPU'larda L2 önbellek boyutunun yarısı olan sık sık kullanıyorum . ( ddiki memcpy işlemi içerir: read(2)kaynaktan (/ dev / zero olsa bile) ve write(2). IIRC'de sddsıfır CPU yazma seçeneği vardı, bu da biraz CPU zaman kazandıracaktı. Gerçekten sadece hedef bir şeyse ilgili disk dışında).
Peter Cordes

G / Ç isteğinin birleşmesinin gerçekleştiğini görmek için çıktısına iostat -x 4veya başka bir şeye bakın ve rrqm / s (saniyede birleştirilen okuma istekleri) ve wrqm / s sütunlarını not edin.
Peter Cordes

1

UYARI: dd if=/dev/zero of=/dev/ verileri adli olarak kopyalamadan önce bir sürücüyü veya aygıtı temizlemek için kullanılır. Çapraz kontaminasyonu azaltmak için adli soruşturma kapsamında bir sistemden bilgi kopyalanmadan önce sürücü veya cihaz sterilize edilmelidir. Bu nedenle, kötü bir komut değildir, son kullanıcı ne için kullanıldığını anlamalıdır veya verilerini yok edecektir. İstediğiniz buysa, sıfır yazma işlemini doğrulayın dd if=/dev/sda | hexdump -C | head.

Kaynak: Bilgisayarlı Adli Tıp İncelemeleri Uygulama Kılavuzu Dr. Darren Hayes


1

Kullandığım dd if=/dev/zero of=/dev/sdX oflag=syncaslında bir disk görüntüsü ile GParted, fdisk veya gg ile kullanmak ÖNCE Eklenen USB sürücü test kalitesi veya MicroSD karta. Bunun, özellikle kalitesiz bir geçmişi olan MicroSD ortamlarında, ihtiyatlı bir fikir olduğunu düşünüyorum.

Tabii ki, = sdX'e dikkat edin, çünkü kazara disk silme işleminde affetme yoktur. X = hedeflenen hedefin harfini doğrulayın.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.