单个分区经systemd挂载至多目录却文件不同的原因咨询
这种情况其实违背了文件系统挂载的基本逻辑——同一个分区挂载到多个目录时,所有挂载点应该显示完全一致的内容。出现差异,大概率是部分挂载点实际上没有成功挂载目标分区,或者你的挂载配置存在误解,以下是具体原因分析和排查步骤:
1. 最常见原因:部分挂载点未成功挂载目标分区
你提到配置了一个var-lib-docker.mount单元,但一个systemd .mount文件只能对应一个挂载点(文件名里的var-lib-docker对应/var/lib/docker目录)。另外两个目录的挂载要么来自其他配置,要么根本没挂载成功,显示的是挂载点目录在挂载前就存在的本地文件。
验证方法:
运行以下命令查看目标分区的所有挂载点:
mount | grep /dev/你的分区路径 # 替换成你的分区,比如/dev/sdb1
如果输出里只有一个挂载点,那另外两个目录就是未挂载状态,显示的是原目录的本地内容。
2. 误用Bind挂载或多层挂载
如果你的配置里用了Bind选项,或者手动执行过mount --bind命令,把分区里的子目录(而非整个分区)挂载到其他位置,那不同挂载点的内容自然不同。比如:
- 先把分区挂载到
/mnt/docker-data - 再把
/mnt/docker-data/imagesbind到/var/lib/docker - 把
/mnt/docker-data/volumesbind到另一个目录
这种情况下三个目录的内容肯定不一样。
验证方法:
查看你的systemd挂载单元配置:
cat /etc/systemd/system/var-lib-docker.mount
正常的分区挂载配置应该类似这样(只有一个Where字段):
[Unit] Description=Mount Docker data partition [Mount] What=/dev/sdX1 Where=/var/lib/docker Type=ext4 Options=defaults [Install] WantedBy=multi-user.target
如果配置里有Bind相关选项,或者Where字段被错误配置了多个路径(这是不允许的),就会出现异常。
3. 挂载前目录已有文件,且挂载失败
假设你三个目标目录在挂载前就各自有不同的文件,而其中部分挂载因为权限、设备忙、文件系统错误等原因失败了:
- 成功挂载的目录显示分区内容
- 失败的目录保留原本地文件
这就会造成“同一分区挂载到多目录但内容不同”的假象。
排查方法:
- 查看systemd挂载单元的状态,确认是否有报错:
systemctl status var-lib-docker.mount - 查看系统日志里的挂载相关错误:
dmesg | grep mount - 尝试手动挂载测试,看是否能成功:
mount /dev/你的分区 /目标目录
4. Scaleway实例的特殊存储配置
Scaleway C2L实例的本地存储可能有特殊配置(比如临时磁盘、逻辑卷等),如果你的分区实际上是多个逻辑卷的组合,或者某些目录被默认挂载了本地临时存储,也可能出现内容差异。
验证方法:
查看系统所有块设备和挂载情况:
lsblk df -hT
确认三个目录对应的挂载源是否为同一个分区。
解决步骤总结
- 用
mount命令确认三个目录的挂载源是否为同一个分区; - 检查所有systemd挂载单元(
/etc/systemd/system/*.mount)和/etc/fstab,确认是否有其他挂载配置影响了这三个目录; - 查看systemd挂载状态和系统日志,排查挂载失败的原因;
- 手动测试挂载,验证目标分区能否正常挂载到所有三个目录。
内容的提问来源于stack exchange,提问作者Gardner Bickford

