Kamis, 23 Desember 2010

Backup Dengan Menggunakan rsync

Apa keunggulan rsync?

Irit bandwidth. Jika di sisi penerima, file yang ingin dikirimkan sudah ada, tapi belum tentu sama (misalnya ukurannya lebih kecil/besar atau terdapat perbedaan karena versinya lebih lama), maka rsync dapat melakukan serangkaian pengecekan perbandingan checksum terhadap blok-blok dalam file di kedua sisi, untuk meminimalisasi jumlah data yang harus ditransfer. Algoritma ini disebut algoritma rsync. Bahkan sebetulnya rsync bermula dari sebuah paper yang menjelaskan algoritma ini.

Jadi, misalnya Anda memiliki 2 buah versi file berukuran kurang lebih 100MB di dua tempat, dengan rsync Anda mungkin Anda hanya membutuhkan transfer data sebesar 50MB, 10MB, atau bahkan di bawah 1MB untuk menyamakan kedua buah versi file ini, bergantung pada seberapa mirip kedua file tersebut sebelumnya.

Atau, misalnya Anda sedang mentransfer file besar lalu putus di tengah jalan. Anda dapat jalankan kembali rsync dan rsync akan melanjutkan kembali transfer dari posisi putus dan memastikan hasil akhirnya nanti sama.

Cepat. Rsync cepat salah satunya karena algoritma rsync yang disebutkan di atas. Selain itu rsync dapat melakukan kompresi data saat transfer. Dibandingkan FTP pun rsync lebih cepat karena dapat melakukan pipelining, sementara transfer menggunakan FTP boros koneksi TCP/IP untuk setiap file yang ditransfer. Ini akan semakin kentara untuk tree berisi file kecil-kecil yang jumlahnya banyak (misalnya file-file website yang umumnya berisi banyak file HTML dan gambar), di mana rsync dapat beberapa kali hingga belasan kali lebih cepat dari FTP.

Fleksibel. Rsync tidak hanya bisa mentransfer file tunggal, tapi juga direktori dan tree secara rekursif. Anda bisa memilih untuk menghapus file/direktori yang sudah tidak ada dari sisi pengirim tapi masih ada di sisi penerima. Anda bisa memilih untuk mensinkronisasi juga metadata file seperti permission, kepemilikan, tanggal, ACL, dll. Rsync dapat menangani link simbolik, hardlink, device, dll. Dan ada banyak opsi lainnya, termasuk yang sering juga dijumpai di tool lain seperti tar, cp, dll.

Keterbatasan rsync

Meskipun merupakan swiss-army knife dalam urusan transfer dan sinkronisasi tree, namun rsync tidaklah sempurna. Dua kelemahan utama rsync adalah sifat sinkronisasi yang 1 arah dan lambat jika ukuran tree sudah terlalu besar.

Hanya 1 arah. Sinkronisasi rsync hanya bersifat satu arah, dari pengirim (P1) ke penerima (P2). Jika misalnya baik tree di P1 maupun di P2 berubah secara independen oleh pihak ketiga, lalu P1 dan P2 ingin bertukar perubahan secara 2 arah, maka rsync tidak dapat digunakan. Ada opsi -u untuk melewati file-file di P2 yang lebih baru daripada P1, Anda bisa menggunakan opsi ini pada kasus-kasus tertentu, tapi secara umum, untuk melakukan sinkronisasi 2 arah, sebaiknya digunakan tool lain seperti unison (atau mungkin Anda butuh tool version control seperti subversion atau git).

Lambat untuk tree superbesar. Cara kerja rsync adalah dengan mula-mula membangun daftar file lengkap baik di sisi pengirim maupun penerima untuk kemudian dibandingkan. Untuk tree yang sudah amat besar proses ini akan memakan waktu dan juga memori amat besar. Misalnya direktori backup lokal di beberapa server shared hosting di tempat kerja saya yang isinya lebih dari 20 juta file, karena berisi histori backup menggunakan hardlink. Meng-rsync tree ini sekaligus membuat proses rsync memakan memori lebih dari 2-3GB untuk menyusun daftar file, sehingga menghabiskan memori dan mengganggu proses lain.

Kebutuhan memori dalam pembangunan daftar file lengkap di awal proses rsync ini juga membuat para penyedia situs mirror agak enggan menyediakan layanan via rsync. Atau setidaknya membatasi jumlah koneksi simultan rsync, misalnya hanya 1-5.

Diharapkan revisi program dan/atau algoritma rsync berikutnya dapat membuat inovasi dalam hal sinkronisasi tree superbesar, misalnya dengan membentuk daftar file secara paralel atau sambil jalan.

KONFIGURASI RSYNC AUTOMATIS PASSWORD DAN SCHEDULE DENGAN MENGGUNAKAN CRONJOBS

Untuk Mencobanya yakinkan tools berikut sudah terinstall

rsync
openssh
cron (or vixie-cron)

Saya ingin tes apakah rsync sudah bisa di jalankan
$ rsync -avz -e ssh remoteuser@remotehost:/remote/dir /this/dir/

Buat key untuk ssh

$ ssh-keygen -t dsa -b 2048 -f /home/thisuser/cron/thishost-rsync-key
Generating public/private dsa key pair.
Enter passphrase (empty for no passphrase): [press enter here]
Enter same passphrase again: [press enter here]
Your identification has been saved in /home/thisuser/cron/thishost-rsync-key.
Your public key has been saved in /home/thisuser/cron/thishost-rsync-key.pub.
The key fingerprint is:
2e:28:d9:ec:85:21:e7:ff:73:df:2e:07:78:f0:d0:a0 thisuser@thishost

File tersebut berada di

/home/remoteuser/.ssh/authorized_keys

Saya menggunakan SCP untuk copy remote

$ scp /home/thisuser/cron/thishost-rsync-key.pub remoteuser@remotehost:/home/remoteuser/

Saya menggunakan ssh untuk meremote host

$ ssh remoteuser@remotehost
remoteuser@remotehost's password: [type correct password here]
$ echo I am now $USER at $HOSTNAME
I am now remoteuser at remotehost

Kemudian saya mengkoneksikan key nya agar dapat di autorisasi

$ if [ ! -d .ssh ]; then mkdir .ssh ; chmod 700 .ssh ; fi
$ mv thishost-rsync-key.pub .ssh/
$ cd .ssh/
$ if [ ! -f authorized_keys ]; then touch authorized_keys ; chmod 600 authorized_keys ; fi
$ cat thishost-rsync-key.pub >> authorized_keys

defaultnya akan mengijinkan siapa saja dapat mengakses ssh, demi menjaga keamanan saya akan merubah settingan agar hanya ip 10.1.1.1 saja yang dapat masuk

SEBELUM


ssh-dss AAAAB3NzaC1kc3MAAAEBAKYJenaYvMG3nHwWxKwlWLjHb77CT2hXwmC8Ap+fG8wjlaY/9t4u
A+2qx9JNorgdrWKhHSKHokFFlWRj+qk3q+lGHS+hsXuvta44W0yD0y0sW62wrEVegz+JVmntxeYc0nDz
5tVGfZe6ydlgomzj1bhfdpYe+BAwop8L+EMqKLS4iSacNjoPlHsmqHMnbibn3tBqJEq2QJjEPaiYj1iP
5IaCuYBhuTKQGa+oyH3mXEif5CKdsIKBj46B0tCy0/GC7oWcUN92QdLrUyTeRJZsTWsxKpRbMliD2pBh
4oyX/aXEf8+HZBrO5vQjDBCfTFQA+35Xrd3eTVEjkGkncI0SAeUAAAAVAMZSASmQ9Pi38mdm6oiVXD55
Kk2rAAABAE/bA402VuCsOLg9YS0NKxugT+o4UuIjyl6b2/cMmBVWO39lWAjcsKK/zEdJbrOdt/sKsxIK
1/ZIvtl92DLlMhci5c4tBjCODey4yjLhApjWgvX9D5OPp89qhah4zu509uNX7uH58Zw/+m6ZOLHN28mV
5KLUl7FTL2KZ583KrcWkUA0Id4ptUa9CAkcqn/gWkHMptgVwaZKlqZ+QtEa0V2IwUDWS097p3SlLvozw
46+ucWxwTJttCHLzUmNN7w1cIv0w/OHh5IGh+wWjV9pbO0VT3/r2jxkzqksKOYAb5CYzSNRyEwp+NIKr
Y+aJz7myu4Unn9de4cYsuXoAB6FQ5I8AAAEBAJSmDndXJCm7G66qdu3ElsLT0Jlz/es9F27r+xrg5pZ5
GjfBCRvHNo2DF4YW9MKdUQiv+ILMY8OISduTeu32nyA7dwx7z5M8b+DtasRAa1U03EfpvRQps6ovu79m
bt1OE8LS9ql8trx8qyIpYmJxmzIdBQ+kzkY+9ZlaXsaU0Ssuda7xPrX4405CbnKcpvM6q6okMP86Ejjn
75Cfzhv65hJkCjbiF7FZxosCRIuYbhEEKu2Z9Dgh+ZbsZ+9FETZVzKBs4fySA6dIw6zmGINd+KY6umMW
yJNej2Sia70fu3XLHj2yBgN5cy8arlZ80q1Mcy763RjYGkR/FkLJ611HWIA= thisuser@thishost

SESUDAH


from="10.1.1.1",command="/home/remoteuser/cron/validate-rsync" ssh-dss AAAAB3Nza
C1kc3MAAAEBAKYJenaYvMG3nHwWxKwlWLjHb77CT2hXwmC8Ap+fG8wjlaY/9t4uA+2qx9JNorgdrWKhH
SKHokFFlWRj+qk3q+lGHS+hsXuvta44W0yD0y0sW62wrEVegz+JVmntxeYc0nDz5tVGfZe6ydlgomzj1
bhfdpYe+BAwop8L+EMqKLS4iSacNjoPlHsmqHMnbibn3tBqJEq2QJjEPaiYj1iP5IaCuYBhuTKQGa+oy
H3mXEif5CKdsIKBj46B0tCy0/GC7oWcUN92QdLrUyTeRJZsTWsxKpRbMliD2pBh4oyX/aXEf8+HZBrO5
vQjDBCfTFQA+35Xrd3eTVEjkGkncI0SAeUAAAAVAMZSASmQ9Pi38mdm6oiVXD55Kk2rAAABAE/bA402V
uCsOLg9YS0NKxugT+o4UuIjyl6b2/cMmBVWO39lWAjcsKK/zEdJbrOdt/sKsxIK1/ZIvtl92DLlMhci5
c4tBjCODey4yjLhApjWgvX9D5OPp89qhah4zu509uNX7uH58Zw/+m6ZOLHN28mV5KLUl7FTL2KZ583Kr
cWkUA0Id4ptUa9CAkcqn/gWkHMptgVwaZKlqZ+QtEa0V2IwUDWS097p3SlLvozw46+ucWxwTJttCHLzU
mNN7w1cIv0w/OHh5IGh+wWjV9pbO0VT3/r2jxkzqksKOYAb5CYzSNRyEwp+NIKrY+aJz7myu4Unn9de4
cYsuXoAB6FQ5I8AAAEBAJSmDndXJCm7G66qdu3ElsLT0Jlz/es9F27r+xrg5pZ5GjfBCRvHNo2DF4YW9
MKdUQiv+ILMY8OISduTeu32nyA7dwx7z5M8b+DtasRAa1U03EfpvRQps6ovu79mbt1OE8LS9ql8trx8q
yIpYmJxmzIdBQ+kzkY+9ZlaXsaU0Ssuda7xPrX4405CbnKcpvM6q6okMP86Ejjn75Cfzhv65hJkCjbiF
7FZxosCRIuYbhEEKu2Z9Dgh+ZbsZ+9FETZVzKBs4fySA6dIw6zmGINd+KY6umMWyJNej2Sia70fu3XLH
j2yBgN5cy8arlZ80q1Mcy763RjYGkR/FkLJ611HWIA= thisuser@thishost

Apabila tidak mendapatkan akses maka akan tampil sbb


#!/bin/sh

case "$SSH_ORIGINAL_COMMAND" in
*\&*)
echo "Rejected"
;;
*\(*)
echo "Rejected"
;;
*\{*)
echo "Rejected"
;;
*\;*)
echo "Rejected"
;;
*\<*)
echo "Rejected"
;;
*\`*)
echo "Rejected"
;;
*\|*)
echo "Rejected"
;;
rsync\ --server*)
$SSH_ORIGINAL_COMMAND
;;
*)
echo "Rejected"
;;
esac

PermitRootLogin no

atau

PermitRootLogin forced-commands-only

Konfigurasi sudah selesai maka kita akan mencobanya dengan perintah

$ rsync -avz -e "ssh -i /home/thisuser/cron/thishost-rsync-key" remoteuser@remotehost:/remote/dir /this/dir/

Cron Job Setup

Ini adalah script untuk cronjob save dengan nama rsync-remotehost-backups

#!/bin/sh

RSYNC=/usr/bin/rsync
SSH=/usr/bin/ssh
KEY=/home/thisuser/cron/thishost-rsync-key
RUSER=remoteuser
RHOST=remotehost
RPATH=/remote/dir
LPATH=/this/dir/

$RSYNC -az -e "$SSH -i $KEY" $RUSER@$RHOST:$RPATH $LPATH

Kemudian jalankan perintah ini untuk memasukkan script ke dalam crontab

$ crontab -e

Dan masukkan script ini:

0 5 * * * /home/thisuser/cron/rsync-remotehost-backups

Backup ini akan di jalankan setiap hari pada pukul 5

Crontab sebagai penjadwalan service

Crontab adalah sebuah perintah yang sangat berguna untuk menjalankan tugas-tugas yang terjadwal, sehingga akan mengurangi waktu administrasi. Selain crontab, ada juga perintah lain: anacron dan at. Anacron digunakan untuk melakukan penjadwalan suatu perintah untuk komputer yang tidak selalu menyala terus menerus. Anacron menggunakan interval waktu harian, mingguan, dan bulanan. Sedangkan perintah at menjalankan suatu tugas sekali pada satu waktu. Yang paling sering digunakan adalah crontab, karena lebih serba guna, dan dapat diatur untuk berjalan pada sembarang interval waktu.

Kampus kami memiliki beberapa server yang akan menjalankan script untuk melakukan backup data-data penting pada jam-jam sepi, dengan menggunakan cron. Sebagai contoh, script backup akan menghentikan beberapa servis, melakukan rsync dari hot server ke cold server, melakukan backup tape archive standar, dan terakhir menjalankan kembali servis-servis yang dihentikan. Berkat program cron, saya tidak harus berada di sana jam satu malam, saat tugas tersebut dijalankan. Yang harus saya lakukan hanyalah melakukan pengecekan pada peralatan backup dan melihat email setiap pagi untuk memastikan semua berjalan dengan lancar.

Dalam melakukan administrasi sistem, pengaturan cron dilakukan melalui file crontab, yang berisi jadwal waktu dan script yang harus dieksekusi. System Linux memiliki file crontab default, yaitu /etc/crontab, yang akan menjalankan beberapa script pada waktu yang telah ditentukan, misalnya setiap jam, harian, mingguan, dan bulanan. Pertama kali membuka file ini, anda mungkin akan sedikit bingung.

[root@localhost ~]# cat /etc/crontab
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/

# run-parts
01 * * * * root run-parts /etc/cron.hourly
02 4 * * * root run-parts /etc/cron.daily
22 4 * * 0 root run-parts /etc/cron.weekly
42 4 1 * * root run-parts /etc/cron.monthly
[root@localhost ~]#

Bagian pertama mengatur beberapa variabel:

SHELL
Baris pertama menentukan shell yang akan digunakan untuk menjalankan baris perintah. Defaultnya adalah /bin/sh.
PATH
Cron berjalan sebagai proses subshell, sehingga kita harus menentukan path atau menggunakan statement PATH pada crontab. Hal ini karena kita tidak melakukan login pada console pada saat akan menjalankan perintah, sehingga kita tidak mengakses file .bashrc atau .bash_profile, dan kita tidak memiliki environment variable seperti pada saat login sebagai user biasa atau root. Penting untuk diingat bahwa kita tidak bisa menampilkan data output tanpa menggunakan console – kita tidak memiliki layar untuk menampilkan data tersebut — sehingga setiap output yang kita butuhkan harus disimpan dalam sebuah file log.
MAILTO
Perintah “MAILTO=” pada baris berikutnya akan mengirimkan hasil dari pekerjaan cron kepada user root. Jika kita mendefinisikan MAILTO namun kosong, maka email dari cron akan diabaikan. Jika MAILTO tidak diset, maka email akan dikirimkan kepada user pemilik crontab.
HOME
Baris berikutnya menentukan direktori home yang akan digunakan oleh cron. Jika tidak diset, maka direktori home yang digunakan adalah yang ada pada file /etc/passwd.
# run-parts
Baris ini sebenarnya hanyalah sebuah komentar, walaupun “run-parts” adalah sebuah perintah yang akan menjalankan semua script atau program pada direktori yang ditentukan.

Bagian yang paling sulit bagi kebanyakan orang adalah bagian pengaturan waktu. Kolom berikutnya setelah pengaturan waktu adalah kolom user yang menentukan user “run-as“, dan perintah “run-parts” akan menjalankan script pada direktori yang ditentukan. Ingat bahwa direktori tersebut dinamai sesuai dengan interval waktu yang sesuai untuk menjalankan direktori tersebut. Kita bisa meletakkan script pada direktori yang kita inginkan, sehingga script tersebut akan dijalankan pada waktu yang telah ditentukan pada bagian pengaturan waktu. Namun sebenarnya hal ini bukanlah ide yang bagus, sebab kita bisa saja lupa bahwa ada script di dalam direktori tersebut. Sebaiknya kita mengedit file crontab dan mengisikan tugas-tugas cron kita sendiri, karena dengan cara ini akan lebih mudah untuk mendapatkan daftar tugas-tugas cron dan melakukan pengaturan lebih lanjut melalui crontab. Ingat bahwa ini adalah file crontab milik sistem, yang digunakan untuk menjalankan script dan program untuk maintenance sistem. Sebuah file crontab milik user akan sedikit berbeda, jadi sebaiknya anda tidak menyalinnya.

# Time User Command Path

01 * * * * root run-parts /etc/cron.hourly
02 4 * * * root run-parts /etc/cron.daily
22 4 * * 0 root run-parts /etc/cron.weekly
42 4 1 * * root run-parts /etc/cron.monthly

Dasar-dasar Crontab

Terdapat dua buah file yang menentukan user mana yang bisa menggunakan crontab: /etc/cron.allow dan /etc/cron.deny. Biasanya, hanya ada file cron.deny pada sistem, dan jika file ini ada, dan terdapat nama user di dalamnya (satu user per baris), maka user tersebut tidak diperbolehkan menggunakan perintah crontab. Jika terdapat file cron.allow, maka hanya user yang namanya terdapat pada file ini yang diperbolehkan menggunakan perintah crontab.

Pada file crontab, terdapat enam field untuk setiap entry, dan masing-masing field dipisahkan oleh spasi atau tab.

* Lima field pertama menentukan kapan perintah akan dijalankan.
* Field ke-enam adalah perintah yang akan dijalankan.

Minute – 0-59.
Hour – 0-23 24-hour format.
Day – 1-31 Day of the month.
Month – 1-12 Month of the year.
Weekday – 0-6 Day of the week. 0 refers to Sunday.

Pada file crontab, akan tampak seperti ini:

# min(0-59) hours(0-23) day(1-31) month(1-12) dow(0-6) command
34 2 * * * sh /root/backup.sh

Pada contoh tersebut, perintah “sh /root/backup.sh” akan dijalankan pada jam 2:34 AM setiap hari.

Tanda bintang pada contoh tersebut berarti ‘semua waktu‘. Tanda bintang pada kolom ‘menit’ berarti “jalankan setiap menit”.
Percobaan

Sekarang mari kita mencoba membuat sebuah tugas untuk cron. Perintah yang harus kita jalankan adalah crontab -e, yang akan membuka teks editor vi untuk melakukan pengaturan tugas-tugas cron.

[root@localhost ~]# crontab -e

Sekarang masukkan baris berikut ini:

* * * * * /usr/bin/wall “Hello From Crontab”

Setelah disimpan, kita akan melihat keluaran berikut ini:

crontab: installing new crontab
[root@localhost ~]#

Dalam beberapa saat, anda akan melihat pesan berikut ini:

Broadcast message from root (Thu Apr 3 14:52:01 2008):

Hello From Crontab

Pesan ini akan muncul setiap menit, karena kita meletakkan tanda bintang pada semua field waktu. Jika kita tidak menghapus file crontab ini, maka kita akan mendapatkan pesan ini setiap menit selama hidup kita. Hal ini sekaligus menunjukkan apa akibatnya jika kita melakukan suatu kesalahan dengan crontab. Kita harus menjalankan perintah crontab -r untuk menghapus entry di atas.

[root@localhost ~]# crontab -r

Misalkan di masa mendatang kita harus menjalankan web server Apache httpd, cron juga bisa diandalkan. Pertama, kita akan mengecek apakah httpd sedang tidak berjalan. Lalu, kita jalankan perintah date untuk mendapatkan waktu saat ini, sehingga kita bisa mengatur crontab untuk menjalankannya di masa datang.

[root@localhost ~]# service httpd status
httpd is stopped
[root@localhost ~]#
[root@localhost ~]# date
Thu Apr 3 15:45:32 MST 2008
[root@localhost ~]#

Kita dapat dengan mudah menghitung waktu 10 menit dari sekarang. Jalankan perintah crontab -e, dan tulislah file crontab dengan mengingat format waktunya.

# min(0-59) hours(0-23) day(1-31) month(1-12) dow(0-6) command

55 15 * * * /sbin/service httpd start

Gunakan saja tanda bintang untuk hari, bulan dan hari dalam seminggu, dan gunakan satu spasi saja, sebab beberapa distribusi Linux tidak mengijinkan anda menggunakan lebih dari satu spasi.

55 15 * * * /sbin/service httpd start

[root@localhost ~]# crontab -e
crontab: Installing new crontab

Jika anda melakukan kesalahan, crontab akan memberitahu anda saat anda menutup editor. Dengan asumsi tidak ada kesalahan, web server Apache akan berjalan kurang dari sepuluh menit dari sekarang. Anda bisa menggunakan perintah crontab -l untuk melihat daftar tugas-tugas dalam file crontab.

[root@localhost ~]# crontab -l
55 15 * * * /sbin/service httpd start

Untuk menghapusnya, lagi-lagi kita gunakan perintah crontab -r.

[root@localhost ~]# crontab -r

Kita bisa melakukan banyak kombinasi pengaturan waktu. Ada cara lain untuk pengaturan waktu: “20-27″ menunjukkan range; “3,4,7,8″ artinya hanya interval tersebut untuk suatu pilihan, dan */5 artinya setiap interval ke lima. Fitur lainnya, setelah cron menyelesaikan suatu tugas, kita akan mendapatkan email berisi keluaran dari perintah yang dijalankan.



Contoh lainnya

Entry crontab berikut ini akan menjalankan perintah setiap menit ke 15 dan 30 setiap jam, selama bulan Mei:

15,30 * * 5 * /usr/bin/command

Untuk menjalankan script backup setiap Minggu, Senin, dan Selasa pada jam 2:12 AM, gunakan entry berikut:

12 2 * * 0-2 sh /root/backup.sh

Untuk menjalankan script pada menit ke-12 setiap jam ke-3 setiap harinya, gunakan entry berikut:

12 */3 * * * sh /root/script.sh

Agar cron menuliskan keluaran dari suatu perintah ke dalam sebuah file log, anda bisa menambahkan entry berikut:

12 */3 * * * sh /root/script.sh >> /root/script.log 2>&1

Agar anda tidak menerima email dari cron:

12 */3 * * * sh /root/script.sh > /dev/null 2>&1

Berikut ini contoh email yang akan anda terima dari keluaran cron:

From root@localhost.localdomain Thu Apr 3 12:08:01 2008
Date: Thu, 3 Apr 2008 12:08:01 -0700
From: root@localhost.localdomain (Cron Daemon)
To: root@localhost.localdomain
Subject: Cron sh /root/s.sh
Content-Type: text/plain; charset=UTF-8
Auto-Submitted: auto-generated
X-Cron-Env:
X-Cron-Env:
X-Cron-Env:
X-Cron-Env:
X-Cron-Env:

test

Beberapa tips dalam menggunakan cron:

* Selalu gunakan path absolut.
* Jika anda tidak yakin apakah tugas-tugas cron telah selesai, periksalah email anda.
* Hapus entry cron yang sudah tidak diperlukan lagi.
* Pastikan crond berjalan.

Perintah-perintah:

crontab -e – Mengedit file crontab yang sudah ada, atau membuat file baru.
crontab -l – Menampilkan isi file crontab.
crontab -r – Menghapus file crontab.
crontab -u – Mengedit crontab milik user.

Selasa, 21 Desember 2010

Copy data dan Backup via Network menggunakan nc (netcat)

Pendahuluan

nc (atau netcat) adalah sebuah utiliti yang digunakan untuk berbagai hal yang berkaitan dengan protokol TCP atau UDP. Yang dapat membuka koneksi TCP, mengirimkan paket-paket UDP, listen pada port-port TCP dan UDP, melakukan scanning port, dan sesuai dengan IPV4 dan IPV6. Tidak seperti telnet, script nc memisahkan pesanpesan error ke standar error daripada ke standar output, sedangkan telnet mengirimkan output dan error ke standar output yang sama.

Pada artikel ini penulis akan menjelaskan penggunaan nc berkaitan dengan copy data dan backup melalui jaringan dengan menggunakan utiliti nc (netcat).
Skenario Pada tulisan ini penulis akan mencopy data dan membackup hard disk atau partisi hard disk dari satu mesin ke mesin lainnya. Disini penulis menggunakan 2 buah mesin/komputer dimana yang satu sebagai mesin atau komputer backup (destination) dan yang satu lagi adalah mesin yang akan dibackup salah satu partisi harddisk nya (source).
Untuk itu Anda dapat melihat gambar1 untuk skenarionya.



Gambar1.
Skenario copy data dan backup via network
Penjelasan gambar:
● Mesin dengan hostname Similikiti memiliki nomor IP 192.168.1.1 akan bertindak sebagai komputer yang akan dibackup salah satu partisinya (source). Distro yang digunakan pada mesin Similikiti adalah CentOS release 5.
● Mesin dengan hostname PCBoy
memiliki nomor IP 192.168.1.33 akan bertindak sebagai komputer backup (destination). Distro yang digunakan pada mesin PCBoy
adalah Fedora Core 6.

Persiapan software

Untuk itu cobalah Anda cek terlebih dahulu pada kedua komputer (Similikiti dan PCBoy)
apakah sudah terinstal utiliti nc(netcat). Perintahperintah berikut dapat Anda lakukan guna mengecek keberadaan utiliti nc tersebut:
[root@Similikiti ~]# which nc
/usr/bin/nc
atau
Halaman 2
[root@PC-Boy ~]# rpm -qa|grep -w nc
nc-1.84-10.fc6
Jika belum ada maka saatnyalah Anda menginstal paket/software nc ini. Untuk instalasi dapat Anda manfaatkan utiliti 'yum' yang akan mendownload software dan menginstalkannya kekomputer, berikut ini contoh eksekusi perintah 'yum' untuk instalasi nc yang dapat Anda lihat pada gambar2.


Gambar2.

Instalasi 'nc' dengan yum.
Beberapa utliti yang lain yang akan digunakan dalam kasus ini adalah dd dan bzip2
Copy data via network dengan nc
Bagimanakah caranya untuk menyalin data/file melalui jaringan menggunakan nc ?. Ingat konsep menyalin data (ada sumber dan ada tujuan) .! Dalam skenario yang berfungsi sebagai sumber adalah komputer Similikiti dan PCBoy adalah tujuan (derstination).

Untuk itu Anda dapat mengikuti langkahlangkah berikut ini:
Halaman 3
Perintah nc pada komputer PCBoy:
[root@PC-Boy ~]# nc -l 192.168.1.33 1234 > hasil.txt
Perintah nc pada komputer Similikiti:
[henry@Similikiti ~]$ nc 192.168.1.33 1234 < /etc/passwd
Dari contoh kedua perintah diatas menunjukkan proses penyalinan (copy) file /etc/passwd yang ada pada Similikiti ke komputer PCBoy dan file salinannya ditulis dengan nama hasil.txt. Pada perintah pertama yang dieksekusi di PCBoy(192.168.1.33) menyatakan bahwa nc membuka koneksi TCP pada port 1234 dan dalam kondisi LISTEN (siap merespon) dan mengarahkan output ke file hasil.txt pada current direktori. Sedangkan perintah kedua yang dieksekusi pada komputer Similikiti (192.168.1.1) menyatakan bahwa nc mengirimkan data input dari file /etc/passwd ke komputer PCBoy(192.168.1.33) port 1234 melalui jaringan.
Backup partisi hard disk via network
Kasus kedua adalah penulis bertujuan untuk membackup data yang terdapat pada partisi (/dev/hda6) pada komputer Similikiti ke sebuah partisi hard disk (/dev/hda11) yang terdapat pada PCBoy.
Ukuran kedua partisi pada kedua komputer memiliki ukuran yang sama. Proses backup ini
membutuhkan utiliti dd (untuk duplikasi disk) dan bzip2 (kompresi/dekompresi data). Untuk itu Anda dapat mengikuti langkahlangkah berikut ini:
Perintah nc pada komputer PCBoy:
[root@PC-Boy ~]# nc 192.168.1.33 1234 -l |bzip2 -d | dd of=/dev/hda11
Perintah nc pada komputer Similikiti:
[root@Similikiti ~]# bzip2 -c /dev/hda6 | nc 192.168.1.33 1234
Maksud dari kedua perintah diatas adalah menduplikasi isi partiisi hard disk (/dev/hda6) pada komputer Similikiti ke komputer PCBoy pada partisi disk (/dev/hda11).