Weblog
Moving a ZFS filesystem and all of its snapshots from one zpool to another
This is how you can move all the contents of a ZFS filesystem from one zpool of block storage to another zpool of block storage. This example was done from one zpool of fiber attached LUNs to another. This can also be done from on- to off-site.
This is over in textsnippets as well.
Go into the root directory
[hostname:/] root# cd /
You can look in the filesystem and you’ll see its contents and the .zfs folder
[hostname:/] root# ls -l old-pool/filesystem
total 24
dr-xr-xr-x 3 root root 3 Mar 31 00:34 .zfs/
drwxr-xr-x 18 root root 101 Mar 11 21:45 etc/
drwx------ 4 root root 16 Feb 19 08:07 root/
drwxr-xr-x 3 root root 3 Feb 19 21:18 usr_local_etc/
drwxr-xr-x 3 root root 3 Feb 19 21:18 usr_local_var_db_mysql/
Make a final “migration” snapshot that represents the latest old-pool/filesystem
[hostname:/] root# zfs snapshot old-pool/filesystem@migration
You can see there are 3 snapshots in there
[hostname:/] root# ls -l old-pool/filesystem/.zfs/snapshot/
20060329/ 20060330/ migration/
Do a zfs backup of the oldest snapshot and pipe that into a zfs restore. This is will make the filesystem in the new-pool. You could also do this over ssh.
[hostname:/] root# zfs backup old-pool/filesystem@20060329 | zfs restore new-pool/filesystem@20060329
Now you do an incremental (-i) backup and restore using the first snapshot you used above and the one that comes after it. The key here is that incremental backups expect there to be a pre-existing new-pool/filesystem, this is how it is diffrent from the non-incremental backup above.
[hostname:/] root# zfs backup -i old-pool/filesystem@20060329 old-pool/filesystem@20060330 | zfs restore new-pool/filesystem
Do an incremental on the next pair. This happens to be with the last “migration” snapshot.
[hostname:/] root# zfs backup -i old-pool/filesystem@20060330 old-pool/filesystem@migration | zfs restore new-pool/filesystem
When you look in the new-pool/filesystem you’ll see that it has been populated from the last migration snapshot.
[hostname:/] root# ls -l new-pool/filesystem
total 24
dr-xr-xr-x 3 root root 3 Mar 31 00:34 .zfs/
drwxr-xr-x 18 root root 101 Mar 11 21:45 etc/
drwx------ 4 root root 16 Feb 19 08:07 root/
drwxr-xr-x 3 root root 3 Feb 19 21:18 usr_local_etc/
drwxr-xr-x 3 root root 3 Feb 19 21:18 usr_local_var_db_mysql/
And all three snapshots are present
[hostname:/] root# ls -l new-pool/filesystem
20060329/ 20060330/ migration/
Yes it scripts up fine as well.
·:· Posted 16 April 2006, 02:48 by Jason Hoffman to ZFS | Got something to say?
←
Recently:
- The weblog is heading over to Joyeur.com
- The Scale with Rails workshops
- By popular demand, the plain FSCK You shirts are out
- Apache 2.2, mod_proxy_balancer and Mongrel
- Apache 2.2 worker on solaris to a remote mongrel
- I made some other web server points over at Joyeur
- Beware the trailing slash in Apache's proxy balancer
- What about Apache to Mongrel for Rails applications?
- Lighttpd versus Litespeed with Mongrel as a backend for Rails applications
- Moving a ZFS filesystem and all of its snapshots from one zpool to another
- Watch Out for Software Updates
- Two simple tips for freezing your rails
- #1 in Google for ZFS snapshots
- I'll be speaking at the Silicon Valley Ruby Conference
- Joyeur and the Dell Selling Machine
- In town for ETech?
- DragonflyBSD porting ZFS
- ZFS Snapshots
- Correction on Zeus versus Litespeed hitting a static image file
- Rails with Zeus and Mongrel or FCGI

