Я увидел, что использовать функциональность btrfs CoW для больших файлов, таких как каталоги данных базы данных PostgreSQL, - не лучшая идея.
] Поскольку я использую докер для баз данных, я спрашиваю себя, следует ли мне отключить CoW для всего каталога / var / lib / docker
. Но я не уверен, потому что многоуровневая файловая система Docker использует эту функцию или нет?
Или можно отключить CoW только для некоторых конкретных томов?
Я не думаю, что докер
напрямую подключается к поведению CoW BTRFS (или любой файловой системы); скорее, он может использовать моментальные снимки и / или ссылки, чтобы избежать репликации целых образов контейнеров.
Хотя отключение CoW, несомненно, будет полезно для производительности, имейте в виду, что:
Пока для базы данных (как PostgreSQL) вышеупомянутые точки могут не вызывать проблем (например: контрольная сумма данных выполняется на уровне записи БД, а моментальные снимки предоставляются на уровне транзакций), для виртуальной машины или контейнера, в которых отсутствуют эти функции, могут возникнуть проблемы.
В любом случае, я действительно рекомендую вам прочитать BTRFS FAQ о nodatacow
Поместите следующее в /etc/docker/daemon.json
:
{
"storage-driver": "btrfs"
}
и отключите копирование при записи на ваших томах, если они содержат базы данных:
mkdir /var/lib/docker/volumes
chattr +C /var/lib/docker/volumes
Надеюсь, это поможет.