Различия
Здесь показаны различия между двумя версиями данной страницы.
Предыдущая версия справа и слева Предыдущая версия Следующая версия | Предыдущая версия | ||
wiki:btrfs [2020/05/03 09:25] [Сжатие/упаковка данных] Исправление ошибки. Опция -с не принимает никаких аргументов. И если используем сокращение defrag, думаю можно и fi. |
wiki:btrfs [2021/06/04 11:08] (текущий) [swap файл на btrfs] |
||
---|---|---|---|
Строка 862: | Строка 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===== | ||
Строка 868: | Строка 868: | ||
Начиная с версии ядра 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> | ||
Строка 882: | Строка 885: | ||
Для автоматического монтирования файла в последующем нужно в /etc/fstab добавить следующую строку: | Для автоматического монтирования файла в последующем нужно в /etc/fstab добавить следующую строку: | ||
- | /swap none swap sw 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-устройство. Давайте рассмотрим пример создания своп-файла этим методом. |