Как создать зеркало с loop0 из стрипированного loop1 и loop2?

Вопрос или проблема

У меня есть один диск на 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: Подготовка устройств

  1. Убедитесь, что ваши устройства корректно созданы. В вашем случае у вас есть:

    • /dev/loop0 (500 МБ)
    • /dev/loop1 (250 МБ)
    • /dev/loop2 (250 МБ)
  2. Вам необходимо отформатировать каждое устройство в файловую систему Btrfs, если этого еще не сделали. Подготовьте их для использования:

mkfs.btrfs /dev/loop0
mkfs.btrfs /dev/loop1
mkfs.btrfs /dev/loop2

Шаг 2: Создание RAID0 на двух 250 МБ устройствах

  1. Сначала создайте 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

  1. После создания RAID0 на устройствах loop1 и loop2, вам необходимо добавить созданный Volume в loop0 и настроить зеркалирование:
btrfs device add /dev/loop0 /mnt/raid_test/
btrfs balance start -m raid1 /mnt/raid_test/

Шаг 4: Проверка состояния

  1. Убедитесь, что все устройства корректно добавлены и нет ошибок:
btrfs fi usage -T /mnt/raid_test/

Возможные проблемы

Если вы столкнулись с ошибками "Нет места" (No space left on device), это может происходить по ряду причин:

  1. Используемое пространство на устройствах. Убедитесь, что на всех устройствах достаточно свободного места.

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

btrfs check --repair /dev/loop1

Итого

Ваша задача заключается в последовательном создании RAID0 и последующем добавлении его в качестве устройства к большему RAID1. Важно следить за тем, чтобы пространство на устройствах использовалось корректно и наблюдать за сообщениями об ошибках в системных логах. Если вы будете следовать приведенным шагам, у вас должно получиться успешное создание зеркала RAID.

Если у вас остались вопросы или возникли трудности, не стесняйтесь обращаться за дополнительной помощью.

Оцените материал
Добавить комментарий

Капча загружается...