Многофункциональная файловая система BTRFS с диском разного размера


14

У меня есть существующая файловая система BTRFS, состоящая из одного диска емкостью 500 ГБ, и я только что купил диск объемом 2 ТБ, чтобы увеличить емкость своего домашнего сервера, и я хочу добавить новый диск в существующую файловую систему. Из того, что я прочитал, кажется, что ни одна установка BTRFS не может обрабатывать диск разных размеров без потери разницы в размере между большим и меньшим диском, но я новичок в BTRFS и, возможно, что-то пропустил, так что есть ли настройки что может позволить мне объединить два диска в файловой системе, не теряя места?


Как вы справляетесь с базовыми дисками? С LVM?
Энди Смит

@ Andy, btrfs обрабатывает несколько дисков в стиле LVM / RAID, проверьте это .
OneOfOne

Упс ... мой плохой. Приветствия для этого ;-)
Энди Смит

Ответы:


4

Btrfs может использовать разные уровни рейда для данных и метаданных:

по умолчанию (даже для одного диска) raid1 для метаданных (каталогов и т. д.) и raid0 для данных.

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

так как диск объемом 2 ТБ оооочень много больше, чем 500 г, возможно, он даст вам лучшие шансы, если вы добавите новый, а затем удалите старый (шансы отказа одного конкретного диска намного меньше, чем шансы любого из дисков. неудачу).

если вы планируете использовать массив raid позже (с дисками большего размера), вам может потребоваться заново создать файловую систему на новом диске с raid1 для данных и метаданных, а затем скопировать все заново. потом, когда у вас будет больше денег, купите второй диск на 2 ТБ.

PS: использование raid1 на отдельном диске означает, что данные будут храниться в двух местах на этом одном диске (для защиты от повреждения) и уменьшат пространство для хранения (это действительно хорошая идея для метаданных).

pss: серьезно, не поддавайтесь искушению не использовать raid1 для метаданных. psss: есть очень хороший шанс, что btrfs получит возможность динамического изменения уровней рейда.


лично я планирую воссоздать мои btrfs fs / arrays / what-do-i-call-this, как только btrfs получит поддержку raid5 и raid6.
Артур Ульфельдт

12

Это зависит от того, какой профиль вы используете для блоков данных файловой системы Btrfs с несколькими устройствами.

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

  • Когда вы используете «единый» профиль для блоков данных, каждый диск будет заполнен до его полной емкости. напримерmkfs.btrfs -d single /dev/sda /dev/sdb

У меня есть файловый сервер с 2 ТБ и 3 ТБ диска. Он загружает Ubuntu 12.10 с флешки. Сначала я создал файловую систему Btrfs без -d singleопции:

mkfs.btrfs /dev/sda /dev/sdb

В результате я смог хранить только около 4 ТБ (3,45 двоичных файлов ТБ).

# btrfs fi show
Label: none  uuid: 3a63a407-dd3c-46b6-8902-ede4b2b79465
 Total devices 2 FS bytes used 3.22TB
 devid    2 size 2.73TB used 1.82TB path /dev/sdb
 devid    1 size 1.82TB used 1.82TB path /dev/sda
# btrfs fi df /mnt/btrfs1/
Data, RAID0: total=3.45TB, used=3.22TB
Data: total=8.00MB, used=0.00
System, RAID1: total=8.00MB, used=264.00KB
System: total=4.00MB, used=0.00
Metadata, RAID1: total=94.00GB, used=4.29GB
Metadata: total=8.00MB, used=0.00
# df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/sdb        4.6T  3.3T  241G  94% /mnt/btrfs1

Обратите внимание used 1.82TBна диск объемом 3 ТБ.

Затем я использовал команду «balance» для преобразования блоков данных из RAID0 в «одиночный» профиль:

btrfs balance start -dconvert=single /mnt/btrfs1

Балансирование данных 4 ТБ заняло очень много времени (около 30 часов). Но после его завершения я мог использовать полные 5 ТБ (4,36 двоичного файла ТБ файла).

# btrfs fi show
Label: none  uuid: 3a63a407-dd3c-46b6-8902-ede4b2b79465
 Total devices 2 FS bytes used 4.34TB
 devid    2 size 2.73TB used 2.73TB path /dev/sdb
 devid    1 size 1.82TB used 1.82TB path /dev/sda
# btrfs fi df /mnt/btrfs1/
Data: total=4.36TB, used=4.34TB
System, RAID1: total=40.00MB, used=500.00KB
System: total=4.00MB, used=0.00
Metadata, RAID1: total=94.00GB, used=4.01GB
Metadata: total=8.00MB, used=0.00
# df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/sdb        4.6T  4.4T   27G 100% /mnt/btrfs1

2

Я использовал несколько устройств с btrfs в Ubuntu, и он работал просто отлично. Имейте в виду, что btrfs фактически не реализует стандартные уровни RAID. Он реализует дополнительные чередование и зеркалирование, но не настоящий RAID.


1

В btrfs можно комбинировать диски разных размеров.
Но в настоящее время btrfs не очень хорошо обрабатывает ENOSPC (на устройстве не осталось места).

Например, я установил 3 диска в массив RAID0 (чередующийся). 1x500 ГБ, 1x250 ГБ, 1x160 ГБ.
Вы бы предположили, что у вас будет дисковое пространство между 800-900 ГБ.

Вот что df -hпоказывает:
/ dev / sdf 848G 615G 234G 73% / media / btrfs

Но я не могу хранить больше данных в массиве. (Места не осталось)

btrfs filesystem df /media/btrfsпоказывает мне это:
Данные: всего = 612,51 ГБ, используется = 612,51 ГБ
Метаданные: всего = 1,62 ГБ, используется = 990,73 МБ
Система: всего = 12,00 МБ, используется = 48,00 КБ

Даже ребалансировка не помогла.

В списке рассылки я видел такую ​​фразу:
размер наименьшего диска * количество дисков в массиве
(хотя у меня есть еще немного места: 612 ГБ вместо 160 ГБ * 3 = 480 ГБ)

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

Я использую Ubuntu 10.10 с ядром 2.6.35-22.


Я не думаю, что он когда-либо будет поддерживать то, что вы хотите, по крайней мере до тех пор, пока он не будет поддерживать разные уровни рейда для каждого файла / каталога. Для raid0 (полоса), btrfs требуется для сохранения одинакового размера частей каждого файла на всех 3 устройствах. Как это можно сделать, если позволяет использовать все 500 ГБ одного устройства? Если вместо «raid0» вы использовали «single» (не уверен, что эта опция была доступна при публикации), то btrfs не будет нигде дублировать файлы и позволит вам использовать все пространство на всех устройствах. Но для уровней рейда это не имеет смысла: вы пытаетесь нарушить определение уровня рейда.
Бобпаул

Неважно, я ошибаюсь. btrfs raid0 / 1 только чередует / зеркалирует только 1 другое устройство, но не все устройства, поэтому 1 ТБ + 500 ГБ + 500 ГБ работает точно так же, как 1 ТБ + 1 ТБ для raid0 и raid1 (по крайней мере для Linux 3.0). До Linux 3.0 у вас была проблема, которую вы описали.
Бобпаул

1

обновление: ответ ниже был написан до выпуска Linux 3.0. Linux 3.0 включает квази-циклический патч.

Когда вы выполняете зеркалирование или чередование данных, второе зеркальное копирование или чередование чередования должно быть выделено на другом устройстве со свободным местом. BTRFS распределяет порции по устройствам циклически, что может привести к потере места, если у вас есть устройства разных размеров.

В конвейере есть квази-циклический патч, чтобы улучшить это. Конечно, все равно невозможно соединить все блоки на разных устройствах, если у вас есть диск объемом 500 ГБ и 2 ТБ. Патч предназначен больше для ситуаций, таких как 1 x 1 ТБ + 2 x 500 ГБ, где каждый маленький диск должен предпочитать зеркальное копирование / чередование с большим диском, а не с другим маленьким диском.

В вашей ситуации я бы просто использовал «одиночный» режим для ваших данных ( mkfs.btrfs -d single). В этом режиме чанки не сопряжены, поэтому я думаю, что не будет проблем с устройствами разных размеров. Я не проверял это все же.


0

Эта проблема относится только к настройкам btrfs-raid1 со страницы Gotchas :

  • Распределение осуществляется на основе циклического перебора. Если у вас есть стратегия raid1 для тома, состоящего из несовпадающих дисков (тома разных размеров), ваш меньший том может заполниться, оставляя много свободного места на вашем одном большом диске. Вы можете убедиться, что это проблема, если есть какие-либо расхождения между 'df' и 'btrfs filesystem df [mountpoint]' И если последняя команда также показывает, что «total» и «used» совпадают в строке «Data» , Перебалансировка может смягчить эту проблему. (2.6.33)
    • Если ваш объем заполняется таким образом, перебалансировка может быстро вызвать ENOSPC («Ошибка, что на устройстве не осталось места»). Возможно, вам придется удалить относительно большой файл, чтобы разрешить этот тупик, тогда перебалансировка будет успешной. (2.6.33)
    • Перебалансировка может вызвать быстрое и интенсивное использование процессора в течение продолжительного времени. (2.6.34 и 2.6.35)

Извините, что заставляю вас повторяться, но я собираюсь добавить новое устройство, и я должен быть уверен. Все источники отметили, что RAID0 указывает, что диски должны быть одинакового размера (например, freebsd geom doc: «Каждый диск в полосе RAID0 должен иметь одинаковый размер, поскольку запросы ввода-вывода чередуются для чтения или записи»). на несколько дисков параллельно. "). Можете ли вы подтвердить, что это работает с Btrfs, пожалуйста?
fokenrute

Извините, у меня нет нескольких устройств btrfs, которые я не могу подтвердить, однако ничего, что я могу найти, ничего не говорит о том, что устройство raid0 + btrfs того же размера, однако, если у вас есть достаточно времени, разбейте новый диск на 1 ТБ / 1 ТБ, сделайте резервную копию старого диска на одном из разделов, добавьте пустой 1 ТБ, если он работает, добавьте 2-й раздел.
OneOfOne
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.