ZFS: Maintenance

Cloning a live FreeBSD ZFS System

by ken at 11:46:54 on April 11, 2016

This is the default bsdinstall zfs partition layout we're cloning:

[email protected] ~ % gpart show
=>       34  976773101  ada0  GPT  (466G)
         34          6        - free -  (3.0K)
         40       1024     1  freebsd-boot  (512K)
       1064        984        - free -  (492K)
       2048    4194304     2  freebsd-swap  (2.0G)
    4196352  972576768     3  freebsd-zfs  (464G)
  976773120         15        - free -  (7.5K)

These are the default filesystems created by bsdinstall. We're going to replicate this on a new computer:

[email protected] ~ # zfs list
zroot               1.65G   444G    96K  /zroot
zroot/ROOT           767M   444G    96K  none
zroot/ROOT/default   767M   444G   761M  /
zroot/tmp            160K   444G    96K  /tmp
zroot/usr            917M   444G    96K  /usr
zroot/usr/home       256K   444G   180K  /usr/home
zroot/usr/ports      917M   444G   917M  /usr/ports
zroot/usr/src         96K   444G    96K  /usr/src
zroot/var           1.02M   444G    96K  /var
zroot/var/audit       96K   444G    96K  /var/audit
zroot/var/crash       96K   444G    96K  /var/crash
zroot/var/log        452K   444G   280K  /var/log
zroot/var/mail       204K   444G   124K  /var/mail
zroot/var/tmp        104K   444G    96K  /var/tmp

1. On the new server, run the FreeBSD 10.2 setup program. Choose LiveCD and login as root.

2. Enable SSH (thanks to brainbugs.net):

# mkdir /tmp/etc
# mount_unionfs /tmp/etc /etc
# mkdir /tmp/root
# mount_unionfs /tmp/root /root

Edit /etc/ssh/sshd_config and set PermitRootLogin to yes.

Configure the network adapter. Set the device node and IP addresses appropriately for your network:

# ifconfig bge0 inet netmask 255..255.0.0
# route add default

3. Start sshd:

# echo sshd_enable="YES" >> /etc/rc.conf
# service sshd start

4. Set a password:

# passwd

5. Back on the host system that you're replicating, backup the partition information. Set the device node accordingly for your computer:

# gpart backup ada0 > ada0.gpart

6. Copy the partition backup file to the new computer:

# scp ada0.gpart [email protected]:/tmp

7. Destroy any existing partitions on the new computer. On a new Dell I had to do this:

# gpart show ada0 (this will show the existing partitions)
# gpart delete -i 2 ada0
# gpart delete -i 1 ada0
# gpart destroy ada0

8. Create the partitions on the new computer

# gpart  restore ada0 < /tmp/ada0.gpart

9. On the new computer, make the disk bootable:

# gpart bootcode -b /boot/pmbr -p /boot/gptzfsboot -i 1 ada0

10. On the new computer, create the ZFS pool:

# zpool create -R /tmp/zroot zroot /dev/ada0p3

11. On the host computer, create a full system snapshot:

# zfs snapshot -r [email protected]

12. Send the snapshot to the new computer:

# zfs send -R [email protected] | ssh [email protected] zfs recv -Fduv zroot

13. When the send operation completes, on the new computer, set bootfs:

# zpool set bootfs=zroot/ROOT/default zroot

14. On the new computer, mount the root :

# zfs mount zroot/ROOT/default

15. Unless the new computer is going to replace the old computer, edit rc.conf and change the IP address and hostname

# vi /tmp/zroot/etc/rc.conf

16. Reboot - that's it, you just cloned your FreeBSD 10.2 ZFS system.