Различия
Здесь показаны различия между двумя версиями данной страницы.
Предыдущая версия справа и слева Предыдущая версия Следующая версия | Предыдущая версия | ||
wiki:btrfs [2019/10/23 11:05] [swap файл на btrfs] |
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/Разрежённый_файл|разреженных файлов]]. | * Поддержка [[https://ru.wikipedia.org/wiki/Разрежённый_файл|разреженных файлов]]. | ||
Строка 26: | Строка 26: | ||
* Поддержка ACL. | * Поддержка ACL. | ||
* Защита от потери данных. | * Защита от потери данных. | ||
- | * Выбор хэш-алгоритма (в планах, сейчас используется CRC-32 и изменить это нельзя). | ||
* Поддержка NFS (пока не полная). | * Поддержка NFS (пока не полная). | ||
* Флаги совместимости, необходимые для изменения дискового формата в новых версиях btrfs с сохранением совместимости со старыми. | * Флаги совместимости, необходимые для изменения дискового формата в новых версиях btrfs с сохранением совместимости со старыми. | ||
Строка 92: | Строка 91: | ||
Вот мы и получили в /mnt площадку для экспериментов с btrfs. Можно приступать к изучению возможностей этой файловой системы. | Вот мы и получили в /mnt площадку для экспериментов с btrfs. Можно приступать к изучению возможностей этой файловой системы. | ||
- | ====== Возможности btrfs ======сле окончания записи. | + | |
+ | ======Возможности btrfs====== | ||
<note important>Авторы статьи рекомендуют сначала ознакомится с возможностями btrfs, а уже после этого (со знанием дела) подходить к вопросам по установке системы на btrfs или по использованию btrfs как хранилища данных.</note> | <note important>Авторы статьи рекомендуют сначала ознакомится с возможностями btrfs, а уже после этого (со знанием дела) подходить к вопросам по установке системы на btrfs или по использованию btrfs как хранилища данных.</note> | ||
Строка 106: | Строка 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|снимков]]). | ||
Строка 114: | Строка 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 - это вполне полноценная замена нескольким файловым системам, размещенным на отдельных разделах диска. | ||
Строка 132: | Строка 134: | ||
Удаляется подтом командой | Удаляется подтом командой | ||
btrfs subvolume delete {путь по которому смонтирована btrfs}/{путь и имя удаляемого подтома} | btrfs subvolume delete {путь по которому смонтирована btrfs}/{путь и имя удаляемого подтома} | ||
+ | | ||
+ | В последнних версиях btrfs удалить подтом можно также командой rm -r или rmdir. | ||
+ | С точки зрения файловой системы подтом и каталог различаются только методом создания (ранее различались еще удалением). Во всем остальном подтома не отличаются от каталогов. | ||
+ | Переименовывается подтом обычной командой mv. | ||
- | С точки зрения файловой системы подтом и каталог различаются только методами создания и удаления. Во всем остальном подтома не отличаются от каталогов. | + | <note tip>Несмотря на то, что подтом и каталог не различимы с точки зрения пользователя (если не считать команды создания), для администратора подтом дает значительно больше возможностей, чем каталог. Ведь подтом, по сути, - независимая файловая система, в которой можно настроить отличные параметры от родительского подтома, а также можно установить квоты или делать снимки (т.е. быстрые резервные копии).</note> |
- | К примеру, переименовать подтом можно просто командой mv. | + | |
- | + | ||
- | <note tip>Несмотря на то, что подтом и каталог не различимы с точки зрения пользователя (если не считать команд создания и удаления), для администратора подтом дает значительно больше возможностей, чем каталог. Ведь подтом, по сути, - независимая файловая система, в которой можно настроить отличные параметры от родительского подтома, а также можно установить квоты или делать снимки (т.е. быстрые резервные копии).</note> | + | |
Строка 403: | Строка 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 раза или меньше | ||
Строка 435: | Строка 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 (совместное использование данных в подтомах и снимках, а также дедупликация данных) вообще делают невозможным однозначно определить, какое место на диске занимают данные того или иного отдельно взятого подтома/снимка.\\ | ||
Строка 566: | Строка 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 | ||
Строка 838: | Строка 862: | ||
В состав GRUB входят драйвера btrfs. Однако это очень урезанный драйвер и он не поддерживает запись. А отсутствие записи не позволяет GRUB-у записать служебную переменную recordfail. GRUB проверяет значение этой переменной и если она не сброшена, то обязательно показывается меню загрузки. Каждый раз когда GRUB начинает загружать ОС он устанавливает эту переменную в 1, а сбрасывает ее скрипт который запускается после загрузки системы. | В состав GRUB входят драйвера btrfs. Однако это очень урезанный драйвер и он не поддерживает запись. А отсутствие записи не позволяет GRUB-у записать служебную переменную recordfail. GRUB проверяет значение этой переменной и если она не сброшена, то обязательно показывается меню загрузки. Каждый раз когда GRUB начинает загружать ОС он устанавливает эту переменную в 1, а сбрасывает ее скрипт который запускается после загрузки системы. | ||
- | Т.к. сохранить значение recordfail GRUB на btrfs не может, то он считает, что каждая загрузка происходит после фейла прошлой загрузки (т.е. recordfail=1). И в таком случае меню загрузки показывается 10 секунд. Изменить этот тайм-аут можно изменив в /etc/default/grub значение переменной GRUB_RECORDFAIL_TIMEOUT. После задания разумного таймаута в /etc/default/grub нужно запустить update-grub с правами root-а чтобы пересоздать скрипты загрузки GRUB-а. | + | Т.к. сохранить значение 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> |
+ | |||
+ | Начиная с версии ядра 5.0+ на btrfs можно создать swap-файл, но с некоторыми ограничениями: swap-файл должен располагаться целиком на одном устройстве ((его нельзя будет создать на любом типе хранения кроме single)), создаваться обязательно с отключенным COW и сжатием((На btfs-wiki указано, что отключение COW блокирует возможность архивирования)). Кроме того swap-файл не может попасть в снимок((Если swap-файл смонтирован то невозможно сделать снимок с под-тома где он расположен, отключенный swap-файл дает сделать снимок вместе со swap-файлом, но больше такой swap-файл не подключить)). В перспективе предполагается снять часть ограничений.\\ | ||
+ | |||
+ | С учетом озвученного, пока не сняты ограничения, swap-файл стоит создавать в отдельном (специально для него созданном под-томе). | ||
Предположим что у нас btrfs на одном устройстве и у нас подходящая версия ядра 5.0+, дальше все довольно просто: | Предположим что у нас btrfs на одном устройстве и у нас подходящая версия ядра 5.0+, дальше все довольно просто: | ||
- | touch /swap # создаем пустой файл /swap - COW можно отключить только на пустом файле | + | btrfs su cr /swap # создаем отдельный под-том |
- | chmod go-r /swap # swap должен иметь права 600, а touch проставляет права 644 | + | touch /swap/swap # создаем пустой файл /swap - COW можно отключить только на пустом файле |
- | chattr +C /swap # отключаем COW | + | chmod go-r /swap/swap # swap должен иметь права 600, а touch проставляет права 644 |
- | chattr -c /swap # отключаем компрессию файла | + | chattr +C /swap/swap # отключаем COW (сжатие тоже отключается при отключении COW) |
- | fallocate swap -l4g # выделяем место под файл 4Gib | + | fallocate /swap/swap -l4g # выделяем место под файл 4Gib |
- | mkswap /swap # создаем внутреннюю разметку в файле для swap-а | + | mkswap /swap/swap # создаем внутреннюю разметку в файле для swap-а |
- | swapon /swap # подключаем swap | + | swapon /swap/swap # подключаем swap |
<note important>Важно выделять место под swap-файл именно командой fallocate. Если создать пустой файл командой truncate, то он фактически останется пустым т.к. в btrfs используется механика [[https://ru.wikipedia.org/wiki/Разрежённый_файл|sparse files]] и mkswap отработает успешно, но swapon сообщит, что в файле есть "дырки", т.е. не размеченные на диск области файла.</note> | <note important>Важно выделять место под swap-файл именно командой fallocate. Если создать пустой файл командой truncate, то он фактически останется пустым т.к. в btrfs используется механика [[https://ru.wikipedia.org/wiki/Разрежённый_файл|sparse files]] и mkswap отработает успешно, но swapon сообщит, что в файле есть "дырки", т.е. не размеченные на диск области файла.</note> | ||
Строка 857: | Строка 885: | ||
Для автоматического монтирования файла в последующем нужно в /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-файле созданном на btrfs. Можно было создать не очень быстрый и с дополнительными расходами оперативной памяти((что в ситуации с переполнением памяти может привести к не совсем предсказуемым последствиям)) 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 можно отключить только на пустом файле | ||
chmod go-r /swap # swap должен иметь права 600, а touch проставляет права 644 | chmod go-r /swap # swap должен иметь права 600, а touch проставляет права 644 | ||
- | chattr +C /swap # отключаем COW | + | chattr +C /swap # отключаем COW (сжатие тоже отключается при отключении COW) |
- | chattr -c /swap # отключаем компрессию файла | + | |
fallocate swap -l4g # выделяем место под файл размером 4Gib | fallocate swap -l4g # выделяем место под файл размером 4Gib | ||
swapfile=$(losetup -f) # находим первое свободное loop-устройство | swapfile=$(losetup -f) # находим первое свободное loop-устройство | ||
Строка 1002: | Строка 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}} |