Skip to content

Commit 8ad8891

Browse files
committed
zfs doc
1 parent da21301 commit 8ad8891

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

41 files changed

+8225
-0
lines changed

201405/20140516_01.md

Lines changed: 555 additions & 0 deletions
Large diffs are not rendered by default.

201405/20140518_01.md

Lines changed: 465 additions & 0 deletions
Large diffs are not rendered by default.

201405/20140518_01_pic_001.png

27.5 KB
Loading

201405/20140518_02.md

Lines changed: 124 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,124 @@
1+
## ZFS used as block device - ZVOL
2+
3+
### 作者
4+
digoal
5+
6+
### 日期
7+
2014-05-18
8+
9+
### 标签
10+
PostgreSQL , Linux , ZFS
11+
12+
----
13+
14+
## 背景
15+
前面两篇BLOG介绍了ZFS的性能提升原理和测试, ZFS的快照回滚和克隆方法.
16+
17+
http://blog.163.com/digoal@126/blog/static/163877040201441694022110/
18+
19+
http://blog.163.com/digoal@126/blog/static/163877040201441723450443/
20+
21+
```
22+
本文将介绍一下ZFS的另一个强大之处, 将ZFS文件系统的功能剥离, 直接当块设备使用, 同时还兼具了快照, 克隆等功能.
23+
块设备可以给OS层使用, 创建文件系统.
24+
创建ZFS块设备ZVOL, 使用zfs命令的-V选项, 指定块设备大小.
25+
例如, 创建1G的一个块设备, 在zptest池中, 命名为disk1 :
26+
[root@db-172-16-3-150 ~]# zfs create -V 1G zptest/disk1
27+
/dev/zptest/disk1 may not be immediately available
28+
[root@db-172-16-3-150 ~]# zpool status
29+
pool: zptest
30+
state: ONLINE
31+
scan: none requested
32+
config:
33+
34+
NAME STATE READ WRITE CKSUM
35+
zptest ONLINE 0 0 0
36+
/ssd1/zfs.disk1 ONLINE 0 0 0
37+
/ssd1/zfs.disk2 ONLINE 0 0 0
38+
/ssd1/zfs.disk3 ONLINE 0 0 0
39+
/ssd1/zfs.disk4 ONLINE 0 0 0
40+
/ssd1/zfs.disk5 ONLINE 0 0 0
41+
logs
42+
mirror-4 ONLINE 0 0 0
43+
/ssd4/zfs.log1 ONLINE 0 0 0
44+
/ssd4/zfs.log2 ONLINE 0 0 0
45+
cache
46+
wwn-0x5e83a97e827c316e-part1 ONLINE 0 0 0
47+
48+
errors: No known data errors
49+
[root@db-172-16-3-150 ~]# zfs list
50+
NAME USED AVAIL REFER MOUNTPOINT
51+
zptest 11.6G 27.5G 32K /zptest
52+
zptest/disk1 1.03G 28.5G 16K -
53+
zptest/pg93 9.89G 27.5G 3.63G /zptest/pg93
54+
zptest/pg93_clone1 662M 27.5G 3.62G /zptest/pg93_clone1
55+
可以对ZVOL分区, 也可以不分区直接使用.
56+
[root@db-172-16-3-150 ~]# fdisk -l /dev/zd0
57+
Disk /dev/zd0: 1073 MB, 1073741824 bytes
58+
16 heads, 63 sectors/track, 2080 cylinders
59+
Units = cylinders of 1008 * 512 = 516096 bytes
60+
Sector size (logical/physical): 512 bytes / 8192 bytes
61+
I/O size (minimum/optimal): 8192 bytes / 8192 bytes
62+
Disk identifier: 0x00000000
63+
在ZVOL上创建文件系统, 加载, 并且对文件系统进行操作, 快照.
64+
[root@db-172-16-3-150 ~]# mkfs.ext4 /dev/zd0
65+
66+
[root@db-172-16-3-150 ~]# mount /dev/zd0 /mnt
67+
[root@db-172-16-3-150 ~]# df -h
68+
Filesystem Size Used Avail Use% Mounted on
69+
/dev/sdc1 29G 9.3G 19G 34% /
70+
tmpfs 48G 0 48G 0% /dev/shm
71+
/dev/sdc3 98G 30G 63G 33% /opt
72+
/dev/sdd1 183G 53G 122G 30% /ssd1
73+
/dev/sdb1 221G 39G 171G 19% /ssd4
74+
zptest 28G 0 28G 0% /zptest
75+
zptest/pg93 32G 3.7G 28G 12% /zptest/pg93
76+
zptest/pg93_clone1 32G 3.7G 28G 12% /zptest/pg93_clone1
77+
/dev/zd0 1008M 34M 924M 4% /mnt
78+
79+
[root@db-172-16-3-150 ~]# cd /mnt
80+
[root@db-172-16-3-150 mnt]# ll
81+
total 16
82+
drwx------ 2 root root 16384 May 18 15:42 lost+found
83+
[root@db-172-16-3-150 mnt]# touch a
84+
[root@db-172-16-3-150 mnt]# zfs snapshot zptest/disk1@`date +%F%T`
85+
[root@db-172-16-3-150 mnt]# touch b
86+
[root@db-172-16-3-150 mnt]# zfs snapshot zptest/disk1@`date +%F%T`
87+
[root@db-172-16-3-150 mnt]# touch c
88+
[root@db-172-16-3-150 mnt]# zfs snapshot zptest/disk1@`date +%F%T`
89+
[root@db-172-16-3-150 mnt]# touch d
90+
[root@db-172-16-3-150 mnt]# zfs snapshot zptest/disk1@`date +%F%T`
91+
快照的回滚测试 :
92+
[root@db-172-16-3-150 mnt]# cd
93+
[root@db-172-16-3-150 ~]# umount /mnt
94+
95+
[root@db-172-16-3-150 ~]# zfs list -t snapshot
96+
NAME USED AVAIL REFER MOUNTPOINT
97+
zptest/disk1@2014-05-1815:43:51 0 - 48.6M -
98+
zptest/disk1@2014-05-1815:43:54 0 - 48.6M -
99+
zptest/disk1@2014-05-1815:43:56 0 - 48.6M -
100+
zptest/disk1@2014-05-1815:44:00 33K - 48.6M -
101+
zptest/pg93@2014-05-1721:54:55 143M - 185M -
102+
zptest/pg93@2014-05-1723:17:23 99.0M - 3.65G -
103+
zptest/pg93@2014-05-1723:18:11 5.10M - 3.65G -
104+
zptest/pg93@2014-05-1723:35:32 2.49G - 3.65G -
105+
zptest/pg93_clone1@2014-05-1800:31:03 21K - 3.62G -
106+
107+
[root@db-172-16-3-150 ~]# zfs rollback -r zptest/disk1@2014-05-1815:43:54
108+
/dev/zptest/disk1 may not be immediately available
109+
[root@db-172-16-3-150 ~]# mount /dev/zd0 /mnt
110+
[root@db-172-16-3-150 ~]# cd /mnt
111+
[root@db-172-16-3-150 mnt]# ll
112+
total 16
113+
-rw-r--r-- 1 root root 0 May 18 15:43 a
114+
drwx------ 2 root root 16384 May 18 15:42 lost+found
115+
```
116+
117+
## 参考
118+
1\. http://blog.163.com/digoal@126/blog/static/163877040201441694022110/
119+
120+
2\. http://blog.163.com/digoal@126/blog/static/163877040201441723450443/
121+
122+
123+
<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>
124+

201405/20140518_03.md

Lines changed: 136 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,136 @@
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+
[email protected]'s password:
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

Comments
 (0)