Как использовать новую таблицу fdisk без перезагрузки (kpartx)?

11

Когда я запускаю fdisk и изменяю размер раздела, fdisk говорит в конце его вывода:

The new table will be used at the next reboot or after you run partprobe(8) or kpartx(8)

Я хотел бы сделать это без перезагрузки (а затем написать скрипт, который это делает). Как мне использовать kpartx, чтобы сделать это правильно? Я пробовал:

kpartx -f -v /dev/mmcblk0

Какие выводы:

mmcblk0p1 : 0 102400 /dev/mmcblk0 2048
mmcblk0p2 : 0 7657472 /dev/mmcblk0 104448

и:

kpartx -a -v /dev/mmcblk0

какие выводы:

device-mapper: reload ioctl on mmcblk0p1 failed: Invalid argument
create/reload failed on mmcblk0p1
add map mmcblk0p1 (0:0): 0 102400 linear /dev/mmcblk0 2048
device-mapper: reload ioctl on mmcblk0p2 failed: Invalid argument
create/reload failed on mmcblk0p2
add map mmcblk0p2 (0:0): 0 7657472 linear /dev/mmcblk0 104448

Это для SD-карты в запущенном Debian Debian.

РЕДАКТИРОВАТЬ: чтобы уточнить, что я пытаюсь сделать; Я удаляю неиспользованный p3 с SD-карты и изменяю размер p2, чтобы заполнить карту. На данный момент карта содержит небольшой загрузочный раздел p1, а p2 находится там, где находится ОС.

Осьминог
источник
SD-карта в настоящее время используется? (Например, есть ли на нем смонтированная файловая система?)
derobert
@ derobert, да, это так. у него есть 2 раздела: маленький загрузочный раздел и больший основной раздел, где находится большая часть ОС. Я просто пытаюсь расширить 2-й раздел, чтобы заполнить карту.
Осьминог
2
Я уверен, что это ответ - вы не можете. Ядро не будет перечитывать таблицу разделов, если устройство не используется ...
derobert
Помогает partprobe?
Жиль "ТАК - перестань быть злым"

Ответы:

7

Вы хотите partx -u, а не kpartx(который работает на устройствах устройства отображения).

psusi
источник
Какова цель -uфлага?
Игорь Ганапольский
1
@IgorGanapolsky, чтобы обновить таблицу разделов ядра, чтобы она соответствовала расположенной на диске. Быстрый man partxбы ответил на это.
Псуси
@ Осьминог Это сделало это для меня, а partprobe - нет. Partprobe затем вернулся без этой ошибки.
Дункан Х Симпсон
6

Я считаю, @derobert (который прокомментировал исходный вопрос), вероятно, правильно. В случае fdisking раздела, который используется в настоящее время, кажется, нет другого выбора, кроме как перезагрузить.

Даже когда я использую partprobe(который получается с apt-get install parted), я получаю следующий вывод:

Error: Partition(s) 2, 3 on /dev/mmcblk0 have been written, but we have 
been unable to inform the kernel of the change, probably because it/they 
are in use.  As a result, the old partition(s) will remain in use.  You 
should reboot now before making further changes.
Осьминог
источник
Я сделал то же самое, хорошая новость в том, что я смог размонтировать, запустить partprobe <устройство> и перемонтировать оба раздела без перезагрузки. К сожалению, это все еще требовало простоя из-за закрытия сервисов.
Рахли
3
Более поздние версии parted/ partprobeне приведут к такой ошибке и могут быть использованы на смонтированном разделе без перезагрузки.
psusi
@psusi, я использую последнюю версию, partedно все равно получаю ту же ошибку. Решение состоит в том, чтобы размонтировать устройство перед запуском partedна нем, тогда вам не нужно перезагружать систему, чтобы сообщить ядру об использовании нового раздела вместо старого раздела
MyWrathAcademia
1

Я получил эту проблему, потому что я забыл размонтировать устройство. После:

sudo umount /dev/sdb

fdisk работал правильно.

Сиро Сантилли 冠状 病毒 审查 六四 事件 法轮功
источник
1
Я все еще получаю сообщение об ошибке: вызов ioctl () для перечитывания таблицы разделов. Перечитать таблицу разделов не удалось. Устройство или ресурс заняты
Игорь Ганапольский