linux磁盘限额和进阶文件系统的管理 quota RAID LVM
概念:
- Quota 的一般用途:
- 针对 WWW server ,例如:每个人的网页空间的容量限制!
- 针对 mail server,例如:每个人的邮件空间限制。
- 针对 file server,例如:每个人最大的可用网络硬盘空间 (教学环境中最常见!)
- 限制某一群组所能使用的最大磁盘配额 (使用群组限制):
- 限制某一用户的最大磁盘配额 (使用用户限制):
- 以 Link 的方式,来使邮件可以作为限制的配额 (更改 /var/spool/mail 这个路径):直接使用 Link 的方式指向 /home (或者其他已经做好的 quota 磁盘),这通常是用在原本磁盘分区的规划不好,但是却又不想要更动原有主机架构的情况中啊!
- Quota 的使用限制
- 仅能针对整个 filesystem:不能针对『某个目录』来进行 Quota 的设计
- 核心必项支持 quota :
- Quota 的记录文件
- 只对一般身份使用者有效:
- Quota 的规范设定项目:
- 针对整个 filesystem 的限制项目主要分为底下几个部分:
- 容量限制或档案数量限制 (block 或 inode):
- 限制 inode 用量:可以管理使用者可以建立的『档案数量』;
- 限制 block 用量:管理用户磁盘容量的限制,较常见为这种方式。
- 柔性劝导与硬性规定 (soft/hard):
- hard:表示使用者的用量绝对不会超过这个限制值
- soft:表示使用者在低于 soft 限值时,可以正常使用磁盘,但若超过 soft 且低于 hard 的限值,每次用户登入系统时,系统会主动发出磁盘即将爆满的警告讯息, 且会给予一个宽限时间,(grace time)。不过,若使用者在宽限时间倒数期间就将容量再次降低于 soft 限值之下,(grace time)。不过,若使用者在宽限时间倒数期间就将容量再次降低于 soft 限值之下,
- 会倒数计时的宽限时间 (grace time):
- 容量限制或档案数量限制 (block 或 inode):
- 针对整个 filesystem 的限制项目主要分为底下几个部分:
- 软件磁盘阵列 (Software RAID)
- RAID-0 (等量模式, stripe):效能最佳。 数据平分放在N个磁盘中。(最少两块磁盘)
- RAID-1 (映像模式, mirror):完整备份。 数据拷贝一份放在其他磁盘中。(最少两块磁盘)
- RAID 0+1,RAID 1+0。 数据先平分再拷贝或者先拷贝再平分。(最少四块磁盘)
- RAID 5:效能与数据备份的均衡考虑。 数据平分在N-1颗磁盘上,另一个磁盘记录检验码。(最少三块磁盘)
- Spare Disk:预备磁盘的功能:
- spare disk 就是一颗或几颗没有包含在原本磁盘阵列等级中的磁盘,这颗磁盘平时并不会被磁盘阵列所使用, 当磁盘阵列有仸何磁盘损毁时,则这颗 spare disk 会被主动的拉进磁盘阵列中,并将坏掉的那颗硬盘移出磁盘阵列! 然后立即重建数据系统。
- 磁盘阵列的优点
- 数据安全与可靠性:指的并非信息安全,而是当硬件 (指磁盘) 损毁时,数据是否还能够安全的救援或使用之意;
- 读写效能:例如 RAID 0 可以加强读写效能,让你的系统 I/O 部分得以改善;
- 容量:可以让几颗磁盘组合起来,故单一文件系统可以有相当大的容量。
- 逻辑滚动条管理员 (Logical Volume Manager)
- LVM 的重点在于『可以弹性的调整 filesystem 的容量!』而并非在于效能与数据保全上面,LVM 可以整合几个实体 partition 在一起, 让这些 partitions 看起来就像是一个磁盘一样!而且,还可以在未来新增或移除其他的实体 partition 到这个 LVM 管理的磁盘当中。
- 什么是 LVM: PV, PE, VG, LV
- Physical Volume, PV, 实体滚动条
- 我们实际的 partition 需要调整系统标识符 (system ID) 成为 8e (LVM 的标识符),然后再经过pvcreate 的指令将他转成 LVM 最底层的实体滚动条 (PV) ,之后才能够将这些 PV 加以利用! 调整 system ID 的方是就是透过 fdisk。
- Volume Group, VG, 滚动条群组
- 所谓的 LVM 大磁盘就是将讲多 PV 整合成这个 VG,所以 VG 就是 LVM 组合起来的大磁盘!VG 最多仅能包含 65534 个 PE 而已。 如果使用 LVM 预设的参数,则一个 VG 最大可达 256GB 的容量。
- Physical Extend, PE, 实体延伸区块
- LVM 预设使用 4MB 的 PE 区块,而 LVM 的 VG 最多仅能含有 65534 个 PE ,因此预设的 LVM VG 会有4M*65534/(1024M/G)=256G。所以调整 PE 会影响到 VG 的最大容量。
- Logical Volume, LV, 逻辑滚动条
- 最终的 VG 还会被切成 LV,这个 LV 就是最后可以被格式化使用的类似分割槽。
- Physical Volume, PV, 实体滚动条
- LVM系统快照
- 快照就是将当时的系统信息记录下来,就好像照相记录一般! 未来若有任何资料更动了,则原始资料会被搬移到快照区,没有被更动的区域则由快照区与文件系统共享。首先,由于快照区与原本的 LV 共享很多 PE 区块,因此快照区与被快照的 LV 必项要在同一个 VG 上头。
实例:
- quota
- 实作 Quota 流程-1:文件系统支援
- df -h 目录 --------查看目录是否为独立文件系统
- mount | grep 目录-------查看目录挂载的情况
- mount -o remount,usrquota,grpquota /home
- 重新挂载,添加磁盘配额功能-----此动作将两个挂载属性添加在/etc/mtab,一次性的
- vi /etc/fstab 写入/etc/fstab,每次开机都生效
- LABEL=/home /home ext3 defaults,usrquota,grpquota 1 2
- umount /home
- mount -a
- 实作 Quota 流程-2:建立 quota 记录文件
- quotacheck [-avugfM] [/mount_point] --------------扫瞄文件系统并建立 Quota 的记录文件
- -a :扫瞄所有在 /etc/mtab 内,含有 quota 支持的 filesystem,加上此参数后,/mount_point 可不必写。
- -u :针对用户扫瞄档案与目录的使用情况,会建立 aquota.user
- -g :针对群组扫瞄档案与目录的使用情况,会建立 aquota.group
- -v :显示扫瞄过程的信息;
- -f :强制扫瞄文件系统,并写入新的 quota 配置文件 (危险)
- -M :强制以读写的方式扫瞄文件系统,只有在特殊情况下才会使用。
- quotacheck 的选顷你只要记得『 -avug 』一起下达即可!---出现提示权限不足时,关闭selinux ,命令为:setenforce 0
- quotacheck [-avugfM] [/mount_point] --------------扫瞄文件系统并建立 Quota 的记录文件
- 实作 Quota 流程-3:Quota 启动、 关闭与限制值设定
- quotaon [-avug] ------------------启动quota的服务
- quotaon [-vug] [/mount_point]
- -u :针对使用者启动 quota (aquota.user)
- -g :针对群组启动 quota (aquota.group)
- -v :显示启动过程的相关讯息;
- -a :根据 /etc/mtab 内的 filesystem 设定启动有关的 quota。
- quotaon 启用一次后,系统重启会读取/etc/rc.d/rc.sysinit初始化脚本,会自动下达
- ------------------------------------------------------
- quotaoff [-a] ------------------关闭quota服务
- quotaoff [-ug] [/mount_point]
- -a :全部的 filesystem 的 quota 都关闭 (根据 /etc/mtab)
- -u :仅针对后面接的那个 /mount_point 关闭 user quota
- -g :仅针对后面接的那个 /mount_point 关闭 group quota
- ------------------------------------------------------
- quotaoff [-ug] [/mount_point]
- edquota [-u username] [-g groupname] -----------编辑账号/群组的限值与宽限时间
- edquota -t <==修改宽限时间 -----------前提是用户有该目录的读写权限
- edquota -p 范本账号 -u 新账号
- -u :后面接账号名称。可以进入 quota 的编辑画面 (vi) 去设定 username 的限制值;
- -g :后面接组名。可以进入 quota 的编辑画面 (vi) 去设定 groupname 的限制值;
- -t :可以修改宽限时间。
- -p :复制范本。那个 模板账号 为已经存在并且已设定好 quota 的使用者,
- 范例:[root@www ~]# edquota -u myquota1
- 七个字段分别的意义为: 0表示不限制
- 文件系统 (filesystem):说明该限制值是针对哪个文件系统 (或 partition);
- 磁盘容量 (blocks):这个数值是 quota 自己算出来的,单位为 Kbytes,请不要更动他;
- soft:磁盘容量 (block) 的 soft 限制值,单位亦为 KB
- hard:block 的 hard 限制值,单位 KB;
- 档案数量 (inodes):这是 quota 自己算出来的,单位为个数,请不要更动他;
- soft:inode 的 soft 限制值;
- hard:inode 的 hard 限制值;
- 七个字段分别的意义为: 0表示不限制
- 实作 Quota 流程-4:Quota 限制值的报表
- quota [-uvs] [username] ----------单一用户的 quota 报表
- quota [-gvs] [groupname]
- -u :后面可以接 username ,表示显示出该用户的 quota 限制值。
- -g :后面可接 groupname ,表示显示出该群组的 quota 限制值。
- -v :显示每个用户在 filesystem 的 quota 值;
- -s :使用 1024 为倍数来指定单位,会显示如 M 之类的单位!
- repquota -a [-vugs] ---------针对文件系统的限额做报表
- -a :直接到 /etc/mtab 搜寻具有 quota 标志的 filesystem ,幵报告 quota 的结果;
- -v :输出的数据将含有 filesystem 相关的绅部信息;
- -u :显示出用户的 quota 限值 (这是默讣值);
- -g :显示出个别群组的 quota 限值。
- -s :使用 M, G 为单位显示结果。
- 实作 Quota 流程-5:测试与管理 -------------------测试时切记切换到限制用户登录状态下!!
- dd if=/dev/zero of=bigfile bs=1M count=270
- repquota -auv
- dd if=/dev/zero of=bigfile2 bs=1M count=300 hda3: write failed, user block limit reached.
- du -sk
- repquota -au
- ------------------------------------------------------------------------------
- warnquota --------对超过限额者发出警告信
- 依据 /etc/warnquota.conf 的设定,然后找出目前系统上面 quota 用量超过 soft (就是有 grace time出现的那些家伙) 的账号,透过 email 的功能将警告信件发送到用户的电子邮件信箱。
- vi /etc/warnquota.conf-----------自定义邮件提示内容
- vi /etc/cron.daily/warnquota-----设置每天自动执行
- 添加 /usr/sbin/warnquota
- [root@www ~]# chmod 755 /etc/cron.daily/warnquota
- setquota :直接于指令中设定 quota 限额
- setquota [-u|-g] 名称 block(soft) block(hard) inode(soft) inode(hard) 文件系统
- 范例:
- [root@www ~]# setquota -u myquota5 100000 200000 0 0 /home
- 不更动既有系统的 quota 实例
- 让使用者的邮件信箱与家目录的整体磁盘使用量为固定
- 将 /var/spool/mail 这个目录完整的移动到 /home 底下;
- 利用 ln -s /home/mail /var/spool/mail 来建立链接数据;
- 将 /home 进行 quota 限额设定
- 让使用者的邮件信箱与家目录的整体磁盘使用量为固定
- 软件磁盘阵列的设定
- mdadm --detail /dev/md0 ----------查看磁盘阵列/dev/md0 信息
- mdadm --create --auto=yes /dev/md[0-9] --raid-devices=N --level=[015] --spare-devices=N /dev/sdx /dev/hdx...
- --create :为建立 RAID 的选顷;
- --auto=yes :决定建立后面接的软件磁盘阵列装置,亦即 /dev/md0,/dev/md1..
- --raid-devices=N :使用几个磁盘 (partition) 作为磁盘阵列的装置
- --spare-devices=N :使用几个磁盘作为备用 (spare) 装置
- --level=[015] :设定这组磁盘阵列的等级。支持很多,不过建议只要用 0, 1, 5 即可
- --detail :后面所接的那个磁盘阵列装置的详细信息
- 实例:
- mdadm --create --auto=yes /dev/md0 --level=5 --raid-devices=4 --spare-devices=1 /dev/hda{6,7,8,9,10}
- cat /proc/mdstat-------也可以查看
- 格式化与挂载使用 RAID
- mkfs -t ext3 /dev/md0
- mkdir /mnt/raid
- mount /dev/md0 /mnt/raid
- 仿真 RAID 错误的救援模式
- mdadm --manage /dev/md[0-9] [--add 装置] [--remove 装置] [--fail 装置]
- --add :会将后面的装置加入到这个 md 中!
- --remove :会将后面的装置由这个 md 中移除
- --fail :会将后面的装置设定成为出错的状态
- mdadm --manage /dev/md0 --fail /dev/hda8 假设8出错
- mdadm --manage /dev/md0 --add /dev/hda11 --remove /dev/hda8 加入新的移除错误的
- mdadm --manage /dev/md[0-9] [--add 装置] [--remove 装置] [--fail 装置]
- 开机自动启动 RAID 并自动挂载
- [root@www ~]# mdadm --detail /dev/md0 | grep -i
- uuid UUID : 7c60c049:57d60814:bd9a77f1:57e49c5b
- [root@www ~]# vi /etc/mdadm.conf -----------centos6.5 无
- ARRAY /dev/md0 UUID=7c60c049:57d60814:bd9a77f1:57e49c5b
- vi /etc/fstab
- /dev/md0 /mnt/raid ext3 defaults 1 2
- umount /dev/md0; mount -a
- 关闭软件 RAID(重要!) ----------进入/proc/partitions目录下查看raid装置名
- umount /dev/md0
- vi /etc/fstab
- /dev/md0 /mnt/raid ext3 defaults 1 2 删除或批注
- mdadm --stop /dev/md0
- vi /etc/mdadm.conf
- ARRAY /dev/md0 UUID=7c60c049:57d60814:bd9a77f1:57e49c5b 删除或批注
- LVM 实作流程
- PV 阶段
- pvcreate :将实体 partition 建立成为 PV;
- pvscan :搜寻目前系统里面任何具有 PV 的磁盘;
- pvdisplay :显示出目前系统上面的 PV 状态;
- pvremove :将 PV 属性移除,让该 partition 不具有 PV 属性。
- 例:pvcreate /dev/hda{6,7,8,9}
- 如果因为使用过raid导致创建pv失败,请查看/proc/partitions档案内,raid装置号,然后使用mdadm -S 装置号将其删除
- VG 阶段
- vgcreate :建立 VG 的指令!
- vgscan :搜寻系统上面是否有 VG 存在?
- vgdisplay :显示目前系统上面的 VG 状态;
- vgextend :在 VG 内增加额外的 PV ;
- vgreduce :在 VG 内移除 PV;
- vgchange :设定 VG 是否启动 (active);
- vgremove :去除一个 VG 啊!
- 例:vgcreate [-s N[mgt]] VG名称 PV名称
- -s :后面接 PE 的大小 (size) ,单位可以是 m, g, t (大小写均可)
- 例:vgcreate [-s N[mgt]] VG名称 PV名称
- LV 阶段
- lvcreate :建立 LV !
- lvscan :查询系统上面的 LV ;
- lvdisplay :显示系统上面的 LV 状态啊!
- lvextend :在 LV 里面增加容量!
- lvreduce :在 LV 里面减少容量;
- lvremove :去除一个 LV !
- lvresize :对 LV 进行容量大小的调整!
- 例:lvcreate [-L N[mgt]] [-n LV名称] VG名称
- -L :后面接容量,容量的单位可以是 M,G,T 等,要注意的是,最小单位为 PE, 因此这个数量必项要是 PE 的倍数,若不相符,系统会自行计算最相近的容量
- -l :后面可以接 PE 的『个数』,而不是数量。若要这么做,得要自行计算 PE 数
- n :后面接的就是 LV 的名称啦!
- lvcreate -L 5.81G -n vbirdlv vbirdvg
- 例:lvcreate [-L N[mgt]] [-n LV名称] VG名称
- 文件系统阶段
- mkfs -t ext3 /dev/vbirdvg/vbirdlv <==注意 LV 全名!
- mkdir /mnt/lvm
- mount /dev/vbirdvg/vbirdlv /mnt/lvm
- df
- 放大 LV 容量
- 用 fdisk 设定新的具有 8e system ID 的 partition
- 利用 pvcreate 建置 PV
- 利用 vgextend 将 PV 加入我们的 vbirdvg
- 利用 lvresize 将新加入的 PV 内的 PE 加入 vbirdlv 中
- 透过 resize2fs 将文件系统的容量确实增加!
- resize2fs [-f] [device] [size]
- -f :强制进行 resize 的动作!
- [device]:装置的文件名;
- [size] :可以加也可以不加。如果加上 size 的话,那么就必项要给予一个单位, 譬如 M, G 等等。如果没有 size 的话,那么预设使用『整个 partition』 的容量来处理!
- resize2fs [-f] [device] [size]
- 缩小 LV 容量--------------与放大步骤相反
- umount /mnt/lvm ---------先卸载
- resize2fs /dev/vbirdvg/vbirdlv 6900M ------将文件系统容量缩小到
- e2fsck -f /dev/vbirdvg/vbirdlv ----------检查文件系统
- mount /dev/vbirdvg/vbirdlv /mnt/lvm -----挂载
- df /mnt/lvm --------查看大小
- lvresize -l -89 /dev/vbirdvg/vbirdlv ------抽离想要的分区
- lvdisplay 查看lv信息
- pvdisplay 确认想要移除的分区内的PE被移除
- pvmove /dev/hda6 /dev/hda10 移动PE 使想要抽离的分区内的PE全部成为free
- vgreduce vbirdvg /dev/hda6 将分区移除vg
- pvremove /dev/hda6 移除分区pv属性
- LVM快照
- 快照区的建立
- vgdisplay ---------查看VG剩余容量
- lvcreate -l 60 -s -n vbirdss /dev/vbirdvg/vbirdlv
- 利用 lvcreate 建立系统忚照区,我们取名为 vbirdss,且给予 60 个 PE
- -s 的选顷!代表是 snapshot 忚照功能之意!
- mkdir /mnt/snapshot
- mount /dev/vbirdvg/vbirdss /mnt/snapshot
- df
- umount /mnt/snapshot
- 利用忚照区复原系统
- mkdir -p /backups <==确认真的有这个目录!
- cd /mnt/snapshot ---------进入快照区目录
- tar -jcv -f /backups/lvm.tar.bz2 * ----------备份快照区所有资料 即原有系统的所有资料
- umount /mnt/snapshot -----------卸载快照区
- lvremove /dev/vbirdvg/vbirdss -----------卸除vbirdss以及里面的内容
- umount /mnt/lvm -----------卸载原系统挂载点
- mkfs -t ext3 /dev/vbirdvg/vbirdlv ---重新格式化
- mount /dev/vbirdvg/vbirdlv /mnt/lvm ---重新挂载
- tar -jxv -f /backups/lvm.tar.bz2 -C /mnt/lvm -------将原备份的压缩文件解压到该目录
- 快照区的建立
- LVM的移除
- 先卸除系统上面的 LVM 文件系统 (包括忚照不所有 LV);
- 使用 lvremove 移除 LV ;
- 使用 vgchange -a n VGname 让 VGname 这个 VG 不具有 Active 的标志;
- 使用 vgremove 移除 VG:
- 使用 pvremove 移除 PV;
- 最后,使用 fdisk 修改 ID !
- 例:
- umount /mnt/lvm
- umount /mnt/snapshot
- lvremove /dev/vbirdvg/vbirdss <==先处理忚照
- lvremove /dev/vbirdvg/vbirdlv <==再处理原系统
- vgchange -a n vbirdvg
- vgremove vbirdvg
- pvremove /dev/hda{6,7,8,9,10}
- 最后再用 fdisk 将磁盘的 ID 给他改回来 82 就好啦!整个过程就这样的啦! ^_^ 重点!
- PV 阶段
linux磁盘限额和进阶文件系统的管理 quota RAID LVM的更多相关文章
- Linux 磁盘、分区、文件系统、挂载
磁盘 Linux所有设备都被抽象成为一个文件,保存在/dev目录下. 设备名称一般为hd[a-z]或sd[a-z].如果电脑中有多硬盘,则设备名依次为sda.adb.sdc...以此类推 IDE设备的 ...
- linux磁盘限额配置:quota命令
LINUX下也有类似WINDOWS NTFS所用的磁盘限额,用的是quota来实现通过rpm -q quota确定是否已安装用quota只能对patation做限额,要做到针对某个目录来做只能靠ln ...
- Linux磁盘配额与LVM
一.LVM概述 逻辑卷管理 Logical Volume Manager二.LVM机制的基本概念三.LVM的管理命令 ① 主要命令 ② ==LVM逻辑卷操作流程== ③ 举例四.磁盘配额概述 ...
- Linux磁盘配额实验
1.实现磁盘限额的条件 *需要Linux内核支持 *安装quota软件包2.Linux磁盘限额的特点 作用范围:针对指定 文件系统(分区) 限制对象:普通用户帐号.组帐号 限制类型:磁盘容量(默认单位 ...
- 文件系统的几种类型:ext3, swap, RAID, LVM
分类: 架构设计与优化 1. ext3 在异常断电或系统崩溃(不洁关机, unclean system shutdown ).每个已挂载ext2文件系统计算机必须使用e2fsck程序来检查其一致性 ...
- linux 磁盘管理三部曲——(2)管理分区,文件系统类型格式化
上篇小编给大家讲解了磁盘结构和分区的介绍,这篇小编就给大家演示如何管理分区和文件系统类型格式化. 小编上篇已经提到如何使用磁盘,今天这两步,就是其中很重要的两步.(前几天写的有点急,有点乱,今天又整理 ...
- Linux磁盘管理——日志文件系统与数据一致性
参考:Linux磁盘管理——Ext2文件系统 数据不一致 上图是Ext2结构图,其他FS结构类似. 一般来说,我们将 inode table 与 data block 称为数据区:至于其他例如 sup ...
- 详解Linux磁盘管理与文件系统
磁盘基础 硬盘结构 物理结构 盘片:硬盘有多个盘片,每盘片 2 面. 磁头:每面一个磁头. 数据结构 扇区:磁盘上的每个磁道被等分为若干个弧段,这些弧段便是硬盘的扇区. 硬盘的第一个扇区,叫做引导扇区 ...
- Linux学习笔记之磁盘与文件系统的管理
三.Linux磁盘与文件系统的管理 MBR扇区(512B) 磁盘的分区组成 Boot sector 扇区(用来装引导程序) Super block 记录inode与Block的信息 Inod ...
随机推荐
- Visual SVN Server启动失败0x8007042a错误
今天在程序VisualSVNServer界面中启动服务时,报错如下: VisualSVNServerServer service failed to start:服务已返回特定的服务器错误 ...
- Windows下RCNN的使用
RCNN 一种把目标图像分割转化为CNN分类问题进行目标检测的方法. 以下转自魏晋的知乎回答 Ross B. Girshick的RCNN使用region proposal(具体用的是Selecti ...
- selenium多个窗口切换
浏览器里面支持多窗口打开,例如这样: html里面写了: target="_blank" 造成新打开一个窗口,但是selenium不会自动跳转到新的串口,需要自己切换: # 你打开 ...
- 聊一下JS中的作用域scope和闭包closure
聊一下JS中的作用域scope和闭包closure scope和closure是javascript中两个非常关键的概念,前者JS用多了还比较好理解,closure就不一样了.我就被这个概念困扰了很久 ...
- IOS开发-CAlayer-锚点小结
CAlayer层的属性:anchorPoint(锚点) CAlayer *view; 1.决定着CALayer上的哪个点会在position属性所指的位置(设置以后旋转动画,就是以锚点为中心旋转) ...
- WeX5学习笔记-建立项目且从SVN获取版本
UI2项目(app项目)建立步骤: 1.从网上获得WeX5_V3.1.1.zip 文件,在某盘根目录下,创建一个文件,起名尽量短小,因开发包里的文件目录层次很深,有时会报路径长度超出范围的提示,如创建 ...
- JavaScript常用小技巧
1.获取访问地址URL的参数 <script type="text/javascript"> var param = ""; var nowUrl ...
- pl/sql和sql的区别
源地址:https://zhidao.baidu.com/question/187511430.html 1 sql(数据定义语言) 和PL/Sql的区别:答:SQL是结构化查询语言,比较接近自然语言 ...
- 【练习】flashback基于scn的闪回查询
1.创建表dept1: :: SCOTT@ORA11GR2>create table dept1 as select * from dept; Table created. :: SCOTT@O ...
- php接口post提交方法 (改良版)
$postData = "reqType=2&caller=15088719619&called=15068722845"; $result = send_post ...