Solusi 1:
Di ZFS Di Linux, dimulai dengan versi 0.6.3 ini dapat ditangani dengan cukup elegan dengan menggunakan ZFS Event Daemon (zed). Daemon peristiwa, berdasarkan pemantauan peristiwa kernel secara langsung, dapat segera bereaksi terhadap peristiwa apa pun yang terjadi dan tidak bergantung pada polling dan parsing berkelanjutan dari keluaran beberapa perintah lain.
Buat skrip shell dengan nama file apa pun yang dimulai dengan /etc/zfs/zed.d/scrub.finish
(misalnya, scrub.finish-custom.sh
). Skrip itu dapat mengambil tindakan yang sesuai, seperti mengirim email, menulis entri log di suatu tempat, atau membuat sistem bernyanyi dan menari (Oke, mungkin bukan itu). Contoh disediakan yang dapat memberikan titik awal.
Jika yang Anda inginkan hanyalah menerima email saat scrub selesai, tersedia scrub.finish-email.sh
skrip akan melakukannya dengan baik. Cukup edit /etc/zfs/zed.d/zed.rc untuk menunjukkan ke mana email harus dikirim dan apakah email harus dikirim juga jika kumpulan tidak mengalami masalah, pastikan sesuatu bernama scrub.finish
diikuti oleh apa pun di /etc/zfs/zed.d mengarah ke sana, dan pastikan zed dimulai saat boot.
Solusi 2:
Saya menggunakan skrip sederhana ini untuk menggosok pelaporan status melalui email.
- zadmin
Jika Anda perlu mendeteksi transisi dari scrub running
ke scrub finished
Saya akan memeriksa state
bidang zpool status
keluaran. Sesuatu seperti ini:
# start scrubbing
zpool scrub ZPOOL
# wait till scrub is finished
while zpool status ZPOOL | grep 'scan: *scrub in progress' > /dev/null; do
echo -n '.'
sleep 10
done
# send a report
zpool status | mail -s "zpool status: ZPOOL" RECIPIENT
Solusi 3:
Meskipun pertanyaan ini khusus untuk linux, ini adalah hasil google pertama saat mencari "tunggu sampai scrub selesai" , oleh karena itu saya ingin menambahkan beberapa informasi berguna untuk orang yang menjalankan OpenSolaris (mengujinya di OmniOS, tetapi SmartOS, illumos, dll. harus serupa) daripada Linux (Solaris normal juga berfungsi, tetapi saya tidak mengujinya di sana).
Anda dapat menggunakan syseventadm
untuk mendaftarkan peristiwa kernel. Daftar lengkapnya dapat ditemukan di /usr/include/sys/sysevent/eventdefs.h
(cukup cari "ZFS" di file ini). Setelah menambahkan acara, layanan harus dimulai ulang, misalnya:
syseventadm add -c EC_zfs -s ESC_ZFS_scrub_finish /path/to/script.sh \$pool_name
syseventadm restart
Dengan cara ini, skrip akan dimulai saat pembersihan kumpulan apa pun selesai - Anda harus memeriksa di dalam skrip jika $1
sama dengan nama kolam yang Anda inginkan. Tetap saja, biayanya jauh lebih sedikit daripada polling.
Solusi 4:
Saya sangat sukses dengan zfswatcher