ZFS used as block device - ZVOL
背景
前面两篇BLOG介绍了ZFS的性能提升原理和测试, ZFS的快照回滚和克隆方法.
http://blog.163.com/digoal@126/blog/static/163877040201441694022110/
http://blog.163.com/digoal@126/blog/static/163877040201441723450443/
本文将介绍一下ZFS的另一个强大之处, 将ZFS文件系统的功能剥离, 直接当块设备使用, 同时还兼具了快照, 克隆等功能.
块设备可以给OS层使用, 创建文件系统.
创建ZFS块设备ZVOL, 使用zfs命令的-V选项, 指定块设备大小.
例如, 创建1G的一个块设备, 在zptest池中, 命名为disk1 :
[root@db-172-16-3-150 ~]# zfs create -V 1G zptest/disk1
/dev/zptest/disk1 may not be immediately available
[root@db-172-16-3-150 ~]# zpool status
pool: zptest
state: ONLINE
scan: none requested
config:
NAME STATE READ WRITE CKSUM
zptest ONLINE 0 0 0
/ssd1/zfs.disk1 ONLINE 0 0 0
/ssd1/zfs.disk2 ONLINE 0 0 0
/ssd1/zfs.disk3 ONLINE 0 0 0
/ssd1/zfs.disk4 ONLINE 0 0 0
/ssd1/zfs.disk5 ONLINE 0 0 0
logs
mirror-4 ONLINE 0 0 0
/ssd4/zfs.log1 ONLINE 0 0 0
/ssd4/zfs.log2 ONLINE 0 0 0
cache
wwn-0x5e83a97e827c316e-part1 ONLINE 0 0 0
errors: No known data errors
[root@db-172-16-3-150 ~]# zfs list
NAME USED AVAIL REFER MOUNTPOINT
zptest 11.6G 27.5G 32K /zptest
zptest/disk1 1.03G 28.5G 16K -
zptest/pg93 9.89G 27.5G 3.63G /zptest/pg93
zptest/pg93_clone1 662M 27.5G 3.62G /zptest/pg93_clone1
可以对ZVOL分区, 也可以不分区直接使用.
[root@db-172-16-3-150 ~]# fdisk -l /dev/zd0
Disk /dev/zd0: 1073 MB, 1073741824 bytes
16 heads, 63 sectors/track, 2080 cylinders
Units = cylinders of 1008 * 512 = 516096 bytes
Sector size (logical/physical): 512 bytes / 8192 bytes
I/O size (minimum/optimal): 8192 bytes / 8192 bytes
Disk identifier: 0x00000000
在ZVOL上创建文件系统, 加载, 并且对文件系统进行操作, 快照.
[root@db-172-16-3-150 ~]# mkfs.ext4 /dev/zd0
[root@db-172-16-3-150 ~]# mount /dev/zd0 /mnt
[root@db-172-16-3-150 ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sdc1 29G 9.3G 19G 34% /
tmpfs 48G 0 48G 0% /dev/shm
/dev/sdc3 98G 30G 63G 33% /opt
/dev/sdd1 183G 53G 122G 30% /ssd1
/dev/sdb1 221G 39G 171G 19% /ssd4
zptest 28G 0 28G 0% /zptest
zptest/pg93 32G 3.7G 28G 12% /zptest/pg93
zptest/pg93_clone1 32G 3.7G 28G 12% /zptest/pg93_clone1
/dev/zd0 1008M 34M 924M 4% /mnt
[root@db-172-16-3-150 ~]# cd /mnt
[root@db-172-16-3-150 mnt]# ll
total 16
drwx------ 2 root root 16384 May 18 15:42 lost+found
[root@db-172-16-3-150 mnt]# touch a
[root@db-172-16-3-150 mnt]# zfs snapshot zptest/disk1@`date +%F%T`
[root@db-172-16-3-150 mnt]# touch b
[root@db-172-16-3-150 mnt]# zfs snapshot zptest/disk1@`date +%F%T`
[root@db-172-16-3-150 mnt]# touch c
[root@db-172-16-3-150 mnt]# zfs snapshot zptest/disk1@`date +%F%T`
[root@db-172-16-3-150 mnt]# touch d
[root@db-172-16-3-150 mnt]# zfs snapshot zptest/disk1@`date +%F%T`
快照的回滚测试 :
[root@db-172-16-3-150 mnt]# cd
[root@db-172-16-3-150 ~]# umount /mnt
[root@db-172-16-3-150 ~]# zfs list -t snapshot
NAME USED AVAIL REFER MOUNTPOINT
zptest/disk1@2014-05-1815:43:51 0 - 48.6M -
zptest/disk1@2014-05-1815:43:54 0 - 48.6M -
zptest/disk1@2014-05-1815:43:56 0 - 48.6M -
zptest/disk1@2014-05-1815:44:00 33K - 48.6M -
zptest/pg93@2014-05-1721:54:55 143M - 185M -
zptest/pg93@2014-05-1723:17:23 99.0M - 3.65G -
zptest/pg93@2014-05-1723:18:11 5.10M - 3.65G -
zptest/pg93@2014-05-1723:35:32 2.49G - 3.65G -
zptest/pg93_clone1@2014-05-1800:31:03 21K - 3.62G -
[root@db-172-16-3-150 ~]# zfs rollback -r zptest/disk1@2014-05-1815:43:54
/dev/zptest/disk1 may not be immediately available
[root@db-172-16-3-150 ~]# mount /dev/zd0 /mnt
[root@db-172-16-3-150 ~]# cd /mnt
[root@db-172-16-3-150 mnt]# ll
total 16
-rw-r--r-- 1 root root 0 May 18 15:43 a
drwx------ 2 root root 16384 May 18 15:42 lost+found
参考
1. http://blog.163.com/digoal@126/blog/static/163877040201441694022110/
2. http://blog.163.com/digoal@126/blog/static/163877040201441723450443/