Friday, October 23, 2026

Copy large folder in Linux Server (แนะนำ rsync มี progress และสามารถ resume ได้)

Ref: Gemini

ถ้าโฟลเดอร์ใน Linux Server มีขนาดประมาณ 28 GB และต้องการคัดลอกเป็นโฟลเดอร์ใหม่ ผมแนะนำใช้ rsync ครับ เพราะเหมาะกับข้อมูลขนาดใหญ่ สามารถแสดงความคืบหน้า และสั่งต่อได้หากการคัดลอกหยุดกลางคัน

วิธีที่ 1: ใช้ rsync (แนะนำ)

สมมติว่าต้องการคัดลอกโฟลเดอร์ /home/user/myfolder ไปเป็น /home/user/myfolder_backup

rsync -a --info=progress2 /home/user/myfolder/ /home/user/myfolder_backup/

ความหมายของคำสั่ง

  • rsync ใช้คัดลอกและซิงก์ข้อมูล

  • -a รักษาสิทธิ์ไฟล์ เวลา และโครงสร้างโฟลเดอร์

  • --info=progress2 แสดงความคืบหน้ารวมของการคัดลอก

  • /home/user/myfolder/ คือโฟลเดอร์ต้นทาง

  • /home/user/myfolder_backup/ คือโฟลเดอร์ปลายทาง

ข้อควรระวัง: เครื่องหมาย / หลังชื่อโฟลเดอร์ต้นทาง หมายถึงคัดลอก ข้อมูลภายในโฟลเดอร์ ไปยังปลายทาง

หากต้องการคัดลอกทั้งโฟลเดอร์โดยให้มีโฟลเดอร์ต้นทางอยู่ข้างใน ใช้:

rsync -a --info=progress2 /home/user/myfolder /home/user/myfolder_backup/

ผลลัพธ์จะเป็น /home/user/myfolder_backup/myfolder/

วิธีที่ 2: ใช้ cp แบบง่าย (ไม่มีสถานะบอกว่าถึงใหนแล้ว)

cp -a /home/user/myfolder /home/user/myfolder_backup
  • -a รักษาคุณสมบัติไฟล์และโฟลเดอร์

  • ไม่มีแถบแสดงความคืบหน้าโดยค่าเริ่มต้น

  • หากข้อมูลหยุดคัดลอก จะไม่มีระบบ resume ที่สะดวกเหมือน rsync

วิธีที่ 3: ใช้ rsync ผ่าน SSH ระหว่าง Server

หากต้นทางอยู่ Server 1 และต้องการคัดลอกไป Server 2:

rsync -a --info=progress2 --partial \
  /home/user/myfolder/ \
  user@192.168.1.1:/home/user/myfolder_backup/

--partial ช่วยเก็บไฟล์ที่คัดลอกไม่เสร็จไว้ เพื่อให้สั่ง rsync ซ้ำและทำงานต่อได้สะดวกขึ้น

ก่อนคัดลอกข้อมูล 28 GB ควรตรวจสอบพื้นที่ก่อน

df -h

ดูพื้นที่ว่างของดิสก์ปลายทาง และตรวจสอบขนาดโฟลเดอร์ต้นทาง:

du -sh /home/user/myfolder

คำแนะนำของผม: ถ้าคัดลอกภายในเครื่องเดียวกัน ใช้ rsync -a --info=progress2 ครับ แต่ถ้าต้องคัดลอกระหว่าง Server ผ่าน SSH ก็ใช้ rsync ได้เช่นกัน

ขอถามเพิ่มเติมนิดหนึ่งครับ: คุณจะคัดลอกโฟลเดอร์ 28 GB ภายใน Server เครื่องเดียวกัน หรือ จาก Server เครื่องหนึ่งไปอีก Server หนึ่งผ่านเครือข่าย ครับ? ผมจะได้แนะนำคำสั่งที่เหมาะสมที่สุดให้ครับ

เพิ่มเติม

  • กรณี rsync แต่ลืม sudo ให้ทำการยกเลิก process โดยหา process id ก่อนแล้วค่อย kill process

ps aux | grep '[r]sync'

  • ผลลัพธ์

user     3722318  4.1  0.0  74652 31044 pts/3    D+   20:33   1:14 rsync -a --info=progress2 ./folder/ ./folder_bak/

user      3722320  0.1  0.0  49636  9764 pts/3    S+   20:33   0:01 rsync -a --info=progress2 ./folder/ ./folder_bak/

user      3722321  4.2  0.0  47380 10076 pts/3    S+   20:33   1:16 rsync -a --info=progress2 ./folder/ ./folder_bak

  • สั่งหยุดทำงาน

kill -INT 3722318 3722320 3722321

  • ตรวจสอบ

ps -o pid,stat,cmd -p 3722318,3722320,3722321

  • ถ้ายังไม่หยุด

kill -TERM 3722318 3722320 3722321

Popular Posts