这个坑值得记一笔。/home 使用率到了百分之百,网站头像上传失败,想把 /home/www/uploads 挪到新挂上去的数据盘,又担心应用里写死的绝对路径断掉。
这类报错背后常见的原因有几处,逐个排除就行。上传目录和历史备份长期挤在同一个分区里;目录迁移之后属主属组没有跟着改,应用读不到;应用里写死了绝对路径,软链没有真正生效。
上来先确认目录大小和属主
du -sh /home/www/uploads; ls -ld /home/www/uploads
保留权限复制到新盘
rsync -aHAX /home/www/uploads/ /data/uploads/
再往下改属主之后建软链
chown -R www:www /data/uploads; ln -s /data/uploads /home/www/uploads
以运行用户验证读写
sudo -u www touch /home/www/uploads/.probe
隔了一天再看,现象没变,说明不是偶发。
改完先别撤,确认这几项。上传一张图片成功,du -sh 新目录随之增长,旧位置只剩一个软链占位,应用日志里没有报错。
容易忽略的是,迁移前把应用停几十秒,边写边拷一定会漏文件;PHP 的 open_basedir 也要把新路径加进去,否则照样报无权限。改动前把原配置备份一份,出问题能马上回滚,这比任何技巧都实用。