You are not logged in.
TL;DR for thread: If you separate out "core" filesystems (/var, /usr, /etc) on a ZFS root system, set them to have mountpoint=legacy and mount them using /etc/fstab, else they won't mount, and your machine won't boot properly.
I have arch installed on a ZFS raidz, with /boot on an SSD which I intend to use the split for L2ARC/ZIL. See below for all the details.
The machine boots just fine, however it only mounts the bootfs:
storage/root
from my zpool, but not
storage/root/var
An empty /home and a sparse /var are created.
Running:
rm -rf /home /var
zfs mount -a
sets everything right, however.
I've tried changing the kernel option to
zfs=storage
but the root filesystem does not mount in this case, and I get dumped to busy box.
Any help would be greatly appreciated.
ZFS details:
# zpool status
pool: storage
state: ONLINE
scan: scrub repaired 0 in 0h0m with 0 errors on Thu Apr 4 00:56:08 2013
config:NAME STATE READ WRITE CKSUM
storage ONLINE 0 0 0
raidz1-0 ONLINE 0 0 0
ata-WDC_WD10EFRX-68JCSN0_WD-WMC1U5219192 ONLINE 0 0 0
ata-WDC_WD10EFRX-68JCSN0_WD-WMC1U5220136 ONLINE 0 0 0
ata-WDC_WD10EFRX-68JCSN0_WD-WMC1U5210619 ONLINE 0 0 0
ata-ST31000524AS_9VPBVZAK ONLINE 0 0 0errors: No known data errors
# zfs list
NAME USED AVAIL REFER MOUNTPOINT
storage 1.00G 2.59T 221K none
storage/home 6.20M 2.59T 6.20M /home
storage/root 823M 24.2G 823M /
storage/root/var 194M 9.81G 194M /var# zpool get bootfs
NAME PROPERTY VALUE SOURCE
storage bootfs storage/root local# cat /boot/syslinux/syslinux.cfg
...
LABEL arch
MENU LABEL Arch Linux
LINUX ../vmlinuz-linux
APPEND zfs=bootfs zfs_force=1 ro
INITRD ../initramfs-linux.img
Edit: Updated to my current, tweaked setup.
Last edited by iliveinapark (2013-04-10 08:28:17)
Offline
did you activate the zfs daemon? if you did double check it creates the cache file in the right place: https://wiki.archlinux.org/index.php/ZF … atic_Start
Offline
Thanks for the idea. I hadn't started the daemon when I posted. Having done it now, storage/home is successfully mounting, but storage/var cannot mount, and the zfs daemon is failing.
I think the issue is that /var is being created by one of the hooks before the zfs hook, and so zfs cannot mount to /var.
zfs.service - Zettabyte File System (ZFS)
Loaded: loaded (/usr/lib/systemd/system/zfs.service; enabled)
Active: failed (Result: exit-code) since Sat 2013-04-06 08:24:59 EST; 1min 1s ago
Docs: man:zfs(8)
man:zpool(8)
Process: 638 ExecStart=/usr/sbin/zfs mount -a (code=exited, status=1/FAILURE)
Process: 503 ExecStart=/usr/sbin/zpool import -c /etc/zfs/zpool.cache -aN (code=exited, status=0/SUCCESS)
Process: 489 ExecStart=/sbin/modprobe zfs (code=exited, status=0/SUCCESS)Apr 06 08:24:59 bamboozle zpool[503]: no pools available to import
Apr 06 08:24:59 bamboozle zfs[638]: cannot mount '/var': directory is not empty
Apr 06 08:24:59 bamboozle systemd[1]: zfs.service: main process exited, code=exited, status=1/FAILURE
Apr 06 08:24:59 bamboozle systemd[1]: Failed to start Zettabyte File System (ZFS).
Apr 06 08:24:59 bamboozle systemd[1]: Unit zfs.service entered failed state
Warning: Journal has been rotated since unit was started. Log output is incomplete or unavailable.
/var:
total 60
drwxr-xr-x 5 root root 5 Apr 6 08:25 .
drwxr-xr-x 18 root root 20 Apr 6 08:24 ..
drwxr-xr-x 3 root root 3 Apr 6 08:25 cache
drwxr-xr-x 2 root root 3 Apr 6 08:24 lib
drwxrwxrwt 2 root root 2 Apr 6 08:25 tmp/var/cache:
total 36
drwxr-xr-x 3 root root 3 Apr 6 08:25 .
drwxr-xr-x 5 root root 5 Apr 6 08:25 ..
drwxr-xr-x 2 root root 2 Apr 6 08:25 man/var/cache/man:
total 24
drwxr-xr-x 2 root root 2 Apr 6 08:25 .
drwxr-xr-x 3 root root 3 Apr 6 08:25 ../var/lib:
total 31
drwxr-xr-x 2 root root 3 Apr 6 08:24 .
drwxr-xr-x 5 root root 5 Apr 6 08:25 ..
-rw------- 1 root root 512 Apr 6 08:24 random-seed/var/tmp:
total 24
drwxrwxrwt 2 root root 2 Apr 6 08:25 .
drwxr-xr-x 5 root root 5 Apr 6 08:25 ..
# grep "^HOOKS" /etc/mkinitcpio.conf
HOOKS="base udev autodetect modconf block zfs filesystems keyboard"
Offline
I had a similar problem with /etc, but I had to give up.
Offline
# zfs list
NAME USED AVAIL REFER MOUNTPOINT
storage 1.00G 2.59T 221K none
storage/home 6.20M 2.59T 6.20M /home
storage/root 823M 24.2G 823M /
storage/var 194M 9.81G 194M /var
Did you try storage/root/var if it changes anything?
Offline
Yeah, did that today after reading on an old Sun mailing list archive that /var, /usr, and so on, the "core" filesystems, should be decendents of the root filesystem. No difference, still can't mount /var because it already exists.
I've seen quite a few posts that use the format:
<pool>/ROOT/<rootfs>
<pool>/ROOT/<rootfs>/var
As far as I can tell, though, that's just a convention, and there should be no difference to my setup.
Offline
Control that if in the / filesystem there is a directory called /var it might. If it is present it will stop the /var filesystem to be mounted.
Offline
@ezzetabi: Not sure exactly what you mean, mate. The problem does seem to be that /var is getting created by something before the zfs daemon kicks in. Deleting it and starting the zfs daemon allows it to mount no problem.
If storage/root/var would mount at the same time as storage/root, I think it'd work fine. Just gotta figure out how to get it to do so.
Last edited by iliveinapark (2013-04-09 01:04:19)
Offline
That is exactly what I had to do with my /etc problem.
I booted with an USB key and mounted the filesystem hosting /etc in a directory, mounted the filesystem hosting / in another, copied the former in the latter and finally removed the filesystem hosting /etc.
Offline
You may try setting the mountpoint properties to legacy and delegating mounts to fstab.
Last edited by cngn (2013-04-09 08:38:22)
Offline
That is indeed a good idea, fstab is parsed very soon in the boot process and it might solve the problem. If it works it deserves a note in the wiki.
Offline
Eureka! I don't like the fact that it's so customised, but am happy enough with this result.
# zfs set mountpoint=legacy storage/root/var
# cat /etc/fstab
UUID=61ea9c33-fbd7-4de1-9b72-e70dd45ef012 /boot ext2 rw,noatime 0 2
storage/root/var /var zfs defaults 0 2
It seems that the zfs hook mounts / with no worries, /etc/fstab mounts /var, and the zfs daemon mounts /home. I suppose I could set all three to mountpoint=legacy and do it in /etc/fstab, but I'm going to stay with what's working.
My thanks to all who contributed.
Last edited by iliveinapark (2013-04-10 08:24:25)
Offline
Update the wiki! Write somewhere that using a separate zfs filesystem for /etc or /var (and possibly other directories needed during the boot) require legacy mountpoint and /etc/fstab editing.
Offline
Will do, when I get some spare time. Thanks for your inputs mate.
Offline
Will do, when I get some spare time. Thanks for your inputs mate.
You didn't update the wiki :'(
Offline
Zazzman, you're absolutely correct. I'm sorry, buddy. Life happened, and I forgot all about it. As it happens, I've got the next week off, so I will look into this stuff again, and update it with whatever info I can.
Thanks for reminding about it.
Offline