Updating Solaris Releases
We’re using Solaris 10 with zfs as a target for disk-to-disk backups off of our production networks. Our old system used Linux and the filesystems we tried (ext3 and reiserfs) were awkward, slow and poorly able to handle millions of files on a single filesystem. We should probably have used XFS, but by the time we were strongly considering changing what we were using, zfs showed up on the scene. We needed more storage, and instead of buying more of the crappy HP MSA20 SATA enclosures we’d been using and having lots of problems with (weekly firmware updates and inexplicable occurances of the storage just unmounting and refusing to remount without rebooting), we decided to buy our nice Sun x4500 server with 24 TB of disk space.
We’re using rsync to synchronize from our production servers to the primary backup box, the x4500 server, in zfs. Then, we make zfs snapshots and make those available to the network administrators in our offices over http. That way, they can get files back from any day pretty easily. It works well and is very reliable.
We also have a second Solaris 10 storage server in our colocated site, with about 6 TB of storage in SATA shelves in an IBM DS4300 SAN. We want to make replicas of backup data on our x4500 onto this Solaris box so that we can purge any vestiges of local backups from our system. The zfs filesystem has a neat feature for doing this, called zfs send and zfs receive. These commands allow you to stream a whole zfs filesystem out to another medium and then retrieve it back and recreate that zfs filesytem again. If you pipe the output of zfs send through ssh to another box and then to zfs receive, you end up with a duplicate zfs filesystem created on another server. Sweet! Then, you can use a differential zfs send to update a snapshot, so that instead of re-sending the entire data set again the next day, you can just send the differences between yesterday and today and get another full snapshot. Unfortunately, in the build of Solaris we are using, which is Solaris 10 Enterprise 11/06, zfs send and receive for differential snapshots over the network doesn’t work, because the receiving side always makes some insignificant change to the filesystem before the receive starts, and then the differential receive fails because the two endpoints don’t match.
Later builds of OpenSolaris have a new option on zfs receive that forces it to do a rollback immediately prior to accepting the sent data. Our build doesn’t have that option. I’m now faced with the prospect of either a) unmounting the destination filesystem during the send/receive, which makes my backup snapshots unavailable, or b) updating Solaris to an OpenSolaris build. I need to figure out which is more appropriate. I also need to figure out how to nondestructively upgrade from Solaris 10 11/06 to Solaris Express DE or some other newer build.