Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> การเขียนโปรแกรม Bash

การสำรองข้อมูล Linux ด้วย rsync:15 คำสั่งสำคัญ

การสำรองข้อมูล Linux ด้วย rsync:15 คำสั่งสำคัญ rsync ย่อมาจากการซิงค์ระยะไกล

rsync ใช้เพื่อดำเนินการสำรองข้อมูลใน UNIX / Linux

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

คุณสมบัติที่สำคัญของ rsync

  • ความเร็ว :ครั้งแรก rsync จะจำลองเนื้อหาทั้งหมดระหว่างไดเร็กทอรีต้นทางและปลายทาง ครั้งต่อไป rsync จะโอนเฉพาะบล็อกหรือไบต์ที่เปลี่ยนแปลงไปยังตำแหน่งปลายทาง ซึ่งทำให้การถ่ายโอนรวดเร็วมาก
  • ความปลอดภัย :rsync อนุญาตให้เข้ารหัสข้อมูลโดยใช้โปรโตคอล ssh ในระหว่างการถ่ายโอน
  • แบนด์วิธน้อยลง :rsync ใช้การบีบอัดและคลายการบีบอัดบล็อกข้อมูลทีละบล็อกที่จุดสิ้นสุดการส่งและรับตามลำดับ ดังนั้นแบนด์วิดท์ที่ใช้โดย rsync จะน้อยกว่าเสมอเมื่อเทียบกับโปรโตคอลการถ่ายโอนไฟล์อื่นๆ
  • สิทธิพิเศษ :ไม่จำเป็นต้องมีสิทธิพิเศษในการติดตั้งและดำเนินการ rsync

ไวยากรณ์

$ rsync options source destination

ต้นทางและปลายทางอาจเป็นได้ทั้งภายในเครื่องหรือระยะไกล ในกรณีระยะไกล ให้ระบุชื่อล็อกอิน ชื่อเซิร์ฟเวอร์ระยะไกล และตำแหน่ง

ตัวอย่างที่ 1. ซิงโครไนซ์สองไดเร็กทอรีในเซิร์ฟเวอร์ภายในเครื่อง

หากต้องการซิงค์สองไดเรกทอรีในคอมพิวเตอร์ในระบบ ให้ใช้คำสั่ง rsync -zvr ต่อไปนี้

$ rsync -zvr /var/opt/installation/inventory/ /root/temp
building file list ... done
sva.xml
svB.xml
.
sent 26385 bytes received 1098 bytes 54966.00 bytes/sec
total size is 44867 speedup is 1.63
$

ในตัวอย่าง rsync ข้างต้น:

  • -z คือการเปิดใช้งานการบีบอัด
  • -v รายละเอียด
  • -r บ่งชี้ถึงการเกิดซ้ำ

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

$ ls -l /var/opt/installation/inventory/sva.xml /root/temp/sva.xml
-r--r--r-- 1 bin bin 949 Jun 18 2009 /var/opt/installation/inventory/sva.xml
-r--r--r-- 1 root bin 949 Sep 2 2009 /root/temp/sva.xml

ตัวอย่างที่ 2 รักษาการประทับเวลาระหว่างการซิงค์โดยใช้ rsync -a

ตัวเลือก rsync -a ระบุโหมดการเก็บถาวร -ตัวเลือกทำสิ่งต่อไปนี้

  • โหมดเรียกซ้ำ
  • รักษาลิงก์สัญลักษณ์
  • รักษาสิทธิ์
  • รักษาการประทับเวลา
  • รักษาเจ้าของและกลุ่ม

ตอนนี้ ดำเนินการคำสั่งเดียวกันกับตัวอย่างที่ 1 (แต่ด้วยตัวเลือก rsync -a) ดังที่แสดงด้านล่าง:

$ rsync -azv /var/opt/installation/inventory/ /root/temp/
building file list ... done
./
sva.xml
svB.xml
.
sent 26499 bytes received 1104 bytes 55206.00 bytes/sec
total size is 44867 speedup is 1.63
$

ดังที่คุณเห็นด้านล่าง rsync จะรักษาการประทับเวลาไว้ในระหว่างการซิงค์

$ ls -l /var/opt/installation/inventory/sva.xml /root/temp/sva.xml
-r--r--r-- 1 root bin 949 Jun 18 2009 /var/opt/installation/inventory/sva.xml
-r--r--r-- 1 root bin 949 Jun 18 2009 /root/temp/sva.xml

ตัวอย่าง 3. ซิงโครไนซ์ไฟล์เดียวเท่านั้น

หากต้องการคัดลอกเพียงไฟล์เดียว ให้ระบุชื่อไฟล์เป็นคำสั่ง rsync ดังที่แสดงด้านล่าง

$ rsync -v /var/lib/rpm/Pubkeys /root/temp/
Pubkeys
sent 42 bytes received 12380 bytes 3549.14 bytes/sec
total size is 12288 speedup is 0.99

ตัวอย่าง 4. ซิงโครไนซ์ไฟล์จากภายในสู่ระยะไกล

rsync ช่วยให้คุณสามารถซิงโครไนซ์ไฟล์/ไดเร็กทอรีระหว่างระบบภายในและระบบระยะไกลได้

$ rsync -avz /root/temp/ thegeekstuff@192.168.200.10:/home/thegeekstuff/temp/
Password:
building file list ... done
./
rpm/
rpm/Basenames
rpm/Conflictname
sent 15810261 bytes received 412 bytes 2432411.23 bytes/sec
total size is 45305958 speedup is 2.87

ขณะทำการซิงโครไนซ์กับเซิร์ฟเวอร์ระยะไกล คุณต้องระบุชื่อผู้ใช้และที่อยู่ IP ของเซิร์ฟเวอร์ระยะไกล คุณควรระบุไดเร็กทอรีปลายทางบนเซิร์ฟเวอร์ระยะไกลด้วย รูปแบบคือชื่อผู้ใช้@ชื่อเครื่องจักร:เส้นทาง

ดังที่คุณเห็นด้านบน ระบบจะถามรหัสผ่านขณะทำการ rsync จากเซิร์ฟเวอร์ภายในเครื่องไปยังเซิร์ฟเวอร์ระยะไกล

บางครั้งคุณไม่ต้องการป้อนรหัสผ่านขณะสำรองไฟล์จากเซิร์ฟเวอร์ภายในเครื่องไปยังเซิร์ฟเวอร์ระยะไกล ตัวอย่างเช่น หากคุณมีเชลล์สคริปต์สำรองที่คัดลอกไฟล์จากภายในเครื่องไปยังเซิร์ฟเวอร์ระยะไกลโดยใช้ rsync คุณจะต้องมีความสามารถในการ rsync โดยไม่ต้องป้อนรหัสผ่าน

หากต้องการทำเช่นนั้น ให้ตั้งค่ารหัสผ่าน ssh ให้น้อยลงตามที่เราอธิบายไว้ก่อนหน้านี้

ตัวอย่างที่ 5. ซิงโครไนซ์ไฟล์จากระยะไกลสู่ท้องถิ่น

เมื่อคุณต้องการซิงโครไนซ์ไฟล์จากระยะไกลไปยังท้องถิ่น ให้ระบุเส้นทางระยะไกลในแหล่งที่มาและเส้นทางท้องถิ่นในเป้าหมายดังที่แสดงด้านล่าง

$ rsync -avz thegeekstuff@192.168.200.10:/var/lib/rpm /root/temp
Password:
receiving file list ... done
rpm/
rpm/Basenames
.
sent 406 bytes received 15810230 bytes 2432405.54 bytes/sec
total size is 45305958 speedup is 2.87

ตัวอย่างที่ 6 เชลล์ระยะไกลสำหรับการซิงโครไนซ์

rsync ช่วยให้คุณสามารถระบุเชลล์ระยะไกลที่คุณต้องการใช้ คุณสามารถใช้ rsync ssh เพื่อเปิดใช้งานการเชื่อมต่อระยะไกลที่ปลอดภัยได้

ใช้ rsync -e ssh เพื่อระบุเชลล์ระยะไกลที่จะใช้ ในกรณีนี้ rsync จะใช้ ssh

$ rsync -avz -e ssh thegeekstuff@192.168.200.10:/var/lib/rpm /root/temp
Password:
receiving file list ... done
rpm/
rpm/Basenames
sent 406 bytes received 15810230 bytes 2432405.54 bytes/sec
total size is 45305958 speedup is 2.87

ตัวอย่าง 7. อย่าเขียนทับไฟล์ที่ถูกแก้ไขที่ปลายทาง

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

ใช้ตัวเลือก rsync -u เพื่อทำสิ่งนั้น (เช่น อย่าเขียนทับไฟล์ที่ปลายทาง หากมีการแก้ไข) ในตัวอย่างต่อไปนี้ ไฟล์ชื่อ Basenames ได้รับการแก้ไขที่ปลายทางแล้ว ดังนั้น จะไม่ถูกเขียนทับด้วย rsync -u

$ ls -l /root/temp/Basenames
total 39088
-rwxr-xr-x 1 root root 4096 Sep 2 11:35 Basenames
$ rsync -avzu thegeekstuff@192.168.200.10:/var/lib/rpm /root/temp
Password:
receiving file list ... done
rpm/
sent 122 bytes received 505 bytes 114.00 bytes/sec
total size is 45305958 speedup is 72258.31
$ ls -lrt
total 39088
-rwxr-xr-x 1 root root 4096 Sep 2 11:35 Basenames

ตัวอย่างที่ 8. ซิงโครไนซ์เฉพาะโครงสร้างแผนผังไดเร็กทอรี (ไม่ใช่ไฟล์)

ใช้ตัวเลือก rsync -d เพื่อซิงโครไนซ์เฉพาะแผนผังไดเร็กทอรีจากต้นทางไปยังปลายทาง ตัวอย่างด้านล่าง ซิงโครไนซ์เฉพาะแผนผังไดเร็กทอรีในลักษณะเรียกซ้ำ ไม่ใช่ไฟล์ในไดเร็กทอรี

$ rsync -v -d thegeekstuff@192.168.200.10:/var/lib/ .
Password:
receiving file list ... done
logrotate.status
CAM/
YaST2/
acpi/
sent 240 bytes received 1830 bytes 318.46 bytes/sec
total size is 956 speedup is 0.46

ตัวอย่าง 9. ดูความคืบหน้าของ rsync ระหว่างการถ่ายโอน

เมื่อคุณใช้ rsync สำหรับการสำรองข้อมูล คุณอาจต้องการทราบความคืบหน้าของการสำรองข้อมูล เช่น จำนวนไฟล์ที่คัดลอก อัตราที่คัดลอกไฟล์ เป็นต้น

ตัวเลือก rsync –progress จะแสดงความคืบหน้าโดยละเอียดของการดำเนินการ rsync ดังที่แสดงด้านล่าง

$ rsync -avz --progress thegeekstuff@192.168.200.10:/var/lib/rpm/ /root/temp/
Password:
receiving file list ...
19 files to consider
./
Basenames
 5357568 100% 14.98MB/s 0:00:00 (xfer#1, to-check=17/19)
Conflictname
 12288 100% 35.09kB/s 0:00:00 (xfer#2, to-check=16/19)
.
.
.
sent 406 bytes received 15810211 bytes 2108082.27 bytes/sec
total size is 45305958 speedup is 2.87

คุณยังสามารถใช้ยูทิลิตี้ rsnapshot (ที่ใช้ rsync) เพื่อสำรองข้อมูลเซิร์ฟเวอร์ linux ในเครื่องหรือสำรองเซิร์ฟเวอร์ linux ระยะไกลได้

ตัวอย่างที่ 10. ลบไฟล์ที่สร้างขึ้นที่เป้าหมาย

หากไม่มีไฟล์อยู่ที่ต้นทาง แต่อยู่ที่เป้าหมาย คุณอาจต้องการลบไฟล์ที่เป้าหมายระหว่าง rsync

ในกรณีนั้น ให้ใช้ตัวเลือก –ลบ ดังที่แสดงด้านล่าง ตัวเลือกลบ rsync จะลบไฟล์ที่ไม่มีอยู่ในไดเร็กทอรีต้นทาง

# Source and target are in sync. Now creating new file at the target.
$ > new-file.txt
$ rsync -avz --delete thegeekstuff@192.168.200.10:/var/lib/rpm/ .
Password:
receiving file list ... done
deleting new-file.txt
./
sent 26 bytes received 390 bytes 48.94 bytes/sec
total size is 45305958 speedup is 108908.55

Target มีไฟล์ใหม่ชื่อ new-file.txt เมื่อซิงโครไนซ์กับซอร์สด้วยตัวเลือก –delete มันจะลบไฟล์ new-file.txt

ตัวอย่างที่ 11. อย่าสร้างไฟล์ใหม่ที่เป้าหมาย

หากต้องการคุณสามารถอัปเดต (ซิงค์) เฉพาะไฟล์ที่มีอยู่ที่เป้าหมายได้ ในกรณีที่แหล่งที่มามีไฟล์ใหม่ซึ่งไม่ได้อยู่ที่เป้าหมาย คุณสามารถหลีกเลี่ยงการสร้างไฟล์ใหม่เหล่านี้ที่เป้าหมายได้ หากคุณต้องการคุณสมบัตินี้ ให้ใช้ตัวเลือก – ที่มีอยู่พร้อมกับคำสั่ง rsync

ขั้นแรก ให้เพิ่ม new-file.txt ที่แหล่งที่มา

[/var/lib/rpm ]$ > new-file.txt

จากนั้น ดำเนินการ rsync จากเป้าหมาย

$ rsync -avz --existing root@192.168.1.2:/var/lib/rpm/ .
root@192.168.1.2's password:
receiving file list ... done
./
sent 26 bytes received 419 bytes 46.84 bytes/sec
total size is 88551424 speedup is 198991.96

หากคุณเห็นผลลัพธ์ข้างต้น แสดงว่าไม่ได้รับไฟล์ใหม่ new-file.txt

ตัวอย่าง 12. ดูการเปลี่ยนแปลงระหว่างต้นทางและปลายทาง

ตัวเลือกนี้มีประโยชน์ในการดูความแตกต่างในไฟล์หรือไดเร็กทอรีระหว่างต้นทางและปลายทาง

ที่แหล่งที่มา:

$ ls -l /var/lib/rpm
-rw-r--r-- 1 root root 5357568 2010-06-24 08:57 Basenames
-rw-r--r-- 1 root root 12288 2008-05-28 22:03 Conflictname
-rw-r--r-- 1 root root 1179648 2010-06-24 08:57 Dirnames

ที่ปลายทาง:

$ ls -l /root/temp
-rw-r--r-- 1 root root 12288 May 28 2008 Conflictname
-rw-r--r-- 1 bin bin 1179648 Jun 24 05:27 Dirnames
-rw-r--r-- 1 root root 0 Sep 3 06:39 Basenames

ในตัวอย่างข้างต้น ระหว่างต้นทางและปลายทาง มีความแตกต่างสองประการ ประการแรก เจ้าของและกลุ่มของไฟล์ Dirname แตกต่างกัน ถัดไป ขนาดจะแตกต่างกันสำหรับชื่อไฟล์

ตอนนี้เรามาดูกันว่า rsync แสดงความแตกต่างนี้อย่างไร ตัวเลือก -i แสดงรายการการเปลี่ยนแปลง

$ rsync -avzi thegeekstuff@192.168.200.10:/var/lib/rpm/ /root/temp/
Password:
receiving file list ... done
>f.st.... Basenames
.f....og. Dirnames
sent 48 bytes received 2182544 bytes 291012.27 bytes/sec
total size is 45305958 speedup is 20.76

ในเอาต์พุตจะแสดงตัวอักษร 9 ตัวหน้าชื่อไฟล์หรือชื่อไดเร็กทอรีที่ระบุถึงการเปลี่ยนแปลง

ในตัวอย่างของเรา ตัวอักษรที่อยู่หน้าชื่อฐาน (และชื่อ Dirnames) ระบุว่า:

> specifies that a file is being transferred to the local host.
f represents that it is a file.
s represents size changes are there.
t represents timestamp changes are there.
o owner changed
g group changed.

ตัวอย่างที่ 13. รวมและไม่รวมรูปแบบระหว่างการถ่ายโอนไฟล์

rsync ช่วยให้คุณสามารถกำหนดรูปแบบที่คุณต้องการรวมและยกเว้นไฟล์หรือไดเร็กทอรีขณะทำการซิงโครไนซ์

$ rsync -avz --include 'P*' --exclude '*' thegeekstuff@192.168.200.10:/var/lib/rpm/ /root/temp/
Password:
receiving file list ... done
./
Packages
Providename
Provideversion
Pubkeys
sent 129 bytes received 10286798 bytes 2285983.78 bytes/sec
total size is 32768000 speedup is 3.19

ในตัวอย่างข้างต้น จะรวมเฉพาะไฟล์หรือไดเร็กทอรีที่ขึ้นต้นด้วย 'P' (โดยใช้ rsync include) และไม่รวมไฟล์อื่นๆ ทั้งหมด (โดยใช้ rsync ไม่รวม '*' )

ตัวอย่าง 14. ห้ามถ่ายโอนไฟล์ขนาดใหญ่

คุณสามารถบอก rsync ไม่ให้ถ่ายโอนไฟล์ที่มีขนาดใหญ่กว่าขนาดที่ระบุได้โดยใช้ตัวเลือก rsync –max-size

$ rsync -avz --max-size='100K' thegeekstuff@192.168.200.10:/var/lib/rpm/ /root/temp/
Password:
receiving file list ... done
./
Conflictname
Group
Installtid
Name
Sha1header
Sigmd5
Triggername
sent 252 bytes received 123081 bytes 18974.31 bytes/sec
total size is 45305958 speedup is 367.35

max-size=100K ทำให้ rsync ถ่ายโอนเฉพาะไฟล์ที่น้อยกว่าหรือเท่ากับ 100K คุณสามารถระบุ M สำหรับเมกะไบต์ และ G สำหรับกิกะไบต์

ตัวอย่าง 15. ถ่ายโอนไฟล์ทั้งหมด

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

หากแบนด์วิธเครือข่ายไม่เป็นปัญหาสำหรับคุณ (แต่ CPU เป็นปัญหา) คุณสามารถถ่ายโอนไฟล์ทั้งหมดได้โดยใช้ตัวเลือก rsync -W การดำเนินการนี้จะช่วยเร่งกระบวนการ rsync เนื่องจากไม่ต้องดำเนินการตรวจสอบที่ต้นทางและปลายทาง

# rsync -avzW thegeekstuff@192.168.200.10:/var/lib/rpm/ /root/temp
Password:
receiving file list ... done
./
Basenames
Conflictname
Dirnames
Filemd5s
Group
Installtid
Name
sent 406 bytes received 15810211 bytes 2874657.64 bytes/sec
total size is 45305958 speedup is 2.87

บทช่วยสอน rsync เพิ่มเติม

  • วิธีตั้งค่า Rsync ด้วย SSH บน UNIX / Linux (rsync โดยไม่ต้องใช้รหัสผ่าน)
  • 6 ตัวอย่าง rsync เพื่อแยกหลายไฟล์และไดเรกทอรีโดยใช้การยกเว้นจาก