btrfs Сравнение версий

Различия

Здесь показаны различия между двумя версиями данной страницы.

Ссылка на это сравнение

Предыдущая версия справа и слева Предыдущая версия
Следующая версия
Предыдущая версия
wiki:btrfs [2019/07/30 13:47]
[Сжатие/упаковка данных]
wiki:btrfs [2021/06/04 11:08] (текущий)
[swap файл на btrfs]
Строка 20: Строка 20:
   * [[https://​help.ubuntu.ru/​wiki/​btrfs#​cow_-_copy_on_write|Copy-on-write]] (COW) журналирование.   * [[https://​help.ubuntu.ru/​wiki/​btrfs#​cow_-_copy_on_write|Copy-on-write]] (COW) журналирование.
   * [[https://​help.ubuntu.ru/​wiki/​btrfs#​%D0%BA%D0%B2%D0%BE%D1%82%D1%8B|Лимиты]] (отдельно для каждого подтома или группы подтомов,​ по фактически занимаемому месту или по "​официальному"​)   * [[https://​help.ubuntu.ru/​wiki/​btrfs#​%D0%BA%D0%B2%D0%BE%D1%82%D1%8B|Лимиты]] (отдельно для каждого подтома или группы подтомов,​ по фактически занимаемому месту или по "​официальному"​)
-  * Контроль целостности блоков данных и метаданных с помощью контрольных сумм.+  * Контроль целостности блоков данных и метаданных с помощью ​ ​[[https://​help.ubuntu.ru/​wiki/​btrfs#​%D0%BA%D0%BE%D0%BD%D1%82%D1%80%D0%BE%D0%BB%D1%8C%D0%BD%D1%8B%D0%B5_%D1%81%D1%83%D0%BC%D0%BC%D1%8B|контрольных сумм]]. Можно выбрать один из 4 алгоритмов.
   * Зеркалирование метаданных даже в однодисковой конфигурации (отключается на ssd).   * Зеркалирование метаданных даже в однодисковой конфигурации (отключается на ssd).
 +  * Поддержка [[https://​ru.wikipedia.org/​wiki/​Разрежённый_файл|разреженных файлов]]. ​
   * Полностью распределенное блокирование.   * Полностью распределенное блокирование.
   * Поддержка ACL.   * Поддержка ACL.
   * Защита от потери данных.   * Защита от потери данных.
-  * Выбор хэш-алгоритма (в планах,​ сейчас используется CRC-32 и изменить это нельзя). 
   * Поддержка NFS (пока не полная).   * Поддержка NFS (пока не полная).
   * Флаги совместимости,​ необходимые для изменения дискового формата в новых версиях btrfs с сохранением совместимости со старыми.   * Флаги совместимости,​ необходимые для изменения дискового формата в новых версиях btrfs с сохранением совместимости со старыми.
Строка 91: Строка 91:
  
 Вот мы и получили в /mnt площадку для экспериментов с btrfs. Можно приступать к изучению возможностей этой файловой системы. Вот мы и получили в /mnt площадку для экспериментов с btrfs. Можно приступать к изучению возможностей этой файловой системы.
-====== Возможности btrfs ======сле окончания записи.+ 
 +======Возможности btrfs======
 <note important>​Авторы статьи рекомендуют сначала ознакомится с возможностями btrfs, а уже после этого (со знанием дела) подходить к вопросам по установке системы на btrfs или по использованию btrfs как хранилища данных.</​note>​ <note important>​Авторы статьи рекомендуют сначала ознакомится с возможностями btrfs, а уже после этого (со знанием дела) подходить к вопросам по установке системы на btrfs или по использованию btrfs как хранилища данных.</​note>​
  
Строка 105: Строка 106:
   cp --reflink <​оригинальный файл>​ <​теневая копия>​   cp --reflink <​оригинальный файл>​ <​теневая копия>​
   ​   ​
-Оба файла после такой команды будут хранить свое содержимое в одном месте (почти как hard-link), но как только в оригинальный файл будут записаны новые данные - он изменится,​ а теневая копия - сохранит оригинальное содержимое. Фактически,​ такое копирование - это просто создание новой записи в каталоге файлов. Копирования данных не происходит. А значит даже очень большой файл копируется (а точнее клонируется) практически мгновенно. ​Но, с точки зрения использования,​ такая теневая копия файла ничем не отличается от обычной копии. ​+Оба файла после такой команды будут хранить свое содержимое в одном месте (почти как hard-link), но как только в оригинальный файл будут записаны новые данные - он изменится,​ а теневая копия - сохранит оригинальное содержимое. Фактически,​ такое копирование - это просто создание новой записи в каталоге файлов. Копирования данных не происходит. А значит даже очень большой файл копируется (а точнее клонируется) практически мгновенно. ​ 
  
-Используя рекурсивное копирование (cp -r) можно создавать мгновенные копии каталогов вместе со всеми их вложениями. И такое копирование тоже будет занимать очень мало времени независимо от объема ​банных хранящихся в копируемом/​клонируемом каталоге. Однако может так статься,​ что какие-то файлы нельзя скопировать клонированием,​ например на файле отключен COW или файл находится в другой ФС смонтированной где-то внутри копируемого каталога. Можно указать --reflink=auto - тогда все, что нельзя скопировать ​"​быстро" ​будет копироваться как обычно.  ​+Используя рекурсивное копирование (cp -r) можно создавать мгновенные копии каталогов вместе со всеми их вложениями. И такое копирование тоже будет занимать очень мало времени независимо от объема ​данныххранящихся в копируемом/​клонируемом каталоге. Однако может так статься,​ что какие-то файлы нельзя скопировать клонированием,​ например на файле отключен COW или файл находится в другой ФС смонтированной где-то внутри копируемого каталога. Можно указать --reflink=auto - тогда все, что нельзя скопировать ​клонированием ​будет копироваться как обычно.  ​
  
 Сделать теневую копию сразу целого [[https://​help.ubuntu.ru/​wiki/​btrfs#​%D0%BF%D0%BE%D0%B4%D1%82%D0%BE%D0%BC%D0%B0|подтома]] можно с использованием [[https://​help.ubuntu.ru/​wiki/​btrfs#​%D1%81%D0%BD%D0%B8%D0%BC%D0%BA%D0%B8|снимков]]). Сделать теневую копию сразу целого [[https://​help.ubuntu.ru/​wiki/​btrfs#​%D0%BF%D0%BE%D0%B4%D1%82%D0%BE%D0%BC%D0%B0|подтома]] можно с использованием [[https://​help.ubuntu.ru/​wiki/​btrfs#​%D1%81%D0%BD%D0%B8%D0%BC%D0%BA%D0%B8|снимков]]).
Строка 113: Строка 114:
 COW также позволяет "​размазать запись"​ по носителю,​ что полезно для SSD. Многократная перезапись файла будет на деле осуществляться каждый раз в новые блоки устройства. COW также позволяет "​размазать запись"​ по носителю,​ что полезно для SSD. Многократная перезапись файла будет на деле осуществляться каждый раз в новые блоки устройства.
  
-Однако,​ у COW есть и "​подводные камни"​. Если файл обновляется не целиком,​ а изменяется только часть в его середине,​ то эта середина уже однозначно будет хранится не в том же месте, где голова и хвост. Таки образом,​ такая запись разбивает файл как минимум на три фрагмента,​ раскиданных по разным блокам устройства. Т.е. файл стал фрагментированным,​ и если на ssd это не имеет особого значения,​ то на HDD высокая фрагментация файлов приводит к снижению производительности файловой системы. Об этом недостатке COW стоит не забывать. ​Но, если COW начинает мешать,​ то его можно ​и отключить ([[https://​help.ubuntu.ru/​wiki/​btrfs#​%D0%BD%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B8|см раздел "​Настройки"​]]). ​И да, это приведет к тому, что содержимое файла не будет записываться каждый раз в новые блоки (запись будет производиться поверх старых данных),​ однако ​и быстрое журналирование данных ​вы теряете вместе с отключением COW.+Однако,​ у COW есть и "​подводные камни"​. Если файл обновляется не целиком,​ а изменяется только часть в его середине,​ то эта середина уже однозначно будет хранится не в том же месте, где голова и хвост. Таким образом,​ такая запись разбивает файл как минимум на три фрагмента,​ раскиданных по разным блокам устройства. Т.е. файл стал фрагментированным,​ и если на ssd это не имеет особого значения,​ то на HDD высокая фрагментация файлов приводит к снижению производительности файловой системы. Об этом недостатке COW стоит не забывать. ​ 
 + 
 +Если COW начинает мешать,​ то его можно отключить ([[https://​help.ubuntu.ru/​wiki/​btrfs#​%D0%BD%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B8|см раздел "​Настройки"​]]). ​Это приведет к тому, что содержимое файла не будет записываться каждый раз в новые блоки (запись будет производиться поверх старых данных), ​т.о. вместе с отключением COW, вы теряете ​быстрое журналирование данных.
 ===== Подтома ===== ===== Подтома =====
 Внутри файловой системы btrfs можно создать несколько выделенных файловых систем - подтомов. Свободное пространство делится между всеми такими подтомами,​ а также могут совместно использоваться одинаковые данные (при выполнении копирования с опцией --reflink, дедубликации или при использовании снимков). При необходимости на подтома можно установить квоты (ограничить размер). Так же у подтомов могут быть настроены разные механизмы сжатия и некоторые другие свойства. Т.о. подтома btrfs - это вполне полноценная замена нескольким файловым системам,​ размещенным на отдельных разделах диска. ​ Внутри файловой системы btrfs можно создать несколько выделенных файловых систем - подтомов. Свободное пространство делится между всеми такими подтомами,​ а также могут совместно использоваться одинаковые данные (при выполнении копирования с опцией --reflink, дедубликации или при использовании снимков). При необходимости на подтома можно установить квоты (ограничить размер). Так же у подтомов могут быть настроены разные механизмы сжатия и некоторые другие свойства. Т.о. подтома btrfs - это вполне полноценная замена нескольким файловым системам,​ размещенным на отдельных разделах диска. ​
Строка 131: Строка 134:
 Удаляется подтом командой ​ Удаляется подтом командой ​
   btrfs subvolume delete {путь по которому смонтирована btrfs}/​{путь и имя удаляемого подтома}   btrfs subvolume delete {путь по которому смонтирована btrfs}/​{путь и имя удаляемого подтома}
 +  ​
 +В последнних версиях btrfs удалить подтом можно также командой rm -r или rmdir. ​  
 +С точки зрения файловой системы подтом и каталог различаются только методом создания (ранее различались еще удалением). Во всем остальном подтома не отличаются от каталогов.
 +Переименовывается подтом обычной командой mv.
  
-С точки зрения файловой системы подтом и каталог различаются только методами создания и удаления. Во всем остальном подтома не отличаются от каталогов. +<note tip>​Несмотря на то, что подтом и каталог не различимы с точки зрения пользователя (если не считать команды создания),​ для администратора подтом дает значительно больше возможностей,​ чем каталог. Ведь подтом,​ по сути, - независимая файловая система,​ в которой можно настроить отличные параметры от родительского подтома,​ а также можно установить квоты или делать снимки (т.е. быстрые резервные копии).</​note>​
-К примеру,​ переименовать подтом можно просто командой mv. +
- +
-<note tip>​Несмотря на то, что подтом и каталог не различимы с точки зрения пользователя (если не считать команд создания и удаления), для администратора подтом дает значительно больше возможностей,​ чем каталог. Ведь подтом,​ по сути, - независимая файловая система,​ в которой можно настроить отличные параметры от родительского подтома,​ а также можно установить квоты или делать снимки (т.е. быстрые резервные копии).</​note>​+
  
  
Строка 402: Строка 406:
 <note important>​Как [[http://​forum.ubuntu.ru/​index.php?​topic=269699.msg2221269#​msg2221269|показали эксперименты]] btrfs пока не очень приспособлена для хранения образов виртуальных машин. Так же плохо дело обстоит с torrent клиентами ((даже включенное предварительное резервирование не позволяет избежать ужасающей фрагментации)). Если основная функция файловой системы - именно хранение образов дисков виртуальных машин или место для скачивания торентов,​ то лучше воспользоваться XFS или хотя-бы отключить COW на соответствующих каталогах.</​note>​ <note important>​Как [[http://​forum.ubuntu.ru/​index.php?​topic=269699.msg2221269#​msg2221269|показали эксперименты]] btrfs пока не очень приспособлена для хранения образов виртуальных машин. Так же плохо дело обстоит с torrent клиентами ((даже включенное предварительное резервирование не позволяет избежать ужасающей фрагментации)). Если основная функция файловой системы - именно хранение образов дисков виртуальных машин или место для скачивания торентов,​ то лучше воспользоваться XFS или хотя-бы отключить COW на соответствующих каталогах.</​note>​
 ===== Сжатие/​упаковка данных ===== ===== Сжатие/​упаковка данных =====
-btrfs поддерживает автоматическую упаковку данных при записи и распаковку при чтении. Поддерживаются два (в перспективе ожидается триалгоритма сжатия:​+btrfs поддерживает автоматическую упаковку данных при записи и распаковку при чтении. Поддерживаются три алгоритма сжатия:​
   * [[https://​ru.wikipedia.org/​wiki/​Zlib|zlib]] - достаточно эффективное сжатие в 2,7-3 раза, но довольно медленные и упаковка/​распаковка   * [[https://​ru.wikipedia.org/​wiki/​Zlib|zlib]] - достаточно эффективное сжатие в 2,7-3 раза, но довольно медленные и упаковка/​распаковка
   * [[https://​ru.wikipedia.org/​wiki/​LZO|lzo]] - быстрая упаковка/​распаковка,​ но не слишком эффективное сжатие примерно - в 2 раза или меньше   * [[https://​ru.wikipedia.org/​wiki/​LZO|lzo]] - быстрая упаковка/​распаковка,​ но не слишком эффективное сжатие примерно - в 2 раза или меньше
Строка 434: Строка 438:
  
 <note tip>​Существующие файлы которые не перезаписываются никак не меняют свое состояние сжатия,​ несмотря ни на опции монтирования,​ ни на свойства которые на них устанавливают. Если нужно упаковать всю ФС, то нужно воспользоваться дефрагментацией с ключом -c. <note tip>​Существующие файлы которые не перезаписываются никак не меняют свое состояние сжатия,​ несмотря ни на опции монтирования,​ ни на свойства которые на них устанавливают. Если нужно упаковать всю ФС, то нужно воспользоваться дефрагментацией с ключом -c.
-  btrfs filesystem ​defrag -r -c lzo {путь куда смонтирован подтом btrfs} ​   # упаковка всех файлов на ФС+  btrfs fi defrag -rc {путь куда смонтирован подтом btrfs} ​   # упаковка всех файлов на ФС
 Распаковка файлов с помощью команды defrag на данный момент невозможна. ​   Распаковка файлов с помощью команды defrag на данный момент невозможна. ​  
 </​note>​ </​note>​
 +каталога compression
 Свойство файла/​каталога compression это аналог атрибута '​с'​ (из числа расширенных атрибутов файлов,​ управлять которыми можно через chattr/​lsattr).  ​ Свойство файла/​каталога compression это аналог атрибута '​с'​ (из числа расширенных атрибутов файлов,​ управлять которыми можно через chattr/​lsattr).  ​
-  chattr -R -c *   # снимает свойство compression со всех файлов рекурсивно,​ начиная с текущего каталога.+  chattr -R -c *   # сникаталога compressionмает свойство compression со всех файлов рекурсивно,​ начиная с текущего каталога.
 А вот установка свойства compression через расширенный атрибут '​c'​ позволяет установить только компрессию по умолчанию (zlib). Если хотите установить другой тип компрессии,​ то пользуйтесь командой **btrfs property set <​файл>​ compression "<​тип сжатия>"​**. А вот установка свойства compression через расширенный атрибут '​c'​ позволяет установить только компрессию по умолчанию (zlib). Если хотите установить другой тип компрессии,​ то пользуйтесь командой **btrfs property set <​файл>​ compression "<​тип сжатия>"​**.
   ​   ​
-<​note>​Нужно понимать - сжатие файлов может производиться по частям. Когда в часть сжатого файла записываются данные - они на ходу упаковываются. И размер упакованной старой части файла как правило не соответствует размеру упакованных новых данных. С применением технологи copy-on-write это не становится проблемой. Но если COW отключить для файла - то его частичная упаковка становится ​невозможной - перезапись в середине файла потребует перезаписи всей оставшейся ​части за измененной, что скажется ​драматически на производительности. Поэтому разработчики btrfs решили просто - если COW отключен,​ то такой файл не будет упаковываться ни при каких условиях.</​note>​+<​note>​Нужно понимать - сжатие файлов может производиться по частям. Когда в часть сжатого файла записываются данные - они на ходу упаковываются. И размер упакованной старой части файла как правило не соответствует размеру упакованных новых данных. С применением технологи copy-on-write это не становится проблемой. Но если COW отключить для файла - то его частичная упаковка становится проблематичной ​и это  драматически ​сказывается ​на производительности. Поэтому разработчики btrfs решили просто - если COW отключен,​ то такой файл не будет упаковываться ни при каких условиях.</​note>​
 =====Информация о файловой системе===== =====Информация о файловой системе=====
 Системная утилита df не может корректно показать данные об использованном пространстве на btrfs. Собственно,​ особенности хранения данных в btrfs (совместное использование данных в подтомах и снимках,​ а также дедупликация данных) вообще делают невозможным однозначно определить,​ какое место на диске занимают данные того или иного отдельно взятого подтома/​снимка.\\ Системная утилита df не может корректно показать данные об использованном пространстве на btrfs. Собственно,​ особенности хранения данных в btrfs (совместное использование данных в подтомах и снимках,​ а также дедупликация данных) вообще делают невозможным однозначно определить,​ какое место на диске занимают данные того или иного отдельно взятого подтома/​снимка.\\
Строка 565: Строка 569:
 ===== Контрольные суммы ===== ===== Контрольные суммы =====
 btrfs использует для контроля целостности данных контрольные суммы. Они в частности позволяют восстанавливать целостность данных на RAID массивах в случае,​ когда с одним из устройств временно пропадает связь (и при этом массив продолжает использоваться дальше в режиме degraded). btrfs использует для контроля целостности данных контрольные суммы. Они в частности позволяют восстанавливать целостность данных на RAID массивах в случае,​ когда с одним из устройств временно пропадает связь (и при этом массив продолжает использоваться дальше в режиме degraded).
 +
 +Поддерживаются алгоритм CRC32C по умолчанию и 3 дополнительных алгоритма (с версии ядра 5.5).
 +
 +CRC32C (32-бит) - По умолчанию,​ лучший в плане совместимости,​ очень быстрый (современные процессоры поддерживают его на уровне инструкций),​ не устойчивый к коллизиям,​ но вполне приличный уровень определения ошибок.
 +
 +XXHASH (64-бит) - хорошая замена CRC32C, очень быстрый (оптимизирован для использования инструкций современных процессоров),​ хорошая устойчивость к коллизиям и хороший уровень определения ошибок.
 +
 +SHA256 (256-бит) - криптографически устойчивый хэш, довольно медленный,​ но может быть ускорен аппаратными ускорителями,​ сертифицирован FIPS и довольно широко используется.
 +
 +BLAKE2b (256-бит) - криптографически устойчивый хэш, довольно быстрый при использовании SIMD расширений команд процессоров,​ не стандартизован,​ но основан на BLAKE - одном из финалистов конкурса SHA3, широко используется,​ алгоритм - часть BLAKE2b-256,​ который оптимизирован для 64-битных платформ.
 +
 +Размер хэша влияет на размер части блока данных хранящего контрольную сумму. Блок метаданных имеет фиксированный объем до 256 бит (32 байта),​ таким образом тут не возникает увеличения. Каждый блок данных имеет индивидуальную контрольную сумму, сохраняющуюся вместе с данными для организации b-tree листа.
 +
 +Сравнительные производительности алгоритмов,​ в сравнении с CRC32C на платформе Intel 3.5GHz:
 +
 +    Digest ​ Cycles/4KiB Ratio 
 +    CRC32C ​     1700     1.00
 +    XXHASH ​     2500     1.44
 +    SHA256 ​   105000 ​      61
 +    BLAKE2b ​   22000       13
 +
 Проверка/​пересчет контрольных сумм - длительная и потому фоновая операция (если не указать явно выполнять интерактивно). Поэтому отдельно можно запустить пересчёт (команда start), остановить (cancel) ​ и посмотреть статус (status). Пример команды запуска:​ Проверка/​пересчет контрольных сумм - длительная и потому фоновая операция (если не указать явно выполнять интерактивно). Поэтому отдельно можно запустить пересчёт (команда start), остановить (cancel) ​ и посмотреть статус (status). Пример команды запуска:​
   btrfs scrub start -Bd /home   btrfs scrub start -Bd /home
Строка 834: Строка 859:
  
 Вот собственно и всё. Потом устанавливаем ОС, выбрав для разделов btrfs. Сразу после установки (не перегружаясь) нужно добавить опции монтирования со сжатием - compress=lzo в fstab только что установленной системы (который будет находиться в /​target/​etc/​fstab). Вот собственно и всё. Потом устанавливаем ОС, выбрав для разделов btrfs. Сразу после установки (не перегружаясь) нужно добавить опции монтирования со сжатием - compress=lzo в fstab только что установленной системы (который будет находиться в /​target/​etc/​fstab).
 +=====btrfs и GRUB=====
 +В состав GRUB входят драйвера btrfs. Однако это очень урезанный драйвер и он не поддерживает запись. А отсутствие записи не позволяет GRUB-у записать служебную переменную recordfail. GRUB проверяет значение этой переменной и если она не сброшена,​ то обязательно показывается меню загрузки. Каждый раз когда GRUB начинает загружать ОС он устанавливает эту переменную в 1, а сбрасывает ее скрипт который запускается после загрузки системы.
 +
 +Т.к. сохранить значение recordfail GRUB на btrfs не может, то он считает,​ что каждая загрузка происходит после фейла прошлой загрузки (т.е. recordfail=1). И в таком случае меню загрузки показывается 10 или даже 30 секунд. Изменить этот тайм-аут можно изменив в /​etc/​default/​grub значение переменной **GRUB_RECORDFAIL_TIMEOUT**. После задания разумного таймаута в /​etc/​default/​grub нужно запустить update-grub с правами root-а чтобы пересоздать скрипты загрузки GRUB-а. ​   ​
 +  ​
 =====swap файл на btrfs===== =====swap файл на btrfs=====
-Начиная с версии ​ 5.0+ на btrfs можно создать swap-файл, но с некоторыми ограничениями: ​swap-файл ​должен располагаться целиком на одном устройстве, создаваться обязательно с отключенным COW и сжатием((На самом деле, если вчитаться в детали на btfs-wiki, то отключение COW блокирует возможность архивирования)). Кроме того ​swap-файл не может попасть в снимокВ перспективе предполагается снять часть ограничений.\\+<note important>​Наличие работающего swap-файла на подтоме не дает возможности делать снимки с этого подтома. Поэтому для использования снимков необходимо размещать swap-файл на отдельном подтомеНапример создать @swap подтом и монтировать ​его в /swap.</​note>​
  
-Предположим что btrfs у нас на одном устройстве ​и у нас подходящая версия ядра 5.0+, дальше все довольно просто:+Начиная с версии ядра 5.0+ на btrfs можно создать swap-файл, но с некоторыми ограничениями:​ swap-файл должен располагаться целиком ​на одном устройстве ​((его ​нельзя будет ​создать на любом типе ​хранения кроме single)), создаваться обязательно с отключенным COW и сжатием((На btfs-wiki указано,​ что отключение COW блокирует возможность архивирования))Кроме того swap-файл не может попасть в снимок((Если swap-файл смонтирован то невозможно ​сделать снимок с подома где он расположен,​ отключенный swap-файл дает сделать снимок ​вместе со swap-файлом,​ но больше такой swap-файл ​не подключить)). В перспективе предполагается снять часть ​ограничений.\\
  
-  ​touch /swap           ​# создаем пустой файл /swap - COW можно отключить только на пустом файле ​   +С учетом озвученного,​ пока не сняты ограничения,​ swap-файл стоит создавать в отдельном (специально для него созданном под-томе). 
-  chattr +C /swap       ​# отключаем COWа отключение COW блокирует ​и возможность компрессии файла + 
-  ​truncate -s 4G /swap  создаем пустой файл ​размером ​4Gib +Предположим что у нас btrfs на одном устройстве и у нас подходящая версия ядра 5.0+, дальше все довольно просто:​ 
-  mkswap /swap          # создаем внутреннюю разметку в файле для swap-а  + 
-  swapon /swap          # подключаем swap+  btrfs su cr /swap                        # создаем отдельный под-том 
 +  ​touch /swap/swap                          ​# создаем пустой файл /swap - COW можно отключить только на пустом файле ​   
 +  chmod go-r /​swap/​swap ​                    # swap должен иметь права 600, а touch проставляет права 644 
 +  chattr +C /swap/swap                      ​# отключаем COW (сжатие тоже ​отключается при отключении COW) 
 +  ​fallocate ​/swap/swap -l4g                 выделяем место ​под ​файл 4Gib 
 +  mkswap /swap/swap                        ​# создаем внутреннюю разметку в файле для swap-а  
 +  swapon /swap/swap                        ​# подключаем swap 
 + 
 +<note important>​Важно выделять место под swap-файл именно командой fallocate. Если создать пустой файл командой truncate, то он фактически останется пустым т.к. в btrfs используется механика [[https://​ru.wikipedia.org/​wiki/​Разрежённый_файл|sparse files]] и mkswap отработает успешно,​ но swapon сообщит,​ что в файле есть "​дырки",​ т.е. не размеченные на диск области файла.</​note>​
  
 Для автоматического монтирования файла в последующем нужно в /etc/fstab добавить следующую строку:​ Для автоматического монтирования файла в последующем нужно в /etc/fstab добавить следующую строку:​
  
-  /swap none swap swap 0 0+  /swap/swap none swap sw 0 0
  
-До версии 5.0 использование swap-файла на btrfs привадило [[http://​forum.ubuntu.ru/​index.php?​topic=207432.msg2167728#​msg2167728|к разрушению структуры файловой системы]] (отключение COW и компрессии не помогало избежать проблем). Однако можно было создать не очень быстрый и с дополнительными расходами оперативной памяти((что в ситуации с переполнением памяти может привести к не совсем предсказуемым последствиям)) swap-файл через loop-устройство. Давайте рассмотрим пример создания своп-файла этим методом.+До версии 5.0 использование swap-файла на btrfs могло ​привести [[http://​forum.ubuntu.ru/​index.php?​topic=207432.msg2167728#​msg2167728|к разрушению структуры файловой системы]] (отключение COW и компрессии не помогало избежать проблем) ​и поэтому ​драйвер ​не дает ​активировать своп в swap-файле созданном на btrfs. Можно было создать не очень быстрый и с дополнительными расходами оперативной памяти((что в ситуации с переполнением памяти может привести к не совсем предсказуемым последствиям)) swap-файл через loop-устройство. Давайте рассмотрим пример создания своп-файла этим методом.
  
-Несмотря на то, что отключение COW не помогает,​ но для избежания фрагментации swap-файла на HDD (на SSD это не так критично) стоит все-таки отключить COW. Компрессию тоже стоит отключить т.к. это еще сильнее затормозит и без того не быстрое решение.+Несмотря на то, что отключение COW не помогает,​ но для избежания фрагментации swap-файла на HDD (на SSD это не так критично) стоит все-таки отключить COW. Компрессию тоже стоит отключать т.к. это еще сильнее затормозит и без того не быстрое решение.
  
-  touch /swap              # создаем пустой файл /swap - COW можно отключить только на пустом файле +  touch /swap                # создаем пустой файл /swap - COW можно отключить только на пустом файле 
-  chattr +C /swap          # отключаем COWа отключение COW блокирует ​и возможность компрессии файла +  chmod go-r /swap           # swap должен иметь права 600, а touch проставляет права 644 
-  ​truncate -s 4G /swap     ​создаем пустой файл размером 4Gib +  chattr +C /swap            # отключаем COW (сжатие тоже ​отключается при отключении COW) 
-  swapfile=$(losetup -f)   ​# находим первое свободное loop-устройство  +  ​fallocate ​swap -l4g        ​выделяем место ​под ​файл размером 4Gib 
-  losetup $swapfile /swap  # настраиваем доступ к файлу /swap через loop-устройство  +  swapfile=$(losetup -f)     ​# находим первое свободное loop-устройство  
-  mkswap ​ $swapfile ​       # создаем внутреннюю разметку для swap-а на loop-устройстве +  losetup $swapfile /swap    # настраиваем доступ к файлу /swap через loop-устройство  
-  swapon ​ $swapfile ​       # подключаем swap+  mkswap ​ $swapfile ​         # создаем внутреннюю разметку для swap-а на loop-устройстве 
 +  swapon ​ $swapfile ​         # подключаем swap
  
 Для подключения такого swap после перезагрузки добавьте код начиная с swapfile=$(losetup -f) в файл /​etc/​rc.local (до строки exit 0). Для подключения такого swap после перезагрузки добавьте код начиная с swapfile=$(losetup -f) в файл /​etc/​rc.local (до строки exit 0).
 +
 +<note important>​И все же для ядер младше 5.0 предпочтительнее использовать swap на разделе диска.</​note>​
 ======Обслуживание btrfs====== ======Обслуживание btrfs======
 Как и любая другая ФС, btrfs может работать много лет, не требуя какого-то особого обслуживания,​ однако мы озвучим те действия,​ которые полезно периодически проводить для поддержания "​здоровья"​ btrfs. Как и любая другая ФС, btrfs может работать много лет, не требуя какого-то особого обслуживания,​ однако мы озвучим те действия,​ которые полезно периодически проводить для поддержания "​здоровья"​ btrfs.
Строка 988: Строка 1029:
  
 [[https://​btrfs.wiki.kernel.org/​index.php/​Main_Page|Официальная вики]]\\ [[https://​btrfs.wiki.kernel.org/​index.php/​Main_Page|Официальная вики]]\\
-[[https://​btrfs.wiki.kernel.org/​index.php/​Mount_options|Параметры монтирования агл.]]\\+[[https://​btrfs.wiki.kernel.org/​index.php/​Manpage/​btrfs(5)#​MOUNT_OPTIONS|Параметры монтирования агл.]]\\
 [[http://​help.ubuntu.ru/​wiki/​fstab#​btrfs|Перевод параметров]]\\ [[http://​help.ubuntu.ru/​wiki/​fstab#​btrfs|Перевод параметров]]\\
  
 {{tag>​btrfs ext2 ext3 ext4 compression lzo gzip fstab}} {{tag>​btrfs ext2 ext3 ext4 compression lzo gzip fstab}}