df -h 显示磁盘满主因是隐藏路径占用:/www/Recycle_bin/、/www/server/data/(MySQL二进制日志)、/www/wwwlogs/;权限拒绝常因父目录缺x权限、PHP用户不匹配或open_basedir限制;“目录已存在”多因面板数据库残留;quota显示星号表明用户配额超限。

df -h 显示磁盘已满,但 /www/wwwroot 下明明没几个文件
这不是“看起来没几个文件”就能判断的事。宝塔新建站点失败时,df -h 显示 /dev/vda1 使用率 100%,往往不是网站目录本身占满的,而是以下三类隐藏路径在吃空间:
-
/www/Recycle_bin/:宝塔回收站默认不自动清空,删掉的备份、数据库、日志全堆在这,rm -rf /www/Recycle_bin/*立刻释放几GB很常见 -
/www/server/data/:MySQL 的mysql-bin.000xxx二进制日志可能累积到几十GB,必须先停 MySQL 再删(systemctl stop mysqld→ 删除 →systemctl start mysqld) -
/www/wwwlogs/:每个站点的access.log和error.log默认不轮转,单个日志文件超 5GB 不稀奇,直接删或用logrotate配置
别信“我只建了两个站”,先跑一遍:du -sh /www/* 2>/dev/null | sort -hr | head -5,看哪一项真正撑爆了。
mkdir(): Permission denied 报错,但 chmod 755 也没用
问题不在目标目录,而在它的**每一级父目录**是否对 www 用户有 x(执行)权限——没有 x,连进入都做不到,更别说创建子目录。
使用ydata-profiling(前身为pandas-profiling)生成全面的数据质量报告,包含相关性分析、缺失值模式和基数检测。导出交互式HTML仪表板和JSON摘要。
- 用
namei -l /www/wwwroot/example.com查每层权限,重点看/www和/www/wwwroot的组和权限位,比如drwxr-x--- 1 root root就不行,因为www用户不属于root组 - 确认
www用户 UID:id -u www,再检查 PHP 进程实际运行 UID 是否一致(ps aux | grep php-fpm),某些自定义配置会让它以root或其他用户启动 - 如果启用了“防跨站攻击”,
open_basedir会静默拦截超出范围的mkdir,检查php.ini里该值是否包含完整路径,例如填了/www/wwwroot/example.com/public,但代码试图在/www/wwwroot/example.com/storage创建,就直接失败
新建站点提示 “目录已存在” 或 “配置文件错误”,但路径是全新的
面板不是只看文件系统,它还查自己数据库里的残留记录。手动删过站点、中断过创建流程、或之前失败留下的半截配置,都会让面板误判。
- 先执行
bt 19清空面板缓存,再跑bt 10修复数据库,这两步能解决 70% 的“假冲突” - 检查 Nginx 配置目录:
/www/server/panel/vhost/nginx/下是否有同名.conf文件残留,哪怕对应站点已删,这个文件没清,新建时也会触发校验失败 - 如果用的是专业版,点“一键检测网站配置”,它会比你更快发现
server_name重复、root路径指向空目录、或 SSL 配置引用了不存在的证书路径这类硬伤
quota -u www 显示 Disk quotas for user www: … 2097152*,末尾带星号
这表示 www 用户磁盘配额已超限,且宝塔在安装时悄悄启用了 quota 功能——CentOS/Rocky 上尤其隐蔽,df -h 看不到,但 mkdir 就卡死。
- 临时放行:
setquota -u www 0 0 0 0 /dev/vda1(把所有数字设为 0 表示不限制) - 永久关闭:进宝塔后台【安全】→【磁盘配额】,关掉开关;或者编辑
/etc/fstab,把对应分区参数里的usrquota删掉,再执行quotaoff /dev/vda1 && quotaon /dev/vda1 - 注意:别只查
/dev/vda1,用mount | grep quota确认实际启用 quota 的设备名,有些云服务器是/dev/vdb1
配额问题最麻烦的地方在于:它不报错,也不提示,就让 mkdir 返回 false,连 error_log 都不记——得养成看到“权限拒绝”就顺手敲 quota -u www 的习惯。

















