Thursday, December 6, 2007

Shell Script: Deteksi Otomatis dan Safely Remove flashdisk

Selama ini flashdisk yang kita gunakan di linux harus di mounting secara manual terutama berada di lingkungan tanpa x window. Shell script ini sengaja dibuat untuk memudahkan pemula linux dalam mounting dan unmounting flashdisk. Shell script ini agar digunakan dengan dialog telah terinstall. Shellscript ini dibangun di atas sistem Slackware 11 dengan kernel 2.6.20. Sebelum user menggunakan shell script di bawah ini, harap login sebagai root dan ubah permission file agar dapat dieksekusi dengan mengetikkan perintah:
chmod +x deteksi_otomatis.sh safely_remove.sh

Pada shell script deteksi_otomatis.sh, hanya digunakan untuk mendeteksi flashdisk yang berada /dev/sda1. Selain itu, mounting point juga telah ditetapkan, yaitu pada /mnt/memory.berikut ini merupakan isi dari deteksi_otomatis.sh.

#!/bin/bash

# kunto aji k, 2007, GPL

DEV="/dev/sda1"
DESTMOUNTING="/mnt/memory/"
ROOT="id -u"
LOGFILE="/tmp/USB-flashdisk.log"

# memeriksa user apakah login sebagai root
if [[ $ROOT -ne 0 ]]
then
dialog --backtitle "deteksi Flashdisk Otomatis" --msgbox "Jalankan aplikasi ini sebagai root" 15 50
exit 1
fi

while [ 1 ]
do
# memeriksa apakah file /dev/sda1 ada
if [ ! -e $DEV ]
then
# menunggu user memasukkan flashdisk
dialog --backtitle "deteksi Flashdisk Otomatis" --infobox "Masukkan flashdisk anda!" 15 50
else
# membuat file log bernama USB-flashdisk.log
touch /tmp/USB-flashdisk.log
# mengkosongkan isi file
cat /dev/null > $LOGFILE
dialog --backtitle "deteksi Flashdisk Otomatis" --infobox "Flashdisk terdeteksi!" 15 50
sleep 2
dialog --backtitle "deteksi Flashdisk Otomatis" --infobox "Melakukan Mounting flashdisk di /mnt/memory" 15 50
sleep 2
# mounting di /mnt/memory
mount $DEV $DESTMOUNTING 2> $LOGFILE
# mengecek log file. apakah kosong
cek=`cat $LOGFILE | wc -l`

# bila cek sama dengan 0, berarti mounting berjalan dengan sukses
if [ $cek -eq 0 ]
then
dialog --backtitle "deteksi Flashdisk Otomatis" --msgbox "Flashdisk berhasil di-mount. Silahkan buka direktori /mnt/memory" 15 50
else
dialog --backtitle "deteksi Flashdisk Otomatis" --msgbox "terjadi error saat mounting. Silahkan buka /tmp/USB-flashdisk.log" 15 50
fi
break
fi
sleep 1
done
exit 0

Penjelasan:
1. Pertama-tama, akan ada dialog untuk meminta user memasukkan flashdisk. Yang sebelumnya telah di-cek apakah sebagai root.
2. Kemudian jika user telah memasukkan flashdisk dan file /dev/sda1 ada, maka akan dibuat file untuk log.
3. File log tersebut bernama USB-flashdisk.log yang berfungsi untuk mencatat error.
4. Kemudian dilakukan pengosongan file log
5. Lalu dilakukan mounting. Jika muncul dialog sukses, berarti mount telah berhasil di-mount
6. Namun jika gagal mount, maka kesalahan akan dicatat di USB-flashdisk.log untuk di analisis.


Tidak berbeda jauh dengan deteksi_otomatis.sh, shell script safely_remove.sh meng-unmount di mount point yang tetap, yaitu /mnt/memory. Berikut ini merupakan shell script dari safely_remove.sh.

#!/bin/bash

# kunto aji k, 2007, GPL

DESTMOUNTING="/mnt/memory/"
ROOT="id -u"
LOGFILE="/tmp/USB-flashdisk.log"

# memeriksa user apakah login sebagai root
if [[ $ROOT -ne 0 ]]
then
dialog --backtitle "Safely Remove Flashdisk" --msgbox "Jalankan aplikasi ini sebagai root" 15 50
exit 1
fi

# cek_dir = 0 jika /mnt/memory kosong
cek_dir=`ls /mnt/memory | wc -l`

# cek apakah direktory /mnt/memory kosong
if [ $cek_dir -eq 0 ]
then
dialog --backtitle "Safely Remove Flashdisk" --msgbox "ERROR! Tidak ada flashdisk yang dimounting!" 15 50
else
# membuat file log
touch /tmp/USB-flashdisk.log
# mengkosongkan file log
cat /dev/null > $LOGFILE
dialog --backtitle "Safely Remove Flashdisk" --infobox "Unmount flashdisk!" 15 50
sleep 2
# melakukan unmount
umount $DESTMOUNTING 2> $LOGFILE
# cek = 0 jika file log kosong
cek=`cat $LOGFILE | wc -l`

# jika cek = 0 berarti log kosong dan umount berjalan dengan sukses
if [ $cek -eq 0 ]
then
dialog --backtitle "Safely Remove Flashdisk" --msgbox "Flashdisk berhasil di-unmount dari direktori /mnt/memory. Silahkan ambil flashdisk anda" 15 50
else
dialog --backtitle "Safely Remove Flashdisk" --msgbox "Terjadi error saat unmounting. Silahkan buka /tmp/USB-flashdisk.log" 15 50
fi
fi
exit 0

Penjelasan:
1. Di-cek apakah login sebagai root.
2. Jika sebagai root, kemudian melakukan pengecekan apakah direktori /mnt/memory kosong. Jika kosong tidak melakukan unmount.
3. Jika tidak kosong, maka dilakukan membuat file log yang kosong.
4. Kemudian dilakukan unmount.
5. Jika unmount sukses, maka file log kosong dan unmounting flashdisk berhasil.

Sampai di sini dulu pembahasannya. Tambahkan atau perbaiki shell script di atas. Mohon berikan feedback kepada saya.

No comments:

Post a Comment

Related Posts Plugin for WordPress, Blogger...