Qualquer maneira de fazer ferramentas de particionamento ver dispositivos criados kpartx?

0

eu tenho um dd Arquivo de imagem de disco comigo.

Eu posso usar uma ferramenta como kpartx para criar um dispositivo mapeador de dispositivo a partir desse arquivo de imagem de disco.

Mas particionando programas como gparted e fdisk não liste o meu dispositivo mapeado!

Existe alguma maneira de fazer gparted (ou um programa equivalente - gráfico ou console) lista meu dispositivo mapeado e suas partições constituintes e informações detalhadas sobre essas partições?

PS: Este é um caso de falta de recursos dessas ferramentas, ou será que fornecer esse recurso não é fundamentalmente possível?

Harry
fonte

Respostas:

2

É possível, mas não tenho certeza se faz sentido.

As ferramentas de particionamento só se preocupam com o dispositivo de disco inteiro, porque lêem a tabela de partição diretamente dos setores de disco relevantes. Eles não precisam de dispositivos por partição para existir. Isso significa que um dispositivo de loop básico feito com losetup é o suficiente, e se uma ferramenta não vê, você pode simplesmente executar manualmente fdisk /dev/loop0 ou alguma coisa.

(Se um disco inteiro dispositivo está em /dev/mapper/, não é difícil fazer com que essas ferramentas o vejam, embora geralmente envolva editar algumas linhas do código fonte ... rodando fdisk /dev/mapper/bleh costuma ser mais fácil.)


Observe também que o suporte a kernels recentes losetup --partscan o que elimina a necessidade de usar o mapeador de dispositivos para isso.

grawity
fonte
Eu definitivamente aprendi algo com a sua resposta, então obrigado. Mas o que você quer dizer com "dispositivo por partição"? Eu costumo pensar que um dispositivo de disco inteiro seria algo como o meu arquivo de imagem de disco losetup Então, as ferramentas de particionamento não deveriam se importar com isso?
Harry
1
@ Harry: Se sda ou loop0 representa todo o disco (ou imagem), então sda1 ou loop0p1 representam a primeira partição, sda2 ou loop0p2 representam a segunda partição e assim por diante. Ler um desses dispositivos de "partição" só lhe dará o conteúdo da partição.
grawity
1
@ Harry: E não, as ferramentas de particionamento nem sempre precisam dos dispositivos por partição, pois eles conhecem o conteúdo da tabela de partição, onde cada partição inicia e termina, e podem encontrar os dados da partição dessa maneira. ⫽ Note que existem dois tipos de ferramentas de particionamento: aquelas que realmente Acesso os dados dentro das partições e os que não. O GParted está no primeiro grupo, porque também permite mover e redimensionar os sistemas de arquivos dentro dessas partições. Enquanto isso, fdisk e parted estão no último - eles editam o parttable, e não se importam com os dados em partições em si.
grawity
1
@Harry: Isso significa que GParted, fdisk e parted podem fazer sua tarefa principal (ou seja, listar partições, adicionar ou excluí-las) apenas lendo / escrevendo sda ou loop0. ⫽ No entanto, para redimensionamento um sistema de arquivos, as ferramentas externas que o GParted usa (por ex. resize2fs ou ntfsresize ) Faz precisa ser dado um dispositivo de "partição" ( sda2 ou loop0p2 ).
grawity
Ok, eu acho que você está chamando uma "partição" como um "dispositivo por partição", enquanto eu costumo chamá-lo de "partição" e o arquivo de imagem de disco como um "dispositivo". Suas informações sobre a classificação da ferramenta de particionamento foram realmente úteis!
Harry
3

Basta criar hardlink temporário depois de correr kpartx -a ...:

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

E então execute o gparted como de costume (ele funcionará corretamente /dev/mapper/loop0p* ):

sudo gparted /dev/mapper/loop0

Não se esqueça de remover o link quando não for mais necessário.

Alex Offshore
fonte
Surpreendente. Isso me ajudou a usar o gparted para redimensionar uma imagem Raspbian de 4GB para preencher um cartão SD de 16GB. Obrigado!
Dejay Clayton
Você tem que ter cuidado embora. Depois que eles alteram os limites de partição ou adicionam ou removem partições, as ferramentas de particionamento são executadas partprobe ou algo similar para atualizar arquivos especiais associados a partições. Isso não atualiza seu /dev/mapper/* arquivos, eles ainda apontam para as mesmas partes da imagem inteira! Se uma ferramenta precisar desses arquivos ( gparted então é sábio aplicar as operações uma de cada vez, destruindo e reconstruindo arquivos criados por kpartx depois de cada operação, para que a próxima veja dados coerentes.
Kamil Maciorowski
0

Depois de 3,5 anos eu tenho outra solução nisso :)

Se você não está preocupado em usar o kpartx e estou correto sugerindo que seu alvo é operar partições em uma imagem de disco representada como um arquivo comum, aqui está um fluxo de trabalho alternativo sem kpartx e symlinking (é por isso que é postado como uma resposta separada):

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

    Anexar um dispositivo de loop para o arquivo inteiro ./somedrive.img; --find é perguntar losetup para procurar o dispositivo livre automaticamente; e --show é imprimir o dispositivo que foi usado. Por exemplo, considere que o dispositivo escolhido é /dev/loop5.

  2. sudo partx --update /dev/loop5

    Diga ao kernel Linux para reexaminar partições dentro /dev/loop5. Em caso de sucesso, não produzirá nenhuma saída, então confira ls -al /dev/loop5 para ver o que aparece.

  3. Faça o que você precisar, como sudo gparted /dev/loop5

    Neste ponto, você deve ser capaz de operar corretamente /dev/loop5p*.

  4. sudo partx --delete /dev/loop5

    Libere os mapeamentos de partições.

  5. sudo losetup --detach /dev/loop5

    Finalmente, solte o dispositivo de loop.

P.S. Se você é o orgulhoso proprietário de util-linux pacote com a versão v2.21 ou superior, você pode solicitar o anexo de dispositivo de loop e uma nova verificação de partição em um único disparo: sudo losetup --find --show --partscan ./somedrive.img e não deve encontrar o problema com os utilitários do tipo gparted.

Alex Offshore
fonte