Btrfs/Настройка: различия между версиями

Материал из DZWIKI
Перейти к навигации Перейти к поиску
Строка 35: Строка 35:
{{Imbox
{{Imbox
| type = notice
| type = notice
| text = Совет: В соответствии с примечанием выше, вы можете использовать следующий трюк, чтобы отключить копирование при записи для существующих файлов в каталоге:  
| text = '''Совет:''' В соответствии с примечанием выше, вы можете использовать следующий трюк, чтобы отключить копирование при записи для существующих файлов в каталоге:  
<syntaxhighlight lang="bash">
mv /путь/к/каталогу /путь/к/каталогу_old
mkdir /путь/к/каталогу
chattr +C /путь/к/каталогу
cp -a --reflink=never /путь/к/каталогу_old/. /путь/к/каталогу
rm -rf /путь/к/каталогу_old
</syntaxhighlight>
 
Убедитесь, что данные не используются во время этого процесса.
Также обратите внимание, что <code>mv</code> или <code>cp</code> без <code>--reflink=never</code>, как описано ниже, работать не будут.
}}
}}
==== Влияние на снимки ====
Если для файла отключено копирование при записи (NOCOW) и сделан [[Btrfs/Снимки|снимок]], то первая запись в блок файла после создания снимка [https://www.spinics.net/lists/linux-btrfs/msg33090.html будет COW-операцией], поскольку снимок блокирует старые блоки файла на своих местах. Однако файл сохранит атрибут NOCOW, и все последующие записи будут выполняться в одни и те же блоки файла до момента создания следующего снимка.
Частые снимки могут снизить эффективность NOCOW, так как при первой записи всё равно требуется COW. Чтобы полностью избежать COW-операций для таких файлов, поместите их в отдельный подтом и не создавайте снимки этого подтома.


== Примечания ==
== Примечания ==

Версия от 23:06, 6 января 2024

На этой странице мы рассмотрим настройку файловой системы.

Копирование при записи (CoW)

По умолчанию Btrfs постоянно использует копирование при записи (copy-on-write) для всех файлов. Когда выполняется операция записи, новые данные не записываются поверх старых; вместо этого изменённая копия блока записывается в новое место и в метаданные записывается адрес нового блока. Подробности реализации, а также преимущества и недостатки описаны в Btrfs Sysadmin Guide.

Отключение CoW

Чтобы отключить копирование при записи для создаваемых файлов в примонтированном подтоме, используйте опцию монтирования nodatacow. Это повлияет только на новые файлы. Для существующих файлов копирование при записи всё равно будет происходить. Опция nodatacow также отключает сжатие.[1]

Чтобы отключить копирование при записи для отдельных файлов/каталогов, выполните:

chattr +C /каталог/файл

Это отключит копирование при записи для операций над файлами, на которые есть только одна ссылка. Если ссылок на файл больше одной, например, из-за клонирования файлов или облегчённых клонов или снимков файловой системы, копирование при записи всё равно будет происходить. Начиная с coreutils 9.0, cp пытается создавать облегчённые копии по умолчанию — смотрите cp(1) для более подробной информации.

Влияние на снимки

Если для файла отключено копирование при записи (NOCOW) и сделан снимок, то первая запись в блок файла после создания снимка будет COW-операцией, поскольку снимок блокирует старые блоки файла на своих местах. Однако файл сохранит атрибут NOCOW, и все последующие записи будут выполняться в одни и те же блоки файла до момента создания следующего снимка.

Частые снимки могут снизить эффективность NOCOW, так как при первой записи всё равно требуется COW. Чтобы полностью избежать COW-операций для таких файлов, поместите их в отдельный подтом и не создавайте снимки этого подтома.

Примечания

  1. btrfs(5) — Arch manual pages (англ.). Arch manual pages (14 декабря 2023). Дата обращения: 6 января 2024. Архивировано 28 декабря 2023 года.

Ссылки и источники