前言
做数据库运维的同行,估计都有同感——存储管理就是数据库稳定运行的“命根子”。尤其是中大型企业的生产环境,数据量一年比一年大,多业务混跑、多租户隔离、高并发读写,对存储架构的要求越来越严。以前我们管表空间,全程手动操作:登服务器、建目录、改权限,步骤又多又繁琐,稍微不留神,要么业务创建表空间失败,要么留下权限漏洞,后续排查起来特别头疼。

我做金仓数据库(KingbaseES,简称KES)运维也有好几年了,发现很多同行都被传统表空间创建流程困住:既要懂数据库SQL,又得精通操作系统文件权限,跨平台操作还得写不同脚本,遇到迁移场景更是麻烦加倍。好在,金仓数据库(KingbaseES)作为新一代企业级数据库,在存储管理上做了深度优化,内置的KES表空间目录自动创建能力,直接把手动创建的痛点全解决了。
今天这篇文章,我就结合自己这些年的金仓数据库生产运维经验,从实际工作场景出发,把KingbaseES表空间目录自动创建功能、核心参数配置、目录权限控制、磁盘规划设计,还有故障排查这些内容,掰开揉碎了讲清楚,再分享三个真实生产案例,都是能直接落地的方案,希望能帮各位同行少踩坑、提效率。
一、金仓数据库表空间目录自动创建功能完整介绍

1.1 功能定义:到底什么是KES表空间目录自动创建
其实说通俗点,金仓数据库(KingbaseES)的表空间目录自动创建,就是KES内核自带的一项存储自动化能力。咱们DBA执行CREATE TABLESPACE语句,指定好物理存储路径后,如果这个路径还不存在,KingbaseES会自动递归创建这个目录以及所有父目录,还会按照安全标准自动配置权限,全程不用我们人工登录操作系统敲命令,省了一大半事。
这个功能是由金仓数据库内核参数auto_createtblspcdir统一控制的,只要开启这个参数,KES表空间创建就从“系统操作+SQL执行”两步,简化成纯SQL一步搞定,不管是生产环境降本提效,还是减少人为故障,都特别实用。
1.2 功能设计背景:KES为什么要做自动创建
在没有这个自动创建功能之前,咱们用金仓数据库创建表空间,必须按固定流程来,一步都不能少:
1. 先登录KES数据库服务器;
2. 手动用mkdir -p命令创建多级目录;
3. 用chown命令把目录属主改成金仓数据库运行用户(通常是kes用户);
4. 用chmod配置权限,确保符合安全规范;
5. 回到KingbaseES里,再执行CREATE TABLESPACE语句。
这套流程在企业实际场景中,暴露的问题太多了,我随便说几个,大家肯定都遇到过:
- 操作链路太长:跨系统、跨终端切换,效率特别低,遇到批量创建表空间,能忙一整天;
- 人为错误多:权限配错、属主不对、路径写错,这三类问题,是KES表空间创建失败的Top3,我每天都能接到同行的求助;
- 集群适配差:如果是KES主备、多节点环境,得逐台服务器操作,很容易出现目录不一致的情况,后续同步会出大问题;
- 迁移成本高:很多同行从Oracle等商业数据库迁移到金仓数据库,早就习惯了自动建目录,切换过来后,还要重新学手动建目录、改权限,学习成本陡增。
也正是因为这些痛点,金仓数据库(KingbaseES)内核才把目录检测、递归创建、权限固化、安全校验这些步骤,全部内置到系统里,让我们DBA只需要关注SQL逻辑,不用再纠结底层文件系统的细节,省下来的时间,能多做很多优化工作。
1.3 功能核心能力(生产可用版)
|
能力项 |
KingbaseES实现 |
生产价值 |
|---|---|---|
|
目录自动检测 |
KES自动判断路径是否存在 |
无需人工判断,减少判断失误 |
|
递归创建 |
金仓数据库自动创建多级父目录 |
不用手动逐级建目录,减少层级操作 |
|
权限固化 |
KingbaseES自动设置属主为kes用户,权限700 |
避免手动配权限出错,保证权限统一 |
|
路径标准化 |
KES强制使用绝对路径 |
防止软链接带来的风险,避免路径混乱 |
|
安全校验 |
金仓数据库内核级权限检查 |
拦截非法操作,保障存储安全 |
1.4 功能开启/关闭的行为差异
|
模式 |
参数值 |
目录不存在时行为 |
权限配置 |
适用场景 |
|---|---|---|---|---|
|
KES自动模式 |
on |
KingbaseES自动递归创建 |
自动配置700权限 |
生产、多租户、迁移、自动化开通场景 |
|
传统模式 |
off |
直接报错:目录不存在 |
无自动配置,需手动设置 |
严格合规、手动管控、特殊审计环境 |
1.5 功能适用场景
结合我这些年的运维经验,总结了几个KES表空间自动创建的高频适用场景,大家可以对号入座:
- 金仓数据库生产环境快速开通表空间,赶项目进度时特别实用;
- KES多租户SaaS平台,批量创建租户表空间,减少重复操作;
- KingbaseES主备集群、分布式集群,统一存储路径,避免节点不一致;
- 从Oracle迁移到金仓数据库时,平滑适配自动建目录习惯,降低迁移难度;
- KES自动化部署、CI/CD流程中,实现表空间自动化创建,适配DevOps模式。
二、核心参数详解:KES的auto_createtblspcdir配置与工作机制

金仓数据库表空间目录自动创建的核心开关,就是auto_createtblspcdir这个参数。说真的,这个参数是KingbaseES运维中最常用,也最容易被忽视的关键配置——我在生产KES环境中,几乎所有表空间优化工作,都会围绕这个参数展开。
2.1 参数基本作用与取值
auto_createtblspcdir是金仓数据库的布尔类型参数,只有开启(on)和关闭(off)两种状态,作用特别明确:当我们执行CREATE TABLESPACE语句时,如果指定的物理路径不存在,KingbaseES是否自动递归创建目录,并自动配置标准权限。
这个参数在金仓数据库的不同版本中,默认值略有差异,不过生产环境我建议大家统一开启。这里有个小技巧:它属于KES重载生效参数,修改后不需要重启数据库实例,只需要重新加载配置就行,对业务完全无侵入,不用怕影响线上业务。
另外要注意一点:只有金仓数据库的超级用户,才能修改这个参数,也只有超级用户能创建表空间,普通用户没有这个权限——这是KingbaseES内核层面的安全限制,也是为了避免权限混乱。
2.2 执行流程:KES自动创建到底做了什么
很多同行好奇,开启参数后,金仓数据库自动创建表空间的背后,到底执行了哪些操作?我结合自己的排查经验,把整个流程拆成5步,大家一看就懂:
1. 第一步:KingbaseES先校验SQL语法、用户权限、路径合法性,重点检查路径是不是绝对路径、有没有非法字符——这一步是基础,有问题会直接报错。
2. 第二步:检查目标路径是否存在,如果已经存在,KES就直接进入权限校验环节,不用再创建目录。
3. 第三步:如果目录不存在,金仓数据库会以运行用户(通常是kes)的身份,自动创建所有父目录和子目录,不用我们手动干预。
4. 第四步:KingbaseES自动把目录权限设置为严格的安全权限,只允许属主(kes用户)读写执行,其他用户没有任何权限,避免权限泄露。
5. 第五步:KES会再次检查目录属主、权限是否合法,要是不合法就直接报错,合法的话,就完成表空间创建。
整个过程完全不用人工介入,也不会出现权限配置不标准的问题。从运维角度来说,这相当于把最容易出错的步骤,全交给金仓数据库内核处理,既提高了效率,也提升了安全性,咱们也能少背锅。
如果参数关闭,那KingbaseES就只会检查目录是否存在,不存在就直接抛出错误,不会创建任何目录,和以前的传统操作模式完全一样。
2.3 参数查看与修改方法
在实际工作中,我们经常需要查看金仓数据库的参数状态、修改配置,这里给大家分享几个最常用的KES操作方式,都是我平时每天都会用到的,直接复制就能用:
查看当前参数值:
show auto_createtblspcdir;
查看参数详细信息,包括生效级别、默认值:
select name,setting,context from sys_settings where name like 'auto_createtblspcdir';
临时修改当前会话参数(重启实例后失效,适合测试用):
set auto_createtblspcdir = on;
永久修改金仓数据库配置文件(生产环境推荐这种方式):直接编辑kingbase.conf文件,加入或修改以下参数:
set auto_createtblspcdir = on;
修改完成后,执行以下语句重载配置,让参数生效:
select pg_reload_conf();
操作很简单,但有个小提醒:在生产KingbaseES环境中,修改参数前一定要确认业务处于低峰期,虽然重载不影响业务,但谨慎一点总没错。
2.4 KES自动创建必须遵守的约束
虽然金仓数据库的自动创建功能很方便,但不是可以随意使用的——KingbaseES内核为了安全和稳定,设置了严格的约束,违反任何一条,表空间创建都会失败。这些约束都是我在多次金仓数据库故障排查中总结出来的,大家一定要记牢:
- 路径必须是绝对路径,不能用相对路径,也不能包含软链接,否则会直接报错;
- 已经存在的父目录,必须允许金仓数据库运行用户(kes)拥有写入权限,这是最容易出错的一条,很多人创建失败,都是因为父目录权限不够;
- KES自动创建的目录权限是固定的,不能自定义,目的是保证所有环境的权限安全一致;
- KingbaseES主备集群下,自动创建只在主节点生效,备节点的目录需要手动同步,不然备库会报错;
- 普通用户无法触发KES自动创建,必须由超级用户执行CREATE TABLESPACE语句。
三、生产必看:KES表空间目录权限控制实战
做金仓数据库运维,有句话我一直记着:权限永远是底线。尤其是文件系统权限,一旦配置不当,轻则表空间创建失败,影响业务,重则引发数据泄露、越权访问,后果不堪设想。
在KingbaseES自动创建模式下,数据库会自动把权限配置到最安全的状态,但在手动维护、主备同步、目录迁移这些场景下,我们还是需要掌握金仓数据库正确的权限规则——这部分内容,也是我平时给团队做培训的重点。
3.1 KES目录权限三条铁律(生产必须遵守)
结合多年运维经验,我总结了三条金仓数据库目录权限的铁律,只要严格遵守,基本不会出现权限类故障,大家可以记下来贴在工位上:
第一条:金仓数据库目录属主必须是数据库运行用户(通常是kes用户),属组也必须一致,绝对不允许root或其他用户占用——我见过很多权限故障,都是因为属主错了。
第二条:KingbaseES目录权限必须严格限制,只允许属主具备全部权限(rwx),同组和其他用户无任何权限(---),也就是我们常说的700权限,这是最安全的配置。
第三条:在KES自动创建场景下,父目录必须开放数据库运行用户(kes)的写入权限,否则无法创建子目录——这是自动创建失败的高频原因,一定要重点关注。
3.2 手动配置KES目录标准步骤
虽然金仓数据库的自动创建很好用,但在一些特殊场景,比如KES主备集群、跨机房同步、特殊存储设备,还是需要手动创建目录。这里给大家分享一套KingbaseES目录手动配置的标准流程,我在生产环境一直用这套,从来没出过问题:
# 创建目录(递归创建多级目录,避免漏建)
mkdir -p /data/kes/tbs/tbs_data_01
# 修改属主为金仓数据库运行用户(kes),属组同步修改
chown -R kes:kes /data/kes/tbs/tbs_data_01
# 修改权限为KES标准权限(700),确保安全
chmod -R 700 /data/kes/tbs/tbs_data_01
# 检查结果,确认属主和权限正确
ls -ld /data/kes/tbs/tbs_data_01
这里要注意:执行完ls -ld命令后,输出结果必须满足两个条件:属主是金仓数据库运行用户(kes),权限是700,否则KingbaseES不会识别这个目录,后续创建表空间会失败。
3.3 KES常见权限故障排查
在生产金仓数据库中,权限问题是最常见的故障类型,我把平时遇到的高频报错和解决方法,整理成了表格,大家遇到问题时可以直接对照排查,节省时间:
|
报错 |
原因 |
解决方法 |
|---|---|---|
|
KingbaseES无法创建目录 |
父目录没有给kes用户写入权限 |
检查父目录属主是否为kes,权限是否开放写入权限 |
|
KES权限不足 |
目录属主错误,或权限没有设置为700 |
重新执行chown -R kes:kes和chmod -R 700命令 |
|
金仓数据库备节点无法打开目录 |
主节点自动创建目录后,备节点没有同步创建 |
在备节点手动创建相同路径,同步属主和权限 |
掌握这些排查方法,基本能快速解决80%的KingbaseES表空间创建故障,不用再花大量时间翻日志、找问题。
四、企业级存储规划:KES磁盘、目录、表空间设计最佳实践
金仓数据库的存储架构设计,直接决定了数据库的性能上限。我参与过很多KingbaseES系统优化,发现很多性能问题,一半以上都是因为存储规划不合理——要么磁盘混用,要么目录混乱,要么表空间设计不当,最后导致I/O瓶颈、故障频发。
结合金仓数据库的自动创建特性,我给大家一套可直接落地的KES企业级存储规划方案,这套方案我在多个行业的生产环境中用过,稳定性和性能都经过了验证。
4.1 KES存储规划五大原则
做金仓数据库存储规划,首先要遵守这五大原则,不管是哪种行业、哪种业务场景,都适用:
第一,分层存储原则:高频访问的数据(比如核心业务表、索引)放在SSD,中频访问的数据放在SAS,低频归档的数据(比如历史日志、过期业务数据)放在SATA,既保证性能,又节省成本。
第二,物理隔离原则:KingbaseES的系统、数据、日志、备份,一定要分盘存放,不能放在同一个磁盘上——不然一旦磁盘故障,系统、数据、日志全丢,恢复起来特别麻烦。
第三,容量预留原则:磁盘使用率绝对不能超过80%,留足冗余空间;单表空间也不建议过大,方便后续维护、迁移和备份。
第四,权限最小原则:只开放必要的权限,禁止用高权限用户(比如root)运行金仓数据库,避免权限泄露和误操作。
第五,路径统一原则:所有KingbaseES节点的目录路径,必须保持一致,这样才能方便自动创建、集群同步,避免出现节点间路径不一致的问题。
4.2 金仓数据库企业标准目录规划方案
我在生产KingbaseES环境中,普遍采用以下路径规划,兼容性和扩展性都非常好,大家可以直接参考,根据自己的业务调整:
/ssd/kes/sys → 金仓数据库系统表空间
/ssd/kes/log → KingbaseES WAL日志与归档
/ssd/kes/tbs/core → KES核心业务表与索引
/sas/kes/tbs/biz → 金仓数据库普通业务数据
/sata/kes/tbs/archive → KingbaseES历史归档数据
这个路径规划的优势的是:统一、层级清晰,配合金仓数据库的自动创建参数,执行CREATE TABLESPACE语句,就能一键创建表空间,不用再手动建目录、改权限,特别高效。
4.3 KES表空间设计最佳实践
结合我这些年的实战经验,总结了几条KingbaseES表空间设计的最佳实践,大家可以直接应用到生产环境:
- KingbaseES的系统表空间和业务表空间,必须分离——系统表空间出问题,不会影响业务表空间,方便故障隔离和恢复。
- 金仓数据库的核心表、索引、临时表空间,一定要放在高速存储(SSD)上,提升查询和写入性能。
- 业务按模块划分KES表空间,比如订单模块、用户模块、商品模块,各自用独立的表空间,便于故障隔离、迁移和备份。
- KingbaseES的表和索引,尽量分表空间存放,避免I/O竞争,提升查询效率——这是提升金仓数据库性能的小技巧,亲测有效。
- 多租户场景下,建议一租户一表空间,实现物理隔离,避免租户之间互相影响,也方便后续租户迁移、扩容。
这些设计思路,都是从真实的金仓数据库生产环境中提炼出来的,稳定性和性能都经过了验证,大家可以放心使用。
五、生产实战案例:三大金仓数据库真实场景完整落地
光说理论不够,下面给大家分享三个我亲身参与的金仓数据库(KingbaseES)生产案例,覆盖电商核心系统、多租户SaaS平台、主备高可用集群,全部来自真实的KES业务场景,里面的代码可以直接复用,大家遇到类似场景,能少走很多弯路。
案例一:KES电商交易系统——自动创建+存储分层优化
场景:某电商平台,用金仓数据库作为核心数据库,订单、用户、商品、支付等业务混跑,原来的存储是单盘部署,I/O瓶颈特别严重,而且创建表空间耗时费力,每次新业务上线,都要花大量时间建目录、改权限。
改造目标:在KingbaseES上实现存储分层,利用自动创建功能,一键创建表空间,提升数据库性能,降低运维成本。
实施步骤:
1. 规划SSD+SAS+SATA三层存储,提前在所有节点配置好KES权限(父目录给kes用户写入权限);
2. 开启金仓数据库的auto_createtblspcdir参数,重载配置生效;
3. 执行SQL,一键创建不同层级的表空间,不用手动建目录。
核心代码:
-- 金仓数据库核心业务表空间(SSD,存放订单、用户等核心数据)
CREATE TABLESPACE tbs_core
LOCATION '/ssd/kes/tbs/core/ts_core_data';
-- KingbaseES索引表空间(SSD,提升查询性能)
CREATE TABLESPACE tbs_idx
LOCATION '/ssd/kes/tbs/core/ts_core_idx';
-- KES普通业务表空间(SAS,存放商品、评价等普通数据)
CREATE TABLESPACE tbs_biz
LOCATION '/sas/kes/tbs/biz/ts_biz_data';
-- 金仓数据库归档表空间(SATA,存放历史订单、归档数据)
CREATE TABLESPACE tbs_archive
LOCATION '/sata/kes/tbs/archive/ts_archive_data';
KES业务对象建表指定表空间(示例):
CREATE TABLE t_order (
id bigint primary key,
user_id bigint,
pay_amount decimal(18,2),
create_time timestamp
) TABLESPACE tbs_core;
CREATE INDEX idx_order_time ON t_order(create_time) TABLESPACE tbs_idx;
效果:改造后,金仓数据库表空间创建时间从原来的10分钟,缩短到10秒以内;I/O等待时间明显下降,核心业务接口响应速度提升40%以上;再也没有出现过权限配置错误的问题,运维效率提升了一大截。
案例二:多租户SaaS平台——KES自动化表空间创建
场景:某多租户SaaS平台,有200多个企业租户,每个租户需要独立的表空间,实现物理隔离,而且经常要开通新租户,原来手动创建表空间、用户、模式,每次都要花30多分钟,效率极低,还容易出错。
改造目标:在KingbaseES上实现租户一键开通,自动创建表空间、用户、模式,实现物理隔离,提升租户开通效率。
核心存储过程代码(可直接复用):
CREATE OR REPLACE PROCEDURE sp_create_tenant(
p_tenant_id varchar,
p_user varchar,
p_pwd varchar
)
LANGUAGE plpgsql
AS $$
DECLARE
v_tbs_name varchar;
v_tbs_path varchar;
BEGIN
v_tbs_name := 'tbs_' || p_tenant_id;
v_tbs_path := '/sas/kes/tbs/tenant/' || p_tenant_id;
-- 金仓数据库自动创建表空间(目录自动生成,无需手动操作)
execute format('
CREATE TABLESPACE %I LOCATION %L
', v_tbs_name, v_tbs_path);
-- 创建KingbaseES租户用户
execute format('
CREATE USER %I WITH PASSWORD %L
', p_user, p_pwd);
-- 授权KES表空间,让租户用户拥有使用权限
execute format('
ALTER TABLESPACE %I OWNER TO %I;
GRANT CREATE ON TABLESPACE %I TO %I;
', v_tbs_name, p_user, v_tbs_name, p_user);
-- 创建金仓数据库模式,实现租户数据隔离
execute format('
CREATE SCHEMA %I AUTHORIZATION %I
', p_tenant_id, p_user);
END;
$$;
调用方式(开通新租户,只需一行代码):
call sp_create_tenant('ent001','user001','Pass@123');
效果:改造后,金仓数据库租户开通时间从30分钟,缩短到1分钟以内;支持批量创建多个租户,运维人员不用再重复操作;每个租户的数据完全物理隔离,没有出现过权限混乱、数据泄露的问题,极大降低了运维成本。
案例三:主备高可用集群——KingbaseES表空间自动创建与同步
场景:某金融核心系统,使用金仓数据库一主两备架构,原来创建表空间,需要在三个节点手动建目录、改权限,很容易出现目录不一致的情况,导致备库同步失败、报错,影响集群稳定性。
改造目标:KingbaseES主库一键创建表空间,备库自动同步目录,保证集群一致性,提升集群稳定性,减少运维工作量。
实施思路:
1. 金仓数据库主库开启auto_createtblspcdir参数,备库关闭该参数——避免备库自动创建目录,导致与主库不一致;
2. 所有KES节点的目录路径保持完全一致,提前配置好父目录权限;
3. 主库创建表空间后,通过自动化脚本,同步目录到所有备节点,确保备库目录与主库一致。
主库创建表空间(核心SQL):
-- 在KingbaseES主库执行,自动创建目录并配置权限
CREATE TABLESPACE tbs_cluster
LOCATION '/ssd/kes/tbs/core/ts_cluster_data';
备库目录同步脚本(简化版,可集成到自动化工具):
# 在金仓数据库所有备节点执行,同步主库目录
mkdir -p /ssd/kes/tbs/core/ts_cluster_data
chown -R kes:kes /ssd/kes/tbs/core/ts_cluster_data
chmod 700 /ssd/kes/tbs/core/ts_cluster_data
效果:改造后,金仓数据库集群表空间创建效率提升80%,运维人员不用再逐台节点手动建目录;备库再也没有出现过目录不存在的报错,集群切换稳定可靠,完全满足金融核心系统的高可用要求。
六、KES运维监控与故障排查
生产环境的金仓数据库,不能只建不维护——表空间和存储的常态化监控,是保证数据库稳定运行的关键。我平时运维KES,都会重点监控以下内容,遇到故障也能快速排查、解决。
6.1 KES核心监控项
这几个监控项,建议大家配置告警,一旦触发阈值,及时处理,避免小问题变成大故障:
- KingbaseES表空间使用率:超过80%必须告警,及时扩容,避免磁盘满导致业务中断;
- 金仓数据库磁盘使用率、I/O等待时间、磁盘响应时间:监控存储性能,及时发现I/O瓶颈;
- KES目录属主、权限是否被篡改:防止人为误操作,导致表空间无法访问;
- KingbaseES主备节点目录一致性:确保主备同步正常,避免备库报错。
6.2 KES常用查询SQL
给大家分享几个平时最常用的查询SQL,用于查看金仓数据库表空间和存储状态,直接复制就能用:
查看金仓数据库所有表空间的路径:
select spcname, pg_tablespace_location(oid) from sys_tablespace;
查看KingbaseES表空间使用情况(包括使用率、大小):
select * from sys_tablespace_size;
6.3 KES高频故障快速处理
结合平时的运维经验,整理了几个KES表空间相关的高频故障,包括排查方向和解决方案,大家遇到问题可以直接对照处理:
|
故障现象 |
金仓数据库排查方向 |
KingbaseES解决方案 |
|---|---|---|
|
自动创建不生效,提示目录不存在 |
检查KES父目录权限、auto_createtblspcdir参数是否开启、执行用户是否为超级用户 |
确认参数为on,父目录给kes用户写入权限,用超级用户执行创建语句 |
|
表空间创建成功,但无法写入数据 |
检查金仓数据库磁盘是否满、目录权限是否被篡改、是否有磁盘配额限制 |
用df -h检查磁盘空间,重新执行chmod 700配置权限,解除磁盘配额 |
|
备库同步失败,提示目录不存在 |
检查KingbaseES备库目录是否存在、权限是否正确、路径是否与主库一致 |
在备节点手动创建相同目录,修改属主为kes:kes,权限为700 |
七、总结
其实金仓数据库(KingbaseES)的表空间目录自动创建,看似是一个小功能,但在企业级生产运维中,它解决的是我们DBA的真实痛点——减少人工操作、降低人为故障、提升运维效率、保证存储安全。
从我这些年的KingbaseES实战经验来看,一个好的存储架构,一定具备三个特点:自动化、标准化、高可靠。而金仓数据库的auto_createtblspcdir参数,以及表空间目录自动创建能力,正是实现自动化和标准化的关键。只要配合合理的磁盘规划、严格的权限控制、科学的表空间设计,就能让金仓数据库(KingbaseES)的存储系统长期稳定、高效运行。
未来金仓数据库的运维,会越来越趋向自动化、智能化,但基础的存储设计、权限管理、故障排查,依然是我们DBA的核心能力。希望这篇KingbaseES实战指南,能帮到正在做金仓数据库运维、架构设计的同行,少踩坑、多落地,真正把技术用在解决实际问题上,让我们的运维工作更轻松、更高效。
转载自CSDN-专业IT技术社区
原文链接:https://blog.csdn.net/beautifulmemory/article/details/159982426



