ฉันต้องการใช้ cron เพื่อกำหนดตารางการขัดเป็นระยะของสระ ZFS ของฉันและในเวลาสั้น ๆ พอสมควรหลังจากการขัดเสร็จสิ้นส่งอีเมลรายงานสถานะถึงตัวฉันเอง วัตถุประสงค์ของการทำเช่นนี้คือการตรวจสอบปัญหาต่าง ๆ โดยไม่ต้องค้นหาด้วยตนเอง (ผลักดันแทนที่จะดึง)
ส่วนแรกนั้นง่าย: เพียงแค่ตั้งค่างาน cron เพื่อทำงานzpool scrub $POOL
เป็น root ในทุกช่วงเวลาที่เหมาะสมในสถานการณ์เฉพาะของฉัน
ส่วนที่สองฉันยังไม่ค่อยแน่ใจว่าจะทำอย่างไร zpool scrub
ส่งคืนทันทีและจากนั้นระบบจะรันสครับในพื้นหลัง (ซึ่งเป็นพฤติกรรมที่พึงประสงค์อย่างแน่นอนหากผู้ดูแลระบบเริ่มต้นการสครับจากผู้ใช้) zpool status
ให้รายงานสถานะและออก (พร้อมรหัสทางออก 0 ในขณะที่การขัดกำลังทำงานอยู่ แต่ยังไม่เสร็จดังนั้นฉันไม่ทราบว่าสถานะทางออกเปลี่ยนเมื่อเสร็จแล้ว แต่ฉันสงสัย) พารามิเตอร์เดียวที่บันทึกไว้สำหรับ zpool scrub คือ-s
"หยุดการขัดถู"
ปัญหาหลักคือการตรวจสอบการเปลี่ยนสถานะจากการขัดถูเพื่อขัดสำเร็จรูป ระบุว่าส่วนที่เหลือควรตกอยู่ในสถานที่
เป็นการดีที่ฉันต้องการบอกzpool scrub
ไม่ให้กลับจนกว่าการขัดผิวจะเสร็จสิ้น แต่ฉันไม่เห็นวิธีที่จะทำเช่นนั้น (มันจะทำให้ง่ายเกินไปที่จะ cron ง่ายๆzpool scrub --wait-until-done $POOL; zpool status $POOL
)
หากล้มเหลวฉันต้องการถามระบบว่ากำลังทำการขัดอยู่หรือไม่โดยเฉพาะอย่างยิ่งในวิธีที่ไม่เสี่ยงกับการอัปเกรดหรือการเปลี่ยนแปลงการกำหนดค่าเพื่อให้ฉันสามารถทำงานก่อนหรือไม่ การขัดเสร็จสิ้นแล้ว (โดยการดำเนินการสถานะ zpool เมื่อสถานะการขัดถูเริ่มตั้งแต่การขัดจนถึงการไม่ขัดผิว)
การตั้งค่านี้เฉพาะสำหรับระบบเวิร์กสเตชันดังนั้นในขณะที่เครื่องมือตรวจสอบเช่น Nagios อาจมีโปรแกรมเสริมที่จะแก้ปัญหาได้ก็รู้สึกค่อนข้าง overkill ในการติดตั้งเครื่องมือดังกล่าวสำหรับงานนี้ บางคนสามารถแนะนำวิธีการแก้ปัญหาที่ต่ำกว่าเทคโนโลยีได้หรือไม่?