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


14

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


Як ви обробляєте основні диски? З LVM?
Енді Сміт

@Andy, btrfs обробляє кілька дисків у стилі LVM / RAID, перевірте це .
OneOfOne

Ой ... мій поганий. Привіт за це ;-)
Енді Сміт

Відповіді:


4

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

за замовчуванням (навіть для одного диска) - raid1 для метаданих (каталогів тощо) та raid0 для даних.

Якщо ви цього не змінили, швидше за все, у вас не виникне проблем із додаванням другого диска та повторним балансом. оскільки лише метадані будуть скопійовані на обидва диски (ви можете побачити розмір своїх метаданих btrfs filesystem df /). Просто майте на увазі, що якщо будь-який з ваших дисків виходить з ладу, ви втрачаєте дані.

тому що 2tb диск є sooooooooo набагато більшим, ніж 500 г, можливо, це дасть вам кращі шанси, якщо ви додасте новий, а потім видаліть старий (шанси на відмову одного конкретного накопичувача набагато менші, ніж шанси будь-якого з накопичувачів невдача).

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

ps: використання raid1 на єдиному накопичувачі означає, що дані будуть зберігатися в двох місцях на одному диску (для захисту від пошкодження) і зменшать ваш простір для зберігання (це дійсно дуже хороша ідея для метаданих).

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


особисто я планую відтворити свої btrfs fs / масиви / 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 ТБ.

Потім я скористався командою "баланс" для перетворення блоків даних з 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 (смугастий). 1x500GB, 1x250GB, 1x160GB.
Ви б припустили, що у вас буде місце на диску між 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 потрібно тримати рівні частини кожного файлу на всіх трьох пристроях. Як це зробити, якщо дозволяє використовувати всі 500 Гб одного пристрою? Якщо замість "raid0" ви використовували "сингл" (не впевнений, що ця опція була доступна при публікації), то btrfs не намагається дублювати файли ніде і дозволить вам використовувати весь простір на всіх пристроях. Але для рівня рейду це не має сенсу: ви намагаєтесь порушити визначення рівня рейду.
bobpaul

Неважливо, я помиляюся. btrfs raid0 / 1 лише смужки / дзеркала для іншого пристрою, не для всіх пристроїв, тому 1TB + 500GB + 500GB працює точно так само, як 1TB + 1TB для raid0 і raid1 (принаймні, як для Linux 3.0). До Linux 3.0 вона мала проблему, яку ви описали.
bobpaul

1

оновлення: відповідь нижче була написана до виходу Linux 3.0. Linux 3.0 включає в себе квазікруглий патч.

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

Для того, щоб покращити цю проблему, існує квазікруглий патч . Звичайно, все ще неможливо з’єднати всі шматки на різних пристроях, якщо у вас є диск 500 ГБ і 2 ТБ. Патч призначений більше для таких ситуацій, як 1 х 1 ТБ + 2 х 500 ГБ, коли кожен маленький диск повинен віддавати перевагу дзеркальному / смуговому розміщенню з великим диском, а не іншим малим диском.

У вашій ситуації я б просто використовував "єдиний" режим для ваших даних ( mkfs.btrfs -d single). Шматки не спарені в цьому режимі, тому я думаю, що не було б проблем з пристроями різного розміру. Я не перевіряв цього.


0

Ця проблема стосується лише налаштувань btrfs-raid1 зі сторінки Gotchas :

  • Виділення проводиться на круговій основі. Якщо у вас є стратегія raid1 щодо обсягу, що складається з невідповідних накопичувачів (обсяги різної величини), ваш менший об'єм може заповнитися, залишаючи багато місця вільним на вашому найбільшому диску. Ви можете переконатися, що це проблема, якщо є розбіжність між 'df' та 'btrfs файловою системою df [mountpoint]' І якщо остання команда також показує, що "total" та "used" однакові у рядку "Data" . Відновлення балансу може пом'якшити цю проблему. (2.6.33)
    • Якщо ваш обсяг заповниться таким чином, повторний баланс може швидко призвести до появи ENOSPC ("Помилка НЕ ​​SPaCe, залишеної на пристрої"). Можливо, вам доведеться видалити відносно великий файл, щоб вирішити цю тупик, тоді відновлення буде успішним. (2.6.33)
    • Перебалансування може спричинити швидке дуже інтенсивне використання процесора протягом тривалого періоду часу. (2.6.34 та 2.6.35)

Вибачте, що ви повторили себе, але я збираюся додати новий пристрій, і я повинен бути впевнений. Усі джерела, що перевіряються на RAID0, стверджують, що диски повинні бути однакового розміру (наприклад, dobs geom dobs freebsd: "Кожен диск у смужці RAID0 повинен бути однакового розміру, оскільки запити вводу / виводу переплетені для читання або запису на декілька дисків паралельно. "). Чи можете ви підтвердити, чи працює він із Btrfs?
fokenrute

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