Score:1

rsync ปฏิเสธที่จะแยกไดเร็กทอรี

ธง mx

ฉันกำลังพยายามสำรองข้อมูลระบบปฏิบัติการด้วย rsync และใส่สิ่งนี้ลงใน crontab ซึ่งโดยตัวมันเองใช้งานได้ดี แต่ด้วยเหตุผลบางอย่าง มันปฏิเสธที่จะนำเข้าบัญชี /export ในขณะที่ดูการยกเว้น...

0 2 * * 0 rsync -aAXv / --exclude={"/dev/*","/proc/*","/sys/*","/tmp/*","/run/*"," /mnt/*","/media/*","/lost+found","/export/*"} /media/backup-disk/server-backup/ >/dev/null 2>&1

ไม่รวมโฟลเดอร์อื่นทั้งหมดจากการสำรองข้อมูล

เหตุผลทั่วไปที่ฉันต้องการยกเว้นสิ่งนี้ /ส่งออก/* เกิดจากการที่ดิสก์สำรองข้อมูลนี้ถูกเมานต์เป็นการผูกกับ /export เนื่องจากการแบ่งปัน nfs ของดิสก์ไปยังเซิร์ฟเวอร์ระยะไกล

เนื่องจากข้อเท็จจริงที่ว่าได้แก่ /ส่งออก/* ฉันจบลงด้วยการที่ดิสก์ของฉันเต็มเนื่องจากการวนซ้ำใน rsync ของฉันขณะที่มันเริ่มสำรองข้อมูลดิสก์ด้วยตัวเอง (/export/backup-disk/ -> /media/backup-disk/server-backup)

การเมานต์ /media/backup-disk ของฉันเพื่อส่งออกมีดังต่อไปนี้ /etc/fstab:

/media/backup-disk /export/backup-disk ไม่มีการผูก 0 0 

ดังนั้นคำถามทั่วไปของฉันคือทำไมจึงรวมถึง /ส่งออก/* ขณะที่อยู่ในตัวเลือกการยกเว้นของ rsync และฉันจะแก้ไขได้อย่างไร

แก้ไข:

ผลลัพธ์ของการรันแบบแห้งด้วย --stats --progress (โดยไม่ต้องเปลี่ยนเส้นทาง stout en stin ไปที่ /dev/null):

sudo rsync -aAXv --stats --progress / --exclude={"/dev/*","/proc/*","/sys/*","/tmp/*","/run/*" ,"/mnt/*","/media/*","/lost+found","/export/*"} /media/backup-disk/test/ > /media/backup-disk/test.txt 

แมว /media/backup-disk/test.txt | grep -A1 ส่งออก/        
ส่งออก/
บ้าน/
--
หน้าแรก/ผู้ใช้/.local/lib/python3.8/site-packages/twilio/rest/bulkexports/v1/export/
หน้าแรก/ผู้ใช้/.local/lib/python3.8/site-packages/twilio/rest/bulkexports/v1/export/__init__.py
          9,060 100% 38.98kB/s 0:00:00 (xfr#17141, ir-chk=1174/22834)
home/user/.local/lib/python3.8/site-packages/twilio/rest/bulkexports/v1/export/day.py
         12,609 100% 54.24kB/s 0:00:00 (xfr#17142, ir-chk=1173/22834)
home/user/.local/lib/python3.8/site-packages/twilio/rest/bulkexports/v1/export/export_custom_job.py
         12,034 100% 51.77kB/s 0:00:00 (xfr#17143, ir-chk=1172/22834)
home/user/.local/lib/python3.8/site-packages/twilio/rest/bulkexports/v1/export/job.py
          8,970 100% 38.59kB/s 0:00:00 (xfr#17144, ir-chk=1171/22834)
หน้าแรก/ผู้ใช้/.local/lib/python3.8/site-packages/twilio/rest/bulkexports/v1/export/__pycache__/
หน้าแรก/ผู้ใช้/.local/lib/python3.8/site-packages/twilio/rest/bulkexports/v1/export/__pycache__/__init__.cpython-38.pyc
          8,809 100% 37.90kB/s 0:00:00 (xfr#17145, ir-chk=1169/22834)
หน้าแรก/ผู้ใช้/.local/lib/python3.8/site-packages/twilio/rest/bulkexports/v1/export/__pycache__/day.cpython-38.pyc
         12,206 100% 52.28kB/s 0:00:00 (xfr#17146, ir-chk=1168/22834)
หน้าแรก/ผู้ใช้/.local/lib/python3.8/site-packages/twilio/rest/bulkexports/v1/export/__pycache__/export_custom_job.cpython-38.pyc
         11,859 100% 50.79kB/s 0:00:00 (xfr#17147, ir-chk=1167/22834)
หน้าแรก/ผู้ใช้/.local/lib/python3.8/site-packages/twilio/rest/bulkexports/v1/export/__pycache__/job.cpython-38.pyc
          9,302 100% 39.84kB/s 0:00:00 (xfr#17148, ir-chk=1166/22834)
...

สิ่งนี้บ่งชี้ว่าไม่รวมการส่งออก แต่ถึงกระนั้นฉันก็ยังพบว่าดิสก์ของฉันเต็มทุกครั้งที่ cron ทำงานเพราะมันยังคงคัดลอกสิ่งที่อยู่ภายใน /export ไปยังไดเร็กทอรีสำรองข้อมูลเซิร์ฟเวอร์ของฉัน...

อีกสิ่งหนึ่งที่ฉันลืมพูดถึงในที่นี้คือในตอนแรกฉันคิดว่ามันอาจเป็นเรื่องของการลืม /ส่งออก/* ตอนแรกเพิ่มในภายหลังใน cron แต่ลืมที่จะรีบูต (ดังนั้นจึงไม่มีการรีบูตตามกำหนดการของ cron) แต่ถึงแม้จะรีบูต แต่ก็ยังสามารถคัดลอกได้ /ส่งออก/* กับครอน ดูเหมือนจะงี่เง่าเล็กน้อยที่จะต้องรีบูตเนื่องจากควรจะสามารถจัดการการแก้ไข cron ทุกครั้งที่ต้องเรียกใช้คำสั่งจาก cron แต่ต้องการให้แน่ใจว่าจะไม่ได้รับการแก้ไขหลังจากรีบูต ...

bac0n avatar
cn flag
จะเกิดอะไรขึ้นถ้าคุณเปลี่ยนสถานที่ด้วย Lost+Found
terdon avatar
cn flag
มันจะทำงานตามที่คาดไว้หรือไม่หากคุณสลับตรรกะและรวมเฉพาะสิ่งที่คุณต้องการแทนที่จะยกเว้นสิ่งอื่นๆ `rsync -aAXv /{boot,bin,etc.home,net,opt,root,srv,var}`? นอกจากนี้ คุณช่วย [แก้ไข] คำถามของคุณและรวมผลลัพธ์ของ rsync ที่แสดงเส้นทางใน `/export` ที่รับได้หรือไม่ ขึ้นอยู่กับลักษณะที่ปรากฏซึ่งอาจให้ข้อมูลบางอย่างแก่เรา สุดท้ายนี้ คุณได้ลอง `rsync -aAXv / "/export/*"` แล้วหรือยัง? จะทำงานตามที่คาดไว้หรือไม่หากคุณยกเว้นเฉพาะ 'ส่งออก' และไม่มีอะไรอื่นอีก
ar flag
คุณกำลังเปลี่ยนเส้นทางทั้ง stdout และ stderr ไปที่ /dev/null ลองก่อนโดยไม่เปลี่ยนเส้นทางนั้นแล้วดูว่า rsync พูดว่าอย่างไร
ar flag
ลองลบเครื่องหมายจุลภาคออก
FGOD avatar
mx flag
คำแนะนำที่ดี ให้พวกเขาลองทำสิ่งเหล่านี้ด้วยการทดสอบแบบแห้ง
FGOD avatar
mx flag
ตอนนี้ฉันกำลังลองใหม่ด้วย --stats --progress เพื่อให้ได้ผลลัพธ์ที่ดีขึ้นจากสิ่งที่ rsync เห็น และจะแก้ไขโพสต์ด้วย
FGOD avatar
mx flag
นี่อาจเป็นสิ่งที่ /dev/null?
hr flag
งาน AFAIK cron รันใน `/bin/sh` ตามค่าเริ่มต้น ซึ่งไม่รองรับการขยายวงเล็บปีกกา ฉันประหลาดใจ *ใดๆ* ของงานที่ถูกแยกออก - เว้นแต่คุณจะเพิ่ม `SHELL=/bin/bash` อย่างชัดเจนหรือคล้ายกันก่อนหน้าข้อกำหนดงาน
FGOD avatar
mx flag
@steeldriver ดังนั้นจะเป็นการดีกว่าถ้าสร้างไฟล์ที่มีรายการการยกเว้นและใช้ไฟล์ในการยกเว้น
FGOD avatar
mx flag
@sudodus เอาล่ะการปิดใช้งานการผูกเมานต์จะทำให้มันทำงานได้ตามปกติเพราะจะไม่มีอะไรใน /export/ ที่จะคัดลอกอยู่ดี ... มันใช้งานได้เหมือนที่ควรจะทำด้วยตนเองในเทอร์มินัลอย่างที่คุณเห็นในการแก้ไขที่ฉันทำ ฉันสามารถลองทำรายการสิ่งที่ต้องคัดลอกแทนได้ แต่จะไม่ทำรายการใหญ่เพราะฉันไม่สามารถทำ / เป็นแหล่งที่มาและจะต้องให้รายการทั้งหมดสำหรับไดเร็กทอรีแทน จำเป็นต้องคัดลอกหรือไม่
hr flag
@FGOD imho ไม่เป็นไรที่จะใช้ส่วนขยายรั้ง - หากคุณแน่ใจว่าคำสั่งนั้นรันในเชลล์ที่รองรับ (ksh,zsh,bash,...) โดยการตั้งค่า `SHELL` สำหรับ cronjob หรือโดยการย้ายคำสั่ง ไปยังเชลล์สคริปต์แยกต่างหากด้วย shebang ที่เหมาะสมและเรียกใช้จาก cron แทน
FGOD avatar
mx flag
@steeldriver ฉันได้ลองใช้ rsync ใน sh และรวมถึงการส่งออกด้วย ยังคิดว่ามันแปลกที่ไม่รวมส่วนที่เหลือ แต่จะทดสอบในวันนี้ด้วยการตั้งค่าเชลล์ใน cron และเรียกใช้
FGOD avatar
mx flag
@steeldriver แม้ว่าฉันจะเพิ่ม SHELL=/bin/zsh มันยังคงเลือก /export ตอนนี้ฉันสร้างสคริปต์ด้วย #!/bin/zsh ที่จุดเริ่มต้นและวางสคริปต์นั้นไว้ใน cron และตอนนี้ดูเหมือนว่าจะทำงานได้ดี ขอบคุณสำหรับเคล็ดลับในการทำงานของ cron!
Score:2
ธง mx

ดูเหมือนว่าปัญหาจะเหมือนกับที่ @steeldriver พูดถึง วิธีการเรียกใช้ cron (ใน sh แทนที่จะเป็น bash หรือ zsh หรือเชลล์อื่น ๆ ) ทำให้เข้ากันไม่ได้กับการขยายวงเล็บปีกกาของรายการแยก

เคล็ดลับในการเพิ่มเชลล์ไปยัง cron ไม่ได้แก้ไขปัญหานี้ แต่การวางคำสั่งไว้ในสคริปต์และเรียกใช้สคริปต์ช่วยแก้ปัญหาได้

ตอนนี้ฉันมีสคริปต์ซึ่งมีดังต่อไปนี้:

#!/bin/zsh

rsync -aAXv --stats --progress / --exclude={"/dev/*","/proc/*","/sys/*","/tmp/*","/run/*", "/mnt/*","/media/*","/lost+found","/export/*"} /media/backup-disk/test > /dev/null 2>&1

และ cron ดังต่อไปนี้ เพื่อให้มันทำงานทุกคืนวันอาทิตย์ เวลา 02.00 น.:

0 2 * * 0 /opt/scripts/rsync-os-backup
sudodus avatar
jp flag
ขอขอบคุณสำหรับการแบ่งปันวิธีการแก้ปัญหาของคุณ :-)

โพสต์คำตอบ

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