สำหรับความสำคัญของการสำรองข้อมูล (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 นี่มันสบายจริง ๆ
Comments
เดี๋ยวผมเอาไปลองมั่ง
ใช้ tar ไม่ง่ายกว่าเหรอครับ ?
>> ใช้ tar ไม่ง่ายกว่าเหรอครับ ? นั่นสิครับ
Patrickz's blog|
linkedin
อย่างน้อยก็ได้เทคนิคดีๆเพิ่มครับ
ว้าาาาววววว ท่าน bow_der_kleine มาในนี้ด้วยหรือนี่