Ran into a zone conflict today and had to dust off more BIND knowledge. This occurred after I added a host to a zone which was enabled for dynamic updates for DHCP clients. Getting dynamic updates to work in conjunction with ISC DHCP requires a long rant of its own. Since there are no errors written to the console while you start the daemon, I find it always fun to watch your syslog.
$ tail -f -n 300 /var/log/syslog zone sub.domain.com/IN: journal rollforward failed: journal out of sync with zone zone sub.domain.com/IN: not loaded due to errors. all zones loaded running #stop the service gracefully $ systemctl stop bind9.service #delete the .jnl file $ rm /var/lib/bind/sub.domain.com.jnl #start BIND again $ systemctl start bind9.service #confirm the zone loaded while watching output from tail zone sub.domain.com/IN: loaded serial 423
If you have dynamic zones it is best to “freeze” them first before editing and “thaw” them after to avoid this problem in the first place. The commands for this are:
$ rndc freeze sub.domain.com #edit sub.domain.com zonefile $ rndc reload sub.domain.com #reload it $ rndc thaw sub.domain.com #resume processing the zone with thaw
When BIND has a conflict while loading the zone, all you need to do is simply delete the zone file that will have the extension “.jnl”. This will be where ever your zone files are located. They are typically in
/var/lib/bind or /etc/bind/zones. One of these days I’ll compile a master page instead of a post about all of my trouble working with BIND.