Tags:
Node Thumbnail

สำหรับความสำคัญของการสำรองข้อมูล (backup) ผมคิดว่าทุกคนที่ใช้คอมพิวเตอร์คงทราบกันดีอยู่แล้ว และยิ่งนับวันความสำคัญของมันก็เพิ่มขึ้นเรื่อย ๆ เนื่องเพราะเจ้า Hard Disk ที่มีขายตามท้องตลาดนั้นเ สียง่ายขึ้นทุกครั้งที่มีการเพิ่มความจุ โดยไม่เพิ่มขนาดตาม อีกทั้งข้อมูลในยุคสมัยนี้ยังถือได้ว่าเป็นสิ่งมีค่ายิ่ง หากสูญหายไปเพราะ Hard Disk พังเจ้าของคงต้องนั่งร้องไห้เป็นเผาเต่าแน่นนอน

โดยปกติแล้วผมจะมี Hard Disk สำหรับสำรองข้อมูลโดยเฉพาะ แต่ผมก็ไม่สามารถนั่งสำรองข้อมูลด้วยการคัดลอกไฟล์ได้ทุกวัน เพราะกว่าจะเสร็จต้องใช้เวลาหลายชั่วโมง นอกจากนี้...

การคัดลอกไฟล์ปริมาณมากในครั้งเดียว ยังทำให้ความเสถียรของระบบลดลงอีกด้วย เกิดเจ้าคอมพิวเตอร์งอแงกลางทางขึ้นมา ก็ต้องคัดลอกไฟล์กันใหม่หมดตั้งแต่ต้น เสียเวลา เสียพลังงาน และขี้เกียจรอ

ทางออกคือคัดลอกเฉพาะไฟล์ที่เพิ่งมีการเปลี่ยนแปลงหลังจากการสำรองข้อมูลครั้งล่าสุด ส่วนไฟล์อื่น ๆ ไม่ต้องไม่ยุ่งเกี่ยวกับมัน ผมเดาว่าในโลกนี้คงมีโปรแกรมที่ทำอย่างที่ผมบอกไปได้แน่นอน แต่ด้วยอารามความขี้เกียจหา ขี้เกียจนั่งศึกษาการใช้งาน บวกกับสนิทกับเพื่อนที่ชื่อ Python เลยเขียนโปรแกรมใช้เองดีกว่า

นั่งลองผิด ลองถูก เขียนไปเขียนมาก็ได้โปรแกรมมาหนึ่งโปรแกรม ซึ่งมีหน้าตาประมาณนี้


#!/usr/bin/python

import sys
import cPickle
import os
import shutil

def cpfile(dir_name):
global db_list
dirs = os.listdir(dir_name)
for item in dirs:
if item[0] != "." :
fileName = dir_name+'/'+item
if(os.path.isdir(fileName)):
try:
if not os.path.isdir(sys.argv[1]+fileName):
print (fileName),' => ',(sys.argv[1]+fileName)
os.mkdir(sys.argv[1]+fileName)
db_list[fileName] = os.path.getmtime(fileName)
cpfile(fileName)
except:
continue
else:
if db_list.get( fileName,"" ) != os.path.getmtime(fileName):
print (fileName),' => ',(sys.argv[1]+fileName)
shutil.copy(fileName,sys.argv[1]+fileName)
db_list[fileName] = os.path.getmtime(fileName)

try:
db_file = open('db.txt','r')
db_list = cPickle.load(db_file)
db_file.close()
except:
db_list = {}

print sys.argv[1]

cpfile(os.getcwd())

db_file = open('db.txt','w')
cPickle.dump(db_list,db_file)
db_file.close()

โปรแกรมตัวนี้เป็นโปรแกรม recursive ที่ชอนไชหาไฟล์ทุกตัวที่อยู่ภายใต้แฟ้มที่กำหนด แล้วตรวจสอบว่าไฟล์ดังกล่าวถูกเปลี่ยนแปลงไปหรือยัง หลังจากสำรองข้อมูลไปครั้งก่อน จากนั้นโปรแกรมก็จะคัดลอกไฟล์ที่ถูกเปลี่ยนแปลง หรือไฟล์ที่เกิดขึ้นใหม่ ไปยังที่ที่กำหนด การตรวจสอบวันเวลาการเปลี่ยนแปลงไฟล์ต่าง ๆ นั้น ผมได้ใช้ cPickle สร้างฐานข้อมูลขนาดกระทัดรัดให้กับโปรแกรม เพื่อใช้เก็บข้อมูลว่าไฟล์ใดถูกแก้ไขเมื่อใด ทำให้การตรวจสอบเป็นไปอย่างสะดวกสบายแฮ

การใช้งาน

ขั้นแรกให้คัดลอกโปรแกรมจิ๋วตัวนี้ไปยังแฟ้มที่ต้องการสำรองข้อมูล โดยอาจจะตั้งชื่อว่า backup.py สมมติว่าผมจะสำรองข้อมูลในแฟ้ม /home/bow ดังนั้นในแฟ้มดังกล่าวต้องมี /home/bow/backup.py อยู่ แล้วทำให้มันใช้งานได้โดยคำสั่ง

$chmod +x /home/bow/backup.py

จากนั้นก็สร้างแฟ้ม /home/bow ในแฟ้มจุดหมายปลายทาง สมมติอีกเช่นกันว่าผมจะสำรองข้อมูลลงในแฟ้ม /media/usbdisk/ ผมก็ต้องใช้คำสั่ง

$mkdir /media/usbdisk/home
$mkdir /media/usbdisk/home/bow

เพื่อสร้างแฟ้ม /media/usbdisk/home/bow สุดท้ายให้ใช้คำสั่ง

$/home/bow/backup.py /media/usbdisk

เพื่อสำรองข้อมูลที่ เหลือก็เพียงแค่รออย่างเดียวครับ แต่อ่ะ ! ไม่ต้องรอนานทุกครั้งที่สำรองข้อมูลครับครั้งต่อไปที่คุณสำรองข้อมูล ระยะเวลาที่คุณต้องรอจะสั้นลงไปอีกมากทีเดียว แน่นอนว่าโปรแกรมจิ๋วตัวนี้ยังพลิกแพลงได้อีกมากมาย แต่สำหรับการใช้งานของผมคงเพียงพอแค่นี้ครับ

เห็นไหมครับว่าการมีเพื่อนสนิทชื่อ Python นี่มันสบายจริง ๆ

Get latest news from Blognone

Comments

By: OHM
WriteriPhoneAndroidWindows
on 15 July 2006 - 22:06 #8003

เดี๋ยวผมเอาไปลองมั่ง

By: cwt
AndroidRed Hat
on 5 August 2006 - 01:35 #8501

ใช้ tar ไม่ง่ายกว่าเหรอครับ ?

By: Patrickz
WriterSymbian
on 2 November 2006 - 16:18 #11439

>> ใช้ tar ไม่ง่ายกว่าเหรอครับ ? นั่นสิครับ


Patrickz's blog|
linkedin

By: Bugfly on 3 November 2006 - 09:13 #11483

อย่างน้อยก็ได้เทคนิคดีๆเพิ่มครับ

By: witrassmabut
iPhoneUbuntu
on 8 June 2014 - 23:57 #711382

ว้าาาาววววว ท่าน bow_der_kleine มาในนี้ด้วยหรือนี่