[LinuxFocus-icon]
<--  | Ana Sayfa  | Erişimdüzeni  | İçindekiler  | Arama

Duyumlar | Belgelikler | Bağlantılar | LF Nedir
Bu makalenin farklı dillerde bulunduğu adresler: English  Castellano  ChineseGB  Francais  Indonesian  Turkce  

this is me
Gerrit Renker
<gerrit.renker(at)gmx.de>

Yazar hakkında:
Obtained a computer science degree in 2001.

Türkçe'ye çeviri:
Cem Aytar <cemaytar(at)gmail.com>

İçerik:

 

LF Tip:Bir ağ üzerindeki bilgisayarları klonlamak

[Illustration]

Özet:

Çoğu zaman problem olan konulardan bir tanesi de bir bilgisayarı başka bir bilgisayara kopyalamaktır. Güvenilir, kolay ve kullanışlı bir yöntem de bu makalede anlatıldığı gibi ağ tabanlı klonlamadır.

_________________ _________________ _________________

 

Senaryo

Hayvanların (''koyun Dolly'') klonlanması ve hatta insanların klonlanması çok tartışılan ve kuşkuyla bakılan bir konu olmasının yanında hiç şüphe yok ki bazı verilerin bilgisayarlar arasında klonlanmasının (doğru yapılırsa) fazla bir zararı yok, bunun yanında dikkatlice yazılmış yapılandırım betiklerinin ve ayarlamaların evrimi konusunda faydalı bir şeydir. Hemen hemen herkes Moore Kanunu'ndan ve bilgisayar üretımındeki hızlı ilerlemeden dolayı, kullandığı dağıtımla hayatında en az bir kere de olsa mutlaka klonlama senaryosuyla karşı karşıya kalmıştır - yeni bir bilgisayar veya dizüstü aldığınızda veya daha hızlı bir işlemci ile sisteminizi yenilediğinizde. Amacımız A bilgisayarındaki bütün dosya sistemini B bilgisayarına kopyalamak. Bunun yapmanın iki yolu var; bir tanesi kasayı açıp, fiziksel olarak sabit disk sürücüsünü başka bir bilgisayara bağlayarak kopyalama işlemini yapmak, ki bu makalede bundan bahsetmeyeceğiz. Genelde bu pek mümkün olmaz - kasayı açmak genelde garanti süresini bitirir - ve aynı zamanda tehlikelidir, tecrübesiz birisi donanıma fiziksel veya elektrik gücüyle bir zarar verebilir. Hatta daha fazlası olabilir, bir keresinde düşük seviyeli hatalı bir program yüzünden diskimdeki verileri kaybetmiştim. İkinci seçenek ise eğer iki bilgisayarda da ağ kartı varsa (artık ev bilgisayarlarında bile genelde bulunuyor) daha güvenli ve burada anlatılmış durumda.

Aşağıda anlatılan yömtemlere mahsus öncelikli konu ''kaynak'' bilgisayar (klonlanacak olan) ile ''hedef'' bilgisayar (kopya) arasında bir ağ kurmak olacaktır. Her iki bilgisayar da bir hub'a bağlıysa işimiz kolay, değilse ağ kartlarını köprülü (crossover) kabloyla birbirine bağlamalısınız (normal düz kablolar kullanılamaz). Hedef bilgisayar için bir çalışan linux (Knoppix, LNX-BBC gibi) veya network kartını çalıştırabilecek küçük bir sistem ve ssh ve/veya netcat kullanılabilir olması gerekir. Hatta bunları yapabileceğiniz disketler bile var (Bilgisayarımdada tomsrtb olmasına rağmen, network kartımı geç tanıyor). Yeni bir sistem kurmak isterseniz, bu da belki kolay bir alternatif olabilir. Her iki bilgisayar da resimde olduğu gibi IP adresleri birbirleriyle ''konuşabilecek'' tarzda ve aynı ağ üzerinde olacak şekilde ayarlanmalı.

 

Olası Yöntemler

Bu temel yapılandırmalardan sonra klonlama yapmak için bir kaç yol var:

İlki karışık bir şey ve sabit diskleriniz tam olarak aynı şekil ve geometride değilse bunu uygulamanız mümkün değil. Bunun yanında iso görüntülerini veya disketleri - burada bir örnek bulabilirsiniz (diskcopy kabuk betiği) - kopyalamada ideal olacaktır. dd yönteminin bir diğer dezavantajı ise boş yerlerin de kopyalanması ki bu da ekstradan zaman alacaktır. tar ve cpio boruları ise çok uzun zaman alacaktır ve bir çok problemi de beraberinde getirecektir. Örneğin; dosya isimlerinde ve kısa yollarda bazı kısıtlamalar olacak, /dev gibi dizininlerdeki dosyalarda sorun çıkacaktır. Klonlamak için genellikle bu yolu tavsiye etmem. Eğer kaynak ve hedef bilgisayarlarda farklı dosya sistemleri mevcut ise muhtemelen en iyi çözüm rsync(1) olacaktır. Sadece ssh protokolünün etkin bir şekilde çalışması ve dosya transferi yapabilmesi gerekli. Hatta aygıt dosyaları için -D seçeneği ve bir çok pratik senaryolar için de farklı seçenekler mevcut. Günlük yedeklemeler, yansı oluşturma gibi şeyler için çok kullanışlı bir araç, örnekli man-sayfaları da çalışılabilecek bir çok şey içeriyor. rsync ile bir klonlama örneğini [1] adresinde bulabilirsiniz. Biz burada bütün dosya sistemini tekrar yaratmak manasına gelen dump ve restore metodunu kullandık. Hızlı, etkili ve istenen sonuca en az güç harcanarak ulaştırır, kısaca tam yedek alma işlemi için ideal. Aslında hedef bilgisayar çağrılıp tekrar yerleştirilene kadar bütün klonlama prosedürünü iki defa uygulamak zorunda kaldım. Her iki durumda da her hangi bir sorunla karşılaşmadım, GB'larca verinin kopyalanarak işlevsel ve önyüklenebilir bir klon kabaca bir saatte meydana geldi. Bu yöntemi kullanabilmek için hem hedef hem de kaynak bilgisayarda aynı dosya sistemi olmak zorunda. ext2 ve ext3 en yaygın kullanılanlar (notlara bakınız aşağıda) olduğundan bu ikisinden birini kullanıyorsunuz diye farzediyoruz.  

ssh'ı kurmak

Minimum bir sistem kurduktan veya doğrudan çalışan cd ile bilgisayarınızı açtıktan sonra ilk adım ssh'ı kurmak olacak (eğer transfer için netcat kullanmayacaksanız ki o da detaylı bir şekilde biraz aşağıda anlatılıyor). Kaynak bilgisayarda sshd'nin (secure shell deamon) çalışıyor olması lazım. Emin değilseniz /etc/init.d/'den kontrol edebilirsiniz. Kaynak bilgisayarda (root olarak)
ssh-keygen -t rsa
yazın. İşleri kolaylaştırmak için bir şifre girmeyin. Ortak anahtara /root/.ssh/id_rsa.pub dosyasından ulaşabilirsiniz. Bu dosyayı kaynak bilgisayara
scp /root/.ssh/id_rsa   KaynakBilgisayar:/tmp
komut satırı ile yükleyebilirsiniz. KaynakBilgisayar yazan yere IP nosunu yazın. Emin olup olmadığınızı sorunca ''yes'' yazın (''y'' bazen çalışmayabilir). Hala kaynak bilgisayarda root parolası için bekleniyor olacak. Şimdi de hedef bilgisayarın güvenilir bir ağ elemanı olduğunu göstermek için
cat /tmp/id_rsa.pub >> /root/.ssh/authorized_keys
komutunu kaynak bilgisayarda yazın. Her şeyden emin olmak için yukarıdaki komut satırını hedef bilgisayarında da uygulayın. Artık bir parola istenmeyecektir.  

Hedef bilgisayarda bir dosya sistemi oluşturmak

İlk adım her zaman hedef bilgisayarın sabit sürücüsünü bölümlemek ve daha sonra ext2/ext3 dosya sistemini oluşturmaktır. Bir sonraki adım ise journalling seçeneğinin mke2fs komutuna -j seçeneğinin de eklenerek etkin hale getirilmesi olacak (çekirdekte ext3 desteğinin olması gerekli). Hatta isterseniz tune2fs(8) komutu ile ext2 sisteminizi ext3'e çevirebilirsiniz. Kaynak bilgisayarda şu konfigurasyon var diyelim:

Dosya Sistemi Büyüklük Kullanılan Kullanım % Bağlandığı yer
/dev/hda3 2.7G 552M 22% /
/dev/hda5 7.8G
1.6G 22% /usr
/dev/hda7 6.3G 1.7G 28% /usr/share
/dev/hda8 3.4G 601M 19% /home
/dev/hda12 5.3G 1.9G 37% /opt
/dev/hda1 587M 70M 13%
/var/backup

Genellikle bir kaç çeşit bölümlemeyi tavsiye ederim. Aksi takdirde dosya sistemindeki her hangi bir hata veya sabit sürücünüzdeki bir kaç sektörün bozulmasından dolayı bütün bilgilerinizi kaybedebilirsiniz. Ve Murphy Kanuna göre tek parçadan oluşan bir sürücü yerine farklı bölümlemeler yaparak tedbir almazsanız böyle kötü bir hadiseyle karşılaşacağınızdan emin olabilirsiniz. Yakınlarda böyle bir durumla karşılaştım, güzel bir çekirdek vardı ve ben sürücüyü bölümlere ayırmamıştım; ve bütün bilgilerimi root dosya sistemiyle birlikte kaybettim. Bu da bana /usr'nin çok hızlı büyüdüğünü gösterdi, dolayısıyla /usr/share dizini eklendi. Daha büyük bir sabit disk almanın vakti geldi.

Hedef bilgisayarda parted (tavsiye edilebilir) veya favori bölümleme programınızı çalıştırın (Qtparted iyi bir grafik arabirimine sahip ve Partition Magic'e benzer bir program). En az kaynak bilgisayardaki bölümler büyüklüğünde parçalar oluşturun. Takas alanını da unutmayın. Bölümleme tablosunu oluşturduktan sonra, her yeni bölüme
mke2fs -j -L <label> /dev/xxx
komutuyla dosya sistemini yükleyin. xxx yerine bölümün ismini, <label> yerine etiket ismini yazın.Ben genellikle etiket yerine ''/usr'' gibi şeyler kullanırım (açılış esnasında bunları göreceksiniz). tune2fs(8) ile düzenli sistem denetim aralığını ayarlamak gibi bir çok ayarı yapabilirsiniz.

Dosya sistemini aktarmak

Öncelikle oluşturduğunuz yeni bölümleri sisteme bağlamalısınız. Kök dosya sistemi (''/'') ile başlayalım, kalanlarını da ilerledikçe sisteme bağlayacağız. Kaynak bilgisayardaki iki bölümü hedef bilgisayara bir bölüm olarak aktarmak mümkün, aslında aşağıda yaptığımız örnekte /usr/ ve /usr/share bölümlerini böyle birleştirdik. Yani gelecek kök dosya sisteminizi şöyle bağlayabilirsiniz:
mount /dev/xxx   /mnt
Klonlama yaparken hedef bilgisayarda bulunduğumuz dizini
cd /mnt
olarak değiştirmemiz gerekli. Şimdi de hedef bilgisayarda ağ biti için şunları yapın:
ssh kaynakBilgisayar 'dump -0 -f - /' | restore -r -f -
''-0'' tam yedekle, ''-f -'' dosya tanımlayicilar için stdin/stdout kullan, ''-r'' ağ üzerinde bağlı hedef bilgisayarın dosya sisteminin tekrar oluşturması için gerkli olan yüklemeyi yap manalarına gelmektedir. Daha fazla seçenek için dump(8) ve restore(8) kelimelerine bakabilirsiniz. Aşağıda kök dizini transfer edilirken oluşan çıktıyı göreceksiniz.
$ ssh 10.42.3.42 'dump -0 -f - /' | restore -r -f -
DUMP: Date of this level 0 dump: Tue Feb 22 15:50:12 2005
DUMP: Dumping /dev/hda3 (/) to standard output
DUMP: Label: debian
DUMP: Writing 10 Kilobyte records
DUMP: mapping (Pass I) [regular files]
DUMP: mapping (Pass II) [directories]
DUMP: estimated 547312 blocks.
DUMP: Volume 1 started with block 1 at: Tue Feb 22 15:50:14 2005
DUMP: dumping (Pass III) [directories]
DUMP: dumping (Pass IV) [regular files]
DUMP: Volume 1 completed at: Tue Feb 22 15:51:43 2005
DUMP: Volume 1 546590 blocks (533.78MB)
DUMP: Volume 1 took 0:01:29
DUMP: Volume 1 transfer rate: 6141 kB/s
DUMP: 546590 blocks (533.78MB)
DUMP: finished in 89 seconds, throughput 6141 kBytes/sec
DUMP: Date of this level 0 dump: Tue Feb 22 15:50:12 2005
DUMP: Date this dump completed: Tue Feb 22 15:51:43 2005
DUMP: Average transfer rate: 6141 kB/s
DUMP: DUMP IS DONE
Geri yükleme her zaman restoresymtable adında bir dosya oluşturur. Dosya sistemi yüklenirken bir hata oluşmadığından eminseniz bir defaya mahsus olarak bu dosyayı silebilirsiniz. Kök dosya sistemi bittikten sonra, diğer bağlı alt-sistemleri de /usr ile başlayarak aynı şekilde halledebiliriz (çalışma dizininin yeni sistemin kökünde olduğunu kabul ediyoruz).
mount /dev/xxx  ./usr

cd ./usr

ssh hedefBilgisayar 'dump -0 -f - /usr' | restore -r -f -
Bu şekilde mount-cd-dump/restore döngüsünü bütün bölümler için gerçekleştirin. /usr/share (kaynak bilgisayarda kendine has bir bölümü olan) bölümüne gelince, yukarıdaki adımlardan sonra bulunduğunuz dizini ./usr/share olarak değiştirin ("." karakterine dikkat edin) ve şunları tekrarlayın
ssh hedefBilgisayar 'dump -0 -f - /usr/share' | restore -r -f -
Sadece varolan dosyaları tekrar yükleme sorulursa yükleyin, dolayısıyla kaynak bilgisayardaki iki farklı bölümün hedef bilgisayardaki bir bölüme konmasında her hangi bir problem olmayacaktır. Bütün sistemi klonlamak ssh ve 100MB ağ kartları ile yaklaşık bir saat sürecektir (köprülü kablo da bir bonus).

Not: Bir dosya sisteminin dökümünü almak için sisteme bağlı olmasına gerek yoktur. Aynı zamanda bağlanmış bir bölüm için dizin ismini kullanmaktansa /dev/hda6 gibi bölüm etiketi de kullanabilirsiniz.

Alternatif:  netcat

ssh'a alternatif olarak kısaltması nc olan netcat(1) 'i de kullanabilirsiniz. Netcat ağ üzerinde borular oluşturmanıza izin veren TCP/IP istemci sunucu işerinde kolay bir kullanıma sahip isviçre çakısı gibi bir şey. Yukarıdaki örnekler sadece aşağıdaki gibi değiştirildiğinde sorun kalmayacaktır. /var/backup bölümünün kaynak bilgisayardan hedef bilgisayara dump/restore ile taşındığını varsayıyoruz.

Alıcı tarafında (hedef Bilgisayar) ise bir dinleyici oluşturmak için netcat -l komutunun çıkışını restore komutuna bağlayın.
nc -l -p 2000 -q 1 | restore -r -f -
Kaynak Bilgisayar'da girdisi Hedef Bilgisayarın IP'si olan bir netcat durumu oluşturun.
dump -0 -f - /var/backup | nc <HedefBilgisayar-ip>   2000
-q seçeneği nc'nin dosya-sonu (EOF) karakteri alınca durmasını sağlayacak, fakat benim yöntemimde elle durdurmak zorunda kalacağım. Zaten ssh kullanmanızı tavsiye ederim.

Derleme

Tebrikler, buraya kadar bir sorun çıkmadıysa klonlanmış bir sisteme sahip oldunuz. Şimdi de bu klonu çalışabilir hale getirelim. İlk olarak /etc/fstab dosyasını yeni ayarlar göre güncelleyin, aksi takdirde klonlanmış bölümleri kullanamazsınız. IP adresi değiştiyse (/etc/hosts, Debian'da /etc/network/interfaces) dosyasını da güncellemelisiniz. Önemli bir konu da neredeyse tamamı değişecek olan açılış yöneticisinin güncellenmesi. lilo kullanıyorsanız, /etc/lilo.conf dosyasını düzenleyin (özellikle root=... kısmını) ve sonra lilo -v komutunu çalıştırın. grub kullanıyorsanız, /boot/grub/menu.lst düzenleyin (veya /boot/grub/grub.conf hangisinin sembolik link olduğuna bağlı) ve sonra da grub komutunu çalıştırın,
grub> root (hd0,xxx)

... filesystem is ...

grub> setup (hd0)

... lots of output here

grub> quit
veya xxx yerine sabit sürücünüzü yazın ve şu komutu kullanın: grub-install /dev/xxx. Burada hem root (hdn,xx) kısmını hem de root=/dev/xxx kısmını kontrol edin.

Eğer klonlanmış bilgisayarda donanımınız daha iyiyse özel-çekirdek ayarları'nı güncellemek isteyebilirsiniz. Eğer önceden ayarlanmış birçok modüllü bir sistem kullanıyorsanız (RedHat, SuSe, Mandrake, Fedora ... gibi) endişelenmeyin, büyük bir olasılıkla uygun bir modül vardır. Yoksa, lspci -vv ve başka yerlerde açıklandığı gibi çekirdeğin derlenmesi ile sorunu çözebilirsiniz. Ekran kartınız farklıysa /etc/X11/XF86Config-4 dosyasını güncelleyin (veya xorg.conf RH/Fedora'da), aksi takdirde ekran çıktısı alamazsınız. Mümkünse ve elinizde gerekli araçlar mevcut ise 3. çalışma düzeyinde bilgisayarı açıp grafik araçlarının yardımıyla X ortamının ayarlarını yapabilirsiniz. Debian altında biraz araştırma gerekiyor, bende sürücü r128'den radeon'a değiştiği için şanslıydım.

 

Diğer Sistemler

Bu belge ext2/ext3 dosya sistemlerinin nasıl klonlandığını anlatıyor. Birçok benzer komut diğer birçok Linux sistemlerinde bulunabilir. Mesela, FreeBSD, HP-UX, IRIX gibi birçok Unix sistemleri dump/restore komutlarını destekler; Solaris'te ufsdump/ufsrestore diye adlandırılmıştır. ReiserFS gibi dump fonksiyonunu tavsiye etmeyen dosya sistemleri de mevcut. Burada kendisine rsync kullanmayı tavsiye ediyor. rsync ile bir Linux sistemin nasıl başarılı bir şekilde klonlanabileceğini burada görebilirsiniz [1].

 

Kaynaklar

[1] ''Farklı Bir Metotla - Bir Linux Sistemin Klonlanması.'' Ben Okopnik, Linux Gazette Issue 83, October 2002.
 

Bu yazı için görüş bildiriminde bulunabilirsiniz

Her yazı kendi görüş bildirim sayfasına sahiptir. Bu sayfaya yorumlarınızı yazabilir ve diğer okuyucuların yorumlarına bakabilirsiniz.
 talkback page 

<--, Bu sayının ana sayfasına gider

Görselyöre sayfalarının bakımı, LinuxFocus Editörleri tarafından yapılmaktadır
© Gerrit Renker, FDL
LinuxFocus.org
Çeviri bilgisi:
en --> -- : Gerrit Renker <gerrit.renker(at)gmx.de>
en --> tr: Cem Aytar <cemaytar(at)gmail.com>

2005-08-30, generated by lfparser version 2.46