管理ZFS存储池中的设备

  1. 向存储池中添加设备(zpool add pool keyword devices)
  2. 从存储池中删除设备(zpool remove pool devices)
  3. 向存储池中附加设备(zpool attach|detach pool existing-devices new-device)
  4. 分离镜像池创建新池(zpool split pool new-pool [device])
  5. 将存储池中设备下线或上线(zpool offline|online [option] pool devices)
  6. 清除存储池设备错误(zpool clear pool [devices])
  7. 更换存储池中的设备(zpool replace pool replaced-device [new-device])
  8. 在存储池中使用热备(zpool add|remove pool spare devices)

1·向存储池中添加设备
基本命令如下:
zpool add pool keyword devices
新添加的虚拟设备应该具有跟现有虚拟设备相同级别的冗余,不过,可以通过-f选项更改冗余级别。
使用-n选项可以在实际添加设备之前试运行。

例3:添加磁盘到一个镜像ZFS

$ zpool add mpool mirror c0t3d0 c1t3d0
$ zpool status mpool
pool: mpool
state: ONLINE
scrub: none requested
config:

NAME           STATE     READ  WRITE  CKSUM
mpool          ONLINE       0      0      0
   mirror-0    ONLINE       0      0      0
      c0t1d0   ONLINE       0      0      0
      c1t1d0   ONLINE       0      0      0
   mirror-1    ONLINE       0      0      0
      c0t2d0   ONLINE       0      0      0
      c1t2d0   ONLINE       0      0      0
   mirror-2    ONLINE       0      0      0	Added mirrored device.
      c0t3d0   ONLINE       0      0      0
      c1t3d0   ONLINE       0      0      0

errors: No known data errors
	

例4:添加磁盘到一个RAID-Z配置中

$ zpool add rzpool raidz c2t2d0 c2t3d0 c2t4d0
$ zpool status rzpool
pool: rzpool
state: ONLINE
scrub: none requested
config:

NAME           STATE     READ  WRITE  CKSUM
rzpool         ONLINE       0      0      0
   raidz1-0    ONLINE       0      0      0
      c1t2d0   ONLINE       0      0      0
      c1t3d0   ONLINE       0      0      0
      c1t4d0   ONLINE       0      0      0
   raidz1-1    ONLINE       0      0      0	Added RAID-Z device.
      c2t2d0   ONLINE       0      0      0
      c2t3d0   ONLINE       0      0      0
      c2t4d0   ONLINE       0      0      0

errors: No known data errors	
	

例5:添加一个镜像的日志设备

$ zpool add newpool log mirror c0t6d0 c0t7d0
$ zpool status newpool
pool: newpool
state: ONLINE
scrub: none requested
config:


NAME           STATE     READ  WRITE  CKSUM
newpool        ONLINE       0      0      0
   mirror-0    ONLINE       0      0      0
      c0t4d0   ONLINE       0      0      0
      c0t5d0   ONLINE       0      0      0
logs                                       	Added mirrored log device.
   mirror-1    ONLINE       0      0      0
      c0t6d0   ONLINE       0      0      0
      c0t7d0   ONLINE       0      0      0

errors: No known data errors	
	
镜像的日志设备有一个标识符,上面例子中时mirror-1。这个标识符在删除日志设备时会用到。

例6:添加缓存设备

$ zpool add system1 cache c2t5d0 c2t8d0
$ zpool status system1
pool: system1
state: ONLINE
scrub: none requested
config:

NAME           STATE     READ  WRITE  CKSUM
system1        ONLINE       0      0      0
   mirror-0    ONLINE       0      0      0
      c2t0d0   ONLINE       0      0      0
      c2t1d0   ONLINE       0      0      0
      c2t3d0   ONLINE       0      0      0
   cache                                   	Added cache device.
      c2t5d0   ONLINE       0      0      0
      c2t8d0   ONLINE       0      0      0

errors: No known data errors
	
top
2·从存储池中删除设备
基本命令:zpool remove,此命令支持删除热备、缓存、日志和顶级虚拟数据设备。
-s用于取消删除操作。
一般仅在不小心将另一个设备添加到池中时,才使用zpool remove命令恢复池原来的结构。
如果池性能下降或几乎已满,应避免使用zpool remove命令,此时应该考虑创建一个新池,然后用zfs sendzfs recv命令将数据迁移到新池。

例7:删除顶级虚拟数据设备

$ zpool remove mpool mirror-1 mirror-2
$ zpool status mpool
  pool: mpool
 state: ONLINE
status: One or more devices is currently being removed.
action: Wait for the resilver to complete.
        Run 'zpool status -v' to see device specific details.
  scan: resilver  in  progress  since  Mon Jul 7 18:19:35
        2014
        16.7G scanned
        884M  resilvered at 52.6M/s,  9.94% done, 0h1m to go
config:

NAME           STATE    READ WRITE CKSUM
mpool          ONLINE      0     0     0
   mirror-0    ONLINE      0     0     0
      c0t1d0   ONLINE      0     0     0
      c1t1d0   ONLINE      0     0     0
   mirror-1  REMOVING      0     0     0
      c0t2d0   ONLINE      0     0     0
      c1t2d0   ONLINE      0     0     0
   mirror-2  REMOVING      0     0     0
      c0t3d0   ONLINE      0     0     0
      c1t3d0   ONLINE      0     0     0
+
+         errors: No known data errors

$ zpool status mpool
pool: mpool
state: ONLINE
scrub: none requested
config:

NAME           STATE     READ  WRITE  CKSUM
   mirror-0    ONLINE       0      0      0
      c0t1d0   ONLINE       0      0      0
      c1t1d0   ONLINE       0      0      0
errors: No known data errors		
		

例8:删除镜像的日志设备

$ zpool remove newpool mirror-1
$ zpool status newpool
  pool: newpool
 state: ONLINE
 scrub: none requested
config:

NAME           STATE     READ  WRITE  CKSUM
newpool        ONLINE       0      0      0
   mirror-0    ONLINE       0      0      0
      c0t4d0   ONLINE       0      0      0
      c0t5d0   ONLINE       0      0      0

errors: No known data errors		
		

例9:删除缓存设备

$ zpool remove system1 c2t5d0 c2t8d0
$ zpool status system1
pool: system1
state: ONLINE
scrub: none requested
config:

NAME           STATE     READ  WRITE  CKSUM
system1        ONLINE       0      0      0
   mirror-0    ONLINE       0      0      0
      c2t0d0   ONLINE       0      0      0
      c2t1d0   ONLINE       0      0      0
      c2t3d0   ONLINE       0      0      0

errors: No known data errors
		

top


3·向存储池中附加设备
以下命令向已存在的虚拟设备中附加一个新设备:
$ zpool attach pool existing-device new-device

使用zpool detach命令可以将设备从池中分离,但要满足以下两个条件之一:

否则的话,会收到以下错误提示:
connot detach c1t2d0: only applicable to mirror and replacing vdevs

例10:将一个双路镜像存储池转换成三路镜像池

$ zpool attach mpool c1t1d0 c2t1d0
$ zpool status mpool
pool: mpool
state: ONLINE
scrub: resilver completed after 0h0m with 0 errors on Fri Jan  8 12:59:20 2010
config:

NAME           STATE     READ  WRITE  CKSUM
mpool          ONLINE       0      0      0
   mirror-0    ONLINE       0      0      0
      c0t1d0   ONLINE       0      0      0
      c1t1d0   ONLINE       0      0      0
      c2t1d0   ONLINE       0      0      0  	592K resilveredAttached device creates a 3-way mirror pool

errors: No known data errors
		

例11:将一个没有冗余的存储池转换成镜像池

$ zpool status system1
pool: system1
state: ONLINE
scrub: none requested
config:
NAME           STATE      READ  WRITE  CKSUM
system1        ONLINE        0      0      0
     c0t1d0    ONLINE        0      0      0

errors: No known data errors
$ zpool attach system1 c0t1d0 c1t1d0
$ zpool status system1
pool: system1
state: ONLINE
scrub: resilver completed after 0h0m with 0 errors on Fri Jan  8 14:28:23 2010
config:

NAME           STATE     READ  WRITE  CKSUM
system1        ONLINE       0      0      0	Pool becomes mirrored
   mirror-0    ONLINE       0      0      0
      c0t1d0   ONLINE       0      0      0
      c1t1d0   ONLINE       0      0      0  	73.5K resilvered

errors: No known data errors
		

top


4·拆分镜像池创建新池
用来快速克隆镜像ZFS存储池。只能拆分镜像池
$ zpool split pool new-pool [device]

如果没有指定设备,默认的会分离出池的虚拟设备中的最后一个设备,用它创建一个新池。
如果池有多个顶级虚拟设备,则这个命令会从每一个虚拟设备分离一个磁盘以创建新池。
如果是拆分一个含有三块硬盘的单一顶级设备,则从第三个硬盘创建的新池是没有冗余的。要将新池转换成冗余配置,需要连接新设备。
拆分镜像池之前应确保以下几点:

在实际拆分操作发生之前,内存中的数据会刷新到镜像磁盘。刷新数据后,磁盘将从池中分离并赋予新池GUID,以便可以将池导入到其拆分的同一系统上。
如果要拆分的池具有非默认文件系统挂载点并且新池是在同一系统上创建的,则必须用zpool split -R选项为新池标识备用根目录,以避免出现挂载点冲突问题。
例如:
$ zpool split -R /system2 system1 system2

例12:分离一个镜像池
镜像存储池poolA有三个硬盘,分离后变成一个由两个硬盘组成的镜像池poolA,和一个只有一个硬盘的新池poolB

$ zpool status poolA
  pool: poolA
 state: ONLINE
  scan: none requested
config:

        NAME        STATE     READ WRITE CKSUM
        poolA       ONLINE       0     0     0
          mirror-0  ONLINE       0     0     0
            c0t0d0  ONLINE       0     0     0
            c0t1d0  ONLINE       0     0     0
            c0t2d0  ONLINE       0     0     0

errors: No known data errors
$ zpool split poolA poolB
$ zpool import luna 
$ zpool status poolA poolB
  pool: luna
 state: ONLINE
  scan: none requested
config:

        NAME      STATE     READ WRITE CKSUM
        poolB     ONLINE       0     0     0
          c0t2d0  ONLINE       0     0     0

errors: No known data errors

  pool: poolA
 state: ONLINE
  scan: none requested
config:

        NAME        STATE     READ WRITE CKSUM
        poolA       ONLINE       0     0     0
          mirror-0  ONLINE       0     0     0
            c0t0d0  ONLINE       0     0     0
            c0t1d0  ONLINE       0     0     0

errors: No known data errors		
		

top


5·将存储池中设备下线或上线
当存储池中的设备永久不可靠或无法运行时,可以使用以下命令使该设备脱机:
$ zpool offline [option] pool device
device可以是短名称或完整路径。
如果使用选项-t则系统重启后设备会恢复到在线(ONLINE)状态。
不要让设备脱机到使池本身不可用

例如一个zraiz1,不能使两个设备脱机否则会收到以下错误提示:
cannot offline c0t5000C500335F95E3d0: no valid replicas

OFFLINE状态不意味着设备已经从池中分离。因此,不能将该设备用于另一个池,否则会收到类似提示:

device is part of exported or potentially active ZFS pool. Please see zpool(8)

要想在其他池使用这个设备,首先要将设备恢复到ONLINE,然后销毁池以使设备独立出来。如果不想销毁池,可以用兼容的设备替换掉离线的设备。
注意,更换设备时不需要使设备离线。

使用以下命令使设备连线:
$ zpool online [option] pool device
池中的数据开始向新的可用设备同步。
如果想把在线设备的状态改为UNAVAIL,会收到提示:
warning:device 'device' onlined, but remains in faulted state use 'zpool clear' to restore a failted device

top
6·清除存储池设备错误
使用zpool status命令如果输出由错误报告,可以使用以下命令清除:
$ zpool clear pool [devices]

如果没有指定要清除错误的设备,则会清除指定池里的所有设备。

top
7·更换存储池中的设备
可以使用以下命令更换池中的设备:
$ zpool replace pool replaced-device [new-device]

如果是在冗余池中的同一个位置更换了设备,则可能只需要表示被替换的设备,即以上命令只需要指明replaced-device。因为在某些硬件上,ZFS可识别同一位置上的新设备。
但如果替换的设备安装在不同的位置,则需要同时指定被替换的设备和新设备。
甚至有些硬件支持autoreplace(自动替换)池属性,那么就不需要执行更换设备的命令了。
需要注意以下准则: 如果使用容量更大的设备替换旧设备,池不会自动扩展。
池的autoexpand属性可以是的池自动扩展,但默认情况下这个属性值是禁用。
一些使用SATA磁盘的系统,必须先取消配置磁盘,然后才能使其脱机。

由于要将数据重新同步到新磁盘上,因此更换磁盘非常耗时。在磁盘更换期间,运行zpool scrub命令以确保更换设备可操作且数据写入正确。
更换池设备的步骤
  1. 如果可能,将设备状态切换至OFFLINE
  2. $ zpool offline pool device
  3. 物理操作更换新设备
  4. 运行format命令 检查以下输出:
    · 确定新设备被列出
    · 检查更换的设备是否被标记为WWN以检查设备ID是否改变
  5. 替换池中的设备 如果新设备有个新ID,以下命令应该包含新ID:
    $ zpool replace pool replaced-device [new-device-ID]
    注意,如果更换多个设备,在更换下一个设备之前应确保每个设备都已经完全同步
  6. 如有必要,将设备上线
  7. $ zpool online pool new-device
  8. 如果有报错,尝试以下处理
    1. 运行fmadm faulty命令
    2. 从输出的Affects:小节确定池名称和虚拟设备的GUID
    3. 执行以下命令尝试修复:
    4. $ fmadm repaired zfs://pool=name/vdev=guid
例13:更换镜像池里的设备
本例中,池system1中两个16G磁盘更换成两个72G磁盘,autoexpand属性启用并在更换磁盘后自动扩展使用整个磁盘。
$ zpool status system1
  pool: system1
 state: ONLINE
 scrub: none requested
config:

        NAME         STATE     READ WRITE CKSUM
        system1      ONLINE       0     0     0
          mirror     ONLINE       0     0     0
            c1t16d0  ONLINE       0     0     0
            c1t17d0  ONLINE       0     0     0

$ zpool list system1
NAME      SIZE   ALLOC   FREE    CAP  HEALTH  ALTROOT
system1  16.8G   76.5K  16.7G     0%  ONLINE  -
$ zpool replace system1 c1t16d0 c1t1d0
$ zpool replace system1 c1t17d0 c1t2d0
$ zpool list system1
NAME      SIZE   ALLOC   FREE    CAP  HEALTH  ALTROOT
system1  16.8G   88.5K  16.7G     0%  ONLINE  -
$ zpool set autoexpand=on system1
$ zpool list system1
NAME      SIZE   ALLOC   FREE    CAP  HEALTH  ALTROOT
system1  68.2G    117K  68.2G     0%  ONLINE  -		
		
top
8·在存储池中使用热备
创建和删除热备盘
热备用的设备在池中处于非活动状态,知道备用设备替换故障设备。
有两种方法指定热备设备: 以下命令可以删除热备盘:
$ zpool remove pool spare-device
注意-不能删除已经被池使用的热备盘。
热备盘的容量必须大于或等于池中容量最大的硬盘容量。尽管较小的硬盘也能做热备盘,但是当设备被激活以替换故障设备时,操作会失败并显示以下错误:
cannot replace disk3 with disk4: device is too small
不要跨多个池或多个系统共享热备设备。
激活和停用热备盘
激活热备盘的方法如下: 停用热备盘的方法如下: 例14:更换故障盘后分离热备盘
本例假定配置: 本例开始使用新磁盘重新配置。第一步先运行zpool replace通知ZFS要移除的设备;然后,如果有必要,运行zpool detach以停止备用设备并将其返回到备用池。
$ zpool replace system1 c0t5000C500335BA8C3d0
$ zpool detach system1 c0t5000C500335E106Bd0
$ zpool status system1


  mirror-1                 ONLINE       0     0     0
    c0t5000C500335BD117d0  ONLINE       0     0     0
    c0t5000C500335DC60Fd0  ONLINE       0     0     0	Replacement device
  spares
    c0t5000C500335E106Bd0    AVAIL                   	Deactivated spare

$ fmadm faulty
$ fmadm repaired zfs://pool=name/vdev=guid		
		
例15:分离故障盘并使用热备盘
当硬盘出现故障,可以将热备盘作为永久设备替换掉故障盘,这样只需要分离故障盘。
$ zpool detach system1 c0t5000C500335BA8C3d0
$ zpool status system1
.
.
  mirror-1                 ONLINE       0     0     0
    c0t5000C500335BD117d0  ONLINE       0     0     0
    c0t5000C500335E106Bd0  ONLINE       0     0     0	Spare replaces failed disk

errors: No known data errors
		
如果随后修复了故障盘,可以将其作为新的热备盘加进池中。
$ zpool add system1 spare c0t5000C500335BA8C3d0
$ zpool status system1
.
.
  mirror-1                 ONLINE       0     0     0
    c0t5000C500335BD117d0  ONLINE       0     0     0
    c0t5000C500335E106Bd0  ONLINE       0     0     0	Former spare
  spares
    c0t5000C500335BA8C3d0    AVAIL                   	Repaired disk as spare

errors: No known data errors

$ fmadm faulty
$ fmadm repaired zfs://pool=name/vdev=guid
		
top

2021/12/10&11