Nov 11, 2010

Network Backup menggunakan GNU tar

Network Backup Image


Ini adalah versi yang sedikit lebih "primitif" dari metode backup menggunakan Amanda yang dulu pernah saya tulis cara instalasinya.
Backup server menggunakan sistem operasi Ubuntu-10.04 Server Edition 64bit, dengan beberapa tools yang di-install dari paket Ubuntu di bawah ini:
  • GNU tar versi 1.22. Digunakan sebagai backup tool utama, mem-backup data-data dari backup client ke dalam backup server.

  • dd (coreutils) versi 7.4. Digunakan untuk menyalin backup file (yang dihasilkan oleh tar) dari harddisk ke dalam tape media.

  • mt-st versi 1.1. Tool penunjang untuk memanipulasi tape media.

  • mtx versi 1.3.12. Tool penunjang untuk memanipulasi perangkat auto loader.


Backup client terdiri beberapa mesin Windows dan Linux, masing-masing bertindak sebagai file server dengan menyediakan shared-folder.
Tahapan proses backup:
  • Menge-mount network shared-folder

  • Mem-backup data di shared-folder menggunakan perintah tar

  • Menyalin file hasil backup ke media tape


Menge-mount shared-folder
Parameter dan option yang digunakan sewaktu menge-mount shared-folder:
ro,username=nama_user,password=password_user,iocharset=utf8
Dengan option seperti itu, mounting shared-folder dilakukan read-only, menggunakan username dan password sesuai dengan yang terdaftar di mesin client. Option iocharset digunakan supaya file-file yang mempunyai karakter-karakter "aneh" di namanya atau nama file-nya cukup panjang, juga ikut ter-backup.
Jadi, isi script untuk melakukan mount yang saya gunakan adalah sebagai berikut:

#---script start---
!#/bin/bash
smbuser="bkpuser"
smbpassword="W1np@ssw0rd"
smbshare="//winsvr/shared-folder"
mountpoint="/mnt/winmount"
/bin/mount -t cifs -o ro,iocharset=utf8,username="$smbuser",password="$smbpassword" "$smbshare" "$mountpoint"
#---script end---

Mem-backup dengan tar
Parameter dan option yang digunakan sewaktu menjalankan perintah tar:


  • --create: operasi tar untuk membuat file backup. Operasi lain misalnya adalah --list untuk melihat isi suatu archive, atau --extract untuk meng-ekstrak kembali suatu archive.

  • --ignore-failed-read: option supaya tar tetap meneruskan prosesnya jika sewaktu mem-backup ada file yang gagal di-backup.

  • --tape-length: option untuk menentukan ukuran maksimum dari file hasil backup. Berguna terutama jika nantinya file hasil backup akan disalin ke media lain - misalnya tape backup, yang kapasitasnya terbatas.

  • --new-volume-script: option untuk memanggil script kecil yang berfungsi untuk menentukan penamaan file hasil backup, jika hasil backup di-split menjadi lebih dari satu file.

  • --exclude-from: option untuk membuat perkecualian atas file-file tertentu supaya tidak diikutkan dalam proses backup.

  • --listed-incremental: untuk memberi perintah kepada tar agar melakukan incremental backup, yaitu backup hanya terhadap file-file yang berubah sejak terakhir kali dilakukan backup.

  • --no-check-device: option tar agar mengabaikan device number dari media yang sedang dibackup. Berguna untuk metode backup incremental dan jika media yang dibackup adalah shared-drive (dari NFS, smbfs, cifs). Tanpa option ini, network backup kemungkinan besar akan gagal melakukan incremental, sehingga yang terjadi adalah selalu full backup.

  • --label: untuk memberi label pada file hasil backup. Ini berguna terutama jika hasil backup akan disimpan di dalam media tape, yaitu bisa memudahkan untuk mengetahui isi dari tape tersebut.

  • --file: untuk menentukan nama file hasil backup.


Sehingga isi script yang saya gunakan untuk menjalan tar dalam proses backup adalah sebagai berikut:
#---script start---
gnutar="/bin/tar"
scriptdir="/home/eharianto/scripts"
exclfile="/home/eharianto/exclude-backup"
dirtobackup="user"
bkpfile="user-daily"
bkpdir="/home/eharianto/backup"
$gnutar --create --tape-length 34603008 --no-check-device --ignore-failed-read --new-volume-script "$scriptdir"/multi-vol --label "$bkpfile" --exclude-from "$exclfile" --listed-incremental "$scriptdir"/user-list --file $bkpdir$bkpfile "$dirtobackup"
#---script end---

Menyalin file hasil backup kedalam tape media:
Isi script untuk menyalin file backup kedalam tape media:

#---script start---
mt="/bin/mt"
dd="/bin/dd"
cd $bkpdir
$mt -f /dev/st0 rewind
$mt -f /dev/st0 setblk 32768
$mt -f /dev/st0 compression off
dd if="$bkpfile" of="/dev/st0" bs=32768
#---script end---

Me-restore dari file backup
Me-restore file tar hasil backup langsung dari tape device:

# /bin/tar --extract --verbose --file /dev/st0

Me-restore dengan menyalin terlebih dulu file tar dari tape device ke harddrive:
# /bin/dd if=/dev/st0 of=/home/eharianto/bkpfile.tar bs=32768
# /bin/tar --extract --verbose --file /home/eharianto/bkpfile.tar

Melihat isi dari file tar hasil backup:

# /bin/tar --list --verbose --file /home/eharianto/bkpfile.tar

Isi file /home/eharianto/exclude-backup:
*.mp3
*.avi
*.mp4
*.wma

Isi file /home/eharianto/scripts/multi-vol (saya menyalin dari manual GNU tar):

#! /bin/sh
echo Preparing volume $TAR_VOLUME of $TAR_ARCHIVE.
name=`expr $TAR_ARCHIVE : '\(.*\)-.*'`
case $TAR_SUBCOMMAND in
-c) ;;
-d|-x|-t) test -r ${name:-$TAR_ARCHIVE}-$TAR_VOLUME || exit 1
;;
*) exit 1
esac
echo ${name:-$TAR_ARCHIVE}-$TAR_VOLUME >&$TAR_FD

No comments:

Post a Comment