Bölüm verilerini dd ile sağa taşı


2

Almak için biraz yardıma ihtiyacım var gg Bölümümü blok olarak sağa doğru hareket ettiren komut satırı.

Bazı parçaları görüntülemek için araçlar kullanırken bir hataya rastladım ve şimdi bu makineleri veri kaybetmeden yeniden bölümlendirmem gerekiyor. Bu, gparted 0.18.0 ile oldukça iyi çalışıyor. Orada ikinci bölümümü 79 MB'lık ofset ile sağa kaydırıyorum. Sonra ilk diskimi 79 MB büyütüyorum. Her şey kusursuz çalışıyor. Ancak yaklaşık 35 makine olduğundan, bunu yapan bir senaryo oluşturmak istedim.

Yeniden boyutlandırma ve her şey oldukça kolaydır. Kafama girmediğim bölümün sağa doğru hareket etmesi. Temelde bir ihtiyacım var gg Bunu yapan komut satırı. Benim düşüncem, arkadan başlamam ve önden çalışmam gerektiği. Ben de düşündüm ki:

  • ve eğer aynı bölüm ise (hatırlatma ofset verilerine uyacak şekilde yetiştirilmiştir) / dev / sda2
  • bs 16MiB olabilir, çünkü gparted benchmarked
  • verilerin üzerine yazılmaması için sağdan sola kopyalamayı sağlayan parametreler ne olacaktır

Gparted'ın bekçisiyle konuştum ve dd'nin bunu başarmak için kullanıldığını söyledi. Ama nasıl olduğunu çözemiyorum.

Yanıtlar:


2
  • Verilerin üzerine yazılmaması için kopyayı sağdan sola arşivleyen parametreler ne olurdu

Yok, yok tek komutta dd çözümü

Ayrıca seni kullanmaktan uyarıyorum gg bölmeyi taşımak için, çünkü eğer bir şeyler başarısız olursa, o işlemden önce yaptığınız yedekleme olmadan verileri geri yükleme şansınız olmaz. Ancak yedek varsa, işlem önemsizdir. Yani öyleydi feragat .

Şimdi eğlenceli bir yol (Sorunuzu ilginç buluyorum). Bölümleri bu şekilde hareket ettirmedim, fakat işe yarayabilir, test dosyasındaki kavramların ispatı işe yarayabilir:

perl -e 'foreach $i (0..1023) { printf "%0.7i\n", $i; }' >test.dat

sadece deneme dosyası yapmak, deneyler için

Ayrıca ihtiyacımız var pv komutu formdaki verilerimiz için tampon gibi davranabilen: pv -B buffer_size_in_bytes

dd if=test.dat | pv -B 1024 | dd of=test.dat seek=2

varsayılan gg blok boyutu 512 bayttır - verileri 2dd bloklarla değiştiririz, bu nedenle 1024 bayttaki tampon yeterlidir.

dd if=/div/sda bs=512*device block size* skip=111111*much blocks until sda2 begins*
| pv -B 90000000 *have_to_fit_shift size+*
| dd of=/div/sda seek=(blocks until sda2 begins + amount of blocks we shift that for)

Bundan sonra, her şey yolunda giderse, bölüm tablosunu düzeltmek gerekiyor.

ama muhtemelen daha yaygın bir yol - veriyi dd chunk ile chunk

dd if=/div/sda bs=1M count=100 skip=PosToRead seek=PosToWrite
PosToRead -= dd_count
PosToWrite -= dd_count
repeat if not done

Ayrıca Orada ters yönde hareket etmek, dd komutunu kullanmak ve ofsetleri belirlemek konusunda ilginç


İçin +1 pv - Bunu bilmek çok kullanışlı!
starfry

0

dd_rescue seçeneği var -r yönü tersine çevirmek için.

Kullanım örneği:

partition=/dev/vdc1
disk=/dev/vdc
sector_size=512
new_start_sector=4096
# opos is right after the new partition and given in bytes
opos=$(($new_start_sector * $sector_size + `blockdev --getsize64 $partition`))
dd_rescue -v -r -S $opos $partition $disk

Daha sonra bölüm tablosunu güncellemeyi unutmayın. Daha önce güncellemeyin!

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.