Различия
Здесь показаны различия между двумя версиями данной страницы.
Предыдущая версия справа и слева Предыдущая версия Следующая версия | Предыдущая версия | ||
wiki:btrfs [2020/01/25 15:18] [Сжатие/упаковка данных] |
wiki:btrfs [2021/06/04 11:08] [swap файл на btrfs] |
||
---|---|---|---|
Строка 20: | Строка 20: | ||
* [[https://help.ubuntu.ru/wiki/btrfs#cow_-_copy_on_write|Copy-on-write]] (COW) журналирование. | * [[https://help.ubuntu.ru/wiki/btrfs#cow_-_copy_on_write|Copy-on-write]] (COW) журналирование. | ||
* [[https://help.ubuntu.ru/wiki/btrfs#%D0%BA%D0%B2%D0%BE%D1%82%D1%8B|Лимиты]] (отдельно для каждого подтома или группы подтомов, по фактически занимаемому месту или по "официальному") | * [[https://help.ubuntu.ru/wiki/btrfs#%D0%BA%D0%B2%D0%BE%D1%82%D1%8B|Лимиты]] (отдельно для каждого подтома или группы подтомов, по фактически занимаемому месту или по "официальному") | ||
- | * Контроль целостности блоков данных и метаданных с помощью контрольных сумм. | + | * Контроль целостности блоков данных и метаданных с помощью [[https://help.ubuntu.ru/wiki/btrfs#%D0%BA%D0%BE%D0%BD%D1%82%D1%80%D0%BE%D0%BB%D1%8C%D0%BD%D1%8B%D0%B5_%D1%81%D1%83%D0%BC%D0%BC%D1%8B|контрольных сумм]]. Можно выбрать один из 4 алгоритмов. |
* Зеркалирование метаданных даже в однодисковой конфигурации (отключается на ssd). | * Зеркалирование метаданных даже в однодисковой конфигурации (отключается на ssd). | ||
* Поддержка [[https://ru.wikipedia.org/wiki/Разрежённый_файл|разреженных файлов]]. | * Поддержка [[https://ru.wikipedia.org/wiki/Разрежённый_файл|разреженных файлов]]. | ||
Строка 26: | Строка 26: | ||
* Поддержка ACL. | * Поддержка ACL. | ||
* Защита от потери данных. | * Защита от потери данных. | ||
- | * Выбор хэш-алгоритма (в планах, сейчас используется CRC-32 и изменить это нельзя). | ||
* Поддержка NFS (пока не полная). | * Поддержка NFS (пока не полная). | ||
* Флаги совместимости, необходимые для изменения дискового формата в новых версиях btrfs с сохранением совместимости со старыми. | * Флаги совместимости, необходимые для изменения дискового формата в новых версиях btrfs с сохранением совместимости со старыми. | ||
Строка 92: | Строка 91: | ||
Вот мы и получили в /mnt площадку для экспериментов с btrfs. Можно приступать к изучению возможностей этой файловой системы. | Вот мы и получили в /mnt площадку для экспериментов с btrfs. Можно приступать к изучению возможностей этой файловой системы. | ||
- | ====== Возможности btrfs ======сле окончания записи. | + | |
+ | ======Возможности btrfs====== | ||
<note important>Авторы статьи рекомендуют сначала ознакомится с возможностями btrfs, а уже после этого (со знанием дела) подходить к вопросам по установке системы на btrfs или по использованию btrfs как хранилища данных.</note> | <note important>Авторы статьи рекомендуют сначала ознакомится с возможностями btrfs, а уже после этого (со знанием дела) подходить к вопросам по установке системы на btrfs или по использованию btrfs как хранилища данных.</note> | ||
Строка 134: | Строка 134: | ||
Удаляется подтом командой | Удаляется подтом командой | ||
btrfs subvolume delete {путь по которому смонтирована btrfs}/{путь и имя удаляемого подтома} | btrfs subvolume delete {путь по которому смонтирована btrfs}/{путь и имя удаляемого подтома} | ||
+ | | ||
+ | В последнних версиях btrfs удалить подтом можно также командой rm -r или rmdir. | ||
+ | С точки зрения файловой системы подтом и каталог различаются только методом создания (ранее различались еще удалением). Во всем остальном подтома не отличаются от каталогов. | ||
+ | Переименовывается подтом обычной командой mv. | ||
- | С точки зрения файловой системы подтом и каталог различаются только методами создания и удаления. Во всем остальном подтома не отличаются от каталогов. | + | <note tip>Несмотря на то, что подтом и каталог не различимы с точки зрения пользователя (если не считать команды создания), для администратора подтом дает значительно больше возможностей, чем каталог. Ведь подтом, по сути, - независимая файловая система, в которой можно настроить отличные параметры от родительского подтома, а также можно установить квоты или делать снимки (т.е. быстрые резервные копии).</note> |
- | К примеру, переименовать подтом можно просто командой mv. | + | |
- | + | ||
- | <note tip>Несмотря на то, что подтом и каталог не различимы с точки зрения пользователя (если не считать команд создания и удаления), для администратора подтом дает значительно больше возможностей, чем каталог. Ведь подтом, по сути, - независимая файловая система, в которой можно настроить отличные параметры от родительского подтома, а также можно установить квоты или делать снимки (т.е. быстрые резервные копии).</note> | + | |
Строка 437: | Строка 438: | ||
<note tip>Существующие файлы которые не перезаписываются никак не меняют свое состояние сжатия, несмотря ни на опции монтирования, ни на свойства которые на них устанавливают. Если нужно упаковать всю ФС, то нужно воспользоваться дефрагментацией с ключом -c. | <note tip>Существующие файлы которые не перезаписываются никак не меняют свое состояние сжатия, несмотря ни на опции монтирования, ни на свойства которые на них устанавливают. Если нужно упаковать всю ФС, то нужно воспользоваться дефрагментацией с ключом -c. | ||
- | btrfs filesystem defrag -r -c lzo {путь куда смонтирован подтом btrfs} # упаковка всех файлов на ФС | + | btrfs fi defrag -rc {путь куда смонтирован подтом btrfs} # упаковка всех файлов на ФС |
Распаковка файлов с помощью команды defrag на данный момент невозможна. | Распаковка файлов с помощью команды defrag на данный момент невозможна. | ||
</note> | </note> | ||
Строка 568: | Строка 569: | ||
===== Контрольные суммы ===== | ===== Контрольные суммы ===== | ||
btrfs использует для контроля целостности данных контрольные суммы. Они в частности позволяют восстанавливать целостность данных на RAID массивах в случае, когда с одним из устройств временно пропадает связь (и при этом массив продолжает использоваться дальше в режиме degraded). | btrfs использует для контроля целостности данных контрольные суммы. Они в частности позволяют восстанавливать целостность данных на RAID массивах в случае, когда с одним из устройств временно пропадает связь (и при этом массив продолжает использоваться дальше в режиме degraded). | ||
+ | |||
+ | Поддерживаются алгоритм CRC32C по умолчанию и 3 дополнительных алгоритма (с версии ядра 5.5). | ||
+ | |||
+ | CRC32C (32-бит) - По умолчанию, лучший в плане совместимости, очень быстрый (современные процессоры поддерживают его на уровне инструкций), не устойчивый к коллизиям, но вполне приличный уровень определения ошибок. | ||
+ | |||
+ | XXHASH (64-бит) - хорошая замена CRC32C, очень быстрый (оптимизирован для использования инструкций современных процессоров), хорошая устойчивость к коллизиям и хороший уровень определения ошибок. | ||
+ | |||
+ | SHA256 (256-бит) - криптографически устойчивый хэш, довольно медленный, но может быть ускорен аппаратными ускорителями, сертифицирован FIPS и довольно широко используется. | ||
+ | |||
+ | BLAKE2b (256-бит) - криптографически устойчивый хэш, довольно быстрый при использовании SIMD расширений команд процессоров, не стандартизован, но основан на BLAKE - одном из финалистов конкурса SHA3, широко используется, алгоритм - часть BLAKE2b-256, который оптимизирован для 64-битных платформ. | ||
+ | |||
+ | Размер хэша влияет на размер части блока данных хранящего контрольную сумму. Блок метаданных имеет фиксированный объем до 256 бит (32 байта), таким образом тут не возникает увеличения. Каждый блок данных имеет индивидуальную контрольную сумму, сохраняющуюся вместе с данными для организации b-tree листа. | ||
+ | |||
+ | Сравнительные производительности алгоритмов, в сравнении с CRC32C на платформе Intel 3.5GHz: | ||
+ | |||
+ | Digest Cycles/4KiB Ratio | ||
+ | CRC32C 1700 1.00 | ||
+ | XXHASH 2500 1.44 | ||
+ | SHA256 105000 61 | ||
+ | BLAKE2b 22000 13 | ||
+ | |||
Проверка/пересчет контрольных сумм - длительная и потому фоновая операция (если не указать явно выполнять интерактивно). Поэтому отдельно можно запустить пересчёт (команда start), остановить (cancel) и посмотреть статус (status). Пример команды запуска: | Проверка/пересчет контрольных сумм - длительная и потому фоновая операция (если не указать явно выполнять интерактивно). Поэтому отдельно можно запустить пересчёт (команда start), остановить (cancel) и посмотреть статус (status). Пример команды запуска: | ||
btrfs scrub start -Bd /home | btrfs scrub start -Bd /home | ||
Строка 840: | Строка 862: | ||
В состав GRUB входят драйвера btrfs. Однако это очень урезанный драйвер и он не поддерживает запись. А отсутствие записи не позволяет GRUB-у записать служебную переменную recordfail. GRUB проверяет значение этой переменной и если она не сброшена, то обязательно показывается меню загрузки. Каждый раз когда GRUB начинает загружать ОС он устанавливает эту переменную в 1, а сбрасывает ее скрипт который запускается после загрузки системы. | В состав GRUB входят драйвера btrfs. Однако это очень урезанный драйвер и он не поддерживает запись. А отсутствие записи не позволяет GRUB-у записать служебную переменную recordfail. GRUB проверяет значение этой переменной и если она не сброшена, то обязательно показывается меню загрузки. Каждый раз когда GRUB начинает загружать ОС он устанавливает эту переменную в 1, а сбрасывает ее скрипт который запускается после загрузки системы. | ||
- | Т.к. сохранить значение recordfail GRUB на btrfs не может, то он считает, что каждая загрузка происходит после фейла прошлой загрузки (т.е. recordfail=1). И в таком случае меню загрузки показывается 10 секунд. Изменить этот тайм-аут можно изменив в /etc/default/grub значение переменной GRUB_RECORDFAIL_TIMEOUT. После задания разумного таймаута в /etc/default/grub нужно запустить update-grub с правами root-а чтобы пересоздать скрипты загрузки GRUB-а. | + | Т.к. сохранить значение recordfail GRUB на btrfs не может, то он считает, что каждая загрузка происходит после фейла прошлой загрузки (т.е. recordfail=1). И в таком случае меню загрузки показывается 10 или даже 30 секунд. Изменить этот тайм-аут можно изменив в /etc/default/grub значение переменной **GRUB_RECORDFAIL_TIMEOUT**. После задания разумного таймаута в /etc/default/grub нужно запустить update-grub с правами root-а чтобы пересоздать скрипты загрузки GRUB-а. |
| | ||
=====swap файл на btrfs===== | =====swap файл на btrfs===== | ||
+ | <note important>Наличие работающего swap-файла на подтоме не дает возможности делать снимки с этого подтома. Поэтому для использования снимков необходимо размещать swap-файл на отдельном подтоме. Например создать @swap подтом и монтировать его в /swap.</note> | ||
+ | |||
Начиная с версии ядра 5.0+ на btrfs можно создать swap-файл, но с некоторыми ограничениями: swap-файл должен располагаться целиком на одном устройстве ((его нельзя будет создать на любом типе хранения кроме single)), создаваться обязательно с отключенным COW и сжатием((На btfs-wiki указано, что отключение COW блокирует возможность архивирования)). Кроме того swap-файл не может попасть в снимок((Если swap-файл смонтирован то невозможно сделать снимок с под-тома где он расположен, отключенный swap-файл дает сделать снимок вместе со swap-файлом, но больше такой swap-файл не подключить)). В перспективе предполагается снять часть ограничений.\\ | Начиная с версии ядра 5.0+ на btrfs можно создать swap-файл, но с некоторыми ограничениями: swap-файл должен располагаться целиком на одном устройстве ((его нельзя будет создать на любом типе хранения кроме single)), создаваться обязательно с отключенным COW и сжатием((На btfs-wiki указано, что отключение COW блокирует возможность архивирования)). Кроме того swap-файл не может попасть в снимок((Если swap-файл смонтирован то невозможно сделать снимок с под-тома где он расположен, отключенный swap-файл дает сделать снимок вместе со swap-файлом, но больше такой swap-файл не подключить)). В перспективе предполагается снять часть ограничений.\\ | ||
+ | |||
+ | С учетом озвученного, пока не сняты ограничения, swap-файл стоит создавать в отдельном (специально для него созданном под-томе). | ||
Предположим что у нас btrfs на одном устройстве и у нас подходящая версия ядра 5.0+, дальше все довольно просто: | Предположим что у нас btrfs на одном устройстве и у нас подходящая версия ядра 5.0+, дальше все довольно просто: | ||
- | touch /swap # создаем пустой файл /swap - COW можно отключить только на пустом файле | + | btrfs su cr /swap # создаем отдельный под-том |
- | chmod go-r /swap # swap должен иметь права 600, а touch проставляет права 644 | + | touch /swap/swap # создаем пустой файл /swap - COW можно отключить только на пустом файле |
- | chattr +C /swap # отключаем COW (сжатие тоже отключается при отключении COW) | + | chmod go-r /swap/swap # swap должен иметь права 600, а touch проставляет права 644 |
- | fallocate /swap -l4g # выделяем место под файл 4Gib | + | chattr +C /swap/swap # отключаем COW (сжатие тоже отключается при отключении COW) |
- | mkswap /swap # создаем внутреннюю разметку в файле для swap-а | + | fallocate /swap/swap -l4g # выделяем место под файл 4Gib |
- | swapon /swap # подключаем swap | + | mkswap /swap/swap # создаем внутреннюю разметку в файле для swap-а |
+ | swapon /swap/swap # подключаем swap | ||
<note important>Важно выделять место под swap-файл именно командой fallocate. Если создать пустой файл командой truncate, то он фактически останется пустым т.к. в btrfs используется механика [[https://ru.wikipedia.org/wiki/Разрежённый_файл|sparse files]] и mkswap отработает успешно, но swapon сообщит, что в файле есть "дырки", т.е. не размеченные на диск области файла.</note> | <note important>Важно выделять место под swap-файл именно командой fallocate. Если создать пустой файл командой truncate, то он фактически останется пустым т.к. в btrfs используется механика [[https://ru.wikipedia.org/wiki/Разрежённый_файл|sparse files]] и mkswap отработает успешно, но swapon сообщит, что в файле есть "дырки", т.е. не размеченные на диск области файла.</note> | ||
Строка 858: | Строка 885: | ||
Для автоматического монтирования файла в последующем нужно в /etc/fstab добавить следующую строку: | Для автоматического монтирования файла в последующем нужно в /etc/fstab добавить следующую строку: | ||
- | /swap none swap swap 0 0 | + | /swap/swap none swap sw 0 0 |
До версии 5.0 использование swap-файла на btrfs могло привести [[http://forum.ubuntu.ru/index.php?topic=207432.msg2167728#msg2167728|к разрушению структуры файловой системы]] (отключение COW и компрессии не помогало избежать проблем) и поэтому драйвер не дает активировать своп в swap-файле созданном на btrfs. Можно было создать не очень быстрый и с дополнительными расходами оперативной памяти((что в ситуации с переполнением памяти может привести к не совсем предсказуемым последствиям)) swap-файл через loop-устройство. Давайте рассмотрим пример создания своп-файла этим методом. | До версии 5.0 использование swap-файла на btrfs могло привести [[http://forum.ubuntu.ru/index.php?topic=207432.msg2167728#msg2167728|к разрушению структуры файловой системы]] (отключение COW и компрессии не помогало избежать проблем) и поэтому драйвер не дает активировать своп в swap-файле созданном на btrfs. Можно было создать не очень быстрый и с дополнительными расходами оперативной памяти((что в ситуации с переполнением памяти может привести к не совсем предсказуемым последствиям)) swap-файл через loop-устройство. Давайте рассмотрим пример создания своп-файла этим методом. | ||
Строка 1002: | Строка 1029: | ||
[[https://btrfs.wiki.kernel.org/index.php/Main_Page|Официальная вики]]\\ | [[https://btrfs.wiki.kernel.org/index.php/Main_Page|Официальная вики]]\\ | ||
- | [[https://btrfs.wiki.kernel.org/index.php/Mount_options|Параметры монтирования агл.]]\\ | + | [[https://btrfs.wiki.kernel.org/index.php/Manpage/btrfs(5)#MOUNT_OPTIONS|Параметры монтирования агл.]]\\ |
[[http://help.ubuntu.ru/wiki/fstab#btrfs|Перевод параметров]]\\ | [[http://help.ubuntu.ru/wiki/fstab#btrfs|Перевод параметров]]\\ | ||
{{tag>btrfs ext2 ext3 ext4 compression lzo gzip fstab}} | {{tag>btrfs ext2 ext3 ext4 compression lzo gzip fstab}} |