Есть ли способ заставить инструменты разметки видеть устройства, созданные kpartx?

1374
Harry

у меня есть dd файл образа диска с собой.

Я могу использовать такой инструмент, как kpartx создание устройства сопоставления устройств из этого файла образа диска.

Но программы разметки вроде gpartedиfdisk не перечислять мое подключенное устройство!

Есть ли способ сделать gparted (или эквивалентную программу - графическую или консольную) список моего подключенного устройства и входящих в него разделов, а также подробную информацию об этих разделах?

PS: Это тот случай, когда в этих инструментах отсутствует функция или предоставление этой функции принципиально невозможно?

0

3 ответа на вопрос

3
Alex Offshore

Просто создайте временную жесткую ссылку после запуска kpartx -a ...:

sudo ln /dev/loop0 /dev/mapper/loop0 

А затем запустите gparted как обычно (он будет работать правильно /dev/mapper/loop0p*):

sudo gparted /dev/mapper/loop0 

Не забудьте удалить ссылку, когда она больше не нужна.

Удивительно. Это только помогло мне использовать gparted, чтобы изменить размер изображения Raspian 4 ГБ, чтобы заполнить SD-карту 16 ГБ. Спасибо! Dejay Clayton 8 лет назад 0
Вы должны быть осторожны, хотя. После того, как они изменяют границы разделов или добавляют или удаляют разделы, инструменты разбиения запускают `partprobe` или что-то подобное для обновления специальных файлов, связанных с разделами. ** Это не обновляет ваши файлы `/ dev / mapper / *`, они по-прежнему указывают на одни и те же части всего изображения! ** Если инструмент нуждается в этих файлах (`gparted` делает), тогда целесообразно применять операции по одному, уничтожая и перестраивая файлы, созданные `kpartx` после каждой операции, так что следующая видит последовательные данные. Kamil Maciorowski 6 лет назад 0
2
grawity

Это возможно, но я не уверен, имеет ли это смысл.

Инструменты разбиения заботятся только о целом дисковом устройстве, потому что они читают таблицу разделов непосредственно из соответствующих секторов диска. Им не нужны отдельные устройства для разделения. Это означает, что достаточно обычного петлевого устройства losetup, и если инструмент его не видит, вы можете просто запустить его вручную fdisk /dev/loop0или что-то в этом роде.

(Если используется устройство на целом диске,/dev/mapper/ эти инструменты не сложно увидеть, хотя обычно это требует редактирования нескольких строк исходного кода ... запускать fdisk /dev/mapper/blehчасто проще.)


Также обратите внимание, что последние losetup --partscanверсии ядра поддерживают, что устраняет необходимость использовать устройство-маппер для этого.

Я определенно узнал кое-что из твоего ответа, так что спасибо. Но что вы подразумеваете под «устройством на раздел»? Я склонен думать, что устройство с целым диском будет чем-то вроде моего файла образа диска «losttup», так что, разве не должны заботиться об этом инструменты разбиения? Harry 10 лет назад 0
@Harry: если `sda` или` loop0` представляют весь диск (или образ), то `sda1` или` loop0p1` представляют первый раздел, `sda2` или` loop0p2` представляют второй раздел и так далее. Чтение одного из этих «разделительных» устройств даст вам только содержимое раздела. grawity 10 лет назад 1
@Harry: И нет, инструментам разделения не всегда нужны устройства для каждого раздела, так как они знают содержимое таблицы разделов, где начинается и заканчивается каждый раздел, и могут просто найти данные раздела таким образом. ⫽ Обратите внимание, что существует два вида инструментов разделения: те, которые на самом деле * обращаются * к данным внутри разделов, и те, которые этого не делают. GParted входит в первую группу, потому что он также позволяет перемещать и изменять размеры файловых систем внутри этих разделов. Между тем, fdisk и parted находятся в последнем - они редактируют * только * разделяемую таблицу и вообще не заботятся о данных в самих разделах. grawity 10 лет назад 1
@Harry: это означает, что GParted, fdisk и parted могут выполнять свою основную задачу (т.е. выводить разделы, добавлять или удалять их), просто читая / записывая `sda` или` loop0`. ⫽ Однако для * изменения размера * файловой системы внешним инструментам, которые использует GParted (например, `resize2fs` или` ntfsresize`) *, необходимо * предоставить * устройство "раздела" (`sda2` или` loop0p2`). grawity 10 лет назад 1
Хорошо, я думаю, что вы называете «раздел» как «устройство на раздел», тогда как я склонен называть это «раздел», а файл образа диска - как «устройство». Ваша информация о классификации инструментов разделения была действительно полезной! Harry 10 лет назад 0
Почти все в `/ dev` называется« устройством ». grawity 10 лет назад 0
0
Alex Offshore

Через 3,5 года у меня есть другое решение по этому вопросу :)

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

  1. sudo losetup --find --show ./somedrive.img

    Прикрепить устройство петли для всего файла ./somedrive.img; --findстоит попросить losetupавтоматически искать бесплатное устройство; и --showраспечатать устройство было использовано. Например, рассмотрим выбранное устройство /dev/loop5.

  2. sudo partx --update /dev/loop5

    Скажите ядру Linux о необходимости повторного сканирования разделов внутри /dev/loop5. В случае успеха он не будет выдавать никаких результатов, поэтому проверьте, ls -al /dev/loop5что появляется.

  3. Делай что хочешь, например sudo gparted /dev/loop5

    На этом этапе вы должны быть в состоянии правильно работать /dev/loop5p*.

  4. sudo partx --delete /dev/loop5

    Освободить сопоставления разделов.

  5. sudo losetup --detach /dev/loop5

    Наконец, отпустите петлю устройства.

PS Если вы являетесь util-linuxгордым владельцем пакета с версией v2.21 или выше, вы можете запросить как присоединение петлевого устройства, так и повторное сканирование раздела за один раз: sudo losetup --find --show --partscan ./somedrive.imgи вообще не должно встречаться с проблемой утилит, подобных gparted.