Perforce服务器磁盘空间不足致操作受限求助
紧急恢复:解决当前磁盘耗尽无法操作的问题
第一步:清理系统级垃圾,腾出少量操作空间
- 压缩清理系统日志:
sudo journalctl --vacuum-size=100M - 删除旧软件包缓存:
sudo apt-get clean - 删除临时目录无用文件:
sudo rm -rf /tmp/*
这些操作不涉及Perforce核心数据,先腾出足够空间让Perforce命令能正常执行。
第二步:启动Perforce紧急模式,绕过空间阈值限制
- 停止Perforce服务:
sudo systemctl stop perforce(若使用init脚本则替换为sudo service perforce stop) - 手动启动服务器并关闭空间检查:
p4d -r /your/actual/P4ROOT/path -L log -v server.minimum.freespace=0
把/your/actual/P4ROOT/path替换为你服务器上P4ROOT的真实路径(比如/opt/perforce),启动后即可正常执行Perforce命令。
第三步:清理Perforce服务器冗余数据
- 查看所有废弃的未提交变更:
p4 changes -s abandoned - 清理这些变更对应的临时文件:
p4 clean -a - 删除确认无用的旧文件/废弃分支(该操作不可逆,务必确认文件已无保留价值):
p4 obliterate -y //depot/path/to/unused/files/... - 压缩整理Perforce数据库释放空间:
p4d -r /your/actual/P4ROOT/path -z housekeeping
第四步:恢复正常服务并调整空间阈值
- 停止紧急模式服务器:按
Ctrl+C,或执行p4 admin stop - 正常启动Perforce服务:
sudo systemctl start perforce - 调整最小空闲空间阈值(比如改为1G,避免再次触发2G限制):
p4 configure set server.minimum.freespace=1073741824
1073741824是1GB对应的字节数,可根据实际需求调整。
根本解决:避免再次出现磁盘耗尽问题
1. 定期清理Perforce冗余数据
- 每周执行一次
p4 clean -a,清理废弃的未提交文件 - 每月检查废弃分支、旧标签,用
p4 obliterate删除无用文件 - 每月执行一次
p4d -r /your/actual/P4ROOT/path -z housekeeping,压缩整理数据库
2. 开启磁盘监控预警
- 设置定时任务,每天检查P4ROOT所在磁盘空间:
编辑定时任务:crontab -e,添加一行:0 12 * * * df -h /your/actual/P4ROOT/path | grep -v Filesystem | awk '{if($5>90) print "Perforce磁盘空间不足!使用率:"$5}' | mail -s "Perforce磁盘预警" your-email@example.com
替换路径和你的邮箱地址,当磁盘使用率超过90%时会自动发邮件提醒。
3. 优化Perforce存储效率
- 启用归档文件压缩:
p4 configure set server.archive.compress=1,减少大文件的存储空间占用 - 配置大文件存储规则:执行
p4 typemap,在编辑器中添加对应艺术资源的规则(示例如下),让Perforce用更高效的方式存储大文件:
保存退出后规则自动生效。+b //depot/art/assets/.../*.psd +b //depot/art/assets/.../*.blend +b //depot/art/assets/.../*.mp4
4. 分离Perforce数据与系统盘(适配Digital Ocean)
由于Digital Ocean服务器扩容后无法缩容,建议把Perforce数据迁移到单独的块存储卷,后续只需单独扩容该卷即可,无需改动服务器系统盘:
- 在Digital Ocean控制台创建新块存储卷,按照指引挂载到服务器的
/mnt/perforce-storage路径 - 停止Perforce服务:
sudo systemctl stop perforce - 复制P4ROOT所有数据到新卷:
sudo cp -rp /your/old/P4ROOT/path/* /mnt/perforce-storage/ - 修改Perforce配置文件(比如
/etc/perforce.conf),将P4ROOT的值改为/mnt/perforce-storage - 启动Perforce服务:
sudo systemctl start perforce,确认服务正常后再删除旧的P4ROOT数据
内容的提问来源于stack exchange,提问作者Narxisus
相关产品推荐
相关产品推荐

