ผมมักจะขี้เกียจชอบดาวน์โหลดไฟล์ 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/