Linux如何让应用数据直接写入挂载卷 解决仍写入根分区问题
问题根因
你配置的bind挂载条目顺序写反了。
Linux系统中bind挂载的语法为<实际存储源路径> <待映射的访问路径> none bind:前半段是数据真正落盘的位置,后半段是应用、用户访问的路径,访问后半段路径时内核会自动重定向到前半段的实际存储位置。
你当前的配置是把根分区/dev/sda上的应用报告目录,绑定到了新磁盘/dev/sdb的挂载点下,本质读写操作还是落在sda上,自然不会把数据写入sdb。
修复操作步骤
- 提前准备sdb上的存储目录,同步历史数据、匹配权限
执行以下命令,避免应用启动后写入报错、历史数据丢失:# 先确保新磁盘已经正常挂载到/datadrive mount /datadrive # 递归创建sdb上的报告存储目录 mkdir -p /datadrive/application-reports/user1/reports/ # 把原路径下已经生成的历史报告完整拷贝到新目录,保留文件属性 cp -a /opt/application/var/users/user1/reports/* /datadrive/application-reports/user1/reports/ # 对齐新旧目录的属主、权限,和原目录完全保持一致 chown --reference=/opt/application/var/users/user1/reports/ /datadrive/application-reports/user1/reports/ chmod --reference=/opt/application/var/users/user1/reports/ /datadrive/application-reports/user1/reports/ - 修改fstab配置,修正bind挂载顺序
把原有fstab里的两行配置替换为以下内容:
补充两个配置优化点:UUID=exxxxxx-fxxx-4xxx-bxxx-7xxxxxxxxxxx /datadrive xfs defaults,nofail 0 2 /datadrive/application-reports/user1/reports/ /opt/application/var/users/user1/reports/ none bind 0 0- 云虚拟机场景下xfs文件系统不需要配置开机dump备份,bind挂载点也不需要开机磁盘巡检,对应字段设为0即可,避免开机时因为磁盘检测超时卡住启动流程
- 顺序修正后,所有对原应用报告路径
/opt/application/var/users/user1/reports/的读写请求,都会被内核直接重定向到sdb磁盘的对应目录,完全不需要修改应用的任何配置
- 生效配置并验证结果
执行以下命令加载新配置:
验证是否生效:执行# 如果之前已经挂载了错误的bind条目,先卸载 umount /datadrive/application-reports/user1/reports/ 2>/dev/null # 加载fstab中所有未挂载的条目 mount -adf -h /opt/application/var/users/user1/reports/,如果输出结果中对应的文件系统是/dev/sdb的分区,就说明配置成功。后续应用往原固定路径写入报告时,数据会直接存储到sdb磁盘,不会再占用根分区sda的空间。
内容的提问来源于stack exchange,提问作者Chronograph3r
相关产品推荐
相关产品推荐

