|
| 1 | +## send and receive ZFS snapshot between machines |
| 2 | + |
| 3 | +### 作者 |
| 4 | +digoal |
| 5 | + |
| 6 | +### 日期 |
| 7 | +2014-05-18 |
| 8 | + |
| 9 | +### 标签 |
| 10 | +PostgreSQL , Linux , ZFS |
| 11 | + |
| 12 | +---- |
| 13 | + |
| 14 | +## 背景 |
| 15 | +``` |
| 16 | +zfs的另一个强大的功能, 将snapshot导出到文件, 再将文件恢复成dataset. |
| 17 | +导出时支持管道传输, 所以可以很方便的实现跨主机传输. |
| 18 | +例子 : |
| 19 | +查看A主机的snapshot. |
| 20 | +[root@db-172-16-3-150 mnt]# zfs list -t snapshot |
| 21 | +NAME USED AVAIL REFER MOUNTPOINT |
| 22 | +zptest/disk1@2014-05-1815:43:51 0 - 48.6M - |
| 23 | +zptest/disk1@2014-05-1815:43:54 0 - 48.6M - |
| 24 | +zptest/pg93@2014-05-1721:54:55 143M - 185M - |
| 25 | +zptest/pg93@2014-05-1723:17:23 99.0M - 3.65G - |
| 26 | +zptest/pg93@2014-05-1723:18:11 5.10M - 3.65G - |
| 27 | +zptest/pg93@2014-05-1723:35:32 2.49G - 3.65G - |
| 28 | +zptest/pg93_clone1@2014-05-1800:31:03 21K - 3.62G - |
| 29 | +将snapshot导出到一个文件. |
| 30 | +[root@db-172-16-3-150 mnt]# zfs send zptest/pg93@2014-05-1723:18:11 > /ssd4/pg93.img |
| 31 | +[root@db-172-16-3-150 mnt]# ll /ssd4/pg93.img |
| 32 | +-rw-r--r-- 1 root root 3926704168 May 18 16:42 /ssd4/pg93.img |
| 33 | +将snapshot导出到管道, 传送给一个压缩软件, 直接压缩成压缩文件. |
| 34 | +[root@db-172-16-3-150 mnt]# zfs send zptest/pg93@2014-05-1723:18:11 | xz > /ssd4/pg93.img.xz |
| 35 | +将snapshot导出到管道, 传送给压缩软件, 再通过管道传送给加密软件, 输出压缩后的加密文件. |
| 36 | +[root@db-172-16-3-150 mnt]# zfs send zptest/pg93@2014-05-1723:18:11 | xz | openssl enc -aes-256-cbc -a -salt > /ssd4/pg93.img.xz.asc |
| 37 | +反过来, 使用压缩过的加密文件, 先解密, 然后解压, 然后管道传送给zfs receive, 使用导出的snapshot创建一个新的dataset. |
| 38 | +[root@db-172-16-3-150 ~]# openssl enc -d -aes-256-cbc -a -in /ssd4/pg93.img.xz.asc | unxz | zfs receive zptest/test3 |
| 39 | +或者直接使用导出的snapshot文件, 导入到zpool并新建一个dataset. |
| 40 | +[root@db-172-16-3-150 ~]# zfs receive zptest/test2 < /ssd4/pg93.img |
| 41 | + |
| 42 | +[root@db-172-16-3-150 ~]# zfs list |
| 43 | +NAME USED AVAIL REFER MOUNTPOINT |
| 44 | +zptest 15.3G 23.8G 34K /zptest |
| 45 | +zptest/disk1 1.08G 24.8G 48.6M - |
| 46 | +zptest/pg93 9.89G 23.8G 3.63G /zptest/pg93 |
| 47 | +zptest/pg93_clone1 662M 23.8G 3.62G /zptest/pg93_clone1 |
| 48 | +zptest/test2 3.65G 23.8G 3.65G /zptest/test2 |
| 49 | + |
| 50 | +send和receive可以直接通过管道对接, 不用产生临时文件. |
| 51 | +[root@db-172-16-3-150 ~]# zfs send zptest/pg93@2014-05-1723:18:11 | zfs receive zptest/test3 |
| 52 | +[root@db-172-16-3-150 ~]# zfs list |
| 53 | +NAME USED AVAIL REFER MOUNTPOINT |
| 54 | +zptest 18.9G 20.2G 35K /zptest |
| 55 | +zptest/disk1 1.08G 21.2G 48.6M - |
| 56 | +zptest/pg93 9.89G 20.2G 3.63G /zptest/pg93 |
| 57 | +zptest/pg93_clone1 662M 20.2G 3.62G /zptest/pg93_clone1 |
| 58 | +zptest/test2 3.65G 20.2G 3.65G /zptest/test2 |
| 59 | +zptest/test3 3.65G 20.2G 3.65G /zptest/test3 |
| 60 | + |
| 61 | +接下来的这个例子是通过管道传输给另一台主机. |
| 62 | +在B主机创建zpool. |
| 63 | +[root@spark01 digoal]# dd if=/dev/zero of=./zfs.log1 bs=1k count=1024000 |
| 64 | +1024000+0 records in |
| 65 | +1024000+0 records out |
| 66 | +1048576000 bytes (1.0 GB) copied, 2.00667 s, 523 MB/s |
| 67 | +[root@spark01 digoal]# dd if=/dev/zero of=./zfs.log bs=1k count=1024000 |
| 68 | +1024000+0 records in |
| 69 | +1024000+0 records out |
| 70 | +1048576000 bytes (1.0 GB) copied, 2.04975 s, 512 MB/s |
| 71 | +[root@spark01 digoal]# mv zfs.log zfs.log2 |
| 72 | +[root@spark01 digoal]# dd if=/dev/zero of=./zfs.disk1 bs=1024k count=2048 |
| 73 | +2048+0 records in |
| 74 | +2048+0 records out |
| 75 | +2147483648 bytes (2.1 GB) copied, 1.27549 s, 1.7 GB/s |
| 76 | +[root@spark01 digoal]# dd if=/dev/zero of=./zfs.disk2 bs=1024k count=2048 |
| 77 | +2048+0 records in |
| 78 | +2048+0 records out |
| 79 | +2147483648 bytes (2.1 GB) copied, 28.575 s, 75.2 MB/s |
| 80 | +[root@spark01 digoal]# cp zfs.disk2 zfs.disk3 |
| 81 | +[root@spark01 digoal]# cp zfs.disk2 zfs.disk4 |
| 82 | +[root@spark01 digoal]# zpool create zp /home/digoal/zfs.disk1 /home/digoal/zfs.disk2 /home/digoal/zfs.disk3 /home/digoal/zfs.disk4 log mirror /home/digoal/zfs.log1 /home/digoal/zfs.log2 |
| 83 | + |
| 84 | +使用ssh连接B主机接受A主机的管道信息, 在B主机直接使用zfs receive接收snapshot, 并创建一个新的dataset. |
| 85 | +[root@db-172-16-3-150 ~]# zfs send zptest/pg93@2014-05-1723:18:11 | ssh [email protected] "/opt/zfs0.6.2/sbin/zfs receive zp/test1" |
| 86 | + |
| 87 | + |
| 88 | +如果要防止密码传输的话, 可以使用ssh key认证. |
| 89 | +[root@db-172-16-3-150 /]# ssh-keygen -t rsa |
| 90 | +[root@db-172-16-3-150 ~]# cat ~/.ssh/id_rsa.pub |
| 91 | +ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEApn/LgD98MRFTHTW9Unt3fOHmY2k7g/2vVF7KeuRlAu7IpCNpTg+FrdCcICUmsQBIyfC6YaSagWvmuPD+ZRO3poazwtt+3xi+mV8KDEWUPnSRMsqJ9atKzNOmZQhZo0P5yOMwC6gVtObM7bi9JKEgumHkiwvdTxgQVprwvkYTRtPvT84VvXSdADuiBxd/yZlnL4eoPeXODNBuCb5wNRmWcAnkH+mIyspFDWiT0f+ygoSOqZ+Zdy8MFmXIYqSPw9YpHZjUJgpvIH04jsHWASYAJNS4iL8vYVRlzmKZE8GFmXym/OZ9k7xJfFrhzOAVrEiXxYy5mbnTiBVAm+drKmqZDQ== [email protected] |
| 92 | + |
| 93 | +[root@spark01 ~]# cd ~ |
| 94 | +[root@spark01 ~]# mkdir .ssh |
| 95 | +[root@spark01 ~]# vi .ssh/authorized_keys |
| 96 | +ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEApn/LgD98MRFTHTW9Unt3fOHmY2k7g/2vVF7KeuRlAu7IpCNpTg+FrdCcICUmsQBIyfC6YaSagWvmuPD+ZRO3poazwtt+3xi+mV8KDEWUPnSRMsqJ9atKzNOmZQhZo0P5yOMwC6gVtObM7bi9JKEgumHkiwvdTxgQVprwvkYTRtPvT84VvXSdADuiBxd/yZlnL4eoPeXODNBuCb5wNRmWcAnkH+mIyspFDWiT0f+ygoSOqZ+Zdy8MFmXIYqSPw9YpHZjUJgpvIH04jsHWASYAJNS4iL8vYVRlzmKZE8GFmXym/OZ9k7xJfFrhzOAVrEiXxYy5mbnTiBVAm+drKmqZDQ== [email protected] |
| 97 | +[root@spark01 ~]# setenforce 0 |
| 98 | +[root@spark01 ~]# vi /etc/selinux/config |
| 99 | +SELINUX=disabled |
| 100 | +SELINUXTYPE=targeted |
| 101 | + |
| 102 | +[root@db-172-16-3-150 ~]# ssh [email protected] date |
| 103 | +Mon May 19 02:01:40 CST 2014 |
| 104 | + |
| 105 | +[root@db-172-16-3-150 ~]# zfs send zptest/pg93@2014-05-1723:18:11 | ssh [email protected] "/opt/zfs0.6.2/sbin/zfs receive zp/test" |
| 106 | + |
| 107 | +[root@spark01 ~]# zfs list |
| 108 | +NAME USED AVAIL REFER MOUNTPOINT |
| 109 | +zp 3.65G 4.16G 31K /zp |
| 110 | +zp/test 3.65G 4.16G 3.65G /zp/test |
| 111 | +[root@spark01 ~]# df -h |
| 112 | +Filesystem Size Used Avail Use% Mounted on |
| 113 | +/dev/sda1 31G 1.2G 29G 5% / |
| 114 | +tmpfs 12G 0 12G 0% /dev/shm |
| 115 | +/dev/sda3 89G 11G 74G 13% /home |
| 116 | +zp 4.2G 0 4.2G 0% /zp |
| 117 | +zp/test 7.9G 3.7G 4.2G 47% /zp/test |
| 118 | +[root@spark01 ~]# cd /zp/test |
| 119 | +[root@spark01 test]# ll |
| 120 | +total 2 |
| 121 | +drwx------. 16 digoal digoal 28 May 17 23:15 pg_root |
| 122 | +因为zfs的snapshot是一致性镜像, 通过这种方法导出镜像到文件, 可以起到额外备份snapshot到其他主机或文件系统的作用. |
| 123 | +``` |
| 124 | + |
| 125 | +## 参考 |
| 126 | +1\. https://pthree.org/2012/12/20/zfs-administration-part-xiii-sending-and-receiving-filesystems/ |
| 127 | + |
| 128 | +2\. http://blog.163.com/digoal@126/blog/static/163877040201441694022110/ |
| 129 | + |
| 130 | +3\. http://blog.163.com/digoal@126/blog/static/163877040201441723450443/ |
| 131 | + |
| 132 | +4\. http://blog.163.com/digoal@126/blog/static/16387704020144183320807/ |
| 133 | + |
| 134 | + |
| 135 | +<a rel="nofollow" href="http://info.flagcounter.com/h9V1" ><img src="http://s03.flagcounter.com/count/h9V1/bg_FFFFFF/txt_000000/border_CCCCCC/columns_2/maxflags_12/viewers_0/labels_0/pageviews_0/flags_0/" alt="Flag Counter" border="0" ></a> |
| 136 | + |
0 commit comments