Ö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:
* dd ile ikili sistemle (binary) kopyalama
* tar / cpio borularıyla (pipes)
* rsync
* dump ve restore
İ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,
Ç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:
* dd ile ikili sistemle (binary) kopyalama
* tar / cpio borularıyla (pipes)
* rsync
* dump ve restore
İ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,
