ZFS: Перерозподілити zvol на всіх дисках в zpool?


12

Чи існує спосіб, яким ZFS може бути запропоновано перерозподілити дану файлову систему по всіх дисках у своєму zpool?

Я думаю про сценарій, коли у мене є обсяг ZFS фіксованого розміру, який експортується як LUN над FC. Нинішній zpool невеликий, всього два дзеркальних диска розміром 1 Тб, а zvol загалом 750 Гб. Якби я раптом збільшив розмір zpool до, скажімо, 12 1 ТБ дисків, я вважаю, що zvol все-таки ефективно «розмістився б» лише на перших двох шпинделях.

Зважаючи на те, що більше шпинделів = більше IOPS, який метод я міг би використати для «перерозподілу» zvol на всі 12 шпинделів, щоб скористатися ними?

Відповіді:


8

Вам потрібно буде переписати свої дані в розширений zpool, щоб збалансувати їх. В іншому випадку, як пройде час, ваші записи будуть розподілятися по всьому пулу.


Я не думаю, що існує швидкий і простий спосіб зробити це ...?
приріст

7
zfs send | zfs recv
the wabbit

Я збираюся пройти тест, що - не можу повірити, що щось так просто зробить це. :)
rasti

3
Повідомте про це, я ніколи цього не робив і мені цікаво.
StrangeWill

3

Немає причини зберігати zvol лише на початкових пристроях. Якщо ви збільшите пул, ZFS буде охоплювати оновлені дані на всіх доступних базових пристроях. Немає фіксованого розподілу з ZFS.


4
На мій досвід, це неправда. Поки немає "фіксованого розподілу", ZFS не переміщуватиме дані за власним бажанням за межами клієнтських запитів вводу-виводу. Якщо ви створили описаний мною сценарій, додасте більше дисків, а потім зробите деякий важкий IO на оригінальному LUN, ви побачите активність лише на перших двох дисках у масиві, бо саме там є дані. ewwhite зазначає, що з часом він стає збалансованим, але мені цікаво дізнатися, чи існує швидший спосіб зробити це.
приріст

1
Вибачте, якщо мені було незрозуміло. Звичайно, наявні дані не рухатимуться магічно. Тільки оновлені дані будуть розміщені рівномірно. Ось що я мав на увазі під "новими вводами". Що стосується існуючих статичних даних, кешування також покращить продуктивність, якщо блоки читаються не один раз.
jlliagre

0

Це "продовження" відповіді ewwhite:

Вам потрібно буде переписати свої дані в розширений zpool, щоб збалансувати їх

Я написав сценарій PHP ( доступний на github ), щоб автоматизувати це на своєму хості Ubuntu 14.04.

Потрібно просто встановити інструмент PHP CLI sudo apt-get install php5-cliі запустити сценарій, пройшовши шлях до даних ваших пулів як перший аргумент. Напр

php main.php /path/to/my/files

В ідеалі слід виконати сценарій двічі для всіх даних у пулі. Перший запуск дозволить збалансувати використання накопичувача, але окремі файли будуть надмірно виділені дискам, які були додані останніми. Другий запуск забезпечить, щоб кожен файл був "справедливо" розподілений між дисками. Я кажу справедливо, а не рівномірно, тому що він буде розподілений рівномірно, лише якщо ви не змішаєте потужність приводу, як і я, з моїм рейдом 10 пар різного розміру (дзеркало 4 Тб + дзеркало 3 ТБ + дзеркало 3 ТБ).

Причини використання сценарію

  • Я маю виправити проблему "на місці". Наприклад, я не можу записати дані в іншу систему, видалити їх тут і записати все назад.
  • Я заповнив свій пул понад 50%, тому я не міг просто скопіювати всю файлову систему відразу, перш ніж видалити оригінал.
  • Якщо є лише певні файли, які потребують успішної роботи, тоді можна просто запустити сценарій двічі над цими файлами. Однак другий запуск ефективний лише в тому випадку, якщо першому циклу вдалося досягти успіху в балансуванні використання накопичувачів.
  • У мене дуже багато даних і хочу, щоб я міг бачити вказівки на прогрес.

Як я можу зрозуміти, чи досягнуто навіть використання диска?

Використовуйте інструмент йостата протягом певного періоду часу (наприклад iostat -m 5) та перевірте записи. Якщо вони однакові, то ви досягли рівномірного розкиду. Вони не є ідеальними навіть на скріншоті нижче, тому що я використовую пару 4TB з 2 парами 3TB накопичувачів в RAID 10, тому два 4 будуть записані трохи більше. введіть тут опис зображення

Якщо використання вашого накопичувача "незбалансоване", іостат покаже щось більше, як на скріншоті нижче, де нові диски записуються непропорційно. Ви також можете сказати, що вони є новими накопичувачами, оскільки показання знаходяться на рівні 0, оскільки про них немає даних. введіть тут опис зображення

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


О мій ... Ух ...
ewwhite

0

Ну, це трохи хак, але враховуючи, що ви зупинили машину за допомогою zvol, ви можете zfs надіслати файлову систему в локальний файл на localhost під назвою bar.zvol, а потім ви знову отримаєте систему повернення файлів. Це повинно перебалансувати дані для вас.

zfs send tank/bar > bar.zvol

zfs receive tank/bar < bar.zvol

-1

найкращим рішенням, який я знайшов, було копіювання половини ваших даних у розширеному пулі, а потім видалення вихідних дублюваних даних.


3
Чи можете ви докладно?
ewwhite

@reco: zvols не є файловою системою, тому ви не можете видаляти або дублювати дані на них. Ви можете перезаписати дані, але це зіпсує їх, якщо ви не будете робити це з тим самим вмістом, який би фактично охоплював дані на базових томах, але це те, що ewwhite вже запропонував рік тому.
jlliagre

так, ти маєш рацію. я озирався і досліджував ту саму тему. Я зрозумів, що з zfs перерозподіл даних через vdevs не потрібен. але якщо ви все-таки хочете з будь-якої причини дублювати дані та видаляти оригінали, це прискорить роботу zfs з часом.
відновлення

1
Перерозподіл даних через vdevs є законним запитом. Боюся, ви все ще пропускаєте питання про дзвінки, а не про файлові системи. Ви не можете дублювати або видаляти дані в томі, що не має сенсу.
jlliagre

привіт jlliagre. так, ви праві, вибачте
відновлення
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.