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

Различия

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

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

Предыдущая версия справа и слева Предыдущая версия
Следующая версия
Предыдущая версия
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-устройство. Давайте рассмотрим пример создания своп-файла этим методом.