除了将它用于交换空间之外,我将使用Azure VM(Ubuntu 14.04 OS)中可用的临时存储来存储
Postgresql临时文件.
为了实现这一点,我将在/ $PGDATA / base / pgsql_tmp创建一个指向/ mnt / pgsql_tmp的符号链接.所以这应该是ln -s / mnt / pgsql_tmp $PGDATA / base / pgsql_tmp.
这样可以合理地确保从基于SSD的临时存储中存储和读取所有临时文件.但是,有一个问题:用户postgres没有写入/ mnt的权限:
drwxr-xr-x 4 root root 4.0K Mar 18 12:40 mnt
我如何确保postgres对/ mnt也有写权限?我应该只是做sudo chmod -R 777 / mnt并完成它吗?
我知道这是基本的,但由于它是一个生产服务器,我已经在/ mnt中设置了交换设置,我不想错误配置它并在明天遇到问题.
附:这就是临时存储目前的样子:
Filesystem Size Used Avail Use% Mounted on /dev/sdb1 221G 9.9G 200G 5% /mnt
解决方法
ln -sTf /mnt/pgsql_tmp $PGDATA/base/pgsql_tmp # did you get that correct? chown -R postgres /mnt/pgsql_tmp chmod o+x /mnt # note: no -R,this turns 750 to 751 for /mnt only
效果:
su - postgres echo 1 > /mnt/file # fails ls /mnt # fails cat /mnt/anything # fails echo 1 > /mnt/pgsql_tmp/file # works ls /mnt/pgsql_tmp # works cat /mnt/pgsql_tmp/file # works
chmod o x意味着给[o] thers e [x] ecute位,这使它们有权遍历/ mnt进入任何子目录.对于/ mnt / pgsql_tmp,/ mnt不需要其他权限