Dd, netcat ve ssh tunnel ile disk klonlaması nasıl yapılır?


26

ddLinux'ta ssh şifreli kanalı aracılığıyla A - B ana bilgisayarından netcat'la toplu olarak kopyalamak istiyorum (disk kullanan reimage disk ).

İki uca da hangi komutları yazmalıyım?

Yanıtlar:


28

Kaynaktan hedefe sshd'nin çalıştığı hedefe kopyalama:

  • dd if=/dev/sda | gzip | ssh root@target 'gzip -d | dd of=/dev/sda'

Hedef sshd çalışmadığında, kaynaktan s hedefe sshd_host ile kopyalamak.

  • Hedef: nc -l -p 62222 | dd of=/dev/sda bs=$((16 * 1024 * 1024))
  • Kaynak: ssh -L 62222:target:62222 sshd_host &
  • Kaynak: dd if=/dev/sda | nc -w 3 localhost 62222

    dd - if = kaynaksa, = = hedef, bs = blok büyüklüğüdür. Farklı blok boyutları performansı artırabilir. 16 genellikle oldukça makul bir başlangıç ​​noktasıdır. Ayrıca kaç blok kopyalanacağını göstermek için count = kullanabilirsiniz .

    nc - -p , servisler için kullanılacak portu gösterir. -Bir servisi başlatmak için kullanılır. -w , istifa etmeden önce veri hattında beklemek için gereken süreyi ayarlar.

    ssh - -L uzaktaki ana makinede tüneli kurar. Argümanın formatı local_port:target_host:target_port,. Yerel programınız (nc) local_port'a bağlanır, bu bağlantı tünellenir ve target_host'ta target_port'a bağlanır.

Tanımlanan seçenekler sadece bunun için kullanılan seçeneklerdir. Daha fazla bilgi için man sayfalarına bakın.

Birkaç not:

  1. Bunu LAN'dan başka bir şey yapmıyorsanız, veri akışını gzip veya sıkıştırma ile sıkıştırmanızı öneririm. Bzip2 de işe yarayabilir, ancak biraz daha fazla CPU zaman alır. İlki bu kullanımın bir örneğini var.
  2. Kaynak bölüm monte edilmemişse veya salt okunur monte edilmişse daha iyidir. Değilse, hedef görüntüyü fsck etmeniz gerekecektir.
  3. Makinelerden birinde netcat bulunmuyor ancak ssh bulunmuyorsa, burada netcat'a gerçekten ihtiyaç duyulmaz. Bu dava şöyle olurdu:

source machine dd -> nc -> ssh -> ssh tunnel -> sshd server -> nc on target -> dd

  1. dd, kaynak ve hedefler aynı boyuttaysa en iyi şekilde çalışır. Aksi takdirde hedef 2'den büyük olmalıdır.
  2. Ext2 / 3 veya xfs kullanıyorsanız, döküm (veya xfsdump) ve geri yükleme daha iyi bir seçenek olabilir. Önyükleme sektörüyle ilgilenmez, ancak hedef ve kaynak farklı boyutlarda olduğunda çalışır.

4

Eğer ssh olmadan netcat kullanın. Sanırım en güvenli olanı değil, en hızlı olanıdır, tüm diski bu şekilde kopyalayıp geri yükleyebilirsiniz:
A bilgisayarında IP 192.168.0.1

cat /dev/hdb | nc -p 9000
B bilgisayarında
nc -l 192.168.0.1 9000 > /dev/hdb

Unutmayın ki nc'ye göre -l seçeneği şöyle:

  -L nc'nin uzak bir ana bilgisayarla bağlantı başlatmak yerine gelen bir bağlantıyı dinlemesi gerektiğini belirtmek için kullanılır. Bu seçeneği -p, -s veya -z seçenekleriyle birlikte kullanmak bir hatadır .

3

netcat gerekli değildir.

src makinede çalıştırma:

dd if=/dev/sdX bs=1M | ssh root@dstMachine " dd of=/dev/sdY bs=1M"

sdX ve sdY'deki bölümlerin hiçbirinin monte edilmediğini varsayıyorum. Her iki kutuyu da knoppix veya benzeri bir canlı yayınla başlatabilirsiniz .

dd - eğer [verilmezse - stdin'den alır] 'dan veri alır , [verilmezse - veri stdout'a gönderilir]' e veri gönderir . bs - blok büyüklüğü ... işleri hızlandıracak.

ssh - uzak kutudaki tırnak işaretleri içinde verilen komutu yürütür, ssh dizisine pompalanan tüm veriler uzak makineye tünellenir ve orada yürütülen komut için stdin olarak porovid edilir.


bu yüzden monte edilmiş diskte imkansız olacak?
Evgeny

@Evgeny disk salt okunur şekilde monte edilmişse tamam olur. Aksi takdirde - yapma ... kopyanız tutarsız olacaktır.
pQd

3

Ana bilgisayar A, resimdeki, ana bilgisayar B ise resmin depolanacağı resimdir:

root@A# dd if=/dev/sda | ssh root@B "dd of=/some/file"

Diske geri yükleme sadece bu ikisini değiştirir.


1

Netcat ile temel kopya burada açıklanmıştır .

Bu konuda SSH ile ilgilenmeniz gerekiyorsa , bunun için bağlantı noktası iletmeyi kullanabilirsiniz ,

-R [bind_address:]port:host:hostport

Ancak, genel olarak, SSH transferini ilk başta (netcat olmadan) yapabilirsiniz.


1

Dosya sistemlerinin ikisi de bağlantısı kaldırıldığı sürece, dd iyi çalışıyor.

(from server1) dd if=/dev/sda bs=32k | ssh <server2> dd of=/dev/sda bs=32k

Önceden hostkey kimlik doğrulama kurulumuna ihtiyacınız olacak, aksi takdirde şifre istemi kopyalamanın başarısız olmasına neden olacaktır.

Bunu, monte edilmiş bir ses seviyesinde yapmak, kötü sonuçlar üretecektir.


Teşekkürler. tırnak gerekli mi?
Evgeny

1

Veya, clonezilla'yı kullanabilir ve uzaktaki depolama alanınızı sshfs aracılığıyla "bağlayabilirsiniz".


Bir bölümü kopyalıyorsanız, hedef bölümün çıkarılmasını istemiyor musunuz? Bu seçenek hakkında daha fazla detay yardımcı olacaktır.
Mark Stosberg

1

Yukarıda verilen seçeneklerin bir kombinasyonunu denedim ve sonuçları sizinle paylaşıyorum. dd blok boyutu, gzip ve gzip sıkıştırma algoritması kombinasyonlarını kullanarak en yavaş ila en yavaş.

Gördüğünüz gibi gzip sadece hızlı algoritmayı İM blok büyüklüğü ile birlikte kullanırken beni iyileştirdi.

time dd bs=1M if=/dev/HypGroup00/stage-snapshot  | gzip --fast | ssh hyp5 'gzip -d | dd bs=1M of=/dev/HypGroup00/stage'
12884901888 bytes (13 GB) copied, 326.045 s, 39.5 MB/s

time dd if=/dev/HypGroup00/stage-snapshot  | gzip --fast | ssh hyp5 'gzip -d | dd of=/dev/HypGroup00/stage'
12884901888 bytes (13 GB) copied, 370.158 s, 34.8 MB/s

time dd if=/dev/HypGroup00/stage-snapshot  | ssh hyp5 dd of=/dev/HypGroup00/stage
12884901888 bytes (13 GB) copied, 370.274 s, 34.8 MB/s

time dd bs=1M if=/dev/HypGroup00/stage-snapshot  | ssh hyp5 dd bs=1M of=/dev/HypGroup00/stage
12884901888 bytes (13 GB) copied, 372.906 s, 34.6 MB/s

time dd bs=1M if=/dev/HypGroup00/stage-snapshot  | gzip | ssh hyp5 'gzip -d | dd bs=1M of=/dev/HypGroup00/stage'
12884901888 bytes (13 GB) copied, 520.116 s, 24.8 MB/s

LVM aracılığıyla yerel diskler kullanılarak bir Gigig Switch ile GigE'ye bağlı iki hızlı sunucu kullanıldı.


0

Burada bir somun kırmak için balyoz kullanıyormuşsunuz gibi görünüyor - ya da belki de daha iyi bir benzetme bahçenizi makasla kesmeye çalışıyor :)

Evde yapmak için çok iyi nedenleriniz olmadıkça, bunun gibi bir iş için araçların bazılarına göz atmanızı şiddetle tavsiye ederim.

Trinity Rescue Kit , çok noktaya yayın üzerinden görüntüleme sürücülerini destekleyen ücretsiz bir canlı CD'dir ve tam kapsamlı görüntüleme sistemlerine gitmeden, istediğiniz şeyi (ya da aynı satırlarda düşünen başka birisini) yapabilir.

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.