13.2.5 存储池的设备管理
一个存储池有很多的虚拟设备,而虚拟设备又是由物理设备所组成的。
1.在已有的存储池中增加设备
通过增加顶级虚拟设备,存储池的空间能被动态增加。新增的空间能被存储池中的所有数据集立即使用。使用zpool命令,能增加存储池中的虚拟设备。
例13-8 增加tank存储池中的虚拟设备。
# zpool add tank mirror c0t0d0 c1t0d0 mirror c0t0d1 c1t0d1
这个命令的形式和zpool create命令的形式差不多。其实,也可以使用-n选项来模拟增加新的设备的情况。
例13-9 模拟增加tank存储池中的虚拟设备。
# zpool add -n tank mirror c1t0d0 c1t0d1
would update ’tank’ to the following configuration:
mirror
c0t0d0
c0t0d0
mirror
c1t0d0
c1t0d1
2.存储池中设备的在线和离线
ZFS允许单个设备在线或离线。当一个硬件出现问题的时候,ZFS暂时还能进行读写操作。设备暂时不需要离线的目的是为了替换它们。如果在可能的情况下,ZFS将离线设备。设备离线后,ZFS将不再给离线的设备发送查询信息。
3.进行设备离线
使用zpool offline命令进行设备离线。设备具有专门的路径或名称。
# zpool offline tank c0t0d0
bringing device ’c0t0d0’ offline
你不能在使设备失败的情况下使设备离线。比如,你不能在RAID-Z中离线两个设备或不能离线顶级的虚拟设备。
离线的设备在查询的时候显示离线状态。
如果你真想通过离线设备而导致池的损坏,就使用-f选项。但这样可能导致I/O错误和系统崩溃。
离线设备在系统重新启动后仍保持离线状态。
例13-10 使tank存储池中的设备离线。
# zpool offline tank c0t0d0
cannot offline /dev/dsk/c1t2d0: no valid replicas
4.恢复设备在线
使用zpool online命令恢复设备在线。
当设备在线后,写到存储池中的数据将被重新同步到新的设备中。需要注意的是,不能在设备在线的时候替换设备。
例13-11 使tank存储池某个设备在线。
# zpool online tank c0t0d0
bringing device ’c0t0d0’ online
5.替换设备
使用zpool replace命令来替换存储池中的设备。
替换的设备必须和原来的设备一样大或大于原来的设备。如果比原来的大,池的大小就增加了。
例13-12 替换存储池中的设备。
# zpool replace tank c0t0d0 c0t0d1
在上面的例子中,设备c0t0d0被c0t0d1所替换。
13.2.6 存储池状态查询
通过zpool命令,可以查询存储池中的信息。这些信息为三类:基本信息、I/O信息、健康信息。
1.基本信息
当没有其他参数的时候,zpool list列出所有信息。
例13-13 列出所有存储池的信息。
# zpool list
NAME SIZE USED AVAIL CAP HEALTH ALTROOT
tank 80.0G 22.3G 47.7G 28% ONLINE -
dozer 1.2T 384G 816G 32% ONLINE -
下面对所有栏目进行详细解释:
NAME:池的名字
USED:所有数据集和内部元数据的使用数量。这个数值不同于文件系统级的报告的数量。
SIZE:池的总共大小,等同于顶级的所有虚拟设备的总和。
AVAILABLE:池中没有分配的空间总和。
CAPACITY(CAP)使用的百分比
HEALTH:池的当前的健康状态
ALTROOT:改变池的根(root)
使用-o的属性显示个别的状态,比如,只列出池的名称和大小。
例13-14 列出存储池的名称和大小。
# zpool list -o name,size
NAME SIZE
tank 80.0G
dozer 1.2T
在命令中使用-H参数能禁止出现台头。
例13-15 只列出存储池的名字。
# zpool list -Ho name
tank
dozer
2.I/O状态
为了可以使用zpool iostat命令得到池或者虚拟设备的I/O统计信息。就像iostat命令一样,它能显示所有快照的统计信息和每隔一段时间的统计信息。下面的内容被报告。
USED CAPACITY(使用容量):用户当前在池和设备中存储数据的数量。
AVAILABLE CAPACITY(可用容量):可以使用的空间。
READ OPERATIONS:读操作。
WRITE OPERATIONS:写操作。
READ BANDWIDTH:所有读操作的带宽。
WRITE BANDWIDTH:所有写操作的带宽。
当不使用参数的时候,zpool iostat命令显示存储池的所有统计信息。
例13-16 显示存储池的所有统计信息。
# zpool iostat
capacity operations bandwidth
pool used avail read write read write
---------- ----- ----- ----- ----- ----- -----
tank 100G 20.0G 1.2M 102K 1.2M 3.45K
dozer 12.3G 67.7G 132K 15.2K 32.1K 1.20K
如果池是空闲的,带宽的值就可能很小。
正确查看带宽的方法是每隔一段时间查一次。
例13-17 每隔2秒钟显示一个tand池的统计信息。
# zpool iostat tank 2
capacity operations bandwidth
pool used avail read write read write
---------- ----- ----- ----- ----- ----- -----
tank 100G 20.0G 1.2M 102K 1.2M 3.45K
tank 100G 20.0G 134 0 1.34K 0
tank 100G 20.0G 94 342 1.06K 4.1M
上面命令是每隔2秒钟显示一个tank池的统计信息。结束的时候使用Ctrl+C。也可以增加一个显示的数量,比如3次:zpool iostat 2 3。
使用zpool iostat –v命令也能显示虚拟设备的I/O统计信息。
例13-18 显示虚拟设备的I/O统计信息。
# zpool iostat –v
capacity operations bandwidth
tank used avail read write read write
---------- ----- ----- ----- ----- ----- -----
mirror 20.4G 59.6G 0 22 0 6.00K
c0t0d0 - - 1 295 11.2K 148K
c1t1d0 - - 1 299 11.2K 148K
---------- ----- ----- ----- ----- ----- -----
total 24.5K 149M 0 22 0 6.00K
当查看虚拟设备的I/O统计的时候,需要注意到可用的顶级虚拟设备的使用空间。这个空间联系着一定数量的镜像和RAID-Z虚拟设备。
3.健康状态
ZFS提供了一个完整的方法来检查存储池和虚拟设备的健康状态。存储池的健康是由组成存储池的设备的健康状况决定的。这部分描述如何查询存储池的健康。
存储池中的每个设备都会进入下面的一个状态:
ONLINE:一般工作状态,但有时也可能发生错误。
DEGRADED:这个设备有失败的经历。但它现在仍然可以工作。这多发生在镜像和RAID-Z中的设备失败。这个失败是可以被容忍的,但更多的设备失败一旦出现就会不可恢复。
FAULTED:这个虚拟设备已经完全不可用,比如ZFS已经完全没有能力发送和接受新的数据。如果顶级设备处于这个状态,整个存储池就会失败。
OFFLINE:这个虚拟设备被管理员明确地离线。
所有顶级虚拟设备的健康状况决定着存储池的健康情况。如果所有虚拟设备都在线,那么存储池就在线;如果有任何一个设备被DEGRADED,存储池就被DEGRADED;如果顶级虚拟设备失败或者离线了,那么存储池就离线了。一个存储池失败的状态是完全失败,没有数据可以读写。在被降级状态的存储池仍然可以运行,但是你不能获得相映的数据复制级或吞吐能力。
使用zpool status命令简单快速查看池的基本健康状态。
# zpool status -x
all pools are healthy
使用带有-v选项的zpool status命令可以获得详细的健康状态。
例13-19 查询tank存储池的健康状态。
# zpool status -v tank
pool: tank
state: DEGRADED
status: One or more devices could not be opened. Sufficient replicas exist
for the pool to continue functioning in a degraded state.
action: Attach the missing device and online it using ’zpool online’.
see:
http://www.sun.com/msg/ZFS-8000-2Q
scrub: none requested
config:
NAME STATE READ WRITE CKSUM
tank DEGRADED 0 0 0
mirror DEGRADED 0 0 0
c0t0d0 FAULTED 0 0 0 cannot open
c0t0d1 ONLINE 0 0 0
上面显示有一个磁盘发生了错误。通过这些信息,你能知道哪些设备出了问题,并如何修复它们。
如果存储池健康状况出了问题,可以使用下列命令对所有存储池进行详细检测。
例13-20 对系统中所有存储池进行健康查询。
# zpool status -x
pool: tank
state: DEGRADED
status: One or more devices has been taken offline by the administrator.
Sufficient replicas exist for the pool to continue functioning in a degraded state.
action: Online the device using ’zpool online’ or replace the device with ‘zpool replace’.
scrub: none requested
config:
NAME STATE READ WRITE CKSUM
tank DEGRADED 0 0 0
mirror DEGRADED 0 0 0
c0t0d0 OFFLINE 0 0 0
c1t0d0 ONLINE 0 0 0
READ和WRITE的栏显示了设备I/O错误的数量。CKSUM栏给出了设备中无法修补的错误的数量。如果存在潜在的设备失败,就需要修复。如果有非零错误在顶级虚拟设备中,则可能有部分数据不可用。