上篇我们了解了DMDSC的概念,如下:
DM7 达梦 共享存储数据库集群 (1) — DMDSC 概述
https://www.cndba.cn/dave/article/3685
DMASM(DM Auto Storage Manager)是一个专用的分布式文件系统,使用 DMASM自动存储管理方案,可以帮助用户更加便捷地管理 DMDSC 集群的数据库文件。DMASM 的主要部件包括:提供存储服务的裸设备、dmasmsvr 服务器、dmasmapi 接口、初始化工具dmasmcmd 和管理工具 dmasmtool 等。
1 DMASM 概述
DMDSC 集群可以直接使用裸设备作为共享存储,存放数据库文件。但是,由于裸设备存在的一些功能限制,造成 DMDSC 集群在使用、维护上并不是那么灵活、方便。
裸设备的使用限制如下:
- 不支持动态扩展文件大小;在创建数据文件时,就必须指定文件大小,并且文件无法动态扩展
- 数据文件必须占用整个裸设备盘,造成空间浪费
- 不支持类 linux 的文件操作命令,使用不方便
- 操作系统支持最大裸设备数目较小,无法创建足够的数据库文件
为了克服裸设备的这些使用限制,DM7 专门设计了一个分布式文件系统 DMASM,来管理裸设备的磁盘和文件。DMASM 提供了基本的数据文件访问接口,可以有效降低 DMDSC 共享存储的维护难度,DMASM 提供的主要功能包括:
- 分布式管理
支持多台机器并发访问 DMASM 磁盘和文件,提供全局并发控制。- 磁盘组管理
支持创建和删除磁盘组,将裸设备格式化为 DMASM 格式,并由 dmasmsvr 统一管理;
一个磁盘组可以包含一个或者多个 DMASM 磁盘;磁盘组支持在线增加 DMASM 磁盘,实现动态存储扩展。- 文件管理
支持创建、删除、截断文件等功能;支持创建目录;支持动态扩展文件;文件可以存放在一个磁盘组的多个磁盘中,文件大小不再受限于单个磁盘大小。- 完善、高效的访问接口
通过 dmasmapi 可以获得各种文件管理功能。- 通用功能的管理工具
dmasmtool提供一套类 Linux的文件操作命令用于管理DMASM文件,降低用户学习、使用 DMASM 文件系统的难度。
2 DMASM 基本概念
DMASM 的实现主要参考了达梦数据库文件系统,因此,一些概念和实现原理与达梦数据库基本类似,熟悉达梦数据库的用户,就会更加容易理解 DMASM。
2.1 DMASM 磁盘
DMASM 磁盘是指经过 dmasmcmd 工具格式化,可以被 dmasmsvr 识别的物理磁盘。
DMASM 磁盘是组成磁盘组的基本单位,一个裸设备只能格式化为一个 DMASM 磁盘,不支持分割使用。
2.2 磁盘组
磁盘组由一个或多个 DMASM 磁盘组成,是存储 DMASM 文件的载体;一块 DMASM磁盘只能属于一个磁盘组。DMASM 支持动态添加 DMASM 磁盘。DMDSC 集群中,一般建议将日志文件和数据文件保存到不同的磁盘组中。
2.3 DMASM 文件
在 DMASM 磁盘组上创建的文件,称之为 DMASM 文件。一个 DMASM 文件只能保存在一个磁盘组中,但一个 DMASM 文件的数据可以物理存放在同一磁盘组的多个 DMASM磁盘中。DMDSC 集群中,需要多个节点共享访问的数据库文件、日志文件、控制文件等,一般会创建为 DMASM 文件。
2.4 簇(extent)
簇是 DMASM 文件的最小分配单位,一个簇由物理上连续的一组 AU 构成。簇的大小为 4,也就是说一个 DMASM 文件至少占用 4 个 AU,也就是 4M 的物理存储空间。
2.5 AU(Allocate Unit)
DMASM 存储管理的最小单位,AU 的大小为 1M。DMASM 以 AU 为单位将磁盘划分为若干逻辑单元,DMASM 文件也是由一系列 AU 组成。根据 AU 的不同用途,系统内部定义了一系列 AU 类型,包括:desc AU、inode AU、redo AU、和 data AU。
3 DMASM 原理
为了帮助用户更好的理解、使用 DMASM,本节从 DMASM 磁盘与文件管理、DMASM redo日志、簇映射表等方面介绍 DMASM 原理。
3.1 DMASM 磁盘与文件管理
DMASM 文件系统将物理磁盘格式化后,变成可识别、可管理的 DMASM 磁盘,再通过DMASM 磁盘组将一个或者多个 DMASM 磁盘整合成一个整体提供文件服务。
DMASM 磁盘格式化以后,会逻辑划分为若干簇(extent),簇是管理 DMASM 磁盘的基本单位,DMASM 文件的最小分配单位也是簇。这些逻辑划分的簇根据其用途可以分为描述簇、inode 簇和数据簇。
创建、删除 DMASM 文件操作,在 DMASM 系统内部其实就是转换成修改、维护 inode AU的具体动作。
而扫描全局的 inode AU 链表就可以获取到磁盘组上所有的 DMASM 文件信息。
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 继续完成。
3.3 簇映射表
创建 DMASM 文件后,用户操作 DMASM 文件的一般流程是:调用 DMASM 文件的 OPEN、READ、WRITE 接口,打开 DMASM 文件并获取一个句柄,再使用这个句柄从文件的指定偏移读取数据、或者写入数据。用户在使用 DMASM 的过程中,只需要获取一个 DMASM 文件句柄,并不需要知道数据最终保存在物理磁盘的什么位置DMASM 使用簇映射表(extent map)机制维护 DMASM 文件与物理磁盘地址的映射关系,访问 DMASM 文件时,根据文件号、文件偏移等信息,通过簇映射表可以快速获取到物理磁盘地址。
由于 DMASM 并不缓存任何用户数据,与直接读、写裸设备相比,DMASM 文件的读、写操作仅仅增加了簇映射的代价,而这个代价与 IO 代价相比几乎可以忽略,因此,使用 DMASM并不会引起读、写性能的降低。
4 DMASM 技术指标
5 DMASM 使用说明
- 使用 DMASM 必须先使用 dmasmcmd 工具初始化 DMASM 磁盘和磁盘组,并启动dmasmsvr 服务器。使用者(dmserver 等)必须通过 dmasmapi 接口登录 dmasmsvr 创 建 DMASM 文件,并进行各种 DMASM 文件操作。
- DMASM 文件的读写接口与普通的操作系统文件类似,主要的区别就是需要使用专用的 dmasmapi 接口进行操作。
- 一台共享存储上,只能搭建一套 ASM 文件系统,多套会导致系统启动失败。
- 已经 open、正在访问的 DMASM 文件不允许删除。
- DMASM 文件可以重复打开,但是建议用户在使用过程中,尽量避免反复打开同一个 DMASM 文件。如果用户反复打开同一个 DMASM 文件,并且没有及时关闭文件,有可能会降低 DMASM 文件的访问效率。
- DMASM 文件句柄不保证全局唯一,只保证连接级别的唯一性,一个连接重复打开同一个 DMASM 文件,会返回不同的文件句柄;不同连接打开同一个 DMASM 文件,有可能返回相同的文件句柄。
- 支持删除磁盘组,但不能单独删除磁盘组中的某一块磁盘。
- 任意文件 open 的情况下,其所属的磁盘组不能被删除。
- DMASM文件路径都以“+GROUP_NAME”开头,使用“/”作为路径分隔符,任何以“+”开头的文件,我们都认为是 DMASM 文件,“GROUP_NAME”是磁盘组名称。比如,“+DATA/ctl/dm.ctl”表示 dm.ctl 文件,保存在 DMASM 文件系统的“DATA”磁盘组的ctl 目录下。”+”号只能出现在全路径的第一位,出现在任意其他地方的路径都是非法的。
- DMASM 只提供文件级别的并发控制,访问 DMASM 文件,系统内部会进行封锁操作。比如,正在访问的数据文件不允许被删除;但是 DMASM 并不提供数据文件的读写并发控制。
DMASM 允许多个用户同时向同一个文件的相同偏移写入数据,一旦发生这种并发写,我们无法预知最终写入磁盘的数据是什么。因此,DMASM 不是一个通用的分布式文件系统,必须由使用 DMASM 的上层应用来控制数据文件的读写并发。采用这种实现策略的主要原因有两个:
1) 提升 DMASM 文件的读写效率。通用的分布式文件系统,需要实现读、写操作的全局并发控制,避免并发写入导致数据不一致,这种策略会严重影响读、写性能。
2) 数据库管理软件已经提供了数据访问的并发控制机制,确保不会同时读、写相同的数据页,DMASM 不需要实现一套重复的并发控制策略。- 目前,DMASM 还未实现异步格式化机制,创建磁盘组、添加磁盘等操作需要较长的执行时间,并且格式化过程中会阻塞创建 DMASM 文件等操作。
- 目前,DMASM 只提供了基本的数据文件管理功能,并不支持镜像存储、条带化存储、数据再平衡等功能。
6 DMASMCMD
DMASMCMD 是 DMASM 文件系统初始化工具,用来格式化裸设备为 DMASM 磁盘,并初始化 DCR Disk、Voting Disk。
格式化 DMASM 磁盘就是在裸设备的头部写入 DMASM 磁盘特征描述符号,包括 DMASM 标识串、DMASM 磁盘名、以及 DMASM 磁盘大小等信息。其中Voting Disk 和 DCR Disk 也会被格式化为 DMASM 磁盘。
DMASMCMD 工具的主要功能包括:
- 格式化 DMASM 磁盘
- 初始化 DCR Disk,同时指定密码
- 初始化 Voting Disk
- 导出 DCR Disk 配置信息
- 导入 DCR Disk 配置信息
- 清理 DCR Disk 中指定组的故障节点信息
- 创建用于模拟裸设备的磁盘文件(用于单机模拟 DMDSC 环境)
- 列出指定路径下面磁盘属性
DMASMCMD 工具用法:
[dmdba@dm3 bin]$ dmasmcmd help
DMASMCMD V7.6.0.95-Build(2018.09.13-97108)ENT
Format: ./dmasmcmd KEYWORD=value
Example: ./dmasmcmd SCRIPT_FILE=asmcmd.txt
Keyword Explanation(default value)
--------------------------------------------------------------------------------
SCRIPT_FILE asmcmd script file path
RET_FLAG Whether to return error when exec script file.(0)
HELP Show this help info
[dmdba@dm3 bin]$
1. 用户没有指定脚本文件,则 dmasmcmd 进入交互模式运行,逐条解析、运行命令。
2. 用户指定脚本文件(比如 asmcmd.txt),则以行为单位读取文件内容,并依次执行,执行完成以后,自动退出 dmasmcmd 工具。脚本文件必须以“#asm script file”开头,否则认为是无效脚本文件;脚本中其它行以“#”表示注释;脚本文件大小不超过 1M。
DMASMCMD 命令行执行界面下支持的语句包括:
创建 DMASM 磁盘
Format: create asmdisk disk_path disk_name [size(M)]
Usage: create asmdisk ‘/home/asmdisks/disk0.asm’ ‘DATA0’
Usage: create asmdisk ‘/home/asmdisks/disk0.asm’ ‘DATA0’ 100
用来将裸设备格式化为 ASM Disk,会在裸设备头部写入 ASM Disk 标识信息。size取值最小 32。
Format: create dcrdisk disk_path disk_name [size(M)]
Usage: create dcrdisk ‘/home/asmdisks/disk0.asm’ ‘DATA0’
Usage: create dcrdisk ‘/home/asmdisks/disk0.asm’ ‘DATA0’ 100
用来将裸设备格式化为 DCR 磁盘,会在裸设备头部写入 DCR 标识信息。size 取值最小 32。
Format: create votedisk disk_path disk_name [size(M)]
Usage: create votedisk ‘/home/asmdisks/disk0.asm’ ‘DATA0’
Usage: create votedisk ‘/home/asmdisks/disk0.asm’ ‘DATA0’ 100
用来将裸设备格式化为 Voting Disk,会在裸设备头部写入 Voting Disk 标识信息。
以上三个命令中 size 参数可以省略,程序会计算 disk_path 的大小;但是某些操作系统计算 disk_path 大小会失败,这时候还是需要用户指定 size 信息,size 取值最小为 32。
创建空文件模拟裸设备
Format: create emptyfile file_path size(M) num
Usage: create emptyfile ‘/opt/data/asmdisks/disk0.asm’ size 100
创建 disk0.asm 模拟裸设备,注意必须以.asm 结尾。模拟测试用,真实环境不建议使用。
初始化 DCR & Voting Disk
Format: init dcrdisk disk_path from ini_pathidentified by password
Usage: init dcrdisk ‘/dev/raw/raw2’ from ‘/home/asm/dmdcr_cfg.ini’identified by ‘aaaaaa’
根据配置文件 dmdcr_cfg.ini 的内容,初始化 DCR 磁盘。设置登录 ASM 文件系统的密码,密码要用单引号括起来。
Format: init votedisk disk_path from ini_path
Usage: init votedisk ‘/dev/raw/raw3’ from ‘/home/asm/dmdcr_cfg.ini’
根据配置文件 dmdcr_cfg.ini 的内容,初始化 Voting Disk。
导出 DCR 的配置文件
Format: export dcrdisk disk_path to ini_path
Usage: export dcrdisk ‘/dev/raw/raw2’ to ‘/home/asm/dmdcr_cfg.ini’
解析 DCR 磁盘内容,导出到 dmdcr_cfg.ini 文件。
导入 DCR 的配置文件
Format: import dcrdisk ini_path to disk_path
Usage: import dcrdisk ‘/data/dmdcr_cfg.ini’ to ‘/data/asmdisks/disk0.asm’
根据配置文件/data/dmdcr_cfg.ini 的内容,将修改导入 DCR 磁盘。
限制:
DCR_N_GRP、DCR_GRP_N_EP、DCR_GRP_NAME、DCR_GRP_TYPE、DCR_GRP_EP_ARR、DCR_EP_NAME、EP 所属的组类型、checksum 值,密码不可修改。
必须以组为单位进行修改。
校验 DCR 磁盘
Format: check dcrdisk disk_path
Usage: check dcrdisk ‘/dev/raw/raw2’
校验 DCR 磁盘信息是否正常,根据打印出来的 code 值判断,如果等于 0,则表示 DCR磁盘正常,如果小于 0,则说明 DCR 磁盘故障,需要重新初始化。
清理指定组的故障节点信息
Format: clear dcrdisk err_ep_arr disk_path group_name
Usage: clear dcrdisk err_ep_arr ‘/dev/raw/raw2’ ‘GRP_RAC’
清理 DCR Disk 中指定组的故障节点信息,可借助 export 命令查看对应组的DCR_GRP_N_ERR_EP 和 DCR_GRP_ERR_EP_ARR 信息,清理成功后,指定组的DCR_GRP_N_ERR_EP 值为 0,DCR_GRP_ERR_EP_ARR 内容为空。
显示指定路径下面磁盘属性
Format: listdisks path
Usage: listdisks ‘/dev/raw/‘
显示 path 路径下面所有磁盘的信息,分为三种类型:
normal disk:普通磁盘;
unused asmdisk:初始化未使用的 asmdisk;
used asmdisk:已经使用的 asmdisk。
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 启动格式:
[dmdba@dm3 bin]$ dmasmsvr help
Format: ./dmasmsvr KEYWORD=value
Example: ./dmasmsvr DCR_INI=/opt/data/DAMENG/dmdcr.ini
Keyword Explanation
--------------------------------------------------------------------------------
DCR_INI dcr.ini file path
-NOCONSOLE start in service mode
HELP Show this help info
[dmdba@dm3 bin]$
dmdcr.ini 配置文件记录了 DCR 磁盘路径、实例序列号等信息;如果不指定DCR_INI 参数,dmasmsvr 默认在当前路径下查找 dmdcr.ini 文件。
8 DMASMAPI
DMASMAPI 是 DMASM 文件系统的应用程序访问接口,通过调用 DMASMAPI 接口,用户可以访问、操作 DMASM 文件。与达梦数据库接口 DPI 类似,访问 DMASM 文件之前,必须先分配一个 conn 对象,并登录到 DMASMSVR 服务器,再使用这个 conn 对象进行创建磁盘组、创建文件、删除文件、读取数据和写入数据等 DMASM 相关操作。
9 DMASMTOOL
DMASMTOOL 是 DMASM 文件系统管理工具,提供了一套类 Linux 文件操作命令,用于管理 DMASM 文件,是管理、维护 DMASM 的好帮手。
DMASMTOOL 工具使用 DMASMAPI 连接到 DMAMSVR,并调用相应的 DMASMAPI 函数,实现创建、拷贝、删除等各种文件操作命令;DMASMTOOL 还支持 DMASM 文件和操作系统文件的相互拷贝。
DMASMTOOL 可以登录本地 DMASMSVR,也可以登录位于其他节点的 DMASMSVR,并执行各种文件操作命令。一般建议登录本地 DMASMSVR 服务器,避免文件操作过程中的网络开销,提升执行效率。
DMASMTOOL 启动命令:
[dmdba@dm3 bin]$ dmasmtool help
DMASMTOOL V7.6.0.95-Build(2018.09.13-97108)ENT
Format: ./dmasmtool KEYWORD=value
Example: ./dmasmtool DCR_INI=/opt/data/DAMENG/dmdcr.ini
Keyword Explanation
--------------------------------------------------------------------------------
DCR_INI dmdcr.ini file path
HOST asm server address, ipv6 address should enclosed by []
PORT_NUM asm server port
USERID user info for login asm server (format: USER/PWD)
SCRIPT_FILE asmtool script file path
HELP Show this help info
[dmdba@dm3 bin]$
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
9.1 创建磁盘组,添加磁盘,删除磁盘组
创建磁盘组
Format: create diskgroup name asmdisk file_path
Usage: create diskgroup ‘DMDATA’ asmdisk ‘/dev/raw/raw3’
asmdisk 为磁盘组名,最长不能超过 32 字节。路径必须是全路径,不能是相对路径。
添加磁盘
Format: alter diskgroup name add asmdisk file_path
Usage: alter diskgroup ‘DMDATA’ add asmdisk ‘/dev/raw/raw4’
asmdisk 路径必须是全路径,不能是相对路径。
删除磁盘组
Format: drop diskgroup name
Usage: drop diskgroup ‘DMDATA’
创建磁盘组,或为磁盘组添加磁盘时,以下情况可能导致失败:
1)DMASMSVR 进程没有访问对应磁盘的权限;
2)磁盘路径不在 dmdcr_cfg.ini 配置文件中配置的DCR_EP_ASM_LOAD_PATH 路径下;
3)磁盘大小不够,最少需要 32M。
9.2 创建文件,扩展文件,截断文件,删除文件
创建文件
Format: create asmfile file_path size(M) num
Usage: create asmfile ‘+DMDATA/sample.dta’ size 20
扩展文件
Format: alter asmfile file_path extend to size(M)
Usage: alter asmfile ‘+DMDATA/sample.dta’ extend to 20
截断文件
Format: alter asmfile file_path truncatetosize(M)
Usage: alter asmfile ‘+DMDATA/sample.dta’ truncateto 20
删除文件
Format: delete asmfile file_path
Usage: delete asmfile ‘+DMDATA/sample.dta’
重定向输出文件
Format: spool file_path [create|replace|append]
Usage: spool /home/dataspool.txt
1) create: 如果重定向文件不存在,则创建;如果存在,创建失败。
2) replace: 如果重定向文件不存在,则创建;如果存在,则替换掉。默认为 replace。
3) append: 如果重定向文件不存在,则创建;如果存在,则追加到文件末尾。
4) 多次 spool 重定向文件,第一次成功打开重定向文件之后,如果未关闭,则不再打开其他重定向文件。
关闭重定向文件
Format: spool off
Usage: spool off
9.3 兼容 LINUX 一些命令,功能受限,但是很实用
到达某目录
Format: cd[path]
Usage: cd+DMDATA/test
拷贝
Format: cp [-rf] src_file_path dst_file_path
Usage: 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’
删除
Format: rm file_path
rm -r directorie
Usage: rm ‘+DMDATA/a/sample.dta’
rm -r ‘+DMDATA/a/‘
rm –f ‘+DMDATA/b/‘
创建目录
Format: mkdir [-p] dir_path
Usage: mkdir ‘+DMDATA/a’
mkdir–p’+DMDATA/nodir/bb’
这里-p 表示自动创建不存在的中间目录
查找
Format: find path file_name
sage: find +DMDATA/a ‘sample.dta’
显示
Format: ls [-lr] filename
Usage: ls
ls -l
ls –r
这里-r 表示递归的意思,不是 linux 中的逆序显示
显示存储信息
Format: df
Usage: df
当前目录
Format: pwd
Usage: pwd
9.4 DMASM 特有的一些命令
列出所有的磁盘组
Format: lsdg
Usage: lsdg
列出所有的 DMASM 磁盘
Format: lsdsk
Usage: lsdsk
列出文件的详细信息
Format: lsattr
Usage: lsattr
列出所有的信息,包括文件等
Format: lsall
Usage: lsall
修改密码
Format: password
Usage: password
登录,在断开连接后,重新登录
Format: login
Usage: login
其他注意事项:
1) DMASMTOOL 工具的上下键,查找历史记录,以及 TAB 键的自动补齐功能是基于 readline 实现的,由于 readline 输入不支持中文,因此目前DMASMTOOL 工具不支持中文输入。
2) 可以通过 dmasmapi 创建中文方式命名的文件,也可以通过 DMASMTOOL工具查看中文文件。
3) 在 dmasmtool 工具执行命令时,如果路径名或者文件名首字母为数字,需要给字符串加单引号’。
4) 在 asmtool 工具使用 cd 命令,首字母为’+’, ‘/’, ‘/‘符号都会从目录最上层开始查找目录。