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

Различия

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

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

Предыдущая версия справа и слева Предыдущая версия
Следующая версия
Предыдущая версия
wiki:btrfs [2017/05/10 15:45]
[Восстановление раздела btrfs]
wiki:btrfs [2021/06/04 11:08] (текущий)
[swap файл на btrfs]
Строка 1: Строка 1:
 ====== btrfs ====== ====== btrfs ======
 ======Глоссарий====== ======Глоссарий======
-chunk - кусок файловой системы,​ btrfs размечает не диск, а chunk'​и внутри раздела. Причем разметка выполняется по мере необходимости. Т.о. на разделе,​ где только что создана btrfs, большая часть пространства остается не размеченной. \\ +chunk - кусок файловой системы,​ btrfs размечает не диск, а chunk'​и внутри раздела. Причем разметка выполняется по мере необходимости. Т.о. на разделе,​ где только что создана btrfs, большая часть пространства раздела остается не размеченной. \\ 
-leaf - леана, ветка метаданных,​ inode, в её пишутся метаданные описывающие содержание chunk'​ов и мелкие файлы.\\+leaf - лиана, ветка метаданных,​ inode, в неё пишутся метаданные описывающие содержание chunk'​ов и мелкие файлы.\\
 лист - кусок чанка или сам чанк, туда пишутся данные.\\ лист - кусок чанка или сам чанк, туда пишутся данные.\\
  
Строка 9: Строка 9:
  
   * Проверка целостности без размонтирования;​   * Проверка целостности без размонтирования;​
-  * Доступные для записи снимки (writeable snapshots);+  * [[https://​help.ubuntu.ru/​wiki/​btrfs#​%D1%81%D0%BD%D0%B8%D0%BC%D0%BA%D0%B8|Доступные для записи снимки]] (writeable snapshots);
   * Динамическое выделение индексных дескрипторов (динамические иноды, dynamic inodes);   * Динамическое выделение индексных дескрипторов (динамические иноды, dynamic inodes);
   * Интеграция с device-mapper;​   * Интеграция с device-mapper;​
-  * Поддержка сложных многодисковых конфигураций --- RAID уровней 0, 1, 5, 6 и 10 (реализовано),​ а также реализация различных политик избыточности на уровне объектов ФС --- то есть возможно назначить,​ к примеру,​ зеркалирование для какого-либо каталога или файла (в планах). ​  +  * легкое добавление/​удаление/​замена устройства хранения (диск целиком или раздел) на смонтированной ФС. 
-  * Сжатие (lza, zlib - реализовано, zl4 - в планах)+  * [[https://​help.ubuntu.ru/​wiki/​btrfs#​btrfs_%D0%BD%D0%B0_%D0%BD%D0%B5%D1%81%D0%BA%D0%BE%D0%BB%D1%8C%D0%BA%D0%B8%D1%85_%D1%83%D1%81%D1%82%D1%80%D0%BE%D0%B9%D1%81%D1%82%D0%B2%D0%B0%D1%85|Поддержка сложных многодисковых конфигураций]] --- RAID уровней 0, 1, 5, 6 и 10 (реализовано, но 5 и 6 пока не рекомендуются к промышленному использованию), а также реализация различных политик избыточности на уровне объектов ФС --- то есть возможно назначить,​ к примеру,​ зеркалирование для какого-либо каталога или файла (в планах). ​  
-  * Подтома (subvolumes);​ +  * [[https://​help.ubuntu.ru/​wiki/​btrfs#​%D1%81%D0%B6%D0%B0%D1%82%D0%B8%D0%B5%D1%83%D0%BF%D0%B0%D0%BA%D0%BE%D0%B2%D0%BA%D0%B0_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85|Сжатие ​файлов]]: ​(zlib, lzо, zstd (c v4.14) ​- реализовано;​ 
-  * Эффективное клонирование файловой системы и создание инкрементальных архивов;​ +  * [[https://​help.ubuntu.ru/​wiki/​btrfs#​%D0%BF%D0%BE%D0%B4%D1%82%D0%BE%D0%BC%D0%B0|Подтома]] (subvolumes);​ 
-  * Дефрагментация смонтированной файловой системы. +  * [[https://​help.ubuntu.ru/​wiki/​btrfs#​%D0%B8%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D1%81%D0%BD%D0%B8%D0%BC%D0%BA%D0%BE%D0%B2_%D0%B4%D0%BB%D1%8F_%D1%81%D0%BE%D0%B7%D0%B4%D0%B0%D0%BD%D0%B8%D0%B8_%D1%82%D0%BE%D1%87%D0%BA%D0%B8_%D0%BE%D1%82%D0%BA%D0%B0%D1%82%D0%B0|Эффективное клонирование файловой системы]] и [[https://​help.ubuntu.ru/​wiki/​btrfs#​%D0%B8%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D1%81%D0%BD%D0%B8%D0%BC%D0%BA%D0%BE%D0%B2_%D0%B4%D0%BB%D1%8F_%D0%B8%D0%BD%D0%BA%D1%80%D0%B5%D0%BC%D0%B5%D0%BD%D1%82%D0%B0%D0%BB%D1%8C%D0%BD%D0%BE%D0%B3%D0%BE_%D1%80%D0%B5%D0%B7%D0%B5%D1%80%D0%B2%D0%BD%D0%BE%D0%B3%D0%BE_%D0%BA%D0%BE%D0%BF%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F|создание инкрементальных архивов]]
-  * Copy-on-write (CoW) журналирование. +  * [[https://​help.ubuntu.ru/​wiki/​btrfs#​%D0%B4%D0%B5%D1%84%D1%80%D0%B0%D0%B3%D0%BC%D0%B5%D0%BD%D1%82%D0%B0%D1%86%D0%B8%D1%8F|Дефрагментация]] смонтированной файловой системы. 
-  * Лимиты (отдельно для каждого подтома или группы подтомов,​ по фактически занимаемому месту или по "​официальному"​) +  * [[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%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.
   * Защита от потери данных.   * Защита от потери данных.
-  * Выбор хэш-алгоритма. 
   * Поддержка NFS (пока не полная).   * Поддержка NFS (пока не полная).
   * Флаги совместимости,​ необходимые для изменения дискового формата в новых версиях btrfs с сохранением совместимости со старыми.   * Флаги совместимости,​ необходимые для изменения дискового формата в новых версиях btrfs с сохранением совместимости со старыми.
Строка 32: Строка 33:
   * Диски для горячей замены,​ поддержка которых появилась и в ZFS (в планах).   * Диски для горячей замены,​ поддержка которых появилась и в ZFS (в планах).
   * Offline дедубликация (в примонтированном виде, но после окончания записи - ядро 3.12 и новее) В перспективе - дедубликацию можно будет включить сразу при записи файла.   * Offline дедубликация (в примонтированном виде, но после окончания записи - ядро 3.12 и новее) В перспективе - дедубликацию можно будет включить сразу при записи файла.
 +  * [[https://​help.ubuntu.ru/​wiki/​btrfs#​swap_%D1%84%D0%B0%D0%B9%D0%BB_%D0%BD%D0%B0_btrfs|Поддержка swap-файлов]] (с версии 5.0, ранее можно было сделать через loop-устройство). Но есть ограничения:​ на swap-файле должны быть отключены COW и сжатие,​ файл при этом должен находится на одном устройстве (не RAID) и он не может попасть в снимок. В перспективе часть ограничений предполагается снять.
 ======Текущий статус файловой системы btrfs====== ======Текущий статус файловой системы btrfs======
-Формат представления btrfs на диске является стабильным - т.е. ​он зафиксирован и правки в него не вносятся (будут вносится только в самом крайнем случае). Т.е. вы можете смело обновлять программное обеспечения для работы с btrfs и не опасаться,​ что данные на диске будут хранится в формате не совместимом с драйверами.+Формат представления btrfs на диске является стабильным - он зафиксирован и правки в него не вносятся (будут вноситься только в самом крайнем случае). Т.е. вы можете смело обновлять программное обеспечения для работы с btrfs и не опасаться,​ что данные на диске будут храниться в формате не совместимом с драйверами.
  
-Весь код необходимый для функционирования btrfs (драйвер файловой системы btrfs) включен в ядро Linux, и начиная с версии 4.3.1 (16.11.2015) btrfs имеет статус стабильной. Ранее, начиная с версии 2.6.29-rc драйвер btrfs входили в состав ядра в статусе экспериментального.+Весь коднеобходимый для функционирования btrfs (драйвер файловой системы btrfs)включен в ядро Linux, и начиная с версии 4.3.1 (16.11.2015) btrfs имеет статус стабильной. Ранее, начиная с версии 2.6.29-rcдрайвера btrfs входили в состав ядра в статусе экспериментального.
  
-Код утилит необходимых для обслуживания и настройки btrfs поставляется отдельным пакетом btrfs-tools. Его версии имеют нумерацию соответствующую версии ядра Linux. Вы можете использовать более новые версии btrfs-tools нежели установленное у вас ядро, однако использовать версию btrfs-tools меньше чем версия установленного ​у вас ​ядра ​не рекомендуется.+Код утилитнеобходимых для обслуживания и настройки btrfsпоставляется отдельным пакетом btrfs-tools. Его версии имеют нумерациюсоответствующую версии ядра Linux. Вы можете использовать более новые версии btrfs-toolsнежели установленное у вас ядро, однако использовать версию btrfs-tools меньшечем версия установленного ядране рекомендуется.
  
 =====Поддержка btrfs в ядре Linux===== =====Поддержка btrfs в ядре Linux=====
-Код драйвера btrfs (включенного в ядро) активно обновляется новым функционалом. Поэтому,​ если вы хотите работать самыми последними функциями добавленными в btrfs, то используйте наиболее свежие ядра из доступных (и желательно не ниже 4.3.1).+Код драйвера btrfs (включенного в ядро) активно обновляется новым функционалом. Поэтому,​ если вы хотите работать ​с самыми последними функциямидобавленными в btrfs, то используйте наиболее свежие ядра из доступных (и желательно не ниже 4.3.1).
  
 =====Утилиты для работы с btrfs - btrfs-tools===== =====Утилиты для работы с btrfs - btrfs-tools=====
 ====Стабильная версия btrfs-tools==== ====Стабильная версия btrfs-tools====
-Стабильная версия пакета с утилитами для поддержки btrfs доступна в стандартном репозитории Ubuntu. Если вы при установке системы выберете один из разделов как раздел btrfs, то пакет btrfs-tools будет установлен во время инсталляции. В уже установленной системе (без btrfs-разделов) установить утилиты для поддержки btrfs можно выполнив команду:​+Стабильная версия пакета с утилитами для поддержки btrfs доступна в стандартном репозитории Ubuntu. Если вы при установке системы выберете один из разделов как раздел btrfs, то пакет btrfs-tools будет установлен во время инсталляции. В уже установленной системе (без btrfs-разделов) установить утилиты для поддержки btrfs можновыполнив команду:​
 <​code>​sudo apt-get install btrfs-tools</​code>​ <​code>​sudo apt-get install btrfs-tools</​code>​
  
-Вы можете также скачать и установить наиболее свежуюнестабильную версиюили более свежую стабильную версию из [[https://​launchpad.net/​btrfs-tools|репозитория на launchpad]] Там есть и исходники,​ и бинарные .deb пакеты собранные майнтейнерами Ubuntu).+Вы можете также скачать и установить наиболее свежую нестабильную версию или более свежую стабильную версию из [[https://​launchpad.net/​btrfs-tools|репозитория на launchpad]] Там есть и исходники,​ и бинарные .deb пакетысобранные майнтейнерами Ubuntu.
  
 ==== Самая новейшая нестабильная версия btrfs-tools === ==== Самая новейшая нестабильная версия btrfs-tools ===
-Если вам нужны самые последние доработки в btrfs, то стоит устанавливать нестабильную версию непосредственно из репозиория где ведется разработка btrfs-progs.+Если вам нужны самые последние доработки в btrfs, то стоит устанавливать нестабильную версию непосредственно из репозиториягде ведется разработка btrfs-progs.
 Для получения последней версии btrfs-progs можно использовать следующий скрипт:​ Для получения последней версии btrfs-progs можно использовать следующий скрипт:​
  
Строка 60: Строка 61:
   sudo make install   sudo make install
  
-Он автоматически скачивает последнюю доступную версию,​ компилирует и устанавливает в систему (в обход пакетной системы,​ что ​является ненадёжным решением).+Он автоматически скачивает последнюю доступную версию,​ компилирует и устанавливает в систему (в обход пакетной системы,​ что ​означает отсутствие автоматических ​ обновлений).
  
-<note important>​В ​пакете btrfs-tools (не важно как вы его ​ставили) есть один недочет:​ утилита fsck.btrfs ​почему-то ​располагается в /bin, а не в /sbin, как все остальные утилиты fsck.*. Это ​может ​вызывать предупреждение при обновлении initramfs о том, что утилита fsck.btrfs не найдена и не будет добавлена в initramfs (т.е. проверка целостности btrfs не сможет быть выполнена на этапе ранней инициализации ядра). ​+<note important>​В некоторых старых ​версиях пакета btrfs-tools ​есть один недочет:​ утилита fsck.btrfs располагается в /bin, а не в /sbin, как все остальные утилиты fsck.*. Это вызывает предупреждение при обновлении initramfs о том, что утилита fsck.btrfs не найдена и не будет добавлена в initramfs (т.е. проверка целостности btrfs не сможет быть выполнена на этапе ранней инициализации ядра). ​
  
-Решить эту проблему можно создав символьную ссылку в /bin, указывающую на /​sbin/​fsck.btrfs:​+Исправить этот недочет просто: ​создайте ​символьную ссылку в /bin, указывающую на /​sbin/​fsck.btrfs:​
   sudo ln -s /​bin/​fsck.btrfs /​sbin/​fsck.btrfs   sudo ln -s /​bin/​fsck.btrfs /​sbin/​fsck.btrfs
 </​note>​ </​note>​
        
 ======Использование btrfs====== ======Использование btrfs======
-Как уже было [[http://​help.ubuntu.ru/​wiki/​btrfs#​текущий_статус_файловой_системы_btrfs|сказано]],​ поддержка btrfs уже включена в ядро Linux и если у вас ядро v.4.3.1 или более новое то вы можете смело использовать btrfs. В каждой новой версии ядра добавлялись и по сей день добавляются довольно значительные изменения. Поэтому,​ чем новее у вас ядро, тем более проработанная версия btrfs у вас будет. ​+Как уже было [[http://​help.ubuntu.ru/​wiki/​btrfs#​текущий_статус_файловой_системы_btrfs|сказано]],​ поддержка btrfs уже включена в ядро Linuxи если у вас ядро v.4.3.1 или более новоето вы можете смело использовать btrfs. В каждой новой версии ядра добавлялись и по сей день добавляются довольно значительные изменения. Поэтому,​ чем новее у вас ядро, тем более проработанная версия btrfs у вас будет. ​
  
 <note important>​В этой статье мы рассмотрим возможности и особенности использования btrfs. Но не стоит пытаться сделать все, что описано в этой статье прямо на файловой системе,​ где стоит ваша система. Рядовому пользователю вообще нужен минимум из того широчайшего набора возможностей,​ что предоставляет btrfs. <note important>​В этой статье мы рассмотрим возможности и особенности использования btrfs. Но не стоит пытаться сделать все, что описано в этой статье прямо на файловой системе,​ где стоит ваша система. Рядовому пользователю вообще нужен минимум из того широчайшего набора возможностей,​ что предоставляет btrfs.
Строка 90: Строка 91:
  
 Вот мы и получили в /mnt площадку для экспериментов с btrfs. Можно приступать к изучению возможностей этой файловой системы. Вот мы и получили в /mnt площадку для экспериментов с btrfs. Можно приступать к изучению возможностей этой файловой системы.
-====== Возможности btrfs ======+ 
 +======Возможности btrfs======
 <note important>​Авторы статьи рекомендуют сначала ознакомится с возможностями btrfs, а уже после этого (со знанием дела) подходить к вопросам по установке системы на btrfs или по использованию btrfs как хранилища данных.</​note>​ <note important>​Авторы статьи рекомендуют сначала ознакомится с возможностями btrfs, а уже после этого (со знанием дела) подходить к вопросам по установке системы на btrfs или по использованию btrfs как хранилища данных.</​note>​
 +
 +===== COW - Copy On Write =====
 +
 +COW - Copy On Write - Копирование при записи - одна из ключевых особенностей btrfs. Суть этого механизма в том, что любая запись в существующий файл не перезаписывает его содержимое,​ а создает новые структуры данных,​ которые и будут хранить данные файла после окончания записи (просто по окончанию записи iNode файла будет ссылаться на новую структуру). Оставшиеся после записи блоки файла с данными до начала записи могут быть освобождены или, если на них продолжает ссылаться другой iNode, остаться занятыми первичной версией файла.\\ ​
 +Если же запись по какой-то причине не завершится,​ то файл без каких либо дополнительных действий сохранит свое содержимое до начала записи,​ нужно будет только освободить те структуры,​ в которые не удалась запись.
 +
 +При таком подходе журналирование данных файла происходит само собой. Точно так же можно поступать и с метаданными. Таким образом повышается производительность не только на запись,​ но и откат после неуспешной записи производится практически мгновенно.
 +
 +Создать "​теневую копию"​ данных (т.е. сделать дополнительную ссылку на те же данные на которые ссылается iNode существующего файла) можно командой:​
 +
 +  cp --reflink <​оригинальный файл>​ <​теневая копия>​
 +  ​
 +Оба файла после такой команды будут хранить свое содержимое в одном месте (почти как hard-link), но как только в оригинальный файл будут записаны новые данные - он изменится,​ а теневая копия - сохранит оригинальное содержимое. Фактически,​ такое копирование - это просто создание новой записи в каталоге файлов. Копирования данных не происходит. А значит даже очень большой файл копируется (а точнее клонируется) практически мгновенно.  ​
 +
 +Используя рекурсивное копирование (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|снимков]]).
 +
 +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, вы теряете быстрое журналирование данных.
 ===== Подтома ===== ===== Подтома =====
-Внутри файловой системы btrfs можно создать несколько выделенных файловых систем - подтомов. Свободное пространство делится между всеми таким подтомами,​ а также могут совместно использоваться одинаковые данные (при выполнении дедубликации или при использовании снимков). При необходимости на подтома можно установить квоты. Так же у подтомов могут быть настроены разные механизмы сжатия и некоторые другие свойства. Т.о. подтома btrfs - это вполне полноценная замена нескольким файловым системам размещенным на отдельных разделах диска. ​+Внутри файловой системы btrfs можно создать несколько выделенных файловых систем - подтомов. Свободное пространство делится между всеми такими подтомами,​ а также могут совместно использоваться одинаковые данные (при выполнении ​копирования с опцией --reflink, ​дедубликации или при использовании снимков). При необходимости на подтома можно установить квоты ​(ограничить размер). Так же у подтомов могут быть настроены разные механизмы сжатия и некоторые другие свойства. Т.о. подтома btrfs - это вполне полноценная замена нескольким файловым системамразмещенным на отдельных разделах диска. ​
  
-Преимущество от использования подтомов на HDD (по сравнению с разделами) заключается ​еще и в том, что btrfs начинает заполнять предоставленный ей объем на диске с начала и в одной и той же зоне располагаются информация сразу всех подтомов. Т.о. головкам диска не нужно бегать по всему диску (как они бы бегали между разделами),​ когда нужны данные из разных разделов.+Дополнительное преимущество от использования подтомов на HDD-диске ​(по сравнению с разделами) заключается в том, что btrfs начинает заполнять предоставленный ей объем на диске с началаи в одной и той же зоне располагается информация сразу всех подтомов. Т.о. головкам диска не нужно бегать по всему диску (как они бы бегали между разделами),​ когда нужны данные из разных разделов.
  
-<note important>​Обратите внимание: ​Стандартный установщик Ubuntu, при выборе установки корневого раздела на btrfsбез выделения /home на отдельный раздел,​ автоматически создаст два подтома:​ '​@'​ - для корня и '​@home'​ для домашнего каталога.</​note>​+<note important>​Обратите внимание: ​стандартный установщик Ubuntu, при выборе установки корневого раздела на btrfs без выделения /home на отдельный раздел,​ автоматически создаст два подтома:​ '​@'​ - для корня и '​@home'​ для домашнего каталога.</​note>​
  
-Подтома можно создавать,​ удалять и просматривать их списоки т.п. Все возможности по работе с подтомами можно изучить по:+Подтома можно создавать,​ удалять и просматривать их список и т.п. Все возможности по работе с подтомами можно изучить по:
   man btrfs-subvolume   man btrfs-subvolume
  
Строка 108: Строка 133:
  
 Удаляется подтом командой ​ Удаляется подтом командой ​
-  btrfs subvolume delete {путь по которому смонтирована btrfs}/​{путь и имя создаваемого подтома}+  btrfs subvolume delete {путь по которому смонтирована btrfs}/​{путь и имя ​удаляемого подтома} 
 +   
 +В последнних версиях btrfs удалить подтом можно также командой rm -r или rmdir. ​   
 +С точки ​зрения файловой системы подтом и каталог различаются только методом создания (ранее различались еще удалением). Во всем остальном подтома не отличаются от каталогов. 
 +Переименовывается подтом обычной командой mv. 
 + 
 +<note tip>​Несмотря на то, что подтом и каталог не различимы с точки зрения пользователя (если не считать команды создания),​ для администратора ​подтом ​дает значительно больше возможностей,​ чем каталог. Ведь подтом,​ по сути, - независимая файловая система,​ в которой можно настроить отличные параметры от родительского подтома,​ а также можно установить квоты или делать снимки (т.е. быстрые резервные копии).</​note>​
  
-С точки зрения файловой системы подтом и каталог различаются только методами создания и удаления. Во всем остальном подтома не отличаются от каталогов. 
-К примеру,​ переименовать подтом можно просто командой mv. 
  
-<note tip>Несмотря на то, что подтом ​и каталог не различимы с точки зрения пользователя (если не считать ​команд создания и удаления), для ​администратора ​подтом ​дает значительно больше возможностей чем каталог. Ведь подтом, по сути, - независимая файловая системав которой можно настроить отличные параметры от родительского ​подтома, а также можно установить квоты или ​делать снимки (т.е. быстрые резервные копии).</​note>​+<note tip>Обратите внимание: ​подтома ​могут создаваться на любом уровне вложенности, причем не только внутри другого ​подтома, но и внутри ​любого вложенного каталога. Например, может ​существовать ​такой путь: <​root>/​svol1/​dirA/​svol5/​file - тут файл file находится внутри подтома ​svol5, который размещен в каталоге ​dirA подтома svol1.  
 +Причем вам ​не нужно ​заботиться о том, что бы вся структура вложенных подтомов была правильно смонтирована внутри ​подтома верхнего уровня - монтируете подтом ​верхнего уровня и все его вложенные подтома уже сразу будут на месте.</​note>​
  
 +Если необходимо,​ то любой подтом (даже уже смонтированный командой mount или смонтированный внутри другого смонтированного подтома) можно смонтировать еще раз в другое место. Это кардинально отличает подтома btrfs от большинства других файловых систем (обычно файловую систему можно смонтировать только один раз). ​
  
-<note tip>​Обратите внимание: Подтома ​могут создаваться ​на любом уровне вложенности, причем не только внутри другого ​подтома, но и внутри ​любого вложенного каталога. Например может ​существовать такой путь: <​root>/​svol1/​dirA/​svol5/​file - тут файл file находится внутри подтома subvol5, который размещен в каталоге dirA подтома svol1.</​note>​+Таким образом, подтома ​- чрезвычайно гибкий инструмент для управления системой ​хранения 
  
 Посмотреть список подтомов можно командой:​ Посмотреть список подтомов можно командой:​
Строка 125: Строка 156:
   ID 258 gen 7415 top level 5 path @home   ID 258 gen 7415 top level 5 path @home
  
-Обратите внимание на то, что у обоих подтомов указан родительский том 5 - это корневой подтом (он есть, но не показывается в выводе btrfs subvolume list), и именно он будет смонтирован при монтировании раздела диска, если явно не указать ​указать ​какой подтом нужно монтировать. При этом подтома (@ и @home) будут видны как каталоги. Пример (раздел диска /dev/sda2 содержит btrfs):+Обратите внимание на то, что у обоих подтомов указан родительский том 5 - это корневой подтом (он есть, но не показывается в выводе btrfs subvolume list), и именно он будет смонтирован при монтировании раздела диска, если явно не указатькакой подтом нужно монтировать. При этом подтома (@ и @home) будут видны как каталоги. Пример (раздел диска /dev/sda2 содержит btrfs):
  
   mount /dev/sda2 /mnt   mount /dev/sda2 /mnt
Строка 131: Строка 162:
   @   @home   @   @home
  
-Что бы получить в точке монтирования ФС конкретный подтом нужно в опциях монтирования указать имя (или ID) подтома,​ который нужно монтировать. Пример:​+Что бы получить в точке монтирования ФС конкретный подтомнужно в опциях монтирования указать имя (или ID) подтома,​ который нужно монтировать. Пример:​
  
-  mount -o subvol=@ /dev/sda2 /mnt+  mount -o subvol=@ /dev/sda2 /mnt     # или -o subvolid=257 - если монтировать по ID подтома.
   ls /mnt   ls /mnt
   bin    dev   ​initrd.img ​     lib64  opt   ​run ​  ​sys ​ var   bin    dev   ​initrd.img ​     lib64  opt   ​run ​  ​sys ​ var
Строка 139: Строка 170:
   cdrom  home  lib             ​mnt ​   root  srv   ​usr ​ vmlinuz.old   cdrom  home  lib             ​mnt ​   root  srv   ​usr ​ vmlinuz.old
  
-Именно так прописывает монтирование подразделов стандартный установщик в [[manual:​fstab|fstab]]. Пример строк ​[[manual:fstab|fstab]] ​которые обычно создает установщик:​+Именно так прописывает монтирование подразделов стандартный установщик в [[wiki:​fstab|fstab]]. Пример строк fstabкоторые обычно создает установщик:​
   UUID=0260463a-1468-422b-8bbb-f80e98e34001 /   btrfs subvol=@ ​      ​1 ​     1   UUID=0260463a-1468-422b-8bbb-f80e98e34001 /   btrfs subvol=@ ​      ​1 ​     1
   UUID=0260463a-1468-422b-8bbb-f80e98e34001 /home   btrfs subvol=@home 0       2   UUID=0260463a-1468-422b-8bbb-f80e98e34001 /home   btrfs subvol=@home 0       2
  
-Для того, что бы ядро смогло смонтировать корневую ФС системы, расположенную в подтоме btrfs, ядру передается указание на нужный подтом в параметре rootflags. Все нужные опции в стандартной установке Ubuntu проделывают скрипты установки и настройки менеджера загрузки GRUB. Пример того как может выглядеть строка загрузки ядра:+Для того, чтобы ядро смогло смонтировать корневую ФС, расположенную в подтоме btrfs, ядру передается указание на нужный подтом в параметре rootflags. Все нужные опции в стандартной установке Ubuntu проделывают скрипты установки и настройки менеджера загрузки GRUB. Пример тогокак может выглядеть строка загрузки ядра:
  
   vmlinuz-3.19.0-51-generic root=UUID=0260463a-1468-422b-8bbb-f80e98e34001 ro quiet rootflags=subvol=@   vmlinuz-3.19.0-51-generic root=UUID=0260463a-1468-422b-8bbb-f80e98e34001 ro quiet rootflags=subvol=@
  
-Когда раздел с btrfs монтируется без указания подтома,​ то монтируется подтом по умолчанию. Стандартноэто ​служебный подтом (ID=5). Это поведение можно изменить,​ т.е. указать другой подтом как подтом по умолчанию (тот, который монтируется без указания подтома).+Когда раздел с btrfs монтируется без указания подтома,​ то монтируется подтом по умолчанию. Стандартно это служебный подтом (ID=5). Это поведение можно изменить,​ т.е. указать другой подтом как подтом по умолчанию (тот, который монтируется без указания подтома).
 Поменять подтом по умолчанию можно командой:​ Поменять подтом по умолчанию можно командой:​
   btrfs subvolume set-default {ID подраздела} {путь куда смонтирован один из подтомов BTRFS}   btrfs subvolume set-default {ID подраздела} {путь куда смонтирован один из подтомов BTRFS}
  
-<​note>​Изменение подтома по умолчанию ​вовсе не отменяет возможность монтировать подтом указывая его имя.</​note>​ +<​note>​Изменение подтома по умолчанию вовсе не отменяет возможность монтировать подтомуказывая его имя.</​note>​ 
-<note important>​Абсолютное большинство инструкций для работы с подтомами и снимками написаны исходя из того что подтом по умолчанию - это подтом с ID=5. +<note important>​Абсолютное большинство инструкций для работы с подтомами и снимками, которые вы можете найти в этой статье или в других статьях в интернете, ​написаны исходя из тогочто подтом по умолчанию - это подтом с ID=5. 
 Поэтому не меняйте подтом по умолчанию без особой нужды, а если вы изменили подтом по умолчанию,​ то учитывайте это. Не забывайте при монтировании корневого подтома btrfs указывать опцию **-o subvol=/** или **-o subvolid=5**.</​note>​ Поэтому не меняйте подтом по умолчанию без особой нужды, а если вы изменили подтом по умолчанию,​ то учитывайте это. Не забывайте при монтировании корневого подтома btrfs указывать опцию **-o subvol=/** или **-o subvolid=5**.</​note>​
  
Строка 167: Строка 198:
   btrfs subvolume snapshot [-r] <​подтом с которого делается снимок>​ <​путь и имя снимка>​   btrfs subvolume snapshot [-r] <​подтом с которого делается снимок>​ <​путь и имя снимка>​
  
-В момент создания снимка, в снимке ​запоминается ​состояние (версияметаданных оригинального подтома,​ все дальнейшие изменения,​ происходящие в подтоме,​ (а также в снимке) выполняются по алгоритму Copy On Write. Таким образом на диске все те данные,​ которые в томе и снимке не изменялись хранятся в одной ​общей структуре данных, а все новые и перезаписанные данные хранятся в независимых,​ разных структурах (у оригинального подтома они свои и у снимка - свои собственные).+В момент создания снимка создается ​"теневая" копия метаданных оригинального подтома ​(inode снимка содержит копии ссылок из inode оригинального подтома), все дальнейшие изменения,​ происходящие в подтоме,​ (а также в снимке) выполняются по [[https://​help.ubuntu.ru/​wiki/​btrfs#​cow_-_copy_on_write|алгоритму Copy On Write]]. Таким образом на диске все те метаданные и данные,​ которые в томе и снимке не изменялись хранятся в общем месте, а все новые и перезаписанные ​данные и метаданные хранятся в независимых,​ разных структурах (у оригинального подтома они свои и у снимка - свои собственные).
  
-То, что снимки работают в режиме RW полностью размывает различие между снимком и подтомом. Снимок,​ представляет собой точно такую же отдельную ФС как и подтом. ​Эта особенность нашла ​свое отражение и в работе утилит:​ после ​создания, все дальнейшие манипуляции со снимком выполняются теми же командами, которые используются для работы с подтомами.+То, что снимки работают в режиме RW полностью размывает различие между снимком и подтомом. Снимок,​ представляет собой точно такую же отдельную ФС как и подтом. ​Фактически создание ​снимка - это создание ​тома, только в отличии от btrfs subvolume cereate, ​создающего пустой подтом, btrfs subvolume snapshot ​создает новый подтом ​как копию/клон ранее существовавшего  ​
  
 Посмотреть какие снимки были ранее сделаны с данного подтома можно в выводе команды: ​ Посмотреть какие снимки были ранее сделаны с данного подтома можно в выводе команды: ​
Строка 219: Строка 250:
 <​note>​Собственно в виде send | receive кажется,​ что мы просто создали снимок,​ однако это не так. То, что подготавливает send эффективно сжимается для того, что бы было удобно передавать на удаленную систему (receive - распаковывает). А кроме того снимок можно сделать только внутри одной файловой системы btrfs, а send/​receive позволяет перенести копию подтома из одной ФС в другую,​ независимую ФС (возможно на другой машине). </​note>​ <​note>​Собственно в виде send | receive кажется,​ что мы просто создали снимок,​ однако это не так. То, что подготавливает send эффективно сжимается для того, что бы было удобно передавать на удаленную систему (receive - распаковывает). А кроме того снимок можно сделать только внутри одной файловой системы btrfs, а send/​receive позволяет перенести копию подтома из одной ФС в другую,​ независимую ФС (возможно на другой машине). </​note>​
 Пример резервного копирования подтома /home в другую файловую систему btrfs, которая смонтирована в /other: Пример резервного копирования подтома /home в другую файловую систему btrfs, которая смонтирована в /other:
-  btrfs subvolume snapshot -r /home /home/​BACKUP ​             # создаем read-only снимок - send требует,​ что бы отправляемый снимок был read-only+  btrfs subvolume snapshot -r /home /home_BACKUP ​             # создаем read-only снимок - send требует,​ что бы отправляемый снимок был read-only
   sync                                                        # сбрасываем все из кэша на диск   sync                                                        # сбрасываем все из кэша на диск
-  btrfs send /home/​BACKUP ​| btrfs receive /​other/ ​            # передаем и получаем данные +  btrfs send /home_BACKUP ​| btrfs receive /​other/ ​            # передаем и получаем данные 
-В /other/BACKUP ​мы получили резервную копию. Снимок /home/​BACKUP ​пока нам не нужен, но он потребуется для следующих шагов.+В /other/home_BACKUP ​мы получили резервную копию. Снимок /home_BACKUP ​пока нам не нужен, но он потребуется для следующих шагов.
  
-Если каждый раз переносить в резервную копию весь объем данных,​ то это будет каждый раз требовать передачи большого объема данных (даже несмотря на упаковку). Когда резервные копии хранятся на сетевом устройстве или в облаке,​ то передача больших объемов потребует и значительного времени и может даже стоить дополнительных денег (за трафик). Решение этой проблемы - инкрементальные резервные копии: одна копия (базовая) передается полностью,​ а далее передаются только те данные,​ которые были изменены. Для создания инкрементальных резервных копий нам и потребуется снимок /home/​BACKUP ​- базовая копия.+Если каждый раз переносить в резервную копию весь объем данных,​ то это будет каждый раз требовать передачи большого объема данных (даже несмотря на упаковку). Когда резервные копии хранятся на сетевом устройстве или в облаке,​ то передача больших объемов потребует и значительного времени и может даже стоить дополнительных денег (за трафик). Решение этой проблемы - инкрементальные резервные копии: одна копия (базовая) передается полностью,​ а далее передаются только те данные,​ которые были изменены. Для создания инкрементальных резервных копий нам и потребуется снимок /home_BACKUP ​- базовая копия.
  
 Для создания инкрементальной резервной копии потребуется новый read-only снимок со свежими данными:​ Для создания инкрементальной резервной копии потребуется новый read-only снимок со свежими данными:​
-  btrfs subvolume snapshot -r /home /home/​BACKUP-new+  btrfs subvolume snapshot -r /home /home_BACKUP_new
   sync   sync
  
-Теперь нам нужно создать разность между базовым снимком (/home/BACKUP) и свежим (/home/​BACKUP-new). Это может сделать сама команда btrfs send: +Теперь нам нужно создать разность между базовым снимком (/home_BACKUP) и свежим (/home_BACKUP_new). Это может сделать сама команда btrfs send: 
-  btrfs send -p /home/BACKUP /​home/​BACKUP-new ​| btrfs receive /other/+  btrfs send -p /home_BACKUP ​/home_BACKUP_new ​| btrfs receive /other/
  
 Здесь в параметре -p (от parent) указан базовый снимок,​ и send формирует для отправки только разницу между снимками. Причем,​ т.к. эта разница определяется по метаданным,​ это делается быстрее чем любыми утилитами типа rsync, особенно на больших файловых системах. Кроме того, что вычисляется разница,​ данные еще и сжимаются. Причем btrfs эффективно использует знания о файлах - если в файле (который является разницей между прошлым и новым состоянием) 5Mb нулей, то передается меньше 500 байт (в случае пустого файла btrfs использует трюк под названием "​разреженные файлы"​). Здесь в параметре -p (от parent) указан базовый снимок,​ и send формирует для отправки только разницу между снимками. Причем,​ т.к. эта разница определяется по метаданным,​ это делается быстрее чем любыми утилитами типа rsync, особенно на больших файловых системах. Кроме того, что вычисляется разница,​ данные еще и сжимаются. Причем btrfs эффективно использует знания о файлах - если в файле (который является разницей между прошлым и новым состоянием) 5Mb нулей, то передается меньше 500 байт (в случае пустого файла btrfs использует трюк под названием "​разреженные файлы"​).
  
-Что же происходит на противоположном конце, на стороне приемника данных?​ А тут, не смотря на то, что под именем ​BACKUP-new ​передавалась разница,​ в /other/BACKUP-new ​мы получим полное представление подобное тому, что осталось на стороне передатчика. Происходит это потому,​ что базовый снимок (BACKUP) есть и на стороне передатчика (там он вычитается из BACKUP-new), и на стороне приемника,​ где он "​складывается"​ с переданной разницей. ​  +Что же происходит на противоположном конце, на стороне приемника данных?​ А тут, не смотря на то, что под именем ​home_BACKUP_new ​передавалась разница,​ в /other/home_BACKUP_new ​мы получим полное представление подобное тому, что осталось на стороне передатчика. Происходит это потому,​ что базовый снимок (home_BACKUP) есть и на стороне передатчика (там он вычитается из home_BACKUP_new), и на стороне приемника,​ где он "​складывается"​ с переданной разницей. ​  
  
-Теперь у нас в оригинальной btrfs и на приемной стороне по два одинаковых снимка: ​BACKUP ​и BACKUP-new. Для вычисления следующего инкремента нам нужен только свежий снимок,​ а прошлый - можно удалить. Для удобства мы еще переименуем новый снимок так, что бы на следующей итерации он был у нас под именем прошлого/​базового снимка:​ +Теперь у нас в оригинальной btrfs и на приемной стороне по два одинаковых снимка: ​home_BACKUP ​и home_BACKUP_new. Для вычисления следующего инкремента ​в оригинальной btrfs нам нужен только свежий снимок,​ а прошлый - можно удалить. Для удобства мы еще переименуем новый снимок так, что бы на следующей итерации он был у нас под именем прошлого/​базового снимка:​ 
-  btrfs subvolume delete /home/BACKUP +  btrfs subvolume delete /home_BACKUP 
-  mv /home/​BACKUP-new /home/BACKUP+  mv /home_BACKUP_new ​/home_BACKUP
  
-Для того, что бы на приемной стороне иметь соответствующий базовый снимок,​ надо переименовать ​BACKUP-new ​в BACKUP, но для начала нужно решить,​ что делать с предыдущим снимком ​BACKUP. Если вам нужны множество точек отката,​ то предыдущий BACKUP ​можно переименовать с указание даты:+Для того, что бы на приемной стороне иметь соответствующий базовый снимок,​ надо переименовать ​home_BACKUP_new ​в home_BACKUP, но для начала нужно решить,​ что делать с предыдущим снимком ​home_BACKUP. Если вам нужны множество точек отката,​ то home_BACKUP ​можно переименовать с указание даты:
  
-  mv /other/BACKUP ​/other/BACKUP.$(date +%Y-%m-%d)</​code>​+  mv /other/home_BACKUP ​/other/home_BACKUP.$(date +%Y-%m-%d)
  
 Если же вас интересует только самая последняя точка восстановления,​ то старый снимок можно удалить. Если же вас интересует только самая последняя точка восстановления,​ то старый снимок можно удалить.
-  btrfs subvolume delete /other/BACKUP+  btrfs subvolume delete /other/home_BACKUP
  
 Ну и наконец,​ переименовываем новый снимок:​ Ну и наконец,​ переименовываем новый снимок:​
  
-  mv /other/BACKUP-new ​/other/BACKUP</​code>​+  mv /other/home_BACKUP_new ​/other/home_BACKUP</​code>​
  
 Восстановление данных производится в обратном порядке. И при этом, если на стороне приемника (рабочей btrfs) есть базовый снимок,​ который есть и на передающей стороне,​ то и при восстановлении также можно передать только разницу между самым последним снимком и тем базовым,​ который,​ есть у обоих сторон. Восстановление данных производится в обратном порядке. И при этом, если на стороне приемника (рабочей btrfs) есть базовый снимок,​ который есть и на передающей стороне,​ то и при восстановлении также можно передать только разницу между самым последним снимком и тем базовым,​ который,​ есть у обоих сторон.
 +
 +Пример полного скрипта:​ для резервного копирования корня с рабочего диска (/dev/sda) на резервный (/dev/sdb), на обоих дисках btrfs находится во втором разделе:​
 +<code bash>
 +#!/bin/bash
 +# создаем временные точки монтирования
 +src=$(mktemp -d "​${TMPDIR:​-/​tmp/​}$(basename 0).XXXXXXXXXXXX"​)
 +dst=$(mktemp -d "​${TMPDIR:​-/​tmp/​}$(basename 0).XXXXXXXXXXXX"​)
 +#​монтируем корни файловых систем btrfs
 +mount /dev/sda2 $src
 +mount /dev/sdb2 $dst
 +if [ -e $src/​root_BCKP ]
 +then # если первый запуск (нет базовых снимков) - создаем полный бекап
 +  # Создаем базовый снимок (в режиме readonly)
 +  btrfs subvolume snapshot -r $src/@ $src/​root_BCKP
 +  sync
 +  # Отправляем базовый снимок на резервный диск
 +  btrfs send $src/​root_BCKP | btrfs receive $dst/
 +else # Не первый запуск - делаем инкрементальный бекап
 +  # Переименовываем базовый снимок
 +  mv $src/​root_BCKP $src/​root_BCKP_prev
 +  mv $dst/​root_BCKP $dst/​root_BCKP_prev
 +  # Создаем текущие снимки
 +  btrfs subvolume snapshot -r $src/@ $src/​root_BACKUP ​           ​
 +  sync
 +  # Отправка инкрементального бекапа
 +  btrfs send -p $src/​root_BCKP_prev $src/​root_BACKUP | btrfs receive $dst/
 +fi
 +# Сделано:​ В $dst/​root_BACKUP создана полная резервная копии корня.
 +# Размонтируем корни файловых систем
 +umount $src
 +umount $dst
 +# Удаляем временные точки монтирования
 +rmdir $src
 +rmdir $dst
 +</​code>​
 ===== Квоты ===== ===== Квоты =====
 То что подтома разделяют общее пространство всей btrfs это и плюс (не возникает ситуации когда один раздел забит под завязку,​ а второй полупустой),​ но с другой стороны,​ это же и минус: подтом,​ куда, к примеру,​ по ошибке начали записываться данные в бесконечном цикле, быстро исчерпает место в btrfs и его не останется ни в одном другом подразделе. В случае подобных рисков полезно ограничивать то пространство,​ которое может использовать подтом. Т.е. в нашем примере,​ если бесконечная запись идет в раздел,​ место на котором ограниченное лимитом,​ то задача вызвавшая бесконечную запись получит ошибку как только кончится выделенный лимит (а не тогда когда кончится место во всей ФС). То что подтома разделяют общее пространство всей btrfs это и плюс (не возникает ситуации когда один раздел забит под завязку,​ а второй полупустой),​ но с другой стороны,​ это же и минус: подтом,​ куда, к примеру,​ по ошибке начали записываться данные в бесконечном цикле, быстро исчерпает место в btrfs и его не останется ни в одном другом подразделе. В случае подобных рисков полезно ограничивать то пространство,​ которое может использовать подтом. Т.е. в нашем примере,​ если бесконечная запись идет в раздел,​ место на котором ограниченное лимитом,​ то задача вызвавшая бесконечную запись получит ошибку как только кончится выделенный лимит (а не тогда когда кончится место во всей ФС).
Строка 290: Строка 356:
 Лимит может относится к файлам после сжатия - опция -с((сейчас это поведение по умолчанию и не может быть отключено в текущей версии btrfs)), а так же можно ограничить эксклюзивное место занимаемое группой - опция -e. Без опции -e, указанный лимит относится к "​официальному"​ объему. Лимит может относится к файлам после сжатия - опция -с((сейчас это поведение по умолчанию и не может быть отключено в текущей версии btrfs)), а так же можно ограничить эксклюзивное место занимаемое группой - опция -e. Без опции -e, указанный лимит относится к "​официальному"​ объему.
  
-<​note>​Лимит назначается именно на группу,​ а не на раздел. А группы объединяют другие группы и разделы. Промежуточный слой абстракции в виде ресурсных групп позволяет организовать практически любую схему ограничений на уровне подтома.</​note>​+<​note>​Лимит назначается именно на группу,​ а не на раздел. А группы объединяют другие группы и разделы. Промежуточный слой абстракции в виде ресурсных групп позволяет организовать практически любую схему ограничений на уровне подтомов и их групп разного уровня вложенности.</​note>​
 ===== Свойства ===== ===== Свойства =====
 Команда:​ Команда:​
Строка 317: Строка 383:
       -x        Включить тощие экстенты в метаданных #3.11 ядро и старше       -x        Включить тощие экстенты в метаданных #3.11 ядро и старше
     # -x уменьшает размер метаданных на 30%.      # -x уменьшает размер метаданных на 30%. 
 +Более полно [[https://​btrfs.wiki.kernel.org/​index.php/​Btrfstune|тут (англ.)]]\\
 Настройки нужно применять непосредственно к разделу на котором стоит btrfs, и раздел этот не должен быть смонтирован в момент выполнения этой команды. Настройки нужно применять непосредственно к разделу на котором стоит btrfs, и раздел этот не должен быть смонтирован в момент выполнения этой команды.
  
Строка 324: Строка 391:
 Для таких файлов рекомендуется отключить copy-on-write. Для таких файлов рекомендуется отключить copy-on-write.
  
-Отключить можно только для пустых файлов. Если отключить для директории,​ то только ​у вновь создаваемых файлов будет этот ​атрибут.+Отключить можно только для пустых файлов. Если отключить для директории,​ то этот атрибут унаследуется ​только вновь создаваемыми файлами.
 Для отключения copy-on-write для новых виртуальных машин выполните команду Для отключения copy-on-write для новых виртуальных машин выполните команду
  
Строка 335: Строка 402:
 chattr/​lsattr позволяют задать и другие свойства файлов. Описание всех возможных атрибутов можно посмотреть в **man chattr**. chattr/​lsattr позволяют задать и другие свойства файлов. Описание всех возможных атрибутов можно посмотреть в **man chattr**.
  
-<note important>​Как [[http://​forum.ubuntu.ru/​index.php?​topic=269699.msg2221269#​msg2221269|показали эксперименты]] btrfs пока не очень приспособлена для хранения образов виртуальных машин. Так же плохо дело обстоит с torrent клиентами ((даже включенное предварительное резервирование не позволяет избежать ужасающей фрагментации)). Если ​основная функция файловой системы - именно хранение образов дисков виртуальных машин или место для скачивания торентов, то лучше воспользоваться XFS или хотябы отключить COW на соответствующих каталогах.</​note>​+<note important>​Учтите ​отключение ​COW автоматом блокирует возможность сжатия файлов.</​note>​
  
-===== Упаковка данных ===== +<note important>​Как [[http://​forum.ubuntu.ru/​index.php?​topic=269699.msg2221269#​msg2221269|показали эксперименты]] btrfs пока не очень приспособлена для хранения образов виртуальных машин. Так же плохо дело обстоит с torrent клиентами ((даже включенное предварительное резервирование не позволяет избежать ужасающей фрагментации)). Если основная функция файловой системы - именно хранение образов дисков виртуальных машин или место для скачивания торентов,​ то лучше воспользоваться XFS или хотя-бы отключить COW на соответствующих каталогах.</​note>​ 
-btrfs поддерживает автоматическую упаковку данных при записи и распаковку при чтении. Поддерживаются два (в перспективе ожидается триалгоритма сжатия:​ +===== Сжатие/​упаковка данных ===== 
-  * zlib - эффективное сжатие в 2,7-3 раза, но довольно медленные и упаковка/​распаковка +btrfs поддерживает автоматическую упаковку данных при записи и распаковку при чтении. Поддерживаются три алгоритма сжатия:​ 
-  * lzo - быстрая упаковка/​распаковка,​ но не слишком эффективное сжатие примерно - в 2 раза +  * [[https://​ru.wikipedia.org/​wiki/​Zlib|zlib]] достаточно ​эффективное сжатие в 2,7-3 раза, но довольно медленные и упаковка/​распаковка 
-  * zl4 (в будущих версиях) - еще более ​слабое сжатие чем lzo, но фантастические скорости упаковки/распаковки.+  * [[https://​ru.wikipedia.org/​wiki/​LZO|lzo]] - быстрая упаковка/​распаковка,​ но не слишком эффективное сжатие примерно - в 2 раза ​или меньше 
 +  * [[https://​ru.wikipedia.org/​wiki/​Zstandard|zstd]] ​(с v4.14) - настраиваемый вариант ​сжатия - можно задать разные уровни компрессии (zlib примерно аналогичен zstd:3).
  
-Текущее состояние файла (упакован и как) определяется параметрами в i-node, а вот что делать с файлом при перезаписи и в каком режиме (с упаковкой или без) определяется двумя путями:​ параметром compression на файле (см. раздел Свойства) и тем задана ли опция compress при монтировании тома (см [[manual:​fstab#​btrfs|тут]] или ​[[https://btrfs.wiki.kernel.org/​index.php/Mount_options|параметры монтирования агл.(более ​полно)]]). Сочетание этих ​двух методов порождает довольно непростую схему принятия решения о том, в каком режиме создавать и перезаписывать файлы:​ +В [[https://git.kernel.org/​pub/​scm/​linux/​kernel/​git/​mason/​linux-btrfs.git/commit/?​h=next&​id=5c1aab1dd5445ed8bdcdbb575abc1b0d7ee5b2e7|апдейте добавляющем zstd]] ​есть оценочная таблица с характеристиками разных методов сжатия:
-  * когда том смонтирован без опции compress:  +
-    * существующий файл при перезаписи:​ если ​на файле стоит свойство compression,​ то после перезаписи файл будет упакован (до этого фал мог быть не упакован). Если свойство не стоит, а ранее файл ​был упакован,​ то при перезаписи он не будет упакован.  +
-    * новый файл при создании:​ если на каталоге, в котором создается файл, стоит свойство compression,​ то все новые вложенные файлы ​и каталоги унаследуют это свойство и с-но все новые файлы будут упакованы. Если свойство compression на родительском каталоге не установлено,​ то и новые файлы не будут сжаты. +
-  * когда том смонтирован с опцией compress:  +
-    * существующий при перезаписи и новый при создании:​ файл будет упакован ​даже если на нем не стоит свойство compression,​ свойство compression можно применить только для смены алгоритма ​сжатия.+
  
-<note tip>​Существующие файлы никак не меняют свое состояние в плане упаковки, несмотря ни на опции монтирования,​ ни на свойства которые на них устанавливают. Если нужно упаковать всю ФС или наоборот распаковать все файлы то нужно воспользоваться дефрагментацией с ключом -c. +  | Метод   ​| ​сжатие| Скорость сжатия MB/s | Скорость ​разжатия   | 
-  ​btrfs filesystem defrag ​--c lzo {путь куда смонтирован подтом btrfs} ​   # упаковка всех файлов на ФС +  ​|---------|-------|----------------------|---------------------| 
-  ​btrfs filesystem defrag -r -c ""​ {путь куда смонтирован подтом btrfs} ​    ​# распаковка всех файлов ФС +  | None    |  0.99 |                  504 |                 686 | 
-</​note>​+  ​| lzo     ​|  1.66 |                  398 |                 442 | 
 +  | zlib    |  2.58 |                   65 |                 241 | 
 +  | zstd:​1 ​ |  2.57 |                  260 |                 383 | 
 +  | zstd:​3 ​ |  2.71 |                  174 |                 408 | 
 +  | zstd:​6 ​ |  2.87 |                   70 |                 398 | 
 +  | zstd:​9 ​ |  2.92 |                   43 |                 406 | 
 +  | zstd:12 |  2.93 |                   21 |                 408 | 
 +  | zstd:15 |  3.01 |                   11 |                 354 |
  
-Как видно монтирование с опцией compress дает глобальную настройку,​ которую нельзя отменить. Свойство compression (без монтирования с опцией compress) позволяет более гибко управлять тем, что на томе пакуется,​ а что нет. Однако нужно следить за наследованием и расстановкой свойств. 
  
 +Текущее состояние файла (упакован и как) определяется параметрами в i-node, а вот упаковывать ли вновь записываемыми денные определяется опциями монтирования и свойством сжатия задаваемом на каталогах и файлах (все опции монтирования см. [[wiki:​fstab#​btrfs|тут]] или [[https://​btrfs.wiki.kernel.org/​index.php/​Manpage/​btrfs(5)#​MOUNT_OPTIONS|параметры монтирования агл.(более полно)]]).
 +Вновь записываемые данные сжимаются:​
 +  * всегда:​ если файловая система смонтирована с **-o compress-force**
 +  * никогда:​ если флаг NOCOMPRESS установлен на файле/​каталоге (chattr -c)
 +  * если возможно:​ если флаг COMPRESS установлен (chattr +c) на файле или унаследовал его от каталога при создании нового файла.
 +  * если возможно:​ если файловая система смонтирована c **-o compress**
 +
 +Отдельно стоит уточнить,​ что означает "​если возможно":​ дело в том, что btrfs не станет упаковывать файл, если начав его упаковку обнаружит что выигрыша от упаковки нет. Так к примеру практически никогда не упаковываются JPEG-файлы - сам формат JPEG подразумевает достаточно эффективную упаковку данных внутри файла. Однако монтирование с **-o compress-force** будет заставлять упаковывать даже JPEG-файлы (скорее всего с 0-вым эффектом,​ но с затратами процессорного времени на упаковку\распаковку). ​
 +
 +Учтите что монтирование с опцией compress не устанавливает атрибут +c файла. ​
 +
 +<note tip>​Существующие файлы которые не перезаписываются никак не меняют свое состояние сжатия,​ несмотря ни на опции монтирования,​ ни на свойства которые на них устанавливают. Если нужно упаковать всю ФС, то нужно воспользоваться дефрагментацией с ключом -c.
 +  btrfs fi defrag -rc {путь куда смонтирован подтом btrfs} ​   # упаковка всех файлов на ФС
 +Распаковка файлов с помощью команды defrag на данный момент невозможна. ​  
 +</​note>​
 +каталога compression
 +Свойство файла/​каталога compression это аналог атрибута '​с'​ (из числа расширенных атрибутов файлов,​ управлять которыми можно через chattr/​lsattr).  ​
 +  chattr -R -c *   # сникаталога compressionмает свойство compression со всех файлов рекурсивно,​ начиная с текущего каталога.
 +А вот установка свойства compression через расширенный атрибут '​c'​ позволяет установить только компрессию по умолчанию (zlib). Если хотите установить другой тип компрессии,​ то пользуйтесь командой **btrfs property set <​файл>​ compression "<​тип сжатия>"​**.
 +  ​
 +<​note>​Нужно понимать - сжатие файлов может производиться по частям. Когда в часть сжатого файла записываются данные - они на ходу упаковываются. И размер упакованной старой части файла как правило не соответствует размеру упакованных новых данных. С применением технологи copy-on-write это не становится проблемой. Но если COW отключить для файла - то его частичная упаковка становится проблематичной и это ​ драматически сказывается на производительности. Поэтому разработчики btrfs решили просто - если COW отключен,​ то такой файл не будет упаковываться ни при каких условиях.</​note>​
 =====Информация о файловой системе===== =====Информация о файловой системе=====
-Системная утилита df не может корректно показать данные об использованном пространстве на btrfs. Собственно,​ особенности хранения данных в btrfs (в частности ​совместное использование данных в подтомах и снимках) вообще делают невозможным однозначно определить,​ какое место на диске занимает тот или иной отдельно взятый подтом/​снимок.+Системная утилита df не может корректно показать данные об использованном пространстве на btrfs. Собственно,​ особенности хранения данных в btrfs (совместное использование данных в подтомах и снимках, а также дедупликация данных) вообще делают невозможным однозначно определить,​ какое место на диске занимают данные того или иного отдельно взятого ​подтома/снимка.\\ 
 +Вопрос о доступном свободном месте - тоже не имеет однозначного ответа для btrfs: тут и сжатие,​ и совместное использование данных,​ и некоторые другие нюансы просто не позволяют точно сказать сколько свободного места осталось в файловой системе btrfs.
  
 Btrfs предоставляет несколько команд для просмотра информации по использованию дискового пространства и состоянию файловой системы. Это команды:​ Btrfs предоставляет несколько команд для просмотра информации по использованию дискового пространства и состоянию файловой системы. Это команды:​
Строка 369: Строка 460:
 <note tip>​Еще один путь получения оценок занятого пространства описан в разделе [[http://​help.ubuntu.ru/​wiki/​btrfs?&#​квоты|"​Квоты"​]]. \\ <note tip>​Еще один путь получения оценок занятого пространства описан в разделе [[http://​help.ubuntu.ru/​wiki/​btrfs?&#​квоты|"​Квоты"​]]. \\
 Он хоть и несколько необычный,​ но дает одни из самых точных данных.</​note>​ Он хоть и несколько необычный,​ но дает одни из самых точных данных.</​note>​
- 
 ==== btrfs filesystem df ==== ==== btrfs filesystem df ====
 Отображается не состояние папки, а состояние примонтированного тома, содержащего указанную папку. Если написать путь к разделу диска (например,​ /dev/sda2), команда не сработает:​ сначала нужно его примонтировать. Отображается не состояние папки, а состояние примонтированного тома, содержащего указанную папку. Если написать путь к разделу диска (например,​ /dev/sda2), команда не сработает:​ сначала нужно его примонтировать.
Строка 383: Строка 473:
 Тут важно отметить,​ что total - это не максимально возможный объем, а всего-лишь объем, который размечен в данный момент,​ часть дискового пространства,​ отведенного под btrfs, может оставаться не размеченной. Тут важно отметить,​ что total - это не максимально возможный объем, а всего-лишь объем, который размечен в данный момент,​ часть дискового пространства,​ отведенного под btrfs, может оставаться не размеченной.
  
-Отдельно нужно уточнить про GlobalReserve:​ согласно [[https://​btrfs.wiki.kernel.org/​index.php/​FAQ#​What_is_the_GlobalReserve_and_why_does_.27btrfs_fi_df.27_show_it_as_single_even_on_RAID_filesystems.3F|официальной Wiki]], это резерв для работы ФС. Он используется при полностью занятом пространстве в ФС для служебных нужд ФС. Это значит,​ что даже тогда, когда ни простой пользователь,​ ни root ничего на файловую систему записать не могут, различные манипуляции с файловой системой все еще будут доступны. Например,​ можно создать снимок или удалить под-том (для удаления тоже нужно дополнительное место, т.к. оно тоже делается с использованием механизма COW).+Отдельно нужно уточнить про GlobalReserve:​ согласно [[https://​btrfs.wiki.kernel.org/​index.php/​FAQ#​What_is_the_GlobalReserve_and_why_does_.27btrfs_fi_df.27_show_it_as_single_even_on_RAID_filesystems.3F|официальной Wiki]], это резерв для работы ФС. Он используется при полностью занятом пространстве в ФС для служебных нужд ФС. Это значит,​ что даже тогда, когда ни простой пользователь,​ ни root ничего на файловую систему записать не могут, различные манипуляции с файловой системой все еще будут доступны. Например,​ можно создать снимок или удалить под-том (для удаления тоже нужно дополнительное место ​для метаданных, т.к. оно тоже делается с использованием механизма COW)
 + 
 +Таким образом,​ заполненная на 100% файловая система btrfs - не приводит к краху системы с крайне тяжелыми последствиями,​ как это свойственно многим другим ФС. Такая файловая система спокойно монтируется и там легко можно удалять файлы благодаря глобальному резерву.
 ==== btrfs filesytem show ==== ==== btrfs filesytem show ====
 Команда показывает агрегированное представление о используемых объемах на устройствах хранения (в примере - "​забитый под завязку"​ данными RAID1 из трех разных по объему устройств,​ о том, как это делается - будет рассказано чуть позже):​ Команда показывает агрегированное представление о используемых объемах на устройствах хранения (в примере - "​забитый под завязку"​ данными RAID1 из трех разных по объему устройств,​ о том, как это делается - будет рассказано чуть позже):​
-  btrfs fi sh /mnt                   # "fi sh" допустимое сокращение от "​filesytem show"+  btrfs sh /mnt                   # "sh" допустимое сокращение от "​filesytem show"
   Label: none  uuid: 8e1f7f2b-f583-4ba5-8847-17feaa0fed0b   Label: none  uuid: 8e1f7f2b-f583-4ba5-8847-17feaa0fed0b
        Total devices 3 FS bytes used 1.79GiB        Total devices 3 FS bytes used 1.79GiB
Строка 397: Строка 489:
 ==== btrfs filesystem usage ==== ==== btrfs filesystem usage ====
 Пример вывода (это тестовая файловая система btrfs на основе 2-х файловых образов,​ собранных в raid1): Пример вывода (это тестовая файловая система btrfs на основе 2-х файловых образов,​ собранных в raid1):
-  btrfs fi us /mnt                       # "fi us" - допустимое сокращение от "​filesystem usage"+  btrfs f u /mnt                       # "f u" - допустимое сокращение от "​filesystem usage"
   Overall:   Overall:
      ​Device size:               ​4.00GiB      ​Device size:               ​4.00GiB
Строка 429: Строка 521:
 ==== btrfs device usage ==== ==== btrfs device usage ====
 Пример вывода (RAID1 на 3 "​дисках"​ разного размера):​ Пример вывода (RAID1 на 3 "​дисках"​ разного размера):​
-  btrfs de us /mnt        # "de us" - допустимые сокращения от "​device usage"+  btrfs us /mnt        # "us" - допустимые сокращения от "​device usage"
   /dev/loop0, ID: 1   /dev/loop0, ID: 1
      ​Device size:             ​1.00GiB      ​Device size:             ​1.00GiB
Строка 452: Строка 544:
  
 ==== btrfs device stats ==== ==== btrfs device stats ====
-  btrfs dev stats /mnt+  btrfs d st /mnt                 # "d st" - допустимое сокращение от "​device status"​
   [/​dev/​loop0].write_io_errs ​  0   [/​dev/​loop0].write_io_errs ​  0
   [/​dev/​loop0].read_io_errs ​   0   [/​dev/​loop0].read_io_errs ​   0
Строка 466: Строка 558:
 Эта команда показывает статистику ошибок и сбоев в работе каждого устройства (в примере их два). Эта команда показывает статистику ошибок и сбоев в работе каждого устройства (в примере их два).
        
 +<note important>​Вы обратили внимание на короткие формы записи команд использованные в примерах (например "d st" вместо "​device status"​)?​\\
 +Утилита btrfs имеет в своем составе скрипты авто-дополнения и вы можете набрав 1-2 буквы и нажав tab дополнять команды при наборе,​ однако если 1-2 буквы уникально идентифицируют команды,​ то их можно и не дополнять. Утилита прекрасно все дополняет сама внутри себя.</​note>​
 ===== Изменение размера btrfs ===== ===== Изменение размера btrfs =====
 btrfs поддерживает изменение размеров (увеличение и уменьшение) при смонтированной ФС. Само собой, для увеличения ФС нужно, чтобы содержащий ФС раздел был больше,​ чем размер ФС, а для уменьшения - в ФС должно быть достаточно свободного пространства для уменьшения. btrfs поддерживает изменение размеров (увеличение и уменьшение) при смонтированной ФС. Само собой, для увеличения ФС нужно, чтобы содержащий ФС раздел был больше,​ чем размер ФС, а для уменьшения - в ФС должно быть достаточно свободного пространства для уменьшения.
Строка 473: Строка 567:
 Например указанный размер **+2g** увеличит ФС на 2 гигабайта,​ **-1g** - уменьшит на 1 гигабайт,​ а **40g** - установит полный размер ФС в 40 гигабайт. Например указанный размер **+2g** увеличит ФС на 2 гигабайта,​ **-1g** - уменьшит на 1 гигабайт,​ а **40g** - установит полный размер ФС в 40 гигабайт.
  
-===== Проверка ​сумм =====+===== Контрольные суммы =====
 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
Строка 480: Строка 595:
   # -d  Выводить результаты (только при -B)   # -d  Выводить результаты (только при -B)
  
 +Все опции команды btrfs scrub можно посмотреть в 
 +  man btrfs-scrub
 =====Балансировка===== =====Балансировка=====
 При балансировке на btrfs пере-создаются метаданные и пере-распределяются данные файлов. Запускается балансировка командой:​ При балансировке на btrfs пере-создаются метаданные и пере-распределяются данные файлов. Запускается балансировка командой:​
Строка 507: Строка 624:
   btrfs balance start -dconvert=raid1,​soft -mconvert=raid1,​soft -sconvert=raid1,​soft --force /mnt   btrfs balance start -dconvert=raid1,​soft -mconvert=raid1,​soft -sconvert=raid1,​soft --force /mnt
  
 +Обо всех возможностях команды btrfs balance можно узнать в
 +  man btrfs-balance ​  
 =====Btrfs на нескольких устройствах===== =====Btrfs на нескольких устройствах=====
  
Строка 515: Строка 634:
 Обратите внимание:​ btrfs не требует обязательной разметки диска на разделы,​ можно использовать и диски целиком,​ и разделы с размеченных на разделы дисков,​ и даже микс из разделов и дисков целиком. Для простоты в дальнейшем будем называть и разделы,​ и отдельные диски "​устройствами"​. Обратите внимание:​ btrfs не требует обязательной разметки диска на разделы,​ можно использовать и диски целиком,​ и разделы с размеченных на разделы дисков,​ и даже микс из разделов и дисков целиком. Для простоты в дальнейшем будем называть и разделы,​ и отдельные диски "​устройствами"​.
  
-<note important>​Однако учтите:​ если вы ставите систему на RAID, построенный в btrfs, то использовать диски целиком нельзя: ​не останется места ​для ​установки ​загрузчика. Загрузчику нужна либо MBR запись и сектора за ней, предшествующие первому разделу на дискелибо нужен специальный ​раздел EFS (при ​загрузке в UEFI режиме). Таким образом загрузчику е важно MBR или GPT) просто необходимо разбиение диска на разделы.</​note>​+<note important>​Однако учтите:​ если вы ставите систему на RAID, построенный в btrfs, и используете загрузку в режиме UEFI, то использовать диски целиком нельзя:​ для загрузки в UEFI режиме нужен специальный __раздел__ EFS. Т.е. диск нужно будет все-таки ​разбить ​на разделы. 
 +</​note>​ 
 +<​note>​ 
 +Если же вы планируете загружать систему ​в BIOS совместимом режиме, то тогда можно полностью отдать диск ​btrfsместо под начальный загрузчик btrfs использовать не будет и загрузчик (например GRUB) может смело ставится в первые ​сектора на диске и нормально там ​работать. Однако ​не всегда установщик ос сможет организовать загрузку в таком режиме.</​note>​
  
 ====Режим SINGLE==== ====Режим SINGLE====
Строка 536: Строка 658:
  
 ====Режим DUP==== ====Режим DUP====
-DUP - это дублирование данных в файловой системе (обычно только для метаданных). С версии btrfs-progs 4.5 допустимо использовать DUP и для данных, только утилита предупредит, если избыточность метаданных меньше,​ чем данных (например,​ метаданные в single, a данные в dup).+DUP - это дублирование данных в файловой системе (обычно только для метаданных). С версии btrfs-progs 4.5 допустимо использовать DUP и для данных. Однако, если при ​конвертировании способа хранения (балансировка с фильтрамиизбыточность метаданных меньше,​ чем данных (например,​ метаданные в single, a данные в dup), то утилита будет ругаться. Обойти эту ругань утилиты можно опцией --force.
  
-Про DUP важно понимать,​ что он не отслеживает,​ где именно хранятся копии, т.е. если у вас файловая система работает на двух устройствах,​ то DUP не гарантирует,​ что копии будут храниться на разных устройствах. Поэтому сфера использования этого режима - дублирование метаданных в одно-дисковой конфигурации на обычных жестких дисках (на ssd метаданные - в режиме single для сокращения числа записей на носитель).+Про DUP важно понимать,​ что он не отслеживает,​ где именно хранятся копии, т.е. если у вас файловая система работает на двух устройствах,​ то DUP не гарантирует,​ что копии будут храниться на разных устройствах. Поэтому ​обычно ​сфера использования этого режима - дублирование метаданных в одно-дисковой конфигурации на обычных жестких дисках (на ssd метаданные - в режиме single для сокращения числа записей на носитель).
  
 ====Режимы RAID==== ====Режимы RAID====
-В btrfs встроена поддержка RAID 0, 1, 10, 5, 6. Поддержка ​RAID5/6 - пока считается экспериментальной. RAID0/1/10 работают ​достаточно ​стабильно.+В btrfs встроена поддержка RAID 0, 1, 10, 5, 6. В RAID5/6 - пока ​есть еще некоторые нерешенные проблемы ​и их не рекомендуется использовать в промышленной ​эксплуатации. RAID0/​1/​10 ​- серьезных проблем не имеют и работают стабильно.
  
 <note important>​В Ubuntu до 13.10 (да и в некоторых более поздних) в initramfs могут не встроиться утилиты btrfs-tools,​ поэтому система может не загрузится с RAID или не подхватывать диски автоматом.\\ <note important>​В Ubuntu до 13.10 (да и в некоторых более поздних) в initramfs могут не встроиться утилиты btrfs-tools,​ поэтому система может не загрузится с RAID или не подхватывать диски автоматом.\\
Строка 561: Строка 683:
 При создании btrfs на нескольких устройствах типы хранения данных и метаданных (ну или хотя бы только данных) стоит задавать вручную (иначе вы можете получить не совсем ожидаемые результаты). Выбрать тип хранения для системных данных лучше доверить драйверу. При создании btrfs на нескольких устройствах типы хранения данных и метаданных (ну или хотя бы только данных) стоит задавать вручную (иначе вы можете получить не совсем ожидаемые результаты). Выбрать тип хранения для системных данных лучше доверить драйверу.
  
-  # Создать сборку из устройств - последовательное заполнение данными обоих дисков без дублирования +  # Создать сборку из устройств ​(JBOD) ​заполнение данными и метаданными обоих дисков без дублирования 
-  mkfs.btrfs -d single /dev/sdb /dev/sdc+  mkfs.btrfs ​-m single ​-d single /dev/sdb /dev/sdc
   ​   ​
-  # Создать RAID0 - равномерное распределение данных с чередованием записи/​чтения +  # Создать RAID0 - равномерное распределение ​данных и метаданных с чередованием записи/​чтения ​между двумя дисками 
-  mkfs.btrfs -d raid0 /dev/sdb /dev/sdc+  mkfs.btrfs ​-m raid0 -d raid0 /dev/sdb /dev/sdc
        
-  # Использовать RAID1 (зеркало) и для данных и для ​метаданных+  # Использовать RAID1 (зеркало) и для данных и метаданных
   mkfs.btrfs -m raid1 -d raid1 /dev/sdb /dev/sdc   mkfs.btrfs -m raid1 -d raid1 /dev/sdb /dev/sdc
        
-  # Использовать RAID10 и для данных и для ​метаданных+  # Использовать RAID10 и для данных и метаданных
   mkfs.btrfs -m raid10 -d raid10 /dev/sdb /dev/sdc /dev/sdd /dev/sde   mkfs.btrfs -m raid10 -d raid10 /dev/sdb /dev/sdc /dev/sdd /dev/sde
        
Строка 614: Строка 736:
   ​   ​
 Как правило,​ эта команда успешно справляется со своей задачей,​ но есть и обходной путь (он пригодится тем, у кого более старые версии btrfs, где нет команды btrfs replace): \\ Как правило,​ эта команда успешно справляется со своей задачей,​ но есть и обходной путь (он пригодится тем, у кого более старые версии btrfs, где нет команды btrfs replace): \\
-1. удалить ​"умершее" ​устройство (btrfs device ​delete),\\ +1. добавить ​новое устройство (btrfs device ​add),\\ 
-2. добавить ​новое устройство (btrfs device ​add),\\+2. удалить ​"умершее" ​устройство (btrfs device ​delete),\\
 3. запустить балансировку (btrfs balance start).\\ 3. запустить балансировку (btrfs balance start).\\
  
 <note tip>Ну и конечно,​ не забываем про резервную копию - ценную информацию с деградировавшего RAID полезно сначала сохранить на независимом устройстве хранения,​ а уже потом восстанавливать целостность RAID.</​note>​ <note tip>Ну и конечно,​ не забываем про резервную копию - ценную информацию с деградировавшего RAID полезно сначала сохранить на независимом устройстве хранения,​ а уже потом восстанавливать целостность RAID.</​note>​
 +
 +Если же вы не имеете устройства на замену вышедшего из строя и решили отказаться от RAID1 и перевести данные в single, то просто удалить устройство не получится. Сначала вы должны конвертировать тип хранения выполнив балансировку:​
 +
 +  btrfs balance start -dconvert=single,​soft -mconvert=single,​soft -sconvert=single,​soft --force <​путь куда смонтирована btrfs>
 +
 +а уже после этого можно удалять вышедшее из строя устройство:​
 +
 +  btrfs device delete missing <​путь куда смонтирована btrfs>
 +
 +missing - специальное значение,​ которое можно указать для устройств,​ которые уже просто отключены или недоступны (для них просто сложно указать путь).
 +
 +<note tip>​Еще одно интересное свойство RAID - возможность восстановления отдельных блоков данных,​ что может быть важно для SSD.
 +BTRFS на SSD, как и любая другая ФС может перейти в некорректное состояние если часть данных перестала читаться с диска, но если мы имеем RAID, то данные будут прочитаны с другого устройства,​ и btrfs перезапишет их поверх тех, что не смогла прочитать,​ но контроллер sdd не будет пытаться записывать данные в те блоки, которые перестали читаться - контроллер сделает ремаппинг. И таким образом эксплуатация системы на "​медленно умирающих"​ ssd становится абсолютно беззаботной пока у контроллера ssd есть резерв для ремаппинга.
 +</​note>​
 =====Дефрагментация===== =====Дефрагментация=====
   Usage: btrfs filesystem defrag [опции] {путь, куда смонтирован подтом btrfs}   Usage: btrfs filesystem defrag [опции] {путь, куда смонтирован подтом btrfs}
Строка 672: Строка 808:
 В случае установки системы на btrfs вам не обязательно создавать отдельный раздел под /home - можно использовать подтома. Собственно,​ установщик ubuntu именно так и поступит - под корень и под /home будут автоматически созданы подтома. В случае установки системы на btrfs вам не обязательно создавать отдельный раздел под /home - можно использовать подтома. Собственно,​ установщик ubuntu именно так и поступит - под корень и под /home будут автоматически созданы подтома.
  
-Однако,​ если вы решили,​ что вам нужен [[swap]], то его все-таки лучше разместить на отдельном разделе,​ т.к. размещение swаp в файле на btrfs хотя и возможно (только "​обходным путем"​ - далее мы расскажем,​ как), но не рекомендуется. ​+Однако,​ если вы решили,​ что вам нужен [[swap]] ​и версия вашего ядра ниже чем 5.0, то его все-таки лучше разместить на отдельном разделе,​ т.к. размещение swаp в файле на btrfs (до 5.0) хотя и возможно (только "​обходным путем"​ - далее мы расскажем,​ как), но не рекомендуется. ​
  
 <note important>​Внимание! Установка системы с корнем (вернее /boot) на btrfs не сможет закончится успешно,​ если у вас MBR разметка и первый раздел на диске начинается раньше,​ чем на 2048 секторе (при размере сектора 512 байт). Дело в том, что модуль поддержки btrfs для GRUB (он нужен для того, чтобы GRUB смог продолжить загрузку самого себя с этого раздела) имеет довольно большой размер и, если первый раздел начинается с 63 сектора,​ то модуль поддержки btrfs просто не помещается в область диска за MBR. <note important>​Внимание! Установка системы с корнем (вернее /boot) на btrfs не сможет закончится успешно,​ если у вас MBR разметка и первый раздел на диске начинается раньше,​ чем на 2048 секторе (при размере сектора 512 байт). Дело в том, что модуль поддержки btrfs для GRUB (он нужен для того, чтобы GRUB смог продолжить загрузку самого себя с этого раздела) имеет довольно большой размер и, если первый раздел начинается с 63 сектора,​ то модуль поддержки btrfs просто не помещается в область диска за MBR.
Строка 681: Строка 817:
 Установщик Ubuntu не позволяет (пока) выбрать все опции ФС, и в частности указать,​ что на btrfs-разделе нужно использовать сжатие. Можно поставить систему на btrfs-раздел без сжатия и включить его после установки (указав нужные ключи монтирования). Но в этом случае сжиматься будут только новые и изменяемые файлы. ​ Установщик Ubuntu не позволяет (пока) выбрать все опции ФС, и в частности указать,​ что на btrfs-разделе нужно использовать сжатие. Можно поставить систему на btrfs-раздел без сжатия и включить его после установки (указав нужные ключи монтирования). Но в этом случае сжиматься будут только новые и изменяемые файлы. ​
  
-Сжать записанные ранее файлы поможет дефрагментация с ключом -с<​тип сжатия ​lzo или gzip>. При этом дефрагментацию можно выполнить только на смонтированном подтоме,​ и даже с открытыми на нём файлами (например,​ с корнем,​ с которого загружена сама ОС), дефрагментатор не уплотнит те файлы, которые открыты в данный момент,​ и выдаст предупреждение об этом.+Сжать записанные ранее файлы поможет дефрагментация с ключом -с<​тип сжатия>​. При этом дефрагментацию можно выполнить только на смонтированном подтоме,​ и даже с открытыми на нём файлами (например,​ с корнем,​ с которого загружена сама ОС), дефрагментатор не уплотнит те файлы, которые открыты в данный момент,​ и выдаст предупреждение об этом.
  
 Но можно сразу поставить систему на том с компрессией,​ это можно сделать 2-мя способами. Но можно сразу поставить систему на том с компрессией,​ это можно сделать 2-мя способами.
Строка 723: Строка 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=====
-<note important>​Предложенный ​метод не самый надежный и, кроме тогосозданный таким путем ​swap будет заметно медленнее swapсозданного на разделе диска ​или в файле обычной ​ФС (например EXT4).</​note>​ +<note important>​Наличие ​работающего swap-файла на подтоме не дает возможности делать снимки с этого подтома. Поэтому для использования снимков необходимо размещать swap-файл на отдельном подтоме. Например создать @swap подтом и монтировать его в /​swap.</​note>​ 
-swapfile ​невозможно создать на btrfs, т.к. это приведёт к разрушению файловой системы (подробнее обсуждалось [[http://forum.ubuntu.ru/index.php?​topic=207432.msg2167704#​msg2167704|тут]]). Разработчики ​btrfs прорабатывают вариант специального [[https://btrfs.wiki.kernel.org/index.php/​Project_ideas#Swap_file_support|API для работы со swap-файлом на btrfs]], но есть ​и обходной путь: + 
-swapfile ​можно создать как loop устройство. Давайте рассмотрим пример создания своп-файла ​размером 4Gb в файле /swap.+Начиная с версии ядра 5.0+ на btrfs можно ​создать swap-файл, ​но с некоторыми ограничениями: swap-файл должен располагаться целиком на одном устройстве ((его нельзя ​будет ​создать на любом типе хранения кроме ​single)), создаваться обязательно с отключенным COW и сжатием((На btfs-wiki указаночто отключение COW блокирует возможность архивирования)). Кроме того ​swap-файл ​не может попасть в снимок((Если swap-файл смонтирован то невозможно сделать снимок ​с под-тома где он расположен,​ отключенный swap-файл дает сделать снимок ​вместе со swap-файлом, но больше такой swap-файл не подключить)). В перспективе предполагается снять часть ​ограничений.\\ 
 + 
 +С учетом озвученного, ​пока не сняты ограничения, swap-файл стоит создавать в отдельном (специально для него созданном под-томе). 
 + 
 +Предположим что у нас btrfs на одном устройстве и у нас подходящая ​версия ядра 5.0+, дальше все довольно просто:​ 
 + 
 +  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 добавить следующую строку:​ 
 + 
 +  /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-устройство. Давайте рассмотрим пример создания своп-файла ​этим ​методом.
  
-Для избежания фрагментации swap-файла на HDD (на SSD это не так критично) стоит отключить COW механизм, это надо делать на пустом ​файле+Несмотря на то, что отключение COW не помогает,​ но для избежания фрагментации swap-файла на HDD (на SSD это не так критично) стоит ​все-таки ​отключить COW. Компрессию тоже стоит отключать т.к. это еще сильнее затормозит и без того не быстрое решение.
-  touch /swap +
-  chattr +C /swap +
  
-Далее код +  touch /swap                # создаем пустой файл /swap - COW можно отключить только на пустом файле 
-  swapfile=$(losetup -f) +  chmod go-r /swap           # swap должен иметь права 600, а touch проставляет права 644 
-  truncate ​-s 4G /swap +  chattr +C /swap            # отключаем COW (сжатие тоже отключается при отключении COW) 
-  losetup $swapfile /swap +  fallocate swap -l4g        # выделяем место под файл размером 4Gib 
-  mkswap ​ $swapfile +  swapfile=$(losetup -f)     # находим первое свободное loop-устройство ​ 
-  swapon ​ $swapfile+  losetup $swapfile /swap    # настраиваем доступ к файлу /swap через loop-устройство ​ 
 +  mkswap ​ $swapfile ​         # создаем внутреннюю разметку для swap-а на loop-устройстве 
 +  swapon ​ $swapfile ​         # подключаем swap
  
-добавляется в файл /​etc/​rc.local до строки exit 0, после чего выполняется +Для подключения такого swap после перезагрузки ​добавьте код начиная с swapfile=$(losetup -f) в файл /​etc/​rc.local ​(до строки exit 0).
-  sudo chmod +x /etc/rc.local+
  
 +<note important>​И все же для ядер младше 5.0 предпочтительнее использовать swap на разделе диска.</​note>​
 ======Обслуживание btrfs====== ======Обслуживание btrfs======
 Как и любая другая ФС, btrfs может работать много лет, не требуя какого-то особого обслуживания,​ однако мы озвучим те действия,​ которые полезно периодически проводить для поддержания "​здоровья"​ btrfs. Как и любая другая ФС, btrfs может работать много лет, не требуя какого-то особого обслуживания,​ однако мы озвучим те действия,​ которые полезно периодически проводить для поддержания "​здоровья"​ btrfs.
Строка 754: Строка 915:
   sudo btrfs balance start /mnt   sudo btrfs balance start /mnt
  
-Если возникают критические ​проблемы с fs (ядро ​выдаёт ​нечто {{:​wiki:​trap.png?​linkonly|подобное}}), то переходим к разделу "Восстановление btrfs"​.+Узнать подробности о состоянии файловой ​системы ftrfs можно командой:
  
 +  btrfs check --force --readonly /​dev/<​раздел на котором расположена btrfs>
 +
 +тут --force используется для того, что бы подавить ошибку запуска утилиты на уже смонтированном разделе,​ но не надо опасаться - по умолчанию btrfs check выполняется в режиме только чтения (ключ --readonly указан тут чисто для душевного спокойствия).
 +
 +Если возникают критические проблемы с fs (при загрузке выдаётся нечто {{:​wiki:​trap.png?​linkonly|подобное}}),​ то переходим к разделу "​Восстановление btrfs"​.
 +
 +Еще полезно периодически запускать пересчет контрольных сумм (btrfs crub). В процессе работы (особенно если выключать компьютер по питанию,​ а не через shutdown) контрольные суммы могут потерять свою актуальность. Поэтому периодически запускать их пересчет - не такая и плохая идея. А нужно ли вам запускать пересчет контрольных сумм можно узнать из проверки файловой системы командой:​
 +
 +  btrfs check --check-data-csum --force --readonly /​dev/<​раздел на котором расположена btrfs>
 ======Восстановление btrfs====== ======Восстановление btrfs======
  
-В этом ​мире может произойти что ​угодно, и btrfs тоже может пострадать ​до такой степени, что ее не удастся смонтировать. Попробуем описать возможные пути исправления этой ситуации.+Как и многие современные файловые системы btrfs при монтировании тома автоматически проверяет целостность файловой системы и если ​обнаруживаются какие-то проблемы, ​то драйвер btrfs пытается их устранить автоматически. Однако ​не любая ​проблема может быть решена без дополнительно вмешательства человека.  
 +Если btrfs не удастся смонтировать, то придется брать ситуацию в свои руки. Попробуем описать возможные пути исправления этой ситуации.
  
 =====Первым делом..===== =====Первым делом..=====
Строка 832: Строка 1003:
 ======Другие советы по использованию====== ======Другие советы по использованию======
 <note tip> <note tip>
-Утилиты позволяют конвертировать ext2-4 в btrfs (http://​help.ubuntu.ru/​wiki/​ext_to_btrfs),​ однако это несет с собой некоторые неудобства ​(при конвертировании не используются подтома). Поэтому лучше ​просто сделать резервную копию важных данныхпереустановить систему ​на отформатированный ​в btrfs диск ​и потом ​восстановить данные.</​note>​ +Утилиты позволяют конвертировать ext2-4 в btrfs (http://​help.ubuntu.ru/​wiki/​ext_to_btrfs),​ однако это несет с собой некоторые неудобствапри конвертировании не используются подтома ​для корня и /home (как ​это ​делает ​устанощик Ubuntu). Конечно, разобравшись с командами btrfs вы можете реорганизовать хранение после конвертации как вам будет удобно. Но рассотрите так же вариант: сделать бекап важных данных ​и переустановить систему отформатировав диск ​в btrfs. Это может оказаться проще.</​note>​ 
-<note tip>Не брезгуйте новым и по возможности используйте подразделы. При грамотном их использовании это поможет избежать многих ​возможных проблем</​note>​ +<note tip>Не брезгуйте новым и по возможности используйте подразделы. При грамотном их использовании это поможет избежать многих ​сложностей.</​note>​ 
-<note important>​Обязательно [[http://​help.ubuntu.ru/​wiki/​btrfs#​настройки|отключите COW]] для каталогов куда скачиваются торрент-файлы и где хранятся образы виртуальных машин. Учитывайте что отключить COW можно либо на пустом каталоге,​ либо на пустом файле. Для уже существующих файлов это отключение не будет иметь смысла.</​note>​ +<note important>​Обязательно [[http://​help.ubuntu.ru/​wiki/​btrfs#​настройки|отключите COW]] для каталоговкуда скачиваются торрент-файлы и где хранятся образы виртуальных машин. Учитывайтечто отключить COW можно либо на пустом каталоге,​ либо на пустом файле. Для уже существующих файлов это отключение не будет иметь смысла.</​note>​ 
-<​note>​Актуально для HDD и дисковых массивов\\ +<​note ​important>//​Балансировка//​\\ 
-Можно спокойно использовать любые опции при монтировании,​ но разумным будет использовать набор space_cache,​compress,​autodefrag ​+Время от времени запускайте балансировку для профилактики. Журнал и метаданные (особенно в более старых версиях ФС) имеют свойство сильно разрастаться,​ в результате чего Вы будете видеть,​ что свободного места хоть отбавляй,​ а по факту - при попытке записать файл, обновить систему вы получите ошибку No space left on device. Для устранение которой придется где то искать дополнительный носитель,​ для того что бы расширить существующую ФС на него или перенести часть файлов. 
 +</​note>​ 
 +<​note>//​Актуально для HDD и дисковых массивов//\\ 
 +Можно спокойно использовать любые опции при монтировании,​ но разумным будет использовать набор space_cache,​ compress, autodefrag
 Первая призвана уменьшить количество операций чтения и записи,​ вторая обеспечивает сжатие для уменьшения объёма передаваемых данных,​ autodefrag - для фоновой дефрагментации при обнаружении сильно фрагментированных файлов.</​note>​ Первая призвана уменьшить количество операций чтения и записи,​ вторая обеспечивает сжатие для уменьшения объёма передаваемых данных,​ autodefrag - для фоновой дефрагментации при обнаружении сильно фрагментированных файлов.</​note>​
-<​note>​Актуально для SSD\\ +<​note>​//Актуально для SSD//\\ 
-Драйвер BTRFS автоматически определяет что btrfs-раздел создан на SSD и также автоматически включает все необходимы ключи (опция ssd) для эффективной работы на этом типе носителей. </​note>​ +Драйвер BTRFS автоматически определяетчто btrfs-раздел создан на SSDи также автоматически включает все необходимые ключи (опция ssd) для эффективной работы на этом типе носителя. </​note>​ 
-<​note>​Из официального списка рассылки:​ при активном использовании снимков рекомендуется использовать опцию noatime, она позволяет несколько ускорить работу и уменьшить количество операций при работе с fs, полезно для любого типа накопителей+<​note>​Из официального списка рассылки:​ при активном использовании снимков рекомендуется использовать опцию noatime, она позволяет несколько ускорить работу и уменьшить количество операций при работе с fs, полезно для любого типа накопителя
-По умолчанию используется relatime, которая дает довольно ощутимый объем обновлений времени доступа.\\+По умолчанию используется relatime, которая даёт довольно ощутимый объём обновлений времени доступа.\\
 Подробнее о контроле времени доступа см. [[https://​access.redhat.com/​knowledge/​docs/​ru-RU/​Red_Hat_Enterprise_Linux/​6/​html/​Power_Management_Guide/​Relatime.html|Relatime]]</​note>​ Подробнее о контроле времени доступа см. [[https://​access.redhat.com/​knowledge/​docs/​ru-RU/​Red_Hat_Enterprise_Linux/​6/​html/​Power_Management_Guide/​Relatime.html|Relatime]]</​note>​
  
 ---- ----
 <​note>​ <​note>​
-FIXME статья требует исправления,​ поправок и дополнения,​ если вы можете чем либо помочь "​Прошу к столу"​ +Обсуждение,​ вопросы и прочее тут: [[http://​forum.ubuntu.ru/​index.php?​topic=207432.0|btrfs]]
-Обсуждение,​ вопросы и прочие тут: [[http://​forum.ubuntu.ru/​index.php?​topic=207432.0|btrfs]]+
 </​note>​ </​note>​
  --- [[user>​nefelim4ag]] //​2012/​09/​07 22:42//  --- [[user>​nefelim4ag]] //​2012/​09/​07 22:42//
- ​Вообще обращайтесь если будут вопросы,​ по возможности помогу с этой фс nefelim4ag@gmail.com+ ​Вообще обращайтесь если будут вопросы,​ по возможности помогу с этой фс nefelim4ag@gmail.com\\ 
 + --- [[user>​sly_Tom_Cat]] 
 + ​Давно использую и много экспериментирую с btrfs. Чем смогу - помогу slytomcat@mail.ru
 ====== Ссылки ====== ====== Ссылки ======
  
 [[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}}