Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 20 Jun 2007 11:57:07 +0200
From:      Borja Marcos <borjamar@sarenet.es>
To:        freebsd-current@freebsd.org
Subject:   Re: ZFS does not load and mount at boot time
Message-ID:  <4E1E93FB-31D2-4F38-9979-946935BE0729@sarenet.es>

next in thread | raw e-mail | index | archive | help

> I have now moved zfs.cache to /etc/zfs and load the module via  
> rc.conf. I
> have also included the saving of zfs.cache on /cfg in "zfs stop"  
> and set
> KEYWORD: shutdown for zfs. However, I still get
>
> ZFS: WARNING: pool 'tank' could not be loaded as it was last  
> accessed by
> another system (host: eclipse.aei.uni-hannover.de hostid: 0xf7ab4bd6).
> See: http://www.sun.com/msg/ZFS-8000-EY
>
> when booting. Any further ideas?
>

Yes. I've run into the same problem when installing a new machine  
with the June FreeBSD 7 snapshot, cvsupping yesterday, and trying to  
set up /usr and /var in ZFS.

It seems ZFS labels the pools it creates using the hostname and the  
hostid. The hostid is a unique number present in ROM/flash in Sun  
machines, and it turns out one of the IP addresses of the machine is  
used by FreeBSD as hostid.

I had booted into multiuser, created a pool, and created three  
filesystems, say zfs/usr, zfs/var and zfs/home.

After copying /var, /usr and /home to the new zfs filesystems, I  
rebooted in single user in order to edit /etc/fstab to remove the  
references to them and change the ZFS mountpoints to the proper  
places, and I've run across the same problem. The ZFS pool was  
labelled with the hostname (still not set) and the hostid (still not  
set, as the network interfaces are initialised *AFTER* the  
filesystems are mounted).

I've solved the problem in a quick and dirty way forcing the system  
to import the ZFS pool despite the fact that it believes it's been  
used by another host. The ugly kludge is simply to edit /etc/rc.d/zfs  
and add "zfs pool import -f poolname" to the zfs_start_main() section  
right after "zfs volinit".

zfs_start_main()
{
         zfs volinit
         zpool import -f pruebazfs
         zfs mount -a
         zfs share -a
         if [ ! -r /etc/zfs/exports ]; then
                 touch /etc/zfs/exports
         fi


Ugly but it works. It seems it's necessary to either rethink that ZFS  
behavior (which is desirable), or set the hostname as soon as  
possible. Regarding the hostid, it's trickier than it seems. But  
anyway I don't think it's a good idea to use an IP address (which of  
them?) as a hostid. A simple IP address change could be quite  
confusing for an unaware administrator.





Borja.







----------------
"The thing he realised about the windows was this: because they had  
been converted into openable windows after they had first been  
designed to be impregnable, they were, in fact, much less secure than  
if they had been designed as openable windows in the first place."
    Douglas Adams, "Mostly Harmless"






Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?4E1E93FB-31D2-4F38-9979-946935BE0729>