Як використовувати нову таблицю 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, що працює з розпізнаванням.

EDIT: Щоб уточнити, що я намагаюся зробити; Я видаляю невикористаний p3 зі SD-карти та зміна розміру p2 для заповнення картки. Наразі карта містить невеликий завантажувальний розділ p1, а p2 - там, де сидить ОС.


Чи використовується SD-карта на даний момент? (Наприклад, чи є на ньому змонтована файлова система?)
derobert

@derobert, так, це так. він має 2 розділи: невеликий завантажувальний розділ та більший основний розділ, де сидить більшість ОС. Я просто намагаюся розгорнути 2-й розділ, щоб заповнити карту.
Восьминіг

2
Я майже впевнений, що це відповідь - ви не можете. Ядро не перечитає таблицю розділів, якщо пристрій не використовується ...
derobert

Чи partprobeдопомагає?
Жил "ТАК - перестань бути злим"

Відповіді:


7

Ви хочете partx -u, ні kpartx(що працює на пристроях-пристроях-картографах).


Яке призначення -uпрапора?
ІгорГанапольський

1
@IgorGanapolsky, щоб оновити таблицю розділів ядра, щоб вона відповідала дисковій. Швидкий man partxвідповів би на це.
psusi

@Octopus Це зробив для мене, де partprobe цього не зробили. Потім Partprobe повертався без цієї помилки.
Дункан X Сімпсон

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 <device> і перезапустити обидва розділи без перезавантаження. На жаль, він все ще потребував простоїв через відключення послуг.
Рахлі

3
Більш новітні версії parted/ partprobeне дадуть такої помилки, і їх можна використовувати на змонтованому розділі без перезавантаження.
psusi

@psusi, я використовую останню версію, partedале я все одно отримую ту ж помилку. Рішення полягає в тому, щоб відключити пристрій перед запуском partedна пристрої, тоді вам не доведеться перезавантажувати систему, щоб повідомити ядро ​​про використання нового розділу замість старого розділу
MyWrathAcademia

1

У мене виникла ця проблема, оскільки я забув відключити пристрій. Після:

sudo umount /dev/sdb

fdisk працював правильно.


1
Я все ще отримую помилку: Викликаючи ioctl (), щоб перечитати таблицю розділів. Повторне читання таблиці розділів не вдалося. Пристрій або ресурс зайнятий
ІгорГанапольський
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.