btrfs балансирует также файлы дефрагментации?

Дайте этому попытку:

sed 's|\(.\+\)\(</pre>\)$|\1\n\2|;t;N;\|\n</pre>$|s|^[[:blank:]]*\n||;P;D' inputfile

Результат:

something1
something2
something3
</pre>
something4
something5
######################################
something1
something2
something3
</pre>
something4
something5

Заметьте это оба экземпляра </pre> находятся на строке собой без предыдущей пустой строки.

Править: Решенный проблема с удалением неправильных строк.

8
задан 1 July 2013 в 12:23
5 ответов

Дефрагментация переоценена. Конечно, на FAT16 это действительно имеет значение, но в большинстве случаев это не так. Фактически, ребалансировка улучшит организацию вашей файловой системы, и файлы будут менее фрагментированы.

-2
ответ дан 2 December 2019 в 22:51

Возможно, просмотр исходного кода команды может помочь

Предпочитать btrfs balance start

Команда 'btrfs filesystem balance' устарела, используйте вместо нее команду 'btrfs balance start'.

И затем в строке команды

"btrfs [filesystem] balance start [options] <path>",
"Balance chunks across the devices",
"Balance and/or convert (change allocation profile of) chunks that",
"passed all filters in a comma-separated list of filters for a",
"particular chunk type.  If filter list is not given balance all",
"chunks of that type.  In case none of the -d, -m or -s options is",
"given balance all chunks in a filesystem."

Я мог бы взглянуть на нее еще раз, но я не вижу никаких ссылок на дефрагментацию в структурах или на ioctl () звонки. Так что явной дефрагментации нет.

Все, что он делает, - это копирует из одного места в другое и использует в процессе распределитель по умолчанию. Взято отсюда

В зависимости от назначения и режима распределения алгоритм либо напрямую ищет непрерывный объем свободного пространства в каждом подходящая группа распределения (группа в btrfs соответствует чанку описано выше

Таким образом, в зависимости от режима распределения, свободного места на устройстве и т. д. вы можете сказать, что btrfs будет выделять память таким образом, что дефрагментация не потребуется. Что вы могли бы считать формой неявной дефрагментации.

HTH

6
ответ дан 2 December 2019 в 22:51

Баланс работает на уровне фрагментов; чанки - это то, как Btrfs реализует избыточность рейдов. Он ничего не делает на уровне Btree и не выполняет дефрагментацию.

2
ответ дан 2 December 2019 в 22:51

Если вы используете носитель с высокой задержкой доступа, фрагментация всегда учитывается, независимо от используемой файловой системы. Поиск остается поиском, pediod.

0
ответ дан 2 December 2019 в 22:51

TL; DR

Функция дефрагментации Btrfs предназначена для исправления фрагментации в метаданных папок и содержимом файлов, в то время как функция баланса была создана для « баланса » (следовательно имя) объем данных, которыми обмениваются диски при добавлении или удалении диска. Хотя у них есть некоторое теоретическое совпадение в том, что они делают, они не связаны напрямую, поэтому документация не связывает эти две концепции.

Подробный ответ ниже. Заметьте, конечно, что мой длинный ответ основан на надежде, что он поможет другим, кто не имеет полного контекста стоящих проблем.


Распределение фрагментов

Важной концепцией btrfs является распределение фрагментов. Когда вы записываете данные в btrfs, он записывает эти данные в «текущий» блок, обычно размером 1 ГБ 1 . Если «текущий» блок становится заполненным, он выделяет новый блок. Если существующий фрагмент опустошается, его пространство для хранения становится доступным для перераспределения, когда требуется новый фрагмент.

Если файловая система использует более одного диска с «dup», «single» или «raid1» профили хранения , распределитель фрагментов всегда предпочитает помещать следующий новый фрагмент на диск (а) с наибольшим доступным пространством. Это обычно гарантирует, что диски используются одинаково.


Как баланс работает

Функция балансировки работает, беря существующие блоки данных и перезаписывая их в «текущий» блок. Когда существующий кусок очищается таким образом, он автоматически становится доступным для распределителя. Если очищаемый существующий блок не был заполнен с самого начала (возможно, старые данные в блоке были удалены), чистым результатом будет освобождение дискового пространства, поскольку новый блок «более плотно упакован» соответствующими данными.

Это это часть, которая теоретически может быть использована как часть стратегии дефрагментации , что, как мне кажется, является причиной того, что многие люди предполагают, что она уже используется. Однако, конечно же, функция баланса была создана с определенной целью, поэтому она не проверяет содержимое файла. Он только проверяет, актуальны ли данные, которые он извлекает из существующих блоков 2 , перед копированием этих данных в новый блок.

Где находится Баланс Часть входит?

Когда вы добавляете новый диск в файловую систему, распределитель сначала стремится записывать все новые данные на новый диск, в основном потому, что на нем больше свободного места, чем на существующих дисках. При перезаписи всех фрагментов все изначально сбалансированные фрагменты записываются только на новый диск. Как только он выровняется (станет сбалансированным), остальные данные будут равномерно перераспределены между дисками.

Типичный сценарий баланса:

У меня есть 2 диска по 500 ГБ, на каждом из которых используется 240 ГБ; Добавляю еще диск на 500Гб. Обычно у меня есть:

  • диск a: используется 240 ГБ
  • диск b: используется 240 ГБ
  • диск c: 0 ГБ используется

Я начинаю балансировать все данные. Примерно через четверть баланса я, вероятно, увижу ситуацию, подобную следующей:

  • диск a: используется 180 ГБ
  • диск b: используется 180 ГБ
  • диск c: используется 120 ГБ

на одну треть, он кажется сбалансированным:

  • диск a: используется 160 ГБ
  • диск b: используется 160 ГБ
  • диск c: используется 160 ГБ

Вы, конечно, можете остановить операцию балансировки на этом этапе, хотя есть причины (хорошие и плохие), по которым вы можете позволить ему закончить 3 .


Как происходит фрагментация в btrfs

Btrfs - это CoW ( Копировать при записи ) файловой системы, что означает, что данные никогда никогда не перезаписываются 4 . Если у вас есть существующий файл размером 100 МБ и вы перезаписываете часть файла размером 1 МБ, эта часть размером 1 МБ не будет записана поверх существующих данных на диске. Вместо этого он записывается где-нибудь в «текущем» фрагменте. Btrfs отслеживает, где хранятся эти «фрагменты» новых данных. Это наиболее полезно для сохранения моментальных снимков данных, поскольку это означает, что старые данные сохраняются по умолчанию. Поскольку твердотельные накопители, очень похожим образом, никогда не перезаписывают данные, этот механизм CoW хорошо подходит для сохранения срока службы и производительности твердотельных накопителей.

Где используется дефрагментация

Независимо от преимуществ, некоторые файлы пере- записываются очень часто (обычно это файлы базы данных), поэтому в итоге получаются сотни таких фрагментов. С твердотельными накопителями в краткосрочной перспективе наблюдается небольшое снижение производительности. Но со шпиндельными приводами снижение производительности является серьезным.

Одним из решений, конечно же, является использование функции дефрагментации btrfs. Операция дефрагментации перезаписывает содержимое файла в текущем фрагменте в логическом порядке его текущего состояния,тем самым сокращая фрагменты в один большой набор данных размером 100 Мбайт вместо множества отдельных частей.

Альтернативным решением могло бы быть использование функции «nocow» специально для таких файлов. Функция nocow заставляет файл перезаписываться на месте. Имейте в виду, что есть предостережения, чтобы не указывать 5 6 .


Снова сводка

  • Весы смотрят на фрагменты и полосы - и фактически не знают о содержимом файла, за исключением того, являются ли данные в этих фрагментах все еще актуально.

  • Операция дефрагментации просматривает данные папки и содержимое отдельного файла и повторно записывает данные как можно более непрерывно. Обратной стороной являются снимки состояния, в которых дефрагментация приводит к дублированию и дополнительному использованию диска.


Примечания:

  1. Хотя блоки обычно имеют размер 1 ГБ, они могут быть больше или меньше. При использовании рейдового типа чанки обычно распределяются по нескольким дискам кратными 1 ГБ. Например, 5 дисков с raid0 обычно приводят к полосе размером 5 ГБ, состоящей из блоков по 1 ГБ, записываемых на каждый диск.

  2. Btrfs использует «ссылки» на содержимое файла. Когда часть файла перезаписывается, действующая файловая система «ссылается» на место, где были записаны эти данные. Однако снимок может по-прежнему "ссылаться" на старое местоположение. Если моментального снимка нет - или старый снимок удален, это приводит к тому, что не остается никаких «ссылок», относящихся к исходному перезаписанному содержимому. Это содержимое затем считается нерелевантным и не будет скопировано с другими соответствующими данными в операции балансировки.

  3. На этом этапе, предполагая, что хранилище использует простой «единственный» профиль 7 , первые 160 ГБ сбалансированы. все будут перемещены на новый диск - но и на этом этапе у него еще осталось около 320 ГБ для балансировки. Остальные будут равномерно сбалансированы по дискам. При использовании шпинделей в идеале вы должны сбалансировать только 160 блоков, прежде чем btrfs повторно балансирует все 3 диска для лучшего «распределения» данных. При использовании SSD попытки поддерживать равномерный «разброс» данных становятся очень сложными, вероятно, бессмысленными и, что гораздо более вероятно очень плохими для срока службы SSD.

  4. Исключением является функция «nocow».

  5. Если есть моментальные снимки, дефрагментация «живого» файла приводит к тому, что моментальные снимки и «живой» файл ссылаются на различные местоположения данных на диске, в результате чего данные дублируются и, таким образом, занимают дополнительное место на диске. Когда станет доступна универсальная функция дедупликации, это не будет такой большой проблемой.

  6. Использование nocow означает, что btrfs не поддерживает контрольные суммы для содержимого файла.

  7. Для большинства типов рейдов (raid1 является исключение) "распространение" по дискам является спорным, поскольку полосы обычно записываются на все диски в любом случае.

8
ответ дан 2 December 2019 в 22:51

Теги

Похожие вопросы