ZFS used as block device - ZVOL

2 minute read

背景

前面两篇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/

Flag Counter

digoal’s 大量PostgreSQL文章入口