#磁盘管理命令

yfscmd通过exec子命令管理磁盘,YFS定义了与SQL类似的DDL形式的磁盘管理语句。

yfscmd交互模式下,请执行 exec create diskgroup …;,交互模式下exec子命令支持多行输入,直到遇到 ; 结束。

yfscmd非交互模式下,磁盘管理语句必须使用引号包围,作为1个独立的参数传入,请执行yfscmd exec "create diskgroup …",且非交互模式下磁盘管理语句尾部的;可选。

# CREATE DISKGROUP

该语句用于创建一个新的diskgroup。

create diskgroup::=

CREATE_DISKGROUP
CREATE DISKGROUP dgname redundancy_clause disk_clause attribute_clause

redundancy_clause::=

REDUNDANCY
EXTERNAL NORMAL HIGH REDUNDANCY

disk_clause::=

DISKGROUP_CLAUSE
fg_def_clause DISK disk_def_clause , DISK disk_def_clause

fg_def_clause::=

FG_DEF
REGULAR QUORUM FAILGROUP fgname

disk_def_clause::=

DISK_DEF
' diskpath ' NAME diskname SIZE size FORCE NOFORCE

attribute_clause::=

ATTRIBUTE
ATTRIBUTE ' au_size ' = '1M' '4M' '8M' '16M' '32M'

# dgname

要创建的diskgroup名称,在YFS中该名称全局唯一,不可省略,且需符合YashanDB的对象命名规范

# redundancy_clause

该语句用于指定diskgroup的冗余度,冗余度决定了diskgroup中数据的副本数量,可省略,则默认为NORMAL。

EXTERNAL指定副本数量为1,NORMAL指定副本数量为2,HIGH指定副本数量为3。

# disk_clause

该语句用于创建failuregroup,可重复指定该语句,语句之间通过空格分隔,表示创建多个failuregroup。

可以创建的failuregroup个数与diskgroup冗余度有关,failuregroup数量须大于等于副本数量,否则返回错误。

# fg_def_clause

该语句用于指定diskgroup下failuregroup的相关信息,可省略,则系统根据disk_def_clause自动创建默认的failuregroup。

# regular

仅用于语法兼容,无实际意义。

# quorum

仅用于语法兼容,无实际意义。

# fgname

创建的failuregroup名称,在YFS中该名称全局唯一,在fg_def_clause中不可省略,且需符合YashanDB的对象命名规范

# disk_def_clause

该语句用于指定failuregroup下disk的数量及属性,指定多个disk使用,间隔。

一个diskgroup中所有failuregroup下的disk数量必须保持一致,否则返回错误。

一个disk只能属于一个failuregroup和一个diskgroup,不能被重复指定。

# diskpath

指定disk所在的YFS路径,本语句支持输入的路径最大长度为31。

# diskname

为disk指定一个名称,可省略,则默认由系统自动生成名称,否则需符合YashanDB的对象命名规范

# size

指定可以由diskgroup进行管理的disk大小,可省略,则默认为该disk的总大小。

本语句必须对一个diskgroup中所有failuregroup下的所有disk同时指定,且size值必须保持一致,否则返回错误。

如指定的size大于该disk总的大小则返回错误。

FORCE|NOFORCE

FORCE用于强制格式化磁盘,例如当YFS检测到磁盘上存在YFS文件系统时,默认会拒绝添加该磁盘以免误操作抹除磁盘上的数据,可通过FORCE强制添加磁盘。

NOFORCE仅用于语法兼容,无实际意义。

# attribute_clause

该语句用于指定YFS在创建的diskgroup上分配磁盘空间时的AU大小,可省略,则默认的AU size为1M。

指定AU size时,可指定的值必须在YFS所支持的范围内,详见崖山文件系统中的分配单元章节描述。

示例

CREATE DISKGROUP DG2 NORMAL REDUNDANCY 
DISK '/dev/DISK_NAME5' SIZE 70M 
FAILGROUP FG_1 DISK '/dev/DISK_NAME10' NAME disk4 SIZE 70M 
FAILGROUP FG_2 DISK '/dev/DISK_NAME4' SIZE 70M 
ATTRIBUTE 'au_size'='4M';

DROP DISKGROUP DG2;

CREATE DISKGROUP DG2 NORMAL REDUNDANCY 
FAILGROUP FG_1 DISK '/dev/DISK_NAME10' NAME disk4,'/dev/DISK_NAME12' 
FAILGROUP FG_2 DISK '/dev/DISK_NAME4','/dev/DISK_NAME11';

# alter diskgroup

该语句用于修改已有diskgroup的属性,如卸载diskgroup、增加failuregroup、向failuregroup增加disk等。

alter diskgroup::=

ALTER_DISKGROUP
ALTER DISKGROUP dgname DISMOUNT FORCE MOUNT ADD fg_clause

fg_clause::=

FG_CLAUSE
fg_def_clause DISK disk_def_clause , DISK disk_def_clause

fg_def_clause::=

FG_DEF
REGULAR QUORUM FAILGROUP fgname

disk_def_clause::=

DISK_DEF
' diskpath ' NAME diskname SIZE size FORCE NOFORCE

# dgname

指定一个已存在的diskgroup的名称。

# dismount|mount

该语句用于对diskgroup执行挂载或去挂载操作。

# force

如果diskgroup中的文件已被打开暂未关闭,将无法DISMOUNT该diskgroup,需明确指定FORCE强制执行。

Caution:

强制DISMOUNT diskgroup可能引起数据库异常、丢失数据,请慎用该操作

# fg_clause

该语句用于添加新的failuregroup。新增的failuregroup需满足在创建diskgroup时对其下failuregroup所要求的所有约束。

# fg_def_clause

同CREATE DISKGROUP中描述一致。

# disk_def_clause

同CREATE DISKGROUP中描述一致。

示例

-- 卸载 diskgroup
ALTER DISKGROUP DG2 DISMOUNT;
-- 挂载 diskgroup
ALTER DISKGROUP DG2 MOUNT;
-- 添加磁盘
ALTER DISKGROUP DG2 ADD FAILGROUP FG_3 DISK '/dev/DISK_NAME13','/dev/DISK_NAME14'

# drop diskgroup

该语句用于删除一个diskgroup。

要删除的diskgroup必须处于MOUNT状态,否则删除失败,可通过ALTER DISKGROUP语句改变diskgroup的状态。

drop diskgroup::=

DROP_DISKGROUP
DROP DISKGROUP dgname INCLUDING CONTENTS FORCE

# dgname

指定一个已存在的DG的名称。

# including contents

如diskgroup中有文件或目录,需明确指定INCLUDING CONTENTS才能强制删除,否则删除失败。

# force

如果diskgroup中的文件被打开但未关闭,将无法DROP该diskgroup,需明确指定FORCE强制执行。注意,强制DROP diskgroup可能引起数据库异常,请慎用该操作

示例

DROP DISKGROUP DG2;

DROP DISKGROUP DG2 INCLUDING CONTENTS;