DMASM 介绍

DMASM(DM Auto Storage Manager)DM 自动存储管理器,是一个专用的分布式文件系统,使用 DMASM 自动存储管理方案,可以帮助用户更加便捷地管理 DMDSC 集群的数据库文件。DMASM 的主要部件包括:提供存储服务的裸设备、dmasmsvr 服务器、dmasmapi 接口、初始化工具 dmasmcmd 和管理工具 dmasmtool 等。

6.1 DMASM 概述

DMDSC 集群可以直接使用裸设备作为共享存储,存放数据库文件。但是,由于裸设备存在的一些功能限制,造成 DMDSC 集群在使用、维护上并不是那么灵活、方便。裸设备的使用限制如下:

  1. 不支持动态扩展文件大小;在创建数据文件时,就必须指定文件大小,并且文件无法动态扩展
  2. 数据文件必须占用整个裸设备盘,造成空间浪费
  3. 不支持类 linux 的文件操作命令,使用不方便
  4. 操作系统支持最大裸设备数目较小,无法创建足够的数据库文件

为了克服裸设备的这些使用限制,DM 专门设计了一个分布式文件系统 DMASM,来管理裸设备的磁盘和文件。DMASM 提供了基本的数据文件访问接口,可以有效降低 DMDSC 共享存储的维护难度,DMASM 提供的主要功能包括:

  1. 分布式管理

支持多台机器并发访问 DMASM 磁盘和文件,提供全局并发控制。

  1. 磁盘组管理

支持创建和删除磁盘组,将裸设备格式化为 DMASM 格式,并由 dmasmsvr 统一管理;一个磁盘组可以包含一个或者多个 DMASM 磁盘;磁盘组支持在线增加 DMASM 磁盘,实现动态存储扩展。

  1. 文件管理

支持创建、删除、截断文件等功能;支持创建目录;支持动态扩展文件;文件可以存放在一个磁盘组的多个磁盘中,文件大小不再受限于单个磁盘大小。

  1. 完善、高效的访问接口

通过 dmasmapi 可以获得各种文件管理功能。

  1. 通用功能的管理工具

dmasmtool 提供一套类 Linux 的文件操作命令用于管理 DMASM 文件,降低用户学习、使用 DMASM 文件系统的难度。

6.2.1 DMASM 术语

本节介绍 DMASM 所用到的术语。术语的详细概念请参考 6.2.2 DMASM 基本概念

表6.1 中英文对照术语表
中文术语 英文术语
DM 自动存储管理器 DM Auto Storage Manager,简称 DMASM
达梦集群同步服务 Dameng Cluster Synchronization Services,简称 DMCSS
ASM 磁盘 ASM Disk
磁盘组 Disk Group
数据分配单元 Allocation Units,简称 AU
DCRV 磁盘 dcrvdisk
DM 集群注册表 DM Clusterware Registry,简称 DCR
表决磁盘 Voting Disk,简称 VTD
DMASM 文件系统初始化工具 DMASMCMD (专门用于 DMASM 非镜像环境)
DMASM 服务器 DMASMSVR (专门用于 DMASM 非镜像环境)
DMASM 应用程序访问接口 DMASMAPI (专门用于 DMASM 非镜像环境)
DMASM 管理工具 DMASMTOOL (专门用于 DMASM 非镜像环境)

6.2.2 DMASM 基本概念

DMASM 的实现主要参考了达梦数据库文件系统,因此,一些概念和实现原理与达梦数据库基本类似,熟悉达梦数据库的用户,就会更加容易理解 DMASM。

表6.2 DMASM/达梦文件系统概念对照表
DMASM 达梦文件系统
磁盘组(disk group) 表空间(tablespace)
DMASM 磁盘(disk) 数据文件(datafile)
DMASM 文件(file) 段(segment)
簇(extent) 簇(extent)
AU(Allocation Units) 页(page)
描述 AU(desc AU) 描述页(desc page)
Inode AU(inode AU) Inode 页(inode page)

DMASM 磁盘

DMASM 磁盘是指经过 dmasmcmd 工具格式化,可以被 dmasmsvr 识别的物理磁盘。DMASM 磁盘是组成磁盘组的基本单位,一个裸设备只能格式化为一个 DMASM 磁盘,不支持分割使用。

磁盘组

磁盘组由一个或多个 DMASM 磁盘组成,是存储 DMASM 文件的载体;一块 DMASM 磁盘只能属于一个磁盘组。DMASM 支持动态添加 DMASM 磁盘。DMDSC 集群中,一般建议将日志文件和数据文件保存到不同的磁盘组中。

DMASM 文件

在 DMASM 磁盘组上创建的文件,称之为 DMASM 文件。一个 DMASM 文件只能保存在一个磁盘组中,但一个 DMASM 文件的数据可以物理存放在同一磁盘组的多个 DMASM 磁盘中。DMDSC 集群中,需要多个节点共享访问的数据库文件、日志文件、控制文件等,一般会创建为 DMASM 文件。

簇(extent)

簇是 DMASM 文件的最小分配单位,一个簇由物理上连续的一组 AU 构成。簇的大小为 4,也就是说一个 DMASM 文件至少占用 4 个 AU,也就是 4M 的物理存储空间。

AU(Allocation Units,简称 AU)

DMASM 存储管理的最小单位,AU 的大小为 1M。DMASM 以 AU 为单位将磁盘划分为若干逻辑单元,DMASM 文件也是由一系列 AU 组成。根据 AU 的不同用途,系统内部定义了一系列 AU 类型,包括:desc AU、inode AU、redo AU、和 data AU。

DMASM 文件系统初始化工具(DMASMCMD)

专门用于 DMASM 非镜像环境。将在[6.6 DMASMCMD](#_6.6 DMASMCMD)中详细介绍。

DMASM 服务器(DMASMSVR)

专门用于 DMASM 非镜像环境。将在 6.7 DMASMSVR 中详细介绍。

DMASM 应用程序访问接口(DMASMAPI)

专门用于 DMASM 非镜像环境。将在[6.8 DMASMAPI](#_6.8 DMASMAPI)中详细介绍。

DMASM 管理工具(DMASMTOOL)

专门用于 DMASM 非镜像环境。将在[6.9 DMASMTOOL](#_6.9 DMASMTOOL)中详细介绍。

6.3 DMASM 原理

为了帮助用户更好的理解、使用 DMASM,本节从 DMASM 磁盘与文件管理、DMASM redo 日志、簇映射表等方面介绍 DMASM 原理。

6.3.1 DMASM 磁盘与文件管理

DMASM 文件系统将物理磁盘格式化后,变成可识别、可管理的 DMASM 磁盘,再通过 DMASM 磁盘组将一个或者多个 DMASM 磁盘整合成一个整体提供文件服务。

DMASM 磁盘组结构

图6.1 DMASM磁盘组结构

DMASM 磁盘格式化以后,会逻辑划分为若干簇(extent),簇是管理 DMASM 磁盘的基本单位,DMASM 文件的最小分配单位也是簇。这些逻辑划分的簇根据其用途可以分为描述簇、inode 簇和数据簇。

DMASM 磁盘逻辑结构

图6.2 DMASM磁盘逻辑结构

创建、删除 DMASM 文件操作,在 DMASM 系统内部其实就是转换成修改、维护 inode AU 的具体动作。

而扫描全局的 inode AU 链表就可以获取到磁盘组上所有的 DMASM 文件信息。

6.3.2 DMASM redo 日志

DMASM 采用重做日志机制,保证在各种异常(比如系统掉电重启)情况下数据不被损坏。创建、删除 DMASM 文件等 DDL 操作过程中,所有针对 DMASM 描述 AU、inode AU 的修改,都会生成 redo 日志,并且在描述 AU、inode AU 的修改写入磁盘之前,必须确保 redo 日志已经写入磁盘。DMASM 中,只针对描述 AU 和 inode AU 的修改产生 redo 日志,用户修改数据 AU 的动作并不会产生 redo 日志。

DMASM 所有 DDL 操作(创建文件、删除文件、增加磁盘等)都是串行执行的,并且在操作完成之前,会确保所有修改的描述项、inode 项写入磁盘;一旦 DDL 操作完成,所有 redo 日志就可以被覆盖了。

DDL 操作过程中出现异常时,如果 redo 日志尚未写入磁盘,则当前操作对系统没有任何影响;如果 redo 日志已经写入磁盘,那么重新启动后,系统会重演 redo 日志,修改描述 AU 和 inode AU,将此 DDL 继续完成。

6.3.3 簇映射表

创建 DMASM 文件后,用户操作 DMASM 文件的一般流程是:调用 DMASM 文件的 OPEN、READ、WRITE 接口,打开 DMASM 文件并获取一个句柄,再使用这个句柄从文件的指定偏移读取数据、或者写入数据。用户在使用 DMASM 的过程中,只需要获取一个 DMASM 文件句柄,并不需要知道数据最终保存在物理磁盘的什么位置。

DMASM 使用簇映射表(extent map)机制维护 DMASM 文件与物理磁盘地址的映射关系,访问 DMASM 文件时,根据文件号、文件偏移等信息,通过簇映射表可以快速获取到物理磁盘地址。

由于 DMASM 并不缓存任何用户数据,与直接读、写裸设备相比,DMASM 文件的读、写操作仅仅增加了簇映射的代价,而这个代价与 IO 代价相比几乎可以忽略,因此,使用 DMASM 并不会引起读、写性能的降低。

dmasm 数据访问

图6.3 dmasm数据访问

6.4 DMASM 技术指标

本节主要介绍一下 DMASM 中的一些重要技术指标。

表6.3 DMASM技术指标
大小 说明
AU 大小 1024* 1024 一个 AU 占用 1MB 存储空间
簇大小 4 一个簇包含 4 个物理上连续的 AU
描述项大小 32 一个簇描述项占用 32 个字节的存储空间
描述 AU 管理的最大簇数目 16* 1024 一个描述 AU 最多管理 16384 个簇
描述 AU 管理的最大 AU 数 64* 1024 一个描述 AU 最多可以管理 65536 个 AU
描述 AU 管理的最大磁盘空间 64G 一个描述 AU 最多可以管理 64GB 磁盘空间
Inode 项大小 512 一个 DMASM 文件描述项大小,每个 DMASM 文件/目录都对应着一个文件描述项目
Inode AU 可管理的最大文件数 2046 一个 Inode AU 最多可以管理 2046 个文件
DMASM 文件最小尺寸 4M 每个 DMASM 文件最少包含一个簇
DMASM 文件最大尺寸 4PB 一个 DMASM 文件最多可以包含 4294967295 个 AU,每个 AU 是 1MB,理论上单个 DMASM 文件的最大尺寸是 4PB
一个用户连接可同时打开的 DMASM 文件数 65536 一个用户连接,最多打开 65536 个 DMASM 文件
DMASM 文件数上限 8388607 一个磁盘组,最多可以创建 8388607 个 DMASM 文件
磁盘组个数上限 124 最多可创建 124 个磁盘组
每 10M 共享内存大小能管理的磁盘大小 约 600G 每个簇描述项大概占用 64byte 内存空间,每个簇描述项对应 4MB 磁盘空间,通过计算 10MB / 64* 4MB= 655GB;655GB 左右的磁盘,使用 10M 大小的共享内存能保证使用过程中簇描述项不被淘汰

6.5 DMASM 使用说明

  1. 使用 DMASM 必须先使用 dmasmcmd 工具初始化 DMASM 磁盘和磁盘组,并启动 dmasmsvr 服务器。使用者(dmserver 等)必须通过 dmasmapi 接口登录 dmasmsvr 创建 DMASM 文件,并进行各种 DMASM 文件操作。
  2. DMASM 文件的读写接口与普通的操作系统文件类似,主要的区别就是需要使用专用的 dmasmapi 接口进行操作。
  3. 一台共享存储上,只能搭建一套 ASM 文件系统,多套会导致系统启动失败。
  4. 已经 open、正在访问的 DMASM 文件不允许删除。
  5. DMASM 文件可以重复打开,但是建议用户在使用过程中,尽量避免反复打开同一个 DMASM 文件。如果用户反复打开同一个 DMASM 文件,并且没有及时关闭文件,有可能会降低 DMASM 文件的访问效率。
  6. DMASM 文件句柄不保证全局唯一,只保证连接级别的唯一性,一个连接重复打开同一个 DMASM 文件,会返回不同的文件句柄;不同连接打开同一个 DMASM 文件,有可能返回相同的文件句柄。
  7. 支持删除磁盘组,但不能单独删除磁盘组中的某一块磁盘。
  8. 任意文件 open 的情况下,其所属的磁盘组不能被删除。
  9. DMASM 文件路径都以“+GROUP_NAME”开头,使用“/”作为路径分隔符,任何以“+”开头的文件,我们都认为是 DMASM 文件,“GROUP_NAME”是磁盘组名称。比如,“+DATA/ctl/dm.ctl”表示 dm.ctl 文件,保存在 DMASM 文件系统的“DATA”磁盘组的 ctl 目录下。"+"号只能出现在全路径的第一位,出现在任意其他地方的路径都是非法的。
  10. DMASM 只提供文件级别的并发控制,访问 DMASM 文件,系统内部会进行封锁操作。比如,正在访问的数据文件不允许被删除;但是 DMASM 并不提供数据文件的读写并发控制。DMASM 允许多个用户同时向同一个文件的相同偏移写入数据,一旦发生这种并发写,我们无法预知最终写入磁盘的数据是什么。因此,DMASM 不是一个通用的分布式文件系统,必须由使用 DMASM 的上层应用来控制数据文件的读写并发。采用这种实现策略的主要原因有两个:
  • 提升 DMASM 文件的读写效率。通用的分布式文件系统,需要实现读、写操作的全局并发控制,避免并发写入导致数据不一致,这种策略会严重影响读、写性能。
  • 数据库管理软件已经提供了数据访问的并发控制机制,确保不会同时读、写相同的数据页,DMASM 不需要实现一套重复的并发控制策略。
  1. 目前,DMASM 还未实现异步格式化机制,创建磁盘组、添加磁盘等操作需要较长的执行时间,并且格式化过程中会阻塞创建 DMASM 文件等操作。
  2. 目前,DMASM 只提供了基本的数据文件管理功能,并不支持镜像存储、条带化存储、数据再平衡等功能。

6.6 DMASMCMD

DMASMCMD 是 DMASM 文件系统初始化工具,用来格式化裸设备为 DMASM 磁盘,并初始化 DCR Disk、Voting Disk。格式化 DMASM 磁盘就是在裸设备的头部写入 DMASM 磁盘特征描述符号,包括 DMASM 标识串、DMASM 磁盘名、以及 DMASM 磁盘大小等信息。其中 Voting Disk 和 DCR Disk 也会被格式化为 DMASM 磁盘。

DMASMCMD 工具的主要功能包括:

  1. 格式化 DMASM 磁盘
  2. 初始化 DCR Disk,同时指定密码
  3. 初始化 Voting Disk
  4. 导出 DCR Disk 配置信息
  5. 导入 DCR Disk 配置信息
  6. 清理 DCR Disk 中指定组的故障节点信息
  7. 创建用于模拟裸设备的磁盘文件(用于单机模拟 DMDSC 环境)
  8. 列出指定路径下面磁盘属性
  9. 联机修改 DCR 磁盘,扩展节点

DMASMCMD 工具用法:

格式: dmasmcmd KEYWORD=value
例如: dmasmcmd SCRIPT_FILE=asmcmd.txt
关键字             说明(默认值)
----------------------------------------------------------------------------
SCRIPT_FILE      asmcmd脚本文件路径
RET_FLAG          执行asmcmd脚本文件时,出错是否立即返回(0)
DFS_INI           dmdfs.ini文件路径
HELP               打印帮助信息
  1. SCRIPT_FILE 用于指定 asmcmd 脚本文件路径。asmcmd.txt 中集中存放了 DMASMCMD 用到的命令。
  • 用户没有通过 SCRIPT_FILE 指定脚本文件,则 dmasmcmd 进入交互模式运行,逐条解析、运行命令。
  • 用户通过 SCRIPT_FILE 指定脚本文件(比如 asmcmd.txt),则以行为单位读取文件内容,并依次执行,执行完成以后,自动退出 dmasmcmd 工具。脚本文件必须以“##asm script file”开头,否则认为是无效脚本文件;脚本中其它行以“##”表示注释;脚本文件大小不超过 1M。
  1. RET_FLAG 用于设置执行 asmcmd 脚本文件时,出错是否立即返回。取值 0 或 1,0 不返回,1 返回。缺省值为 0。
  2. DFS_INI 专门用于透明分布式数据库环境中,指定 dmdfs.ini 文件路径。DMASMCMD 初始化时候需连接 DRS 执行。dmdfs.ini 中保存的都是 DRS 的配置信息。此参数本书不做详细介绍。具体用法请参考《DM8 透明分布式数据库》

DMASMCMD 命令行执行界面下支持的语句包括:

  • 创建 DMASM 磁盘

用来将裸设备或块设备格式化为 ASM Disk,会在裸设备或块设备头部写入 ASM Disk 标识信息。size 取值最小 32。

语法格式:

CREATE ASMDISK disk_path disk_name [size(m)]

举例说明:

CREATE ASMDISK '/HOME/ASMDISKS/DISK0.ASM' 'DATA0'
CREATE ASMDISK '/HOME/ASMDISKS/DISK0.ASM' 'DATA0' 100

用来将裸设备或块设备格式化为 DCR 磁盘,会在裸设备或块设备头部写入 DCR 标识信息。size 取值最小 32。

语法格式:

CREATE DCRDISK disk_path disk_name [size(m)]

举例说明:

CREATE DCRDISK '/HOME/ASMDISKS/DISK0.ASM' 'DATA0'
CREATE DCRDISK '/HOME/ASMDISKS/DISK0.ASM' 'DATA0' 100

用来将裸设备或块设备格式化为 Voting Disk,会在裸设备或块设备头部写入 Voting Disk 标识信息。

语法格式:

CREATE VOTEDISK disk_path disk_name [size(m)]

举例说明:

CREATE VOTEDISK '/HOME/ASMDISKS/DISK0.ASM' 'DATA0'
CREATE VOTEDISK '/HOME/ASMDISKS/DISK0.ASM' 'DATA0' 100

以上三个命令中 size 参数可以省略,程序会计算 disk_path 的大小;但是某些操作系统计算 disk_path 大小会失败,这时候还是需要用户指定 size 信息,size 取值最小为 32。

  • 创建空文件模拟裸设备

创建 disk0.asm 模拟裸设备或块设备,注意必须以.asm 结尾。模拟测试用,真实环境不建议使用。SIZE 最小值为 32M,无上限限制。

语法格式:

CREATE EMPTYFILE file_path SIZE num(m)

举例说明:

CREATE EMPTYFILE '/OPT/DATA/ASMDISKS/DISK0.ASM' SIZE 100
  • 初始化 DCR & Voting Disk

根据配置文件 dmdcr_cfg.ini 的内容,初始化 DCR 磁盘。设置登录 ASM 文件系统的密码,密码要用单引号括起来。

语法格式:

INIT DCRDISK disk_path FROM ini_path IDENTIFIED BY password

举例说明:

INIT DCRDISK '/DEV/RAW/RAW2' FROM '/HOME/ASM/DMDCR_CFG.INI' IDENTIFIED BY 'AAAAAA'

根据配置文件 dmdcr_cfg.ini 的内容,初始化 Voting Disk。

语法格式:

INIT VOTEDISK disk_path FROM ini_path

举例说明:

INIT VOTEDISK '/DEV/RAW/RAW3' FROM '/HOME/ASM/DMDCR_CFG.INI'
  • 导出 DCR 的配置文件

解析 DCR 磁盘内容,导出到 dmdcr_cfg.ini 文件。

语法格式:

EXPORT DCRDISK disk_path TO ini_path

举例说明:

EXPORT DCRDISK '/DEV/RAW/RAW2' TO '/HOME/ASM/DMDCR_CFG.INI'
  • 导入 DCR 的配置文件

根据配置文件/data/dmdcr_cfg.ini 的内容,将修改导入 DCR 磁盘。

语法格式:

IMPORT DCRDISK ini_path TO disk_path

举例说明:

IMPORT DCRDISK '/DATA/DMDCR_CFG.INI' TO '/DATA/ASMDISKS/DISK0.ASM'

限制:

DCR_N_GRP、DCR_GRP_N_EP、DCR_GRP_NAME、DCR_GRP_TYPE、DCR_GRP_EP_ARR、DCR_EP_NAME、EP 所属的组类型、checksum 值、密码不可修改。

必须以组为单位进行修改。

  • 校验 DCR 磁盘

校验 DCR 磁盘信息是否正常,根据打印出来的 code 值判断,如果等于 0,则表示 DCR 磁盘正常,如果小于 0,则说明 DCR 磁盘故障,需要重新初始化。

语法格式:

CHECK DCRDISK disk_path

举例说明:

CHECK DCRDISK '/DEV/RAW/RAW2'
  • 清理指定组的故障节点信息

清理 DCR Disk 中指定组的故障节点信息,可借助 export 命令查看对应组的 DCR_GRP_N_ERR_EP 和 DCR_GRP_ERR_EP_ARR 信息,清理成功后,指定组的 DCR_GRP_N_ERR_EP 值为 0,DCR_GRP_ERR_EP_ARR 内容为空。

语法格式:

CLEAR DCRDISK err_ep_arr disk_path group_name

举例说明:

CLEAR DCRDISK ERR_EP_ARR '/DEV/RAW/RAW2' 'GRP_DSC'
  • 显示指定路径下面磁盘属性

显示 path 路径下面所有磁盘的信息,分为三种类型:

normal disk:普通磁盘;

unused asmdisk:初始化未使用的 asmdisk;

used asmdisk:已经使用的 asmdisk。

语法格式:

LISTDISKS path

举例说明:

LISTDISKS '/DEV/RAW/'

限制:

如果查询模拟 ASM 磁盘的磁盘信息,则对 path 路径没有限制;如果查询真实环境中共享存储路径下的磁盘信息,则 path 路径的根目录名称必须以“dev”开头,例如:listdisks '/dev/DMDATA/' 或 listdisks '/dev_data/DMDATA/',否则将不会显示该路径下的磁盘信息。

  • 联机修改 DCR 磁盘,扩展节点

联机修改 DCR 磁盘,扩展节点,会将新增节点信息写回 dcr 磁盘。

语法格式:

EXTEND DCRDISK disk_path FROM ini_path

举例说明:

EXTEND DCRDISK 'D:\ASMDISKS\DISK0.ASM' FROM 'D:\DMDCR_CFG.INI'

6.7 DMASMSVR

DMASMSVR 是提供 DMASM 服务的主要载体,每个提供 DMASM 服务的节点都必须启动一个 DMASMSVR 服务器,这些 DMASMSVR 一起组成共享文件集群系统,提供共享文件的全局并发控制。DMASMSVR 启动时扫描/dev/raw/路径下的所有裸设备,加载 DMASM 磁盘,构建 DMASM 磁盘组和 DMASM 文件系统。DMASMSVR 实例之间使用 MAL 系统进行信息和数据的传递。

DMASMSVR 集群的启动、关闭、故障处理等流程由 DMCSS 控制,DMASMSVR 定时向 Voting Disk 写入时间戳、状态、命令、以及命令执行结果等信息,DMCSS 控制节点定时从 Voting Disk 读取信息,检查 DMASMSVR 实例的状态变化,启动相应的处理流程。

DMASMSVR 集群中,只有一个控制节点,控制节点以外的其他节点叫做普通节点,DMASMSVR 控制节点由 DMCSS 选取;所有 DDL 操作(比如创建文件,创建磁盘组等)都是在控制节点执行,用户登录普通节点发起的 DDL 请求,会通过 MAL 系统发送到控制节点执行并返回;而 DMASM 文件的读、写等操作,则由登录节点直接完成,不需要传递到控制节点执行。

DMASMSVR 启动格式:

格式: dmasmsvr.exe KEYWORD=value
例如: dmasmsvr.exe DCR_INI=/home/data/DAMENG/dmdcr.ini
关键字说明(默认)
----------------------------------------------------------------
DCR_INI dmdcr.ini路径
-NOCONSOLE 以服务方式启动
HELP 打印帮助信息
注意

dmdcr.ini配置文件记录了DCR磁盘路径、实例序列号等信息;如果不指定DCR_INI参数,dmasmsvr默认在当前路径下查找dmdcr.ini文件。
使用DMASMTOOL或DMASMAPI函数dmasm_connect()登录DMASMSVR时,用户名只能为“ASMSYS”。若为本地登录,不校验密码;若为远程登录,应使用初始化DCR磁盘时设置的登录ASM文件系统的密码。

6.8 DMASMAPI

DMASMAPI 是 DMASM 文件系统的应用程序访问接口,通过调用 DMASMAPI 接口,用户可以访问、操作 DMASM 文件。与达梦数据库接口 DPI 类似,访问 DMASM 文件之前,必须先分配一个 conn 对象,并登录到 DMASMSVR 服务器,再使用这个 conn 对象进行创建磁盘组、创建文件、删除文件、读取数据和写入数据等 DMASM 相关操作。

下面举一个简单的例子,说明一下 DMASMAPI 的使用方法,DMASMAPI 接口的详细使用说明请参考附录 1。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "dmdcr_cfg.h"
#include "dcr_dll.h"
#include "apitype.h"
#include "asmapi2.h"
#define IS_SUCCESS(code)	            ((sdint4)code>= 0)

int
main (
int			argc,
char*		argv[]
)
{
sdint4	code = 0;
sdbyte	err_desc[1024];
udint4	err_len;
dmdcr_cfg_sys_t*	dcr_cfg_sys;
dcr_ep_t	dcr_ep;
asm_fhandle_t	fil_handle;
asmcon_handle	conn;
err_len		= sizeof(err_desc);
code			= dmasm_sys_init(err_desc, &err_len, ULINT_UNDEFINED);
if (!IS_SUCCESS(code))
    {
fprintf(stderr, "dmasm_sys_init error:[%s]\n", err_desc);
return -1;
    }
// dcr初始化相关
code			= dmdcr_cfg_sys_init("dmdcr.ini");
if (!IS_SUCCESS(code))
    {
fprintf(stderr, "dmdcr_cfg_sys_init error, code:[%d]\n", code);
return -1;
    }
dcr_cfg_sys	= dmdcr_cfg_sys_get();
code			= dcr_sys_init(dcr_cfg_sys->dcr_path, err_desc, &err_len);
if (!IS_SUCCESS(code))
    {
fprintf(stderr, "dcr_sys_init error:[%s]\n", err_desc);
return -1;
    }
dcr_dll_get_ep_info_by_type(DCR_TYPE_ASM, dcr_cfg_sys->inst_seqno, &dcr_ep);
//分配连接句柄 
code			= dmasm_alloc_con(&conn, err_desc, &err_len);
if (!IS_SUCCESS(code))
    {
fprintf(stderr, "dmasm_alloc_con error:[%s]\n", err_desc);
return -1;
    }
// 登录asmsvr,本地登录不校验密码,可以输入任意字符串,远程登录会校验用户名密码
code			= dmasm_connect(conn, "ASMSYS", "xxxxxx",dcr_ep.ep_host, dcr_ep.ep_lsnr_port, NULL, err_desc, &err_len);
if (!IS_SUCCESS(code))
    {
fprintf(stderr, "dmasm_connect error:[%s]\n", err_desc);
return -1;
    }
//创建磁盘组,组名 GRP01,磁盘/dev/raw/raw2 
code	= dmasm_create_diskgroup(conn, "GRP01", "/dev/raw/raw2", err_desc, &err_len);
if (!IS_SUCCESS(code))
    {
fprintf(stderr, "dmasm_create_diskgroup error:[%s]\n", err_desc);
return -1;
    }
//在新创建的磁盘组内创建asm文件 
code	= dmasm_file_create(conn, 1, "+GRP01/test1.dta", 20, &fil_handle, err_desc, &err_len);
if (!IS_SUCCESS(code))
    {
fprintf(stderr, "dmasm_file_create error:[%s]\n", err_desc);
return -1;
    }
//关闭打开的文件句柄,否则删除会报错 
dmasm_file_close(conn, fil_handle);
code    = dmasm_file_delete(conn, "+GRP01/test1.dta", err_desc, &err_len);
if (!IS_SUCCESS(code))
    {
fprintf(stderr, "dmasm_file_delete error:[%s]\n", err_desc);
return -1;
    }
// 删除asm磁盘组,同样如果磁盘组中有任何文件open,删除磁盘组会报错 
code    = dmasm_drop_diskgroup_by_name(conn, "GRP01", err_desc, &err_len);
if (!IS_SUCCESS(code))
    {
fprintf(stderr, "dmasm_drop_diskgroup_by_name error:[%s]\n", err_desc);
return -1;
    }
dmasm_close_con(conn);
dmasm_free_con(conn);
dmasm_sys_deinit();
return 0;
}

6.9 DMASMTOOL

DMASMTOOL 是 DMASM 文件系统管理工具,提供了一套类 Linux 文件操作命令,用于管理 DMASM 文件,是管理、维护 DMASM 的好帮手。DMASMTOOL 工具使用 DMASMAPI 连接到 DMAMSVR,并调用相应的 DMASMAPI 函数,实现创建、拷贝、删除等各种文件操作命令;DMASMTOOL 还支持 DMASM 文件和操作系统文件的相互拷贝。

DMASMTOOL 可以登录本地 DMASMSVR,也可以登录位于其他节点的 DMASMSVR,并执行各种文件操作命令。一般建议登录本地 DMASMSVR 服务器,避免文件操作过程中的网络开销,提升执行效率。

DMASMTOOL 启动命令:

格式: dmasmtool.exe KEYWORD=value
例如: dmasmtool.exe DCR_INI=/home/data/DAMENG/dmdcr.ini
关键字说明(默认)
----------------------------------------------------------------
DCR_INI dmdcr.ini文件路径
HOST asm服务器地址
PORT_NUM asm服务器端口号
USERID 登录asm服务器用户名密码,(格式:USER/PWD)
SCRIPT_FILE asmtool脚本文件路径
HELP 打印帮助信息
注意

1. dmasmtool的最大命令长度是1024。
2. 用户没有指定脚本文件,则dmasmtool进入交互模式运行,逐条解析、允许命令;用户指定脚本文件(比如asmtool.txt),则以行为单位读取文件内容,并依次执行,执行完成以后,自动退出dmasmtool工具。脚本文件必须以"\##asm script file"开头,否则认为是无效脚本文件;脚本中其他行以"\##"开始表示注释。
3. dmasmtool命令直接输入的host/ip信息配置的是连接asmsvr的信息,可以在dmdcr_cfg.ini里面找到,分别为要连接的ASM节点的DCR_EP_HOST和DCR_EP_PORT。

DMASMTOOL 支持的命令说明:

  1. 创建磁盘组,添加磁盘,删除磁盘组

创建磁盘组,或为磁盘组添加磁盘时,以下情况可能导致失败:

(1)DMASMSVR 服务器没有访问对应磁盘的权限;

(2)磁盘路径不在 dmdcr_cfg.ini 配置文件中配置的 DCR_EP_ASM_LOAD_PATH 路径下;

(3)磁盘大小不够,最少需要 32MB。

  • 创建磁盘组

asmdisk 为磁盘组名,最长不能超过 32 字节。路径必须是全路径,不能是相对路径。

语法格式:

CREATE DISKGROUP name ASMDISK file_path

举例说明:

CREATE DISKGROUP 'DMDATA' ASMDISK '/DEV/RAW/RAW3'
  • 添加磁盘

asmdisk 路径必须是全路径,不能是相对路径。

语法格式:

ALTER DISKGROUP name ADD ASMDISK file_path

举例说明:

ALTER DISKGROUP 'DMDATA' ADD ASMDISK '/DEV/RAW/RAW4'
  • 删除磁盘组

语法格式:

DROP DISKGROUP name

举例说明:

DROP DISKGROUP 'DMDATA'
  1. 创建文件,扩展文件,截断文件,删除文件
  • 创建文件

语法格式:

CREATE ASMFILE file_path SIZE(M) num

举例说明:

CREATE ASMFILE '+DMDATA/SAMPLE.DTA' SIZE 20
  • 扩展文件

语法格式:

ALTER ASMFILE file_path EXTEND TO size(m)

举例说明:

ALTER ASMFILE '+DMDATA/SAMPLE.DTA' EXTEND TO 20
  • 截断文件

语法格式:

ALTER ASMFILE file_path TRUNCATE TO size(m)

举例说明:

ALTER ASMFILE '+DMDATA/SAMPLE.DTA' TRUNCATE TO 20
  • 删除文件

语法格式:

DELETE ASMFILE file_path

举例说明:

DELETE ASMFILE '+DMDATA/SAMPLE.DTA'
  • 重定向输出文件

语法格式:

SPOOL file_path [CREATE|REPLACE|APPEND]

参数说明:

参数说明:

file_path:输出文件路径。可选项:

  1. create:如果重定向文件不存在,则创建;如果存在,创建失败。
  2. replace:如果重定向文件不存在,则创建;如果存在,则替换掉。默认为 replace。
  3. append:如果重定向文件不存在,则创建;如果存在,则追加到文件末尾。
  4. 多次 spool 重定向文件,第一次成功打开重定向文件之后,如果未关闭,则不再打开其他重定向文件。

举例说明:

SPOOL /HOME/DATASPOOL.TXT
  • 关闭重定向文件

语法格式:

SPOOL OFF

举例说明:

SPOOL OFF
  1. 兼容 LINUX 一些命令,功能受限,但是很实用
  • 到达某目录

语法格式:

CD [path]

举例说明:

CD +DMDATA/TEST
  • 拷贝

语法格式:

CP [-RF] src_file_path|src_dir_path dst_file_path|dst_dir_path

参数说明:

-R:递归拷贝,将指定目录下的子文件和子目录一并拷贝

-F:执行拷贝,不给出提示

举例说明:

CP '+DMDATA/AA/SAMPLE.DTA' '+DMDATA/A/B.DTA'
CP -R '+DMDATA/AA' '+DMDATA/BB'
CP –F '+DMDATA/AA/SAMPLE.DTA' '+DMDATA/A/B.DTA'
  • 删除

语法格式:

RM [-RF] file_path|dir_path

参数说明:

-R:递归删除,将指定目录下的子文件和子目录一并删除

-F:执行删除,不给出提示

举例说明:

RM '+DMDATA/A/SAMPLE.DTA'
RM -R '+DMDATA/A/'
RM –F '+DMDATA/B/'
  • 创建目录

语法格式:

MKDIR [-P] dir_path

参数说明:

-P:自动创建不存在的中间目录

举例说明:

MKDIR '+DMDATA/A'
MKDIR -P '+DMDATA/NODIR/BB'
  • 查找

语法格式:

FIND path file_name

举例说明:

FIND +DMDATA/A 'SAMPLE.DTA'
  • 显示

语法格式:

LS [-LR] file_name|dir_name

参数说明:

-L:显示文件详细信息

-R:递归显示

举例说明:

LS '+DMDATA/A'
LS -L '+DMDATA/A'
LS –R '+DMDATA/A'
  • 显示存储信息

语法格式:

DF

举例说明:

DF
  • 当前目录

语法格式:

PWD

举例说明:

PWD
  1. DMASM 特有的一些命令
  • 列出所有的磁盘组

语法格式:

LSDG

举例说明:

LSDG
  • 列出所有的 DMASM 磁盘

语法格式:

LSDSK

举例说明:

 LSDSK
  • 列出文件的详细信息

语法格式:

LSATTR

举例说明:

LSATTR
  • 列出所有的信息,包括文件等

语法格式:

LSALL

举例说明:

LSALL
  • 修改密码

语法格式:

PASSWORD

举例说明:

PASSWORD
  • 登录,在断开连接后,重新登录

语法格式:

LOGIN

举例说明:

LOGIN
  • 测试 ASM 环境下磁盘的读写速度,包括随机读/写速度和顺序读/写速度

语法格式:

IOTEST

执行 iotest 命令时,会在当前路径下创建一个后缀名为.iotest 的临时文件,大小为 1G,测试完成后会自动删除该临时文件。如果当前路径为“+”目录,则默认在 0 号 group 根目录下创建临时文件。出现以下情况时将报错:

(1)若磁盘空间不足 1G,则报错;
(2)若临时文件生成路径下已经存在 iotest 文件,则报错,需要手动删除 iotest 文件后才能继续执行 iotest 命令。

举例说明:

IOTEST
注意

1) DMASMTOOL工具的上下键,查找历史记录,以及TAB键的自动补齐功能是基于readline实现的,由于readline输入不支持中文,因此目前DMASMTOOL工具不支持中文输入。
2) 若文件名或路径中包含中文字符,当客户端与服务器的编码不一致时,可能出现乱码,因此建议不要使用包含中文字符的文件名或路径。
3) 在dmasmtool工具执行命令时,如果路径名或者文件名首字母为数字,需要给字符串加单引号'。
4) 在asmtool工具使用cd命令,首字母为'+', '\\', '/'符号都会从目录最上层开始查找目录。
5) DMASM文件全路径长度不能超过256字节。

微信扫码
分享文档
扫一扫
联系客服