Last year, I had tried the FUSE port. This time I decided to try zfsonlinux. This comment on their page had me excited pretty early:
There is a lot of very good ZFS documentation already out there. Almost all of it should be applicable to this implementation because we have tried to conform to the Solaris behavior as much as possible.
For installation, I followed the steps listed here:
sudo add-apt-repository ppa:dajhorn/zfs
sudo apt-get update
sudo apt-get install ubuntu-zfs
Installation went pretty smooth. Trying to use it afterwards was a bit more tricky. The module wasn't loaded so I tried to follow the instructions to do an insmod:
malachi@onyx:~$ sudo insmod /lib/modules/2.6.38-10-generic/updates/dkms/zfs.koWell, that's not good. Luckily, there was a really simple workaround:
insmod: error inserting '/lib/modules/2.6.38-10-generic/updates/dkms/zfs.ko': -1 Unknown symbol in module
malachi@onyx:~$ sudo modprobe zfsAnd voila. It was loaded until next reboot. I didn't have a spare drive in the laptop to convert to a root zfs drive, so I didn't worry about doing a grub setup... but I would like the module to auto-load on boot. Turns out, that's pretty simple. Simply add a line 'zfs' to /etc/modules. While you are at it, modify /etc/default/zfs to enable auto (un)mounting:
malachi@onyx:~$ cat /etc/default/zfsCurrently, the /dev/zfs is owned by root:root with permissions set to 600. What this means is that to even do 'zfs list' or 'zpool status' you have to be root. While I understand the logic there, I find it extremely annoying. It may not go anywhere, but I submitted an enhancement request to allow admin group rw. I realize that there are ACL mechanisms, but I do not believe those apply to the /dev/zfs special character device.
# Automatically run `zfs mount -a` at system startup if set non-empty.
ZFS_MOUNT='yes'
#ZFS_MOUNT=''
# Automatically run `zfs unmount -a` at system shutdown if set non-empty.
ZFS_UNMOUNT='yes'
#ZFS_UMOUNT=''
So, with no spare disk, how will I test it? While I know that performance would suffer, I decided to try my testing with file-backed zfs. I didn't want to keep doing it by hand, so created a script:
malachi@onyx:~$ cat /mnt/zfs-disks/createZFSFileThen created a few backing disks....
#!/bin/bash
FILE=$1
GIGS=$2
dd if=/dev/zero of=/mnt/zfs-disks/$FILE.zfs bs=1G count=$GIGS
ls -lh /mnt/zfs-disks/$FILE.zfs
malachi@onyx:~$ createZFSFile disk1 10Repeat that for disk2,3,4... For this testing, and especially since it was file-backed, I decided to not use raidz2 like I normally would so that I could easily add more space to the pool if necessary.
10+0 records in
10+0 records out
10737418240 bytes (11 GB) copied, 114.092 s, 94.1 MB/s
-rw-r--r-- 1 malachi malachi 10G 2011-08-12 15:41 /mnt/zfs-disks/disk1.zfs
malachi@onyx:~$ sudo zpool create pool /mnt/zfs-disks/disk1.zfsI then created a filesystem in the pool to work from:
malachi@onyx:~$ sudo zfs create pool/android
malachi@onyx:~$ sudo zfs listNow to test adding some disks to the pool...
NAME USED AVAIL REFER MOUNTPOINT
pool 128K 9.78G 30K /pool
pool/android 30K 9.78G 30K /pool/android
malachi@onyx:~$ sudo zpool add pool /mnt/zfs-disks/disk2.zfsThat all looks good. Downloading Android, built it, and then tried some timings...
malachi@onyx:~$ sudo zpool add pool /mnt/zfs-disks/disk3.zfs
malachi@onyx:~$ sudo zpool add pool /mnt/zfs-disks/disk4.zfs
malachi@onyx:~$ sudo zfs list
NAME USED AVAIL REFER MOUNTPOINT
pool 140K 39.1G 31K /pool
pool/android 30K 39.1G 30K /pool/android
malachi@onyx:~$ sudo zpool status
pool: pool
state: ONLINE
scan: none requested
config:
NAME STATE READ WRITE CKSUM
pool ONLINE 0 0 0
/mnt/zfs-disks/disk1.zfs ONLINE 0 0 0
/mnt/zfs-disks/disk2.zfs ONLINE 0 0 0
/mnt/zfs-disks/disk3.zfs ONLINE 0 0 0
/mnt/zfs-disks/disk4.zfs ONLINE 0 0 0
errors: No known data errors
root@onyx:~# annotate-output zfs snapshot pool/android@freshbuildOverall, I am really happy with these timings... Especially since it was running on file-backed zfs.
21:55:14 I: Started zfs snapshot pool/android@freshbuild
21:55:14 I: Finished with exitcode 0
root@onyx:~# zfs list -t all
NAME USED AVAIL REFER MOUNTPOINT
pool 10.1G 29.1G 31K /pool
pool/android 10.1G 29.1G 10.1G /pool/android
pool/android@freshbuild 0 - 10.1G -
root@onyx:~# annotate-output zfs destroy pool/android@freshbuild
21:56:00 I: Started zfs destroy pool/android@freshbuild
21:56:00 I: Finished with exitcode 0
root@onyx:~# zfs list -t all
NAME USED AVAIL REFER MOUNTPOINT
pool 10.1G 29.1G 31K /pool
pool/android 10.1G 29.1G 10.1G /pool/android
root@onyx:~# annotate-output zfs destroy pool/android
21:59:54 I: Started zfs destroy pool/android
22:00:28 I: Finished with exitcode 0
root@onyx:~# zfs list -t all
NAME USED AVAIL REFER MOUNTPOINT
pool 1.52M 39.1G 30K /pool
root@onyx:~# annotate-output zfs create pool/android
22:01:05 I: Started zfs create pool/android
22:01:06 I: Finished with exitcode 0
root@onyx:~# zfs list -t all
NAME USED AVAIL REFER MOUNTPOINT
pool 1.55M 39.1G 30K /pool
pool/android 30K 39.1G 30K /pool/android
During all of my testing (I tried it 3-4 times) there was one gotcha. During my first test, git locked up downloading Android. Not sure what happened, but I couldn't even kill -9 it. Even rebooting wouldn't work since it hung waiting for that process to die. Since I had to hard power-cycle it, I am not surprised that the zfs system got corrupted. When I rebooted, 'zfs list' and 'zpool status' locked up. I was able to kill -9 the zfs list; but not the zpool status. I deleted the /etc/zfs/zpool.cache and on reboot it no longer knew about the pool, but no longer locked up. I was able to recreate everything and did not see that error happen again. Maybe there was a better way to fix the problem.
I think for the next Linux system I build, I may try a root zfs partition using zfsonlinux. Even with the one (serious) issue, I was pretty happy with the results of the testing.
Thanks to aarcane for finding a solution that allows you to give users access to the zfs/zpool commands. Recapped here:
root@onyx:~# nano /etc/udev/rules.d/91-zfs-permissions.rules
#Use this to add a group and more permissive permissions for zfs
#so that you don't always need run it as root. beware, users not root
#can do nearly EVERYTHING, including, but not limited to destroying
#volumes and deleting datasets. they CANNOT mount datasets or create new
#volumes, export datasets via NFS, or other things that require root
#permissions outside of ZFS.
ACTION=="add", KERNEL=="zfs", MODE="0660", GROUP="zfs"
root@onyx:~# groupadd zfs root@onyx:~# gpasswd -ausername zfs
Now, reboot. Upon login, the specified user should be able to run zfs list and zpool status without using sudo.
Linux Mint "Debian" - 201109 Gnome 64-bit Install, needed to add the repo as lucid by default. Thanks to xircon for the quick script @ http://forums.linuxmint.com/viewtopic.php?f=185&t=85814. Then doing a ./xircon.sh ppa:zfs-native/stable I was back in the game.
ReplyDeleteOh, forgot to mention, got the ZFS repo here: https://launchpad.net/ubuntu/+ppas?name_filter=zfs
ReplyDeleteDo this first
ReplyDeletesudo apt-get install spl-dev
then this
sudo apt-get install ubuntu-zfs
Thanks for the update - how's the performance?
ReplyDeleteIf anyone is following this, there are new PPAs available:
ReplyDeletestable: https://launchpad.net/~zfs-native/+archive/stable
daily: https://launchpad.net/~zfs-native/+archive/daily