zpool use vdevs distribute

1 minute read

背景

zpool并不限制根vdev的数量, 并且也不限制他们的属性(如mirror or raidz), 但是属性不同会有提示.  
例如  
[root@db-172-16-3-150 ~]# zpool create zpp mirror /ssd1/zfs.1 /ssd1/zfs.2  
[root@db-172-16-3-150 ~]# zpool status zpp  
  pool: zpp  
 state: ONLINE  
  scan: none requested  
config:  
  
        NAME             STATE     READ WRITE CKSUM  
        zpp              ONLINE       0     0     0  
          mirror-0       ONLINE       0     0     0  
            /ssd1/zfs.1  ONLINE       0     0     0  
            /ssd1/zfs.2  ONLINE       0     0     0  
继续添加同属性的vdev很顺利.  
[root@db-172-16-3-150 ~]# zpool add zpp mirror /ssd1/zfs.3 /ssd1/zfs.4  
[root@db-172-16-3-150 ~]# zpool status zpp  
  pool: zpp  
 state: ONLINE  
  scan: none requested  
config:  
  
        NAME             STATE     READ WRITE CKSUM  
        zpp              ONLINE       0     0     0  
          mirror-0       ONLINE       0     0     0  
            /ssd1/zfs.1  ONLINE       0     0     0  
            /ssd1/zfs.2  ONLINE       0     0     0  
          mirror-1       ONLINE       0     0     0  
            /ssd1/zfs.3  ONLINE       0     0     0  
            /ssd1/zfs.4  ONLINE       0     0     0  
这两个vdev mirror-0和mirror-1对这个zpool来说, 是分布使用的.  
[root@db-172-16-3-150 ~]# zfs create zpp/test  
[root@db-172-16-3-150 ~]# cd /zpp/test  
[root@db-172-16-3-150 test]# dd if=/dev/zero of=./test bs=1k count=10230  
10230+0 records in  
10230+0 records out  
10475520 bytes (10 MB) copied, 0.233064 s, 44.9 MB/s  
[root@db-172-16-3-150 test]# ll  
total 7812  
-rw-r--r-- 1 root root 10475520 May 27 15:15 test  
[root@db-172-16-3-150 test]# zpool list -v zpp  
NAME   SIZE  ALLOC   FREE    CAP  DEDUP  HEALTH  ALTROOT  
zpp   191M  10.4M   181M     5%  1.00x  ONLINE  -  
  mirror  95.5M  5.41M  90.1M         -  
    /ssd1/zfs.1      -      -      -         -  
    /ssd1/zfs.2      -      -      -         -  
  mirror  95.5M  4.98M  90.5M         -  
    /ssd1/zfs.3      -      -      -         -  
    /ssd1/zfs.4      -      -      -         -  
如果添加的vdev和原来的vdev属性不一致, 那么会提示有问题, 现实中当然也是不建议这么来使用的.  
使用-f强制添加.  
[root@db-172-16-3-150 test]# zpool add zpp raidz1 /ssd1/zfs.5 /ssd1/zfs.6 /ssd1/zfs.7  
invalid vdev specification  
use '-f' to override the following errors:  
mismatched replication level: pool uses mirror and new vdev is raidz  
[root@db-172-16-3-150 test]# zpool add -f zpp raidz1 /ssd1/zfs.5 /ssd1/zfs.6 /ssd1/zfs.7  
已经存在的数据不会重分布, 但是新增的数据会重分布到新的vdev上面  
[root@db-172-16-3-150 test]# cp test ./test.1  
[root@db-172-16-3-150 test]# zpool list -v zpp  
NAME   SIZE  ALLOC   FREE    CAP  DEDUP  HEALTH  ALTROOT  
zpp   477M  22.0M   455M     4%  1.00x  ONLINE  -  
  mirror  95.5M  8.66M  86.8M         -  
    /ssd1/zfs.1      -      -      -         -  
    /ssd1/zfs.2      -      -      -         -  
  mirror  95.5M  8.24M  87.3M         -  
    /ssd1/zfs.3      -      -      -         -  
    /ssd1/zfs.4      -      -      -         -  
  raidz1   286M  5.15M   281M         -  
    /ssd1/zfs.5      -      -      -         -  
    /ssd1/zfs.6      -      -      -         -  
    /ssd1/zfs.7      -      -      -         -  

Flag Counter

digoal’s 大量PostgreSQL文章入口