Вопрос или проблема
У меня есть один диск на 500 МБ и два диска по 250 МБ.
Как сделать так, чтобы два диска объединились в RAID0, а затем зеркалировать это на 500 МБ?
У меня следующая конфигурация:
btrfs fi usage -T /mnt/raid_test/
Всего:
Размер устройства: 1000.00МиБ
Выделенный размер: 535.00МиБ
Не выделенный размер: 465.00МиБ
Пропавший размер: 0.00Б
Использовано: 407.17МиБ
Свободно (оценочно): 472.16МиБ (мин: 277.47МиБ)
Свободно (statfs, df): 20.95МиБ
Соотношение данных: 1.09
Соотношение метаданных: 2.00
Глобальный резерв: 5.50МиБ (использовано: 0.00Б)
Множественные профили: да (данные)
Данные Данные Данные Метаданные Система
Id Путь одиночные RAID1 RAID10 RAID1 RAID1 Не распределено
-- ---------- --------- -------- ------- --------- -------- -----------
1 /dev/loop1 189.00МиБ 12.00МиБ - 32.00МиБ 8.00МиБ 9.00МиБ
2 /dev/loop2 192.00МиБ 17.00МиБ - 32.00МиБ 8.00МиБ 1.00МиБ
3 /dev/loop0 - 29.00МиБ - - - 471.00МиБ
-- ---------- --------- -------- ------- --------- -------- -----------
Всего 381.00МиБ 29.00МиБ 8.00МиБ 32.00МиБ 8.00МиБ 481.00МиБ
Использовано 373.95МиБ 16.05МиБ 0.00Б 560.00КиБ 16.00КиБ
Когда я пытался запустить rebalance, я получил ошибку:
btrfs balance start -dconvert=raid10 -mconvert=raid10 /mnt/raid_test/
ОШИБКА: ошибка при балансировке '/mnt/raid_test/': Файловая система только для чтения
В syslog может быть больше информации - попробуйте dmesg | tail
root@work:/mnt# dmesg | tail
[33384.890087] BTRFS info (device loop1: state A): chunk_block_rsv: size 655360 reserved 655360
[33384.890088] BTRFS info (device loop1: state A): delayed_block_rsv: size 0 reserved 0
[33384.890090] BTRFS info (device loop1: state A): delayed_refs_rsv: size 262144 reserved 0
[33384.890092] BTRFS: ошибка (device loop1: state A) в do_chunk_alloc:3895: errno=-28 Нет места
[33384.890096] BTRFS info (device loop1: state EA): принудительно только для чтения
[33384.890107] BTRFS: ошибка (device loop1: state EA) в btrfs_create_pending_block_groups:2711: errno=-28 Нет места
[33384.890113] BTRFS: ошибка (device loop1: state EA) в btrfs_create_pending_block_groups:2718: errno=-28 Нет места
[33384.890118] BTRFS: ошибка (device loop1: state EA) в btrfs_create_pending_block_groups:2723: errno=-28 Нет места
[33384.890123] BTRFS: ошибка (device loop1: state EA) в add_block_group_free_space:1396: errno=-28 Нет места
[33384.890139] BTRFS info (device loop1: state EA): balance: закончено со статусом: -30
Когда я создал 500М+250М+250М с нуля, я увидел, что могу сохранить только 375 Мб в этой конфигурации. 250 МБ на диске с 500 МБ не используются.
Есть ли способ явно стрипировать 250+250 и зеркалировать их на 500?
Еще одна попытка. Создайте устройство на 500 МБ, затем добавьте два устройства по 250 МБ и активируйте репликацию на них:
root@work:/mnt# mkfs.btrfs -f /dev/loop0
btrfs-progs v5.16.2
Смотрите http://btrfs.wiki.kernel.org для получения дополнительной информации.
Выполнение полного устройства TRIM /dev/loop0 (500.00MiB) ...
ПРИМЕЧАНИЕ: некоторые настройки по умолчанию изменились в версии 5.15, убедитесь, что
это не повлияет на ваши развертывания:
- DUP для метаданных (-m dup)
- включен no-holes (-O no-holes)
- включен free-space-tree (-R free-space-tree)
Метка: (null)
UUID: 7077425f-8f99-416c-91ff-265740c827e9
Размер узла: 16384
Размер сектора: 4096
Размер файловой системы: 500.00MiB
Профили групп блоков:
Данные: одиночные 8.00MiB
Метаданные: DUP 32.00MiB
Система: DUP 8.00MiB
Обнаружен SSD: да
Зонный диск: нет
Несовместимые функции: extref, skinny-metadata, no-holes
Функции выполнения: free-space-tree
Контрольная сумма: crc32c
Количество устройств: 1
Устройства:
ID РАЗМЕР ПУТЬ
1 500.00MiB /dev/loop0
root@work:/mnt# mount /dev/loop0 /mnt/raid_test/
root@work:/mnt# btrfs fi usage -T /mnt/raid_test/
Всего:
Размер устройства: 500.00MiB
Выделенный размер: 88.00MiB
Не выделенный размер: 412.00MiB
Пропавший размер: 0.00Б
Использовано: 288.00KiB
Свободно (оценочно): 420.00MiB (мин: 214.00MiB)
Свободно (statfs, df): 419.00MiB
Соотношение данных: 1.00
Соотношение метаданных: 2.00
Глобальный резерв: 5.50MiB (использовано: 0.00Б)
Множественные профили: нет
Данные Метаданные Система
Id Путь одиночные DUP DUP Не распределено
-- ---------- ------- --------- -------- -----------
1 /dev/loop0 8.00MiB 64.00MiB 16.00MiB 412.00MiB
-- ---------- ------- --------- -------- -----------
Всего 8.00MiB 32.00MiB 8.00MiB 412.00MiB
Использовано 0.00Б 128.00KiB 16.00KiB
root@work:/mnt# dd if=/dev/random of=raid_test/garbage.img bs=1M count=400
400+0 записей в
400+0 записей из
419430400 байт (419 МБ, 400 МиБ) скопировано, 0.791838 с, 530 МБ/с
root@work:/mnt# ls -lah /mnt/raid_test/
всего 401M
drwxr-xr-x 1 root root 22 Окт 6 21:59 .
drwxr-xr-x 1 root root 34 Окт 6 21:53 ..
-rw-r--r-- 1 root root 400M Окт 6 21:59 garbage.img
root@work:/mnt# btrfs fi usage -T /mnt/raid_test/
Всего:
Размер устройства: 500.00MiB
Выделенный размер: 484.00MiB
Не выделенный размер: 16.00MiB
Пропавший размер: 0.00Б
Использовано: 288.00KiB
Свободно (оценочно): 420.00MiB (мин: 412.00MiB)
Свободно (statfs, df): 419.00MiB
Соотношение данных: 1.00
Соотношение метаданных: 2.00
Глобальный резерв: 5.50MiB (использовано: 16.00KiB)
Множественные профили: нет
Данные Метаданные Система
Id Путь одиночные DUP DUP Не распределено
-- ---------- --------- --------- -------- -----------
1 /dev/loop0 404.00МиБ 64.00МиБ 16.00МиБ 16.00МиБ
-- ---------- --------- --------- -------- -----------
Всего 404.00МиБ 32.00МиБ 8.00МиБ 16.00МиБ
Использовано 0.00Б 128.00KiB 16.00KiB
root@work:/mnt# btrfs device add -f /dev/loop1 /dev/loop2 /mnt/raid_test/
Выполнение полного устройства TRIM /dev/loop1 (250.00МиБ) ...
Выполнение полного устройства TRIM /dev/loop2 (250.00МиБ) ...
root@work:/mnt# btrfs fi usage -T /mnt/raid_test/
Всего:
Размер устройства: 1000.00МиБ
Выделенный размер: 484.00МиБ
Не выделенный размер: 516.00МиБ
Пропавший размер: 0.00Б
Использовано: 401.09МиБ
Свободно (оценочно): 520.00МиБ (мин: 262.00МиБ)
Свободно (statfs, df): 517.00МиБ
Соотношение данных: 1.00
Соотношение метаданных: 2.00
Глобальный резерв: 5.50МиБ (использовано: 0.00Б)
Множественные профили: нет
Данные Метаданные Система
Id Путь одиночные DUP DUP Не распределено
-- ---------- --------- --------- -------- -----------
1 /dev/loop0 404.00МиБ 64.00МиБ 16.00МиБ 16.00МиБ
2 /dev/loop1 - - - 250.00МиБ
3 /dev/loop2 - - - 250.00МиБ
-- ---------- --------- --------- -------- -----------
Всего 404.00МиБ 32.00МиБ 8.00МиБ 516.00МиБ
Использовано 400.00МиБ 544.00КиБ 16.00КиБ
root@work:/mnt# btrfs balance start -dconvert=raid10 -mconvert=raid10 /mnt/raid_test/
ОШИБКА: ошибка при балансировке '/mnt/raid_test/': Нет места на устройстве
В syslog может быть больше информации - попробуйте dmesg | tail
# dmesg | tail
[35650.111656] BTRFS info (device loop0): перемещение блока группы 131072000 флаги данных
[35650.115638] BTRFS info (device loop0): перемещение блока группы 63963136 флаги данных
[35650.120370] BTRFS info (device loop0): перемещение блока группы 30408704 флаги метаданных|dup
[35650.128752] BTRFS info (device loop0): найдено 25 экстентов, стадия: перемещение данных
[35650.135021] BTRFS info (device loop0): перемещение блока группы 22020096 флаги системные|dup
[35650.141421] BTRFS info (device loop0): перемещение блока группы 13631488 флаги данных
[35650.167757] BTRFS info (device loop0): найден 1 экстент, стадия: перемещение данных
[35650.186443] BTRFS info (device loop0): найден 1 экстент, стадия: обновление указателей данных
[35650.193078] BTRFS info (device loop0): 6 ошибок enospc во время балансировки
[35650.193084] BTRFS info (device loop0): балансировка: закончена со статусом: -28
Здесь мне неясно, почему на устройстве 500 МБ пространство исчезает при добавлении двух устройств по 250 МБ.
Ответ или решение
Чтобы создать зеркало (RAID1) с использованием двух устройств (loop1 и loop2 по 250 МБ каждый) и затем зеркалировать их на более крупное устройство (loop0 на 500 МБ), необходимо правильно настроить файловую систему Btrfs. Давайте разберем шаги, которые помогут вам достичь этого.
Шаг 1: Подготовка устройств
-
Убедитесь, что ваши устройства корректно созданы. В вашем случае у вас есть:
- /dev/loop0 (500 МБ)
- /dev/loop1 (250 МБ)
- /dev/loop2 (250 МБ)
-
Вам необходимо отформатировать каждое устройство в файловую систему Btrfs, если этого еще не сделали. Подготовьте их для использования:
mkfs.btrfs /dev/loop0
mkfs.btrfs /dev/loop1
mkfs.btrfs /dev/loop2
Шаг 2: Создание RAID0 на двух 250 МБ устройствах
- Сначала создайте RAID0 из двух 250 МБ устройств:
btrfs device add /dev/loop1 /mnt/raid_test/
btrfs device add /dev/loop2 /mnt/raid_test/
btrfs balance start -d raid0 /mnt/raid_test/
Шаг 3: Создание RAI1 с использованием RAID0
- После создания RAID0 на устройствах loop1 и loop2, вам необходимо добавить созданный Volume в loop0 и настроить зеркалирование:
btrfs device add /dev/loop0 /mnt/raid_test/
btrfs balance start -m raid1 /mnt/raid_test/
Шаг 4: Проверка состояния
- Убедитесь, что все устройства корректно добавлены и нет ошибок:
btrfs fi usage -T /mnt/raid_test/
Возможные проблемы
Если вы столкнулись с ошибками "Нет места" (No space left on device), это может происходить по ряду причин:
-
Используемое пространство на устройствах. Убедитесь, что на всех устройствах достаточно свободного места.
-
Убедитесь, что файловая система не находится в режиме только для чтения. Если она в этом режиме, попробуйте перезагрузить систему или исправить файловую систему с помощью:
btrfs check --repair /dev/loop1
Итого
Ваша задача заключается в последовательном создании RAID0 и последующем добавлении его в качестве устройства к большему RAID1. Важно следить за тем, чтобы пространство на устройствах использовалось корректно и наблюдать за сообщениями об ошибках в системных логах. Если вы будете следовать приведенным шагам, у вас должно получиться успешное создание зеркала RAID.
Если у вас остались вопросы или возникли трудности, не стесняйтесь обращаться за дополнительной помощью.