Proper way to create a zfs off an existing directory?

Lets say I have an rpool with etc/ as a regular directory within it and now I want to create a separate zfs rpool/etc, obviously inheriting all the data I had in original /etc.

What would be the most proper and safe way to do so?


It isn't supported to turn /etc into its own zfs file system.

The reason is that /etc is needed during the early stages of boot, before (Open)Solaris starts to mount zfs file systems, so it would be empty if you change it.

My guess is that you want to take snapshots of /etc, but you can just take snapshots of the root file system instead:

zfs snapshot rpool/ROOT/opensolaris

You may have to replace opensolaris with the name of the current boot environment (run beadm list to find out which)


There isn't a built-in or automated way to create a new DataSet and migrate existing data to it. To get it done you'll need to create the dataset and manually (e.g. rsync) the data to it.

Let's say you have a dataset named tank\set with a directory in it named folder. You want to 'promote' the folder to be a child dataset named tank\set\folder:

mv /mnt/tank/set/folder /mnt/tank/set/folder-backup # move this out of the way so the new dataset doesn't mount on top of it
zfs create tank/set/folder
rsync -aAX /mnt/tank/set/folder-backup/ /mnt/tank/set/folder # bring over all the old data including acls and attributes

Then review that the data looks good; take a snapshot of the parent dataset just in case, and delete the folder-backup directory.