Dd bitişik bölümlerin üzerine yazabilir


15

Would

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

ayrıca sonra bölümleri silmek somepartitionveya sonunda durdurmak somepartition?


5
Bölmeleri temsil eden blok aygıtlar /dev/sda1, çekirdek tarafından, bunlara bitişik depolamaya erişmenin imkansız olduğu bir şekilde oluşturulur (bölüm tablosunun son kez okuduktan sonra bölüm tablosunun değiştirilmediği varsayılarak). Bitişik depolama alanına bu şekilde erişebiliyorsanız, büyük bir hata olarak kabul edilir.
David Foerster

Yanıtlar:


18

İle bir bölümün üzerine yaz dd

ddçok güçlü ama aynı zamanda tehlikeli bir araçtır. Söylediklerinizi soru olmadan yapar. Bu yüzden aile resimlerini silmenizi söylerseniz ... ve bu küçük bir yazma hatasıdır.

Ancak kontrol edip iki kez kontrol ederseniz kullanabilirsiniz.

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

ya da öneririm

dd if=/dev/zero of=/dev/sdxn bs=4096

xsürücü harfi ve nbölüm numarası ve blok boyutu 4096 bayt nerede yazma işlemini daha hızlı hale getirir.

Bu durumda bir bölüme yazmanız önemlidir . Tüm sürücüye (sürücü kafası ucu) yazarsanız, tüm sürücünün /dev/sdxüzerine yazılır. Ancak bölümün sonuna yazma işlemi bölümün sonunda kesilecek ve arkasındaki bölümler korunacaktır. ( Şimdi Lubuntu 16.04 LTS'de bir USB pendrive üzerinde test ettim , bu yüzden böyle çalıştığını biliyorum.)

Genişletilmiş bölüm için istisna

Genişletilmiş bir bölüm (bir MSDOS bölüm tablosunda dörtten fazla bölüme sahip olmak için mantıksal bölümler için bir kapsayıcıdır) için bir istisna vardır. Bu, aşağıdaki bağlantıda açıklanmaktadır,

Dd kullanarak 'genişletilmiş' bölümün görüntüsünü yapabilir miyim?

Ama başka bir sorun daha var. Komutunuzu bir test ortamında test ettim ve genişletilmiş bir bölümün görüntüsünü oluşturmasını istediğimde dd yalnızca bir kibibyte (1024 bayt) okudu.

Bunu şimdi Lubuntu 16.04 LTS'deki bir USB pendrive'da da test ettim ve bu yazma için olduğu kadar okuma için de geçerlidir. Sadece ilk kibibitin üzerine yazılır.

Özetlemek gerekirse, birincil bölümlerin ve mantıksal bölümlerin üzerine yazmak bu yanıttaki ana açıklamaya göre çalışır. Ancak bu yöntemi, genişletilmiş bir bölümün üzerine yazmak için kullanmayın, çünkü yalnızca ilk kibibitin üzerine yazılacaktır. Genişletilmiş bölümün mantıksal bölümleri artık bölüm tablosu aracılığıyla bulunmayacaktır, ancak bu bölümlerde depolanan veriler hala oradadır.


Zaten kabul ettim, ama eğer öyleyse bu doğru cevap olmalı.
LogicBreaker

3
@ LogicBreaker, Belki kabulü taşıyabilirsiniz. Ama bu önemli değil. Nasıl kullanacağınızı ddve riskli olduğunu anlamanız daha önemlidir , böylece kullanırken çok dikkatli olursunuz. İyi şanslar :-) Genel olarak, kaybetmeyi göze alamayacağınız tüm dosyaların yedeğini almalısınız .
sudodus

1
Çıplak bölümlere yazarken çok alternatifiniz yok. Taşındım, aksi takdirde diğerleri için yanıltıcı olurdu.
LogicBreaker

1
Bu nedenle kullanıcılar normalde / dev / * "dosyalarına" erişemezler.
Thorbjørn Ravn Andersen

1
Bu ise sadece o zaman hırsızlık, yangın, kaza, veya basit donanım hatası istediği zaman onları kaybetme döndük tabi :-), hiçbir yedekleme ile ailenizin fotoğraf kopyalamak
user334639

4

Bir bölümleme aygıtına yazma işlemi bu bölümün dışında dd veya başka bir şeyle yazmaz. Tek bir bölümün dışında herhangi bir etkiye sahip olmak için bir wholedisk cihazı kullanmanız gerekir.

(Uyarı: Diskinizde üst üste binen bölümleri olan ve asla olmaması gereken bir bölüm tablosu yoksa).


3
Başka bir uyarı: LVM gibi bir şey kullanıyorsanız, fiziksel bir cilde yazmak elbette birçok mantıksal hacmi etkileyebilir.
Maxpm

4

Sorunuzun, dd(ve genel olarak Unix benzeri işletim sistemlerinin) nasıl çalıştığı hakkında temel bir yanlış anlamaya dayandığını düşünüyorum :

dddeğil üzerine yazma bitişik bölümleri, çünkü can ddteneke değil yazma bölümleri, dönem .

ddsadece dosyalara yazar . Bu kadar.

Şimdi, eğer sen geçmesi ddtemsil eden bir dosyayı birden bölümleri, daha sonra ddüzerine yazacaktır bu dosyayı . Ancak bu durumda, ddbölümün sonunu yazmıyor. dddosyanın sonuna kadar ve sadece dosyanın sonuna kadar yazacaktır .

Ancak, ddyalnızca bir bölümü temsil eden bir dosyayı iletirseniz, ddbu bölümün sonunu yazmaz. Yine bunun bir ilgisi yok dd. ddyazmasını istediğiniz dosyaya yazmanız yeterlidir. Bu dosyanın tek bir bölümü temsil etmesi (bu örnekte) çekirdekteki blok aygıt sürücüsü tarafından sağlanır. ddbununla hiçbir ilgisi yok.

Kısacası: dddosyalara yazar. Bu dosyaların temsili, ddendişe verici değildir. ddbölümler hakkında hiçbir şey bilmiyor.


Aaa ... dd sadece dosyalara yazarken ham bölümlere yazmak için kullanamazsınız.
LogicBreaker

1
Doğru. ddHam bölümlere yazmak için kullanamazsınız . Yalnızca dosyalara yazabilirsiniz. Sen can bir blok aygıtı dosyası kurs yazma temsil bir bölümünü (örneğin /dev/sda1), ancak bir çiğ bölüm yazamıyor. Ve yalnızca bir bölümü temsil eden bir dosyaya yazabildiğiniz için , bölümün sonundan sonra yazamazsınız, çünkü dosya sadece bölümü temsil eder, bölümü değil, biraz da sondan sonra.
Jörg W Mittag

3
Jorg, Unix felsefesinin ana fikirlerinden birine atıfta bulunur - "her şey bir dosyadır". Çekirdek, dosyalama, aygıt, bağlantı noktası vb. Dosyaları dosya olarak sunar. Sonuç olarak, bir dosyaya yazabilen her program bir bölüme veya aygıta yazmak için kullanılabilir. Bölüm sınırını zorlamak çekirdeğin görevidir. /dev/sdaMetin düzenleyicinizde açıp verileri değiştirebilirsiniz, ddbölümlere erişebilme açısından diğer programlardan farklı değildir. Çok iyi cevap!
Sergey

1

Bunun, buggy olmayan blok aygıt sürücülerinde bile olabileceği tehlikeli, ancak nadir bir özel senaryo vardır:

  • Diskteki bölüm tablosu, bölüm x'in öncekinden daha düşük bir sınırda sona erecek şekilde yeniden boyutlandırıldığı şekilde değiştirilir. Arkasındaki y bölümü, alt sınırda en üstteki başlangıçta yeniden boyutlandırılır veya boşluğa yeni bir y bölümü eklenir.
  • Bölüm y, bölüm tablosundan bağımsız olan ilgili verilerle doldurulur, örn. Tüm disk blok aygıtında atlama / sayma seçenekleriyle dd kullanılması (örn. / Dev / sda)
  • Çekirdeğe, bölüm tablosunu yeniden okumasını söyleyen ioctl düzenlenmez veya meşgul aygıtlar nedeniyle başarısız olur
  • Bölüm x, bir hata durumuna ulaşana kadar kendisine yazmaya çalışan herhangi bir işlem tarafından yazılır.

0

Eğer bir hata yaparsanız, sizin için pazarlık yaptığınızdan daha fazla üzerine yazabileceğiniz gibi dd konusunda dikkatli olmalısınız ve dd için ne kullandığınıza bağlıdır (OP dd kullanımında ve dd'nin tam sözdiziminde belirsizdi komutu).

Bir bölüm belirtirseniz , bölüm dolana kadar bu bölüme yazılır.

Bir hata yapar ve sürücünün tamamını koyarsanız, örneğin = / dev / sda, dd, bölüm tablonuzu görmezden gelmeyi (ve üzerine yazmayı) tamamlamak için tüm sürücünün başlangıcına yazar.

Ayrıca, silinmiş dosyaların üzerine yazmak için bir bölüm üzerinde de kullanabilirsiniz (silinen dosyalar bölüm üzerinde kalabilir ve üzerine yazılana kadar çeşitli başarı araçlarıyla çeşitli kurtarma araçları tarafından keşfedilebilir.Bu durumda, boş alanı doldurmak için dd'yi kullanabilirsiniz. bir dosyaya yazma.

dd if=/dev/zero of=/path/to/mount_point/zero_file bs=4096
rm -f /path/to/mount_point/zero_file

Ne yaptığınıza bağlı olarak, dosyaları güvenli bir şekilde silmek için alternatif bir araç kullanmak isteyebilirsiniz. Bkz. Dosya (lar) güvenli bir şekilde nasıl silinir? seçenekler için.


6
/ Dev / sdcX'e yazabilir ve bir bölüm sınırı boyunca yazmayı başarabilirseniz, bölüm tablosunu yok saymak dd olmaz - çekirdekteki hata ayıklama ve bölüm tablosunu yoksaymak için blok aygıt sürücüsü olur.
rackandboneman

1
@sudodus ddo kadar düşük değil. Aslında insanların kullandığı şeylerin çoğu ddaynı şekilde yapılabilirdi cat. Aslında cat, ddvarsayılan olarak olduğundan daha büyük bloklar kullandığından biraz daha hızlıdır . Tüm düşük seviye kodu çekirdeğin içindedir. Ve sürücü ddya da kullanıyorsanız gerçekten umursamıyor cat.
kasperd

1
@sudodus - karışıklık için özür dilerim, istediğim kadar net değildim. dd kesinlikle yazmaya devam edebilir, ne yaptığını söylediğinize bağlıdır. dd if=/dev/zero of=/dev/sda bs=512 count=1veya dd if=/dev/zero of=/dev/sda bs=512örnektir. İkinci komut ile yazmaya devam edecek ve tüm diski bölüm tablosunu "yok sayıyor". Bir bölüm belirtirseniz, bölümün dd if=/dev/zero of=/dev/sda1ötesine geçmez. Dd ile ne yapmak istediğinize göre değişir.
Panther

1
@Panther Soru özellikle söylüyor of=somepartition, bu nedenle tüm disk aygıtına yazdığınız durum geçerli değil. ddaygıt sürücüsünün kısıtlamalarını aşamaz.
Barmar

1
@Bamar okuma Ben zaten bunun üzerine yorum yaptı. Birçok kullanıcının / dev / sda için $ somepartition'ı karıştırdığını gördüm
Panther
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.