Помимо использования его для пространства подкачки, я собираюсь использовать временное хранилище, доступное в моей виртуальной машине Azure (ОС Ubuntu 14.04), также для хранения временных файлов 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
, я не хочу неправильно его настроить и столкнуться с проблемами завтра.
ps вот как сейчас выглядит временное хранилище:
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]твой бит +e[x]ecute, который дает им разрешение на пересечение /mnt
в любую поддиректорию. Другие разрешения не нужны для /mnt
только для /mnt/pgsql_tmp
Чтобы позволить пользователю postgres
записывать в папку, было бы предпочтительно, чтобы он был владельцем
папки, вместо того, чтобы давать доступ на чтение и запись всем.
Если /mnt
должен использоваться только postgres
, то вы должны сделать postgres
владельцем папки /mnt
и всех ее вложенных папок
sudo chown -R /mnt postgres
, возможно, вы захотите сделать это только для вложенной папки /mnt
e. g. в /mnt/pgsql_tmp
sudo chown -R /mnt/pgsql_tmp postgres