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

Различия

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

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

Предыдущая версия справа и слева Предыдущая версия
Следующая версия
Предыдущая версия
wiki:btrfs [2019/03/09 13:23]
[Варианты восстановления много-дисковых конфигураций btrfs]
wiki:btrfs [2021/06/04 11:08] (текущий)
[swap файл на btrfs]
Строка 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 (реализовано,​ но 5 и 6 пока не рекомендуются к использованию),​ а также реализация различных политик избыточности на уровне объектов ФС --- то есть возможно назначить,​ к примеру,​ зеркалирование для какого-либо каталога или файла (в планах). ​  +  * [[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 пока не рекомендуются к промышленному ​использованию),​ а также реализация различных политик избыточности на уровне объектов ФС --- то есть возможно назначить,​ к примеру,​ зеркалирование для какого-либо каталога или файла (в планах). ​  
-  * Сжатие (lza, zlib - реализовано, lz4 - в планах)+  * [[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) ​- реализовано;​ 
-  * Подтома (subvolumes);​ +  * [[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|создание инкрементальных архивов]]
-  * Дефрагментация смонтированной файловой системы. +  * [[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|Дефрагментация]] смонтированной файловой системы. 
-  * Copy-on-write (CoW) журналирование. +  * [[https://​help.ubuntu.ru/​wiki/​btrfs#​cow_-_copy_on_write|Copy-on-write]] (COW) журналирование. 
-  * Лимиты (отдельно для каждого подтома или группы подтомов,​ по фактически занимаемому месту или по "​официальному"​) +  * [[https://​help.ubuntu.ru/​wiki/​btrfs#​%D0%BA%D0%B2%D0%BE%D1%82%D1%8B|Лимиты]] (отдельно для каждого подтома или группы подтомов,​ по фактически занимаемому месту или по "​официальному"​) 
-  * Контроль целостности блоков данных и метаданных с помощью контрольных сумм.+  * Контроль целостности блоков данных и метаданных с помощью ​ ​[[https://​help.ubuntu.ru/​wiki/​btrfs#​%D0%BA%D0%BE%D0%BD%D1%82%D1%80%D0%BE%D0%BB%D1%8C%D0%BD%D1%8B%D0%B5_%D1%81%D1%83%D0%BC%D0%BC%D1%8B|контрольных сумм]]. Можно выбрать один из 4 алгоритмов.
   * Зеркалирование метаданных даже в однодисковой конфигурации (отключается на ssd).   * Зеркалирование метаданных даже в однодисковой конфигурации (отключается на ssd).
 +  * Поддержка [[https://​ru.wikipedia.org/​wiki/​Разрежённый_файл|разреженных файлов]]. ​
   * Полностью распределенное блокирование.   * Полностью распределенное блокирование.
   * Поддержка ACL.   * Поддержка ACL.
   * Защита от потери данных.   * Защита от потери данных.
-  * Выбор хэш-алгоритма (в планах,​ сейчас используется CRC-32 и изменить это нельзя). 
   * Поддержка NFS (пока не полная).   * Поддержка NFS (пока не полная).
   * Флаги совместимости,​ необходимые для изменения дискового формата в новых версиях btrfs с сохранением совместимости со старыми.   * Флаги совместимости,​ необходимые для изменения дискового формата в новых версиях btrfs с сохранением совместимости со старыми.
Строка 33: Строка 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 и не опасаться,​ что данные на диске будут храниться в формате не совместимом с драйверами.
Строка 63: Строка 63:
 Он автоматически скачивает последнюю доступную версию,​ компилирует и устанавливает в систему (в обход пакетной системы,​ что означает отсутствие автоматических ​ обновлений). Он автоматически скачивает последнюю доступную версию,​ компилирует и устанавливает в систему (в обход пакетной системы,​ что означает отсутствие автоматических ​ обновлений).
  
-<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>​
Строка 91: Строка 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>​Обратите внимание: ​cтандартный установщик Ubuntu, при выборе установки корневого раздела на btrfs без выделения /home на отдельный раздел,​ автоматически создаст два подтома:​ '​@'​ - для корня и '​@home'​ для домашнего каталога.</​note>​+<note important>​Обратите внимание: ​стандартный установщик Ubuntu, при выборе установки корневого раздела на btrfs без выделения /home на отдельный раздел,​ автоматически создаст два подтома:​ '​@'​ - для корня и '​@home'​ для домашнего каталога.</​note>​
  
 Подтома можно создавать,​ удалять и просматривать их список и т.п. Все возможности по работе с подтомами можно изучить по: Подтома можно создавать,​ удалять и просматривать их список и т.п. Все возможности по работе с подтомами можно изучить по:
Строка 110: Строка 134:
 Удаляется подтом командой ​ Удаляется подтом командой ​
   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 находится внутри подтома svol5, который размещен в каталоге dirA подтома svol1.</​note>​+Таким образомподтома ​- чрезвычайно гибкий инструмент для управления системой ​хранения 
  
 Посмотреть список подтомов можно командой:​ Посмотреть список подтомов можно командой:​
Строка 134: Строка 164:
 Что бы получить в точке монтирования ФС конкретный подтом,​ нужно в опциях монтирования указать имя (или 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
Строка 140: Строка 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
Строка 153: Строка 183:
  
 <​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>​
  
Строка 168: Строка 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 ​создает новый подтом ​как копию/клон ранее существовавшего  ​
  
 Посмотреть какие снимки были ранее сделаны с данного подтома можно в выводе команды: ​ Посмотреть какие снимки были ранее сделаны с данного подтома можно в выводе команды: ​
Строка 238: Строка 268:
 Что же происходит на противоположном конце, на стороне приемника данных?​ А тут, не смотря на то, что под именем home_BACKUP_new передавалась разница,​ в /​other/​home_BACKUP_new мы получим полное представление подобное тому, что осталось на стороне передатчика. Происходит это потому,​ что базовый снимок (home_BACKUP) есть и на стороне передатчика (там он вычитается из home_BACKUP_new),​ и на стороне приемника,​ где он "​складывается"​ с переданной разницей. ​   Что же происходит на противоположном конце, на стороне приемника данных?​ А тут, не смотря на то, что под именем home_BACKUP_new передавалась разница,​ в /​other/​home_BACKUP_new мы получим полное представление подобное тому, что осталось на стороне передатчика. Происходит это потому,​ что базовый снимок (home_BACKUP) есть и на стороне передатчика (там он вычитается из home_BACKUP_new),​ и на стороне приемника,​ где он "​складывается"​ с переданной разницей. ​  
  
-Теперь у нас в оригинальной btrfs и на приемной стороне по два одинаковых снимка:​ home_BACKUP и home_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
Строка 255: Строка 285:
 Восстановление данных производится в обратном порядке. И при этом, если на стороне приемника (рабочей btrfs) есть базовый снимок,​ который есть и на передающей стороне,​ то и при восстановлении также можно передать только разницу между самым последним снимком и тем базовым,​ который,​ есть у обоих сторон. Восстановление данных производится в обратном порядке. И при этом, если на стороне приемника (рабочей btrfs) есть базовый снимок,​ который есть и на передающей стороне,​ то и при восстановлении также можно передать только разницу между самым последним снимком и тем базовым,​ который,​ есть у обоих сторон.
  
-Пример полного скрипта:​ для резервного копирования корня ​и /home с рабочего диска (/dev/sda) на резервный (/dev/sdb), на обоих дисках btrfs находится во втором разделе:​+Пример полного скрипта:​ для резервного копирования корня с рабочего диска (/dev/sda) на резервный (/dev/sdb), на обоих дисках btrfs находится во втором разделе:​
 <code bash> <code bash>
 #!/bin/bash #!/bin/bash
Строка 264: Строка 294:
 mount /dev/sda2 $src mount /dev/sda2 $src
 mount /dev/sdb2 $dst mount /dev/sdb2 $dst
-### если первый запуск (нет базовых снимков) - создаем полный бекап 
 if [ -e $src/​root_BCKP ] if [ -e $src/​root_BCKP ]
-then +then # если первый запуск (нет базовых снимков) - создаем полный бекап 
- +  # Создаем базовый снимок (в режиме readonly)
-  # Создаем базовые снимки (в режиме readonly)+
   btrfs subvolume snapshot -r $src/@ $src/​root_BCKP   btrfs subvolume snapshot -r $src/@ $src/​root_BCKP
-  btrfs subvolume snapshot -r $src/@home $src/​home_BCKP 
   sync   sync
-  # Отправляем базовые снимки на резервный диск +  # Отправляем базовый снимок на резервный диск 
-  btrfs send $src/​root_BCKP | $dst/ +  btrfs send $src/​root_BCKP | btrfs receive ​$dst/ 
-  ​btrfs send $src/​home_BCKP | $dst/ +else # Не первый запуск - делаем ​инкрементальный бекап 
- +  # Переименовываем базовый снимок
-  ​ +
-else # Не первый запуск - инкрементальный бекап +
-  # Переименовываем базовые снимки+
   mv $src/​root_BCKP $src/​root_BCKP_prev   mv $src/​root_BCKP $src/​root_BCKP_prev
   mv $dst/​root_BCKP $dst/​root_BCKP_prev   mv $dst/​root_BCKP $dst/​root_BCKP_prev
-  mv $src/​home_BCKP $src/​home_BCKP_prev 
-  mv $dst/​home_BCKP $dst/​home_BCKP_prev 
   # Создаем текущие снимки   # Создаем текущие снимки
   btrfs subvolume snapshot -r $src/@ $src/​root_BACKUP ​           ​   btrfs subvolume snapshot -r $src/@ $src/​root_BACKUP ​           ​
-  btrfs subvolume snapshot -r $src/@home $src/​home_BACKUP ​           ​ 
   sync   sync
   # Отправка инкрементального бекапа   # Отправка инкрементального бекапа
   btrfs send -p $src/​root_BCKP_prev $src/​root_BACKUP | btrfs receive $dst/   btrfs send -p $src/​root_BCKP_prev $src/​root_BACKUP | btrfs receive $dst/
-  btrfs send -p $src/​home_BCKP_prev $src/​home_BACKUP | btrfs receive $dst/ 
 fi fi
- +# Сделано:​ В $dst/​root_BACKUP создана полная резервная копии корня.
-# Сделано:​ В $dst/​root_BACKUP ​$dst/​home_BACKUP ​созданы полные резервные копии корня и домашнего каталога пользователя. +
 # Размонтируем корни файловых систем # Размонтируем корни файловых систем
 umount $src umount $src
Строка 300: Строка 318:
 rmdir $src rmdir $src
 rmdir $dst rmdir $dst
-</​code> ​  ​+</​code>​
 ===== Квоты ===== ===== Квоты =====
 То что подтома разделяют общее пространство всей btrfs это и плюс (не возникает ситуации когда один раздел забит под завязку,​ а второй полупустой),​ но с другой стороны,​ это же и минус: подтом,​ куда, к примеру,​ по ошибке начали записываться данные в бесконечном цикле, быстро исчерпает место в btrfs и его не останется ни в одном другом подразделе. В случае подобных рисков полезно ограничивать то пространство,​ которое может использовать подтом. Т.е. в нашем примере,​ если бесконечная запись идет в раздел,​ место на котором ограниченное лимитом,​ то задача вызвавшая бесконечную запись получит ошибку как только кончится выделенный лимит (а не тогда когда кончится место во всей ФС). То что подтома разделяют общее пространство всей btrfs это и плюс (не возникает ситуации когда один раздел забит под завязку,​ а второй полупустой),​ но с другой стороны,​ это же и минус: подтом,​ куда, к примеру,​ по ошибке начали записываться данные в бесконечном цикле, быстро исчерпает место в btrfs и его не останется ни в одном другом подразделе. В случае подобных рисков полезно ограничивать то пространство,​ которое может использовать подтом. Т.е. в нашем примере,​ если бесконечная запись идет в раздел,​ место на котором ограниченное лимитом,​ то задача вызвавшая бесконечную запись получит ошибку как только кончится выделенный лимит (а не тогда когда кончится место во всей ФС).
Строка 365: Строка 383:
       -x        Включить тощие экстенты в метаданных #3.11 ядро и старше       -x        Включить тощие экстенты в метаданных #3.11 ядро и старше
     # -x уменьшает размер метаданных на 30%.      # -x уменьшает размер метаданных на 30%. 
 +Более полно [[https://​btrfs.wiki.kernel.org/​index.php/​Btrfstune|тут (англ.)]]\\
 Настройки нужно применять непосредственно к разделу на котором стоит btrfs, и раздел этот не должен быть смонтирован в момент выполнения этой команды. Настройки нужно применять непосредственно к разделу на котором стоит btrfs, и раздел этот не должен быть смонтирован в момент выполнения этой команды.
  
Строка 382: Строка 401:
  
 chattr/​lsattr позволяют задать и другие свойства файлов. Описание всех возможных атрибутов можно посмотреть в **man chattr**. chattr/​lsattr позволяют задать и другие свойства файлов. Описание всех возможных атрибутов можно посмотреть в **man chattr**.
 +
 +<note important>​Учтите - отключение COW автоматом блокирует возможность сжатия файлов.</​note>​
  
 <note important>​Как [[http://​forum.ubuntu.ru/​index.php?​topic=269699.msg2221269#​msg2221269|показали эксперименты]] btrfs пока не очень приспособлена для хранения образов виртуальных машин. Так же плохо дело обстоит с torrent клиентами ((даже включенное предварительное резервирование не позволяет избежать ужасающей фрагментации)). Если основная функция файловой системы - именно хранение образов дисков виртуальных машин или место для скачивания торентов,​ то лучше воспользоваться XFS или хотя-бы отключить COW на соответствующих каталогах.</​note>​ <note important>​Как [[http://​forum.ubuntu.ru/​index.php?​topic=269699.msg2221269#​msg2221269|показали эксперименты]] btrfs пока не очень приспособлена для хранения образов виртуальных машин. Так же плохо дело обстоит с torrent клиентами ((даже включенное предварительное резервирование не позволяет избежать ужасающей фрагментации)). Если основная функция файловой системы - именно хранение образов дисков виртуальных машин или место для скачивания торентов,​ то лучше воспользоваться XFS или хотя-бы отключить COW на соответствующих каталогах.</​note>​
-===== Упаковка данных ===== +===== Сжатие/​упаковка данных ===== 
-btrfs поддерживает автоматическую упаковку данных при записи и распаковку при чтении. Поддерживаются два (в перспективе ожидается триалгоритма сжатия:​ +btrfs поддерживает автоматическую упаковку данных при записи и распаковку при чтении. Поддерживаются три алгоритма сжатия:​ 
-  * zlib - эффективное сжатие в 2,7-3 раза, но довольно медленные и упаковка/​распаковка +  * [[https://​ru.wikipedia.org/​wiki/​Zlib|zlib]] достаточно ​эффективное сжатие в 2,7-3 раза, но довольно медленные и упаковка/​распаковка 
-  * lzo - быстрая упаковка/​распаковка,​ но не слишком эффективное сжатие примерно - в 2 раза или меньше +  * [[https://​ru.wikipedia.org/​wiki/​LZO|lzo]] - быстрая упаковка/​распаковка,​ но не слишком эффективное сжатие примерно - в 2 раза или меньше 
-  * zl4 (в будущих версиях) - еще более ​слабое сжатие чем lzo, но фантастические скорости упаковки/распаковки.+  * [[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) позволяет более гибко управлять тем, что на томе пакуется,​ а что нет. Однако нужно следить за наследованием и расстановкой свойств. 
  
-Надо заметить, что ​свойство файла/каталога compression это - надстройка над атрибутом 'с' (из числа расширенных атрибутов файлов, управлять которыми можно через chattr/​lsattr). И для того, чтобы ​снять атрибут compression ​можно просто выключить ​атрибут '​с'​  +Текущее состояние ​файла ​(упакован и как) определяется параметрами в i-node, ​а вот упаковывать ли вновь записываемыми денные определяется ​опциями монтирования и свойством сжатия задаваемом на каталогах и файлах (все опции монтирования см. [[wiki:​fstab#​btrfs|тут]] или [[https://​btrfs.wiki.kernel.org/​index.php/​Manpage/​btrfs(5)#​MOUNT_OPTIONS|параметры монтирования агл.(более полно)]])
-  chattr -R -c *   # снимает ​свойство ​compression ​со всех файлов рекурсивноначиная с текущего каталога+Вновь ​записываемые данные сжимаются
-А вот установить свойство compression через расширенный атрибут '​c'​ не удастсяведь кроме наличия самого по себе сжатия на файле ​должен быть ​настроен алгоритм упаковки (которых в btrfs белее чем ​один). Поэтому установить compression ​на файле/каталоге можно ​только командой **btrfs property set**+  * всегда: если файловая система смонтирована ​с **-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 предоставляет несколько команд для просмотра информации по использованию дискового пространства и состоянию файловой системы. Это команды:​
Строка 440: Строка 478:
 ==== 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
Строка 451: Строка 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
Строка 483: Строка 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
Строка 506: Строка 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
Строка 520: Строка 558:
 Эта команда показывает статистику ошибок и сбоев в работе каждого устройства (в примере их два). Эта команда показывает статистику ошибок и сбоев в работе каждого устройства (в примере их два).
        
 +<note important>​Вы обратили внимание на короткие формы записи команд использованные в примерах (например "d st" вместо "​device status"​)?​\\
 +Утилита btrfs имеет в своем составе скрипты авто-дополнения и вы можете набрав 1-2 буквы и нажав tab дополнять команды при наборе,​ однако если 1-2 буквы уникально идентифицируют команды,​ то их можно и не дополнять. Утилита прекрасно все дополняет сама внутри себя.</​note>​
 ===== Изменение размера btrfs ===== ===== Изменение размера btrfs =====
 btrfs поддерживает изменение размеров (увеличение и уменьшение) при смонтированной ФС. Само собой, для увеличения ФС нужно, чтобы содержащий ФС раздел был больше,​ чем размер ФС, а для уменьшения - в ФС должно быть достаточно свободного пространства для уменьшения. btrfs поддерживает изменение размеров (увеличение и уменьшение) при смонтированной ФС. Само собой, для увеличения ФС нужно, чтобы содержащий ФС раздел был больше,​ чем размер ФС, а для уменьшения - в ФС должно быть достаточно свободного пространства для уменьшения.
Строка 527: Строка 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
Строка 534: Строка 595:
   # -d  Выводить результаты (только при -B)   # -d  Выводить результаты (только при -B)
  
 +Все опции команды btrfs scrub можно посмотреть в 
 +  man btrfs-scrub
 =====Балансировка===== =====Балансировка=====
 При балансировке на btrfs пере-создаются метаданные и пере-распределяются данные файлов. Запускается балансировка командой:​ При балансировке на btrfs пере-создаются метаданные и пере-распределяются данные файлов. Запускается балансировка командой:​
Строка 561: Строка 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 на нескольких устройствах=====
  
Строка 593: Строка 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 или не подхватывать диски автоматом.\\
Строка 618: Строка 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
        
Строка 671: Строка 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. <note tip>​Еще одно интересное свойство RAID - возможность восстановления отдельных блоков данных,​ что может быть важно для SSD.
Строка 733: Строка 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.
Строка 742: Строка 817:
 Установщик Ubuntu не позволяет (пока) выбрать все опции ФС, и в частности указать,​ что на btrfs-разделе нужно использовать сжатие. Можно поставить систему на btrfs-раздел без сжатия и включить его после установки (указав нужные ключи монтирования). Но в этом случае сжиматься будут только новые и изменяемые файлы. ​ Установщик Ubuntu не позволяет (пока) выбрать все опции ФС, и в частности указать,​ что на btrfs-разделе нужно использовать сжатие. Можно поставить систему на btrfs-раздел без сжатия и включить его после установки (указав нужные ключи монтирования). Но в этом случае сжиматься будут только новые и изменяемые файлы. ​
  
-Сжать записанные ранее файлы поможет дефрагментация с ключом -с<​тип сжатия ​lzo или gzip>. При этом дефрагментацию можно выполнить только на смонтированном подтоме,​ и даже с открытыми на нём файлами (например,​ с корнем,​ с которого загружена сама ОС), дефрагментатор не уплотнит те файлы, которые открыты в данный момент,​ и выдаст предупреждение об этом.+Сжать записанные ранее файлы поможет дефрагментация с ключом -с<​тип сжатия>​. При этом дефрагментацию можно выполнить только на смонтированном подтоме,​ и даже с открытыми на нём файлами (например,​ с корнем,​ с которого загружена сама ОС), дефрагментатор не уплотнит те файлы, которые открыты в данный момент,​ и выдаст предупреждение об этом.
  
 Но можно сразу поставить систему на том с компрессией,​ это можно сделать 2-мя способами. Но можно сразу поставить систему на том с компрессией,​ это можно сделать 2-мя способами.
Строка 784: Строка 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.msg2167728#​msg2167728|тут]]). Разработчики btrfs прорабатывают вариант специального [[https://​btrfs.wiki.kernel.org/​index.php/​Project_ideas#​Swap_file_support|API ​для работы со swap-файлом на btrfs]], но есть и обходной путь: +
-swapfile ​можно ​создать ​как loop устройство. Давайте рассмотрим пример создания своп-файла размером 4Gb в файле ​/swap.+
  
-Для избежания ​фрагментации swap-файла на HDD (на SSD это не так критично) стоит отключить COW механизм, это надо делать на пустом файле+Начиная с версии ядра 5.0+ на btrfs можно создать swap-файл, но с некоторыми ограничениями: ​swap-файл ​должен располагаться целиком ​на одном устройстве ((его нельзя будет создать на любом ​типе хранения кроме single)), создаваться ​обязательно с отключенным COW и сжатием((На btfs-wiki указано,​ что отключение COW блокирует возможность архивирования)). Кроме того swap-файл ​не может попасть в снимок((Если swap-файл смонтирован то невозможно сделать ​снимок с под-тома где он расположен,​ отключенный swap-файл дает ​сделать снимок вместе со swap-файлом, но больше такой ​swap-файл не подключить)). В перспективе предполагается снять часть ограничений.\\
-  touch /swap +
-  chattr +C /swap +
  
-Далее код +С учетом озвученного, пока не сняты ограничения,​ swap-файл стоит создавать в отдельном ​(специально для него созданном под-томе).
-  swapfile=$(losetup ​-f) +
-  truncate -s 4G /swap +
-  losetup $swapfile /swap +
-  mkswap ​ $swapfile +
-  swapon ​ $swapfile+
  
-добавляется в файл /​etc/​rc.local ​до строки exit 0, после ​чего выполняется +Предположим что у нас btrfs на одном устройстве ​и у нас ​подходящая версия ядра 5.0+, дальше все довольно просто:
-  sudo chmod +x /​etc/​rc.local+
  
 +  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-устройство. Давайте рассмотрим пример создания своп-файла этим методом.
 +
 +Несмотря на то, что отключение COW не помогает,​ но для избежания фрагментации swap-файла на HDD (на SSD это не так критично) стоит все-таки отключить COW. Компрессию тоже стоит отключать т.к. это еще сильнее затормозит и без того не быстрое решение.
 +
 +  touch /swap                # создаем пустой файл /swap - COW можно отключить только на пустом файле
 +  chmod go-r /swap           # swap должен иметь права 600, а touch проставляет права 644
 +  chattr +C /swap            # отключаем COW (сжатие тоже отключается при отключении COW)
 +  fallocate swap -l4g        # выделяем место под файл размером 4Gib
 +  swapfile=$(losetup -f)     # находим первое свободное loop-устройство ​
 +  losetup $swapfile /swap    # настраиваем доступ к файлу /swap через loop-устройство ​
 +  mkswap ​ $swapfile ​         # создаем внутреннюю разметку для swap-а на loop-устройстве
 +  swapon ​ $swapfile ​         # подключаем swap
 +
 +Для подключения такого swap после перезагрузки добавьте код начиная с swapfile=$(losetup -f) в файл /​etc/​rc.local (до строки exit 0).
 +
 +<note important>​И все же для ядер младше 5.0 предпочтительнее использовать swap на разделе диска.</​note>​
 ======Обслуживание btrfs====== ======Обслуживание btrfs======
 Как и любая другая ФС, btrfs может работать много лет, не требуя какого-то особого обслуживания,​ однако мы озвучим те действия,​ которые полезно периодически проводить для поддержания "​здоровья"​ btrfs. Как и любая другая ФС, btrfs может работать много лет, не требуя какого-то особого обслуживания,​ однако мы озвучим те действия,​ которые полезно периодически проводить для поддержания "​здоровья"​ btrfs.
Строка 815: Строка 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 не удастся смонтировать, то придется брать ситуацию в свои руки. Попробуем описать возможные пути исправления этой ситуации.
  
 =====Первым делом..===== =====Первым делом..=====
Строка 893: Строка 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 important>//​Балансировка//​\\ <note important>//​Балансировка//​\\
-Время от времени запускайте балансировку для профилактики. Журнал и метаданные имеют свойство сильно разрастаться,​ в результате чего Вы будете видеть,​ что свободного места хоть отбавляй,​ а по факту - при попытке записать файл, обновить систему вы получите ошибку No space left on device. Для устранение которой придется где то искать ​съемный носитель,​ для того что бы расширить существующую ФС на него или перенести часть файлов.+Время от времени запускайте балансировку для профилактики. Журнал и метаданные ​(особенно в более старых версиях ФС) имеют свойство сильно разрастаться,​ в результате чего Вы будете видеть,​ что свободного места хоть отбавляй,​ а по факту - при попытке записать файл, обновить систему вы получите ошибку No space left on device. Для устранение которой придется где то искать ​дополнительный носитель,​ для того что бы расширить существующую ФС на него или перенести часть файлов.
 </​note>​ </​note>​
 <​note>//​Актуально для HDD и дисковых массивов//​\\ <​note>//​Актуально для HDD и дисковых массивов//​\\
Строка 910: Строка 1020:
 ---- ----
 <​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}}