ผมมักจะขี้เกียจชอบดาวน์โหลดไฟล์ backup แบบเป็นก้อนๆ 800MB บ้าง 4GB บ้าง ล่าสุดก้อ 35GB ซึ่งเป็นเรื่องตลกที่ทำไมต้องมาดาวน์โหลดไฟล์ขนาดใหญ่มากขนาดนั้น ทั้งๆ ที่เราสามารถ remote synchronize ได้ โดยใช้ rsync และ rsync server มาทำความเข้าใจกับ rsync กันก่อน ลองดูตัวอย่างการดาวน์โหลดไฟล์ที่ผมชอบทำ ทีละ 35GB นี่คงไม่ไหวนะครับ ดาวน์โหลด archive ไฟล์ใหญ่ขนาดนั้น และหากคลี่ไฟล์ไม่ได้ก็มีโอกาสเสียข้อมูลไปได้เช่นกัน วิธีแก้ง่ายๆ คือใช้วิธีการ remote sync คือจะดาวน์โหลดเฉพาะข้อมูลที่มีการเปลี่ยนแปลง เช่น ไฟล์ขนาดใหญ่ขึ้น ไฟล์ขนาดเล็กลง วันที่การแก้ไขเปลี่ยนไป มีไฟล์ใหม่ เป็นต้น เอาล่ะสิ่งที่เราต้องมี คือ
โปรแกรม rsync ครับ ใครยังไม่มีก็จัดการติดตั้งได้เลยโดยใช้คำสั่ง
# apt-get install rsync
จากนั้นคุณก็มี rsync server ทีนี้ลองทดสอบดูผ่าน rsync โดยใช้ ssh ดูครับ
$ rsync -avz -e ssh remoteuser@remotehost:/remote/dir /this/dir/
ใช้วิธี sync แบบนี้ก้อพอได้ครับ แต่ถ้าจะให้ดี ไหนๆ ก้อติดตั้ง rsync ไปแล้ว มาตั้งค่าให้เป็น rsync server กันดีกว่าครับ เริ่มจาก สร้างไฟล์ config กันก่อนที่ /etc/rsyncd.conf จากนั้นใส่ข้อมูลลงไปดังนี้ครับ
------------------------------------------------
max connections = 1
log file = /var/log/rsync.log
timeout = 300
[www]
comment = web site
path = /var/www
read only = yes
list = yes
uid = nobody
gid = nogroup
#auth users = username
list = yes
#hosts allow = 127.0.0.0/8 192.168.0.0/24
#secrets file = /etc/rsyncd.secrets
------------------------------------------------
อ่ะลองมาดู config ข้างบนกัน เรากำหนดพาร์ทที่ต้องการให้บริการ sync คือ /var/www โดยใช้ชื่อ www เป็นโหมด ready only = yes คือไม่สามารถ sync ไฟล์ขึ้นไปเขียนบน server ได้ อ่านได้อย่างเดียว สำหรับ auth users คือกำหนดให้เฉพาะ username นี้ sync ข้อมูลในส่วน www ได้ สำหรับ host allow สามารถกำหนด network ที่จะเข้าถึง rsync server ได้ สำหรับ secrets file คือไฟล์ที่ใช้เก็บ username และ password ซึ่งเป็น plain text อยู่ในรูปแบบ username:password อ้ออย่าลืม chmod ไฟล์นี้ด้วย 400 ป้องกันรหัสผ่านของเราครับ
จากนั้นตั้งค่าให้ rsync ทำงานเป็น deamon โดยใช้คำสั่งดังต่อไปนี้
# /usr/bin/rsync rsyncd --daemon
เอาไปใส่ใน rc.local เพื่อให้เริ่มต้นตั้งแต่ตอน boot ก้อได้ครับ แค่นี้ก้อเรียบร้อย มาลองทดสอบดูกัน ใช้คำสั่ง
$ rsync -avz rsync://remotehost:/www
ดูครับ เราจะเห็นไฟล์ที่อยู่ใน /var/www เลยล่ะ ถ้าต้องการ sync ใช้คำสั่ง
$ rsync -avz rsync://remotehost:/remote/dir /this/dir/
น่านสิ ไปอยู่ไหนมาเนี่ย เพิ่งรู้จัก อาซิ่ม
ปกติผมใช้ sync ไฟล์ deb source จากเครื่อง build package ที่บ้าน พอมาที่ทำงานนึกขึ้นได้ อ้องั้นสั่ง sync เป็นไฟล์เล็กๆ มาน่าจะเร็วกว่าและดีกว่า อีกอย่างไม่ต้องทำ archive ขนาดใหญ่ขนาดนั้นก้อได้ นั่งทำ archive ดาวน์โหลดอยู่ได้ตั้งอาทิตย์นึงตลกดีครับ
เยี่ยมครับ
ขอบคุณครับ