#磁盘管理

用户可以使用yfscmd工具进行YFS的磁盘管理,包括对diskgroup、failuregroup和disk的管理。

前提条件为:

  • YFS服务已启动(通过ycsctl status查看)。
  • YASCS_HOME环境变量已正确设置。

# 创建首个diskgroup

YashanDB的安装过程中将自动为YFS创建首个diskgroup,首个diskgroup的名称可由用户在安装过程中进行配置,未配置时的默认值为DG0。

$ yfscmd ls
DG0

Caution:

该diskgroup上已存储YashanDB默认创建的数据库实例信息,如果误将该diskgroup清理,数据库实例将故障,必须进行重建。

# 查看diskgroup

执行如下命令可以看到目前已创建的diskgroup。

# 在默认实例服务器上查看diskgroup
$ yfscmd -D $YASCS_HOME ls
DG0

# 在指定实例服务器上查看diskgroup,-D指定服务器HOME
$ yfscmd -D /home/yashan/ycs/ce-1-2 ls
DG0

所有diskgroup被虚拟为YFS根目录+下一级目录,因此可以通过yfscmd的子命令ls查看diskgroup及其下文件和目录清单。

$ yfscmd -D $YASCS_HOME ls
DG0
$ yfscmd -D $YASCS_HOME ls DG0
ctrlfile0
ctrlfile1
ctrlfile2
redo1
redo10
redo11
redo12
redo2
redo3
redo4
redo5
redo6
redo7
redo8
redo9
swap
sysaux
system
temp
undo1
undo2
undo3
users

# 继续创建diskgroup

除系统初始创建的diskgroup(名称DG0)外,用户可以自行增加diskgroup。

$ yfscmd

# 创建diskgroup并指定failuregroup
YFSCMD >  exec CREATE DISKGROUP DG1 NORMAL REDUNDANCY
> FAILGROUP FG11 DISK '/dev/DISK_NAME1' NAME disk1, '/dev/DISK_NAME2' NAME disk2
> FAILGROUP FG12 DISK '/dev/DISK_NAME3', '/dev/DISK_NAME4';

> ls
DG0
DG1

# 创建diskgroup不指定failuregroup
# 系统自动为每个disk创建failuregroup
YFSCMD >  exec CREATE DISKGROUP DG2 EXTERNAL REDUNDANCY DISK '/dev/DISK_NAME5';

> ls
DG0
DG1
DG2

Warn

  • disk只能指定为除YCR盘(YCR_DISK参数控制)和YCS投票盘(VOTING_DISK参数控制)之外的普通数据盘,否则将引发系统异常和崩溃。

  • 同一disk不能被重复添加至YFS,当同一disk被错误的配置到多个diskgroup或failgroup时,会造成系统崩溃、数据丢失等致命故障。

# 修改diskgroup

用户可以对一个已存在的diskgroup执行卸载、挂载、添加failuregroup等操作。

1. 卸载、挂载diskgroup

# 卸载diskgroup
$ yfscmd -D $YASCS_HOME exec "ALTER DISKGROUP DG1 dismount"

# 挂载diskgroup
$ yfscmd -D $YASCS_HOME exec "ALTER DISKGROUP DG1 mount"

Caution

卸载某diskgroup后,将无法操作其上的数据,也无法对该diskgroup执行任何修改操作,重新挂载后才能访问。

2. 添加failuregroup

YFS支持在创建diskgroup时创建failuregroup,也支持向已存在的diskgroup添加failuregroup。

# 添加failuregroup,指定名称
$ yfscmd -D $YASCS_HOME exec "ALTER DISKGROUP DG1 ADD FAILGROUP FG13 DISK '/dev/DISK_NAME6'"

# 添加failuregroup,不指定名称,系统自动为每个disk创建failuregroup
$ yfscmd -D $YASCS_HOME exec "ALTER DISKGROUP DG1 ADD DISK '/dev/DISK_NAME7'"

# 删除diskgroup

删除diskgroup前,请务必确认不再需要其中的数据。

当diskgroup中存在数据时,必须指定INCLUDING CONTENTS选项才可成功删除。

删除diskgroup操作不可逆,其中所有数据都会被擦除,请谨慎操作。

# 删除无数据的diskgroup,如有数据,删除失败
$ yfscmd exec "DROP DISKGROUP DG1"
# 删除diskgroup,如有数据清除
$ yfscmd exec "DROP DISKGROUP DG1 INCLUDING CONTENTS"