Следует ли мне отключить btrfs CoW для / var / lib / docker?

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

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

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

2
задан 7 October 2019 в 11:09
2 ответа

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

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

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

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

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

0
ответ дан 3 December 2019 в 13:40

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

{
    "storage-driver": "btrfs"
}

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

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

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

1
ответ дан 3 September 2020 в 16:55

Теги

Похожие вопросы