Hello there, I've installed funtoo with ZFS using the guide in the funtoo wiki, but for some reason every time I reboot or halt the system some ZFS filesystems fail to unmount and I'm not sure why.
Here is the error I get every time I reboot:
* Unmounting ZFS filesystems ... umount: /: device is busy. (In some cases useful info about processes that use the device is found by lsof(8) or fuser(1)) cannot unmount '/': umount failed. * Some ZFS filesystems not unmounted
And here is my zfs list:
$ zfs list NAME USED AVAIL REFER MOUNTPOINT rpool 52.4G 861G 136K none rpool/FUNTOO 5.51G 861G 136K none rpool/FUNTOO/distfiles 3.65G 861G 3.65G /usr/portage/distfiles rpool/FUNTOO/portage 1.20G 861G 1.20G /usr/portage rpool/FUNTOO/src 487M 861G 487M /usr/src rpool/FUNTOO/var 196M 861G 196M /var rpool/HOME 28.7G 861G 28.7G /home rpool/HOME/root 368K 861G 368K /root rpool/ROOT 8.83G 861G 136K none rpool/ROOT/funtoo 8.83G 861G 8.83G / rpool/swap 9.28G 868G 2.18G -
my zpool status:
$ zpool status pool: rpool state: ONLINE scan: none requested config: NAME STATE READ WRITE CKSUM rpool ONLINE 0 0 0 sda2 ONLINE 0 0 0 errors: No known data errors
and my fstab:
$ cat /etc/fstab /dev/sda1 /boot ext2 defaults 0 2 /dev/zvol/rpool/swap none swap sw 0 0
Nothing is wrong with your configuration.... I would point my finger towards something like /usr which remain in use and prevent your rpool/ROOT/funtoo from being unmounted. The script /etc/init.d/zfs just try a bestial "unmount everything".
As 404_Error said, nothing is wrong with your configuration. Gentoo and Funtoo haven't figured out how to cleanly umount the pool on shutdown yet, but it's not really important. The theory we are going by is that since ZFS is an atomic transaction filesystem, if anything bad happens during shutdown, it will just be discarded .
For me it is a problem.
I have a dataset for /var/log which gets umounted most of the time during shutdown while some other datasets fail to umount because they are busy.
After /var/log is umounted, there is still data written to /var/log, which ends up as new files in dataset /var.
When the system boots afterwards it refuses to mount /var/log because the underlying directory is not empty.