BTRFS Заменить «Ошибка: целевое устройство меньшее, чем исходное устройство»

Вы можете использовать env your-command , чтобы избежать вмешательства оболочки.

Пример:

$ env kill -L
 1 HUP      2 INT      3 QUIT     4 ILL      5 TRAP     6 ABRT     7 BUS
 8 FPE      9 KILL    10 USR1    11 SEGV    12 USR2    13 PIPE    14 ALRM
15 TERM    16 STKFLT  17 CHLD    18 CONT    19 STOP    20 TSTP    21 TTIN
22 TTOU    23 URG     24 XCPU    25 XFSZ    26 VTALRM  27 PROF    28 WINCH
29 POLL    30 PWR     31 SYS     

Другой способ - использовать путь к команде следующим образом:

$ which kill
/bin/kill

$ /bin/kill -L
 1 HUP      2 INT      3 QUIT     4 ILL      5 TRAP     6 ABRT     7 BUS
 8 FPE      9 KILL    10 USR1    11 SEGV    12 USR2    13 PIPE    14 ALRM
15 TERM    16 STKFLT  17 CHLD    18 CONT    19 STOP    20 TSTP    21 TTIN
22 TTOU    23 URG     24 XCPU    25 XFSZ    26 VTALRM  27 PROF    28 WINCH
29 POLL    30 PWR     31 SYS    

Итак, Используя env или указав путь / расположение command вы можете избежать вмешательства со стороны оболочки.

1
25.01.2019, 05:54
2 ответа

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

Предполагая, что целевое устройство имеет размер 200G, измените размер исходного устройства на 199G:

btrfs filesystem resize <devid>:199g /mountpoint

Затем измените размер раздела на 199 ГБ. Я использовал gdiskдля удаления существующего исходного раздела, затем создал новый с тем же начальным сектором, но ввел размер конечного сектора как +199G.

После partprobe /dev/hdd-deviceдля перезагрузки нового раздела replaceработал нормально.

0
27.01.2020, 23:31

Я столкнулся с этим при попытке заменить диск на один немного меньшего размера. Я получал эту ошибку даже после изменения размера файловой системы на исходном диске. Поскольку я использовал целые диски, у меня не было возможности изменить размер раздела. Хитрость заключалась в том, чтобы передать dev для исходного диска вместо пути к устройству. Похоже, это привело к тому, что btrfs filesystem replaceпроверил фактический размер файловой системы на исходном устройстве, а не размер самого устройства.

Мое исходное состояние:

# btrfs fi show /mnt/storage
Label: 'Storage'  uuid: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
    Total devices 5 FS bytes used 15.25TiB
    devid    1 size 7.28TiB used 3.84TiB path /dev/sdb
    devid    2 size 7.28TiB used 3.84TiB path /dev/sdc
    devid    3 size 7.28TiB used 3.84TiB path /dev/sdd
    devid    4 size 7.28TiB used 3.84TiB path /dev/sde
    devid    5 size 7.28TiB used 3.84TiB path /dev/sdf

Я хотел заменить /dev/sdf на /dev/sdg.

Попытка #1:

# btrfs replace start /dev/sdf /dev/sdg /mnt/storage
ERROR: target device smaller than source device (required 8001561124864 bytes)

Изменение размера файловой системы в /dev/sdf (devid 5):

# blockdev --getsize64 /dev/sdg 
8001546444800

# btrfs fi res 5:8001546444800 /mnt/storage
Resize '/mnt/storage' of '5:8001546444800'

Попытка #2:

# btrfs replace start /dev/sdf /dev/sdg /mnt/storage
ERROR: target device smaller than source device (required 8001561124864 bytes)

Без изменений. Он появляется при указании источника как блочного устройства, replaceсмотрит только на размер блочного устройства при проверке, достаточно ли места на приемнике. Однако, просматривая исходный код, я обнаружил, что replaceобрабатывает исходный раздел по-разному и фактически получает правильный размер из файловой системы.

Это привело к попытке #3:

# btrfs replace start 5 /dev/sdg /mnt/storage

Эта формулировка в сочетании с предыдущим изменением размера позволила успешно запустить операцию замены.

7
27.01.2020, 23:31

Теги

Похожие вопросы