Должен ли я отключить 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
Надеюсь, что это поможет.