Должен ли я отключить btrfs CoW для / var /lib/docker?

Я видел, что не очень хорошая идея использовать функциональность btrfs CoW для больших файлов, таких как каталоги данных базы данных PostgreSQL.

Поскольку я использую докер для баз данных, я теперь спрашиваю себя, следует ли мне отключить CoW для всего /var/lib/docker каталог. Но я не уверен, потому что многоуровневая файловая система докера использует эту функцию, или нет?

Или это возможно, чтобы отключить CoW только для некоторых конкретных томов?

1 ответ

Я не думаю docker напрямую подключается к поведению CoW BTRFS (или любой файловой системы); скорее, он может использовать моментальные снимки и / или ссылки на ссылки, чтобы избежать репликации изображений всего контейнера.

Хотя отключение CoW, безусловно, будет полезно для производительности, имейте в виду, что:

  • отключение означает отсутствие контрольной суммы данных, поэтому нет защиты от потери данных;
  • снимок тома автоматически повторно включает CoW;
  • reflink больше не будет работать;
  • существующий файл останется включенным CoW (пока вы не удалите и не создадите его заново).

В то время как для базы данных (например, PostgreSQL) вышеупомянутые пункты могут не вызывать проблем (т. Е. Контрольная сумма данных выполняется на уровне записи в БД, а моментальные снимки предоставляются транзакционным уровнем), но для виртуальной машины или контейнера, в которых отсутствуют эти функции, могут возникнуть проблемы.

Во всяком случае, я действительно предлагаю вам прочитать часто задаваемые вопросы о BTRFS о nodatacow

Поместите следующее в /etc/docker/daemon.json:

{
    "storage-driver": "btrfs"
}

и отключите копирование при записи на ваших томах, если они содержат базы данных:

mkdir /var/lib/docker/volumes
chattr +C /var/lib/docker/volumes

Надеюсь, что это поможет.

Другие вопросы по тегам