вы используете раздел только для резервного копирования?
Руи Ф. Рибейро
1
Это подт @homeустановлен на /home, с btrbkрезервными копиями в подобъеме btrbk-snap. Для файловой системы, которая поддерживает до 2 ^ 64 снимков, я ожидал бы, что у нее будет способ увеличить размер метаданных ...
@ EmmanuelRosa у меня есть. Какую часть вы считаете полезной?
Том Хейл,
Есть второй, который обсуждает перебалансировку метаданных. Возможно, с правильным фильтром вы можете выделить больше места для блоков метаданных.
Эммануэль Роза
Ответы:
7
TL; DR Метаданные (если btrfs не страдает от общей нехватки места) автоматически увеличатся. В тех случаях, когда нераспределенного свободного пространства не существует, автоматическое увеличение запирается. Однако если части данных btrfsбыло выделено больше места, чем нужно, то это можно перераспределить. Это называется balance-ing в btrfs.
Предполагая, что на вспомогательном блочном (ых) устройстве (ах) блока достаточно нераспределенной памяти, btrfsчасть метаданных файловой системы автоматически выделяет память - как предполагается OP - для увеличения / расширения метаданных.
Таким образом, ответ: да (при условии, что в памяти нет условий нехватки памяти / свободного места btrfs) , метаданные будут автоматически увеличены, как таковые:
(1) Мы рассмотрим некоторые начальные настройки распределения btrfs (на 40GBустройстве).
(2) Как видно, выделенное пространство в файловой системе для хранения метаданных составляет 1,55 ГБ, из которых 1,33 ГБ, следовательно, используется почти все (это может быть ситуация, возникающая в случае ОП)
(3) Теперь мы провоцируем увеличение метаданных, которые будут добавлены. Для этого мы копируем папку / home, используя --reflink=alwaysопцию cpкоманды.
$> cp -r --reflink=awlways /home /home.copy
(4) Поскольку (как мы предполагаем, в / home было много файлов), когда в файловую систему было добавлено много новых данных, из-за того, что мы использовали, --reflinkпрактически не используется дополнительное пространство для реальных данных, он использует Копирование при записи, механизм. Короче говоря, в основном метаданные были добавлены в файловую систему. Мы можем иметь, следовательно, другой взгляд
Как видно, пространство, выделенное для метаданных, используемых в этом btrfs, автоматически увеличивается и расширяется.
Поскольку это происходит автоматически, пользователь обычно не обнаруживает его. Однако есть некоторые случаи, в основном те, в которых вся файловая система уже в значительной степени заполнена. В этих случаях btrfsможет начаться «заикание» и не удастся автоматически увеличить выделенное пространство для метаданных. Причина может быть, например, в том, что все пространство уже выделено для частей (Data, System, Metadata, GlobalReserve). Заблуждение, это может быть еще случай, когда есть очевидное пространство. Примером может быть следующий вывод:
Как можно видеть, система все- 40GiBтаки распределена, однако, несколько не в порядке balance, поскольку, хотя еще есть место для данных новых файлов, метаданные (как в случае OP) остаются низкими. Автоматическое выделение памяти для устройств, поддерживающих btrfsфайловую систему, больше невозможно (просто сложите итоги распределения, 38.12G + 1.55G + .. ~ = 40GiB).
Однако, поскольку имеется избыточное свободное пространство, которое было выделено для dataчасти файловой системы, теперь это может быть полезным, чтобы сбалансировать btrfs. Баланс будет означать перераспределение уже выделенного пространства.
В случае OP можно предположить, что по какой-то причине возник дисбаланс между различными частями btrfsраспределения.
К сожалению, простая команда sudo btrfs balance -dusage=0, которая в принципе должна искать пустые блоки (выделенные для данных) и размещать их для лучшего пользователя (это было бы почти исчерпанным пространством для метаданных), может потерпеть неудачу, потому что не могут быть найдены полностью пустые блоки данных.
Следовательно, btrfsразработчики рекомендуют последовательно увеличивать лимит использования «когда блоки данных должны быть переставлены, чтобы освободить место»
Следовательно, если результат
$> sudo btrfs balance -dusage=0
Done, had to relocate 0 out of 170 chunks
не показывает перемещение, нужно сделать некоторые
$> sudo btrfs balance -dusage=5
Done, had to relocate 0 out of 170 chunks <--(again fail)
$> sudo btrfs balance -dusage=10
Done, had to relocate 0 out of 170 chunks <--(again fail)
$> sudo btrfs balance -dusage=15
Done, had to relocate 2 out of 170 chunks <--(success)
Другой ответ намекал на влияние btrfsразмера узла, который несколько влияет на скорость увеличения метаданных. Размер узла (как упоминалось в другом ответе) устанавливается только один раз во mkfs.btrfsвремя создания файловой системы. Теоретически, можно было бы уменьшить размер метаданных, если бы было возможно изменить более низкое значение для размера узла, если это было возможно (это не так!). Однако размер узла не сможет помочь расширить или увеличить пространство метаданных, выделенное каким-либо образом. Вместо этого, это могло бы только помочь сохранить пространство в первую очередь. Однако меньший размер узлов не гарантирует уменьшения размера метаданных. Действительно, некоторые случаи могут показывать, что большие размеры узлов уменьшают длину обхода дерева btrfs, поскольку заметки могут содержать больше «ссылок».
Согласно FAQ в btrfs wiki , это невозможно и вряд ли будет реализовано.
Могу ли я изменить размер блока метаданных без воссоздания файловой системы?
Нет, значение, переданное в mkfs.btrfs -n SIZE, не может быть изменено после создания файловой системы. Резервное копирование / восстановление не требуется. Обратите внимание, что это, вероятно, никогда не будет реализовано, потому что для этого потребуются серьезные обновления основных функций.
Вы можете перенести существующую файловую систему btrfs на новую, которая имеет больший размер -n SIZE. Вы можете даже добавить его в существующую файловую систему, используя RAID-массив btrfs и баланс, а затем удалить старую файловую систему.
Существует разница между размером узла (который, как вы заявляете, может быть установлен только один раз при создании файловой системы) и размером метаданных, который imho и представляет в btrfs filesystem df /строке вывода команд Metadata, single: total=xxGiB, used=xxx.
человечествоANDpeace
В чем ваша точка зрения? Конечно, есть разница, но это не вопрос мнения. -nустанавливает размер каждого блока метаданных, а также btrfs filesystem dfпоказывает пространство, занимаемое этими блоками. Если у исходного автора сообщения слишком много места занято метаданными по сравнению с фактическими данными, они должны уменьшить размер -n, чтобы блоки метаданных имели меньший минимальный размер (меньше занимаемого места, но больше фрагментации).
etskinner
3
ОП спрашивает, как «увеличить / расширить пространство, выделенное для метаданных», следовательно, ваш -nответ «невозможно установить размер узла ( опция)» - imho, а не в точку. Поскольку, когда он спрашивает далее «или [выделенное пространство для метаданных] автоматически расширяется?», Намекает, что это не размер узла, а выделенное пространство, в котором он заинтересован. Поэтому ответ должен быть «да». Вы, конечно, правы, намекая на то, что -nнастройка косвенно влияет на размер метаданных, но вопрос, кажется, больше направлен на выделение памяти для метаданных, а не на размер заметки одного метаданных ....
humanityANDpeace
... скажем, например, что на вспомогательном блочном устройстве есть 100 ГБ неиспользуемого пространства, тогда в случае, если выделенная / выделенная память для метаданных будет автоматически расширена (как правильно предположил ОП). С btrfsоднако это не uncommen, что все отступающие устройства / память, уже в отведенном blockgroups данных, что означает , что помимо свободной памяти (для самих данных), ошибки «нет пространства» генерируются. Следовательно, пользователю необходимо попытаться выполнить некоторые из них btrfs balance, которые, если в других сегментах еще есть место, могут перераспределить это, чтобы увеличить недостающее пространство части метаданных.
@home
установлен на/home
, сbtrbk
резервными копиями в подобъемеbtrbk-snap
. Для файловой системы, которая поддерживает до 2 ^ 64 снимков, я ожидал бы, что у нее будет способ увеличить размер метаданных ...Ответы:
TL; DR Метаданные (если btrfs не страдает от общей нехватки места) автоматически увеличатся. В тех случаях, когда нераспределенного свободного пространства не существует, автоматическое увеличение запирается. Однако если части данных
btrfs
было выделено больше места, чем нужно, то это можно перераспределить. Это называетсяbalance
-ing в btrfs.Предполагая, что на вспомогательном блочном (ых) устройстве (ах) блока достаточно нераспределенной памяти,
btrfs
часть метаданных файловой системы автоматически выделяет память - как предполагается OP - для увеличения / расширения метаданных.Таким образом, ответ: да (при условии, что в памяти нет условий нехватки памяти / свободного места
btrfs
) , метаданные будут автоматически увеличены, как таковые:(1) Мы рассмотрим некоторые начальные настройки распределения btrfs (на
40GB
устройстве).(2) Как видно, выделенное пространство в файловой системе для хранения метаданных составляет 1,55 ГБ, из которых 1,33 ГБ, следовательно, используется почти все (это может быть ситуация, возникающая в случае ОП)
(3) Теперь мы провоцируем увеличение метаданных, которые будут добавлены. Для этого мы копируем папку / home, используя
--reflink=always
опциюcp
команды.(4) Поскольку (как мы предполагаем, в / home было много файлов), когда в файловую систему было добавлено много новых данных, из-за того, что мы использовали,
--reflink
практически не используется дополнительное пространство для реальных данных, он использует Копирование при записи, механизм. Короче говоря, в основном метаданные были добавлены в файловую систему. Мы можем иметь, следовательно, другой взглядКак видно, пространство, выделенное для метаданных, используемых в этом
btrfs
, автоматически увеличивается и расширяется.Поскольку это происходит автоматически, пользователь обычно не обнаруживает его. Однако есть некоторые случаи, в основном те, в которых вся файловая система уже в значительной степени заполнена. В этих случаях
btrfs
может начаться «заикание» и не удастся автоматически увеличить выделенное пространство для метаданных. Причина может быть, например, в том, что все пространство уже выделено для частей (Data, System, Metadata, GlobalReserve). Заблуждение, это может быть еще случай, когда есть очевидное пространство. Примером может быть следующий вывод:Как можно видеть, система все-
40GiB
таки распределена, однако, несколько не в порядкеbalance
, поскольку, хотя еще есть место для данных новых файлов, метаданные (как в случае OP) остаются низкими. Автоматическое выделение памяти для устройств, поддерживающихbtrfs
файловую систему, больше невозможно (просто сложите итоги распределения, 38.12G + 1.55G + .. ~ = 40GiB).Однако, поскольку имеется избыточное свободное пространство, которое было выделено для
data
части файловой системы, теперь это может быть полезным, чтобы сбалансировать btrfs. Баланс будет означать перераспределение уже выделенного пространства.В случае OP можно предположить, что по какой-то причине возник дисбаланс между различными частями
btrfs
распределения.К сожалению, простая команда
sudo btrfs balance -dusage=0
, которая в принципе должна искать пустые блоки (выделенные для данных) и размещать их для лучшего пользователя (это было бы почти исчерпанным пространством для метаданных), может потерпеть неудачу, потому что не могут быть найдены полностью пустые блоки данных.Следовательно,
btrfs
разработчики рекомендуют последовательно увеличивать лимит использования «когда блоки данных должны быть переставлены, чтобы освободить место»Следовательно, если результат
не показывает перемещение, нужно сделать некоторые
Другой ответ намекал на влияние
btrfs
размера узла, который несколько влияет на скорость увеличения метаданных. Размер узла (как упоминалось в другом ответе) устанавливается только один раз воmkfs.btrfs
время создания файловой системы. Теоретически, можно было бы уменьшить размер метаданных, если бы было возможно изменить более низкое значение для размера узла, если это было возможно (это не так!). Однако размер узла не сможет помочь расширить или увеличить пространство метаданных, выделенное каким-либо образом. Вместо этого, это могло бы только помочь сохранить пространство в первую очередь. Однако меньший размер узлов не гарантирует уменьшения размера метаданных. Действительно, некоторые случаи могут показывать, что большие размеры узлов уменьшают длину обхода дерева btrfs, поскольку заметки могут содержать больше «ссылок».источник
Согласно FAQ в btrfs wiki , это невозможно и вряд ли будет реализовано.
Вы можете перенести существующую файловую систему btrfs на новую, которая имеет больший размер
-n SIZE
. Вы можете даже добавить его в существующую файловую систему, используя RAID-массив btrfs и баланс, а затем удалить старую файловую систему.Смотрите также раздел о почти полных дисках .
источник
btrfs filesystem df /
строке вывода командMetadata, single: total=xxGiB, used=xxx
.-n
устанавливает размер каждого блока метаданных, а такжеbtrfs filesystem df
показывает пространство, занимаемое этими блоками. Если у исходного автора сообщения слишком много места занято метаданными по сравнению с фактическими данными, они должны уменьшить размер-n
, чтобы блоки метаданных имели меньший минимальный размер (меньше занимаемого места, но больше фрагментации).-n
ответ «невозможно установить размер узла ( опция)» - imho, а не в точку. Поскольку, когда он спрашивает далее «или [выделенное пространство для метаданных] автоматически расширяется?», Намекает, что это не размер узла, а выделенное пространство, в котором он заинтересован. Поэтому ответ должен быть «да». Вы, конечно, правы, намекая на то, что-n
настройка косвенно влияет на размер метаданных, но вопрос, кажется, больше направлен на выделение памяти для метаданных, а не на размер заметки одного метаданных ....btrfs
однако это не uncommen, что все отступающие устройства / память, уже в отведенном blockgroups данных, что означает , что помимо свободной памяти (для самих данных), ошибки «нет пространства» генерируются. Следовательно, пользователю необходимо попытаться выполнить некоторые из нихbtrfs balance
, которые, если в других сегментах еще есть место, могут перераспределить это, чтобы увеличить недостающее пространство части метаданных.