When I set up ZFS on my main rig I was kind of doing it “fast as possible” and haven’t paid attention to much details. Recently, I wanted to customize my setup a bit so here’s how I migrated my /home
to another ZFS dataset.
Setup was as follows:
- There is ZFS pool called storage composed of two mirrored vdevs
- One vdev is 2x2TB drives while the other one is 2TB drive and 1,5TB drive. Giving total capacity of “3 and something” TB of usable space.
- Pool (root dataset of the pool) had
mountpoint=/home
and was only dataset in the pool.
My plan, and exact commands to accomplish that were as follows:
- Set ZFS pool mountpoint to
/
, so when dataset is created, it is mounted on sub-directory of/
:zfs set canmount=off storage zfs set mountpoint=/ storage
- Create new
storage/home
dataset and allow mount. Adjustcompression
algorithm and turn offatime
in order to prevent writes on file access:zfs create storage/home zfs set canmount=on storage/home zfs set mountpoint=/home storage/home zfs set compression=lz4 storage/home zfs set atime=off storage/home
- Create dataset for my user, this will inherit options from
storage/home
so nothing special to set there:zfs create storage/home/ivan
Fine, but since storage was already used for storing data, all data is on that dataset, so naturally, I had to copy all of that data to the new dataset which was accomplished with rsync
:
- Create directory for temporary mount:
mkdir /oldhome
- Change
mountpoint
for storage dataset:zfs set canmount=noauto storage zfs set mountpoint=/oldhome storage
- Mount the dataset:
zfs mount storage
- Other datasets were already mounted to their appropriate places so I just copied the data over:
rsync -avh /oldhome/ivan/ /home/ivan
Since I wanted to watch the progress I had command running in one tmux
pane and used verbose mode as you can see from the command. Other pane df -h
and zpool iostat -v
running in order to monitor the progress and read/write operations on the pool and vdevs.
Why did I copy all of the data manually instead of cloning the dataset?
– I wanted to apply new settings. compression=lz4
saved me about 27GB of disk space on my almost 900GB of data.
At last, I’ve changed storage
dataset options back to:
zfs set canmount=off storage
zfs set mountpoint=/ storage
Would you do something differently? Feel free to post suggestions.
0 Comments