É provavelmente um problema com o tamanho do setor. Alguns gabinetes USB afirmam que seus drives possuem setores 4KiB, quando o drive se representa como setores de 512 bytes ou vice-versa. Tabelas de partição (tanto msdos quanto gpt) infelizmente dependem do tamanho do setor. Se o tamanho do setor mudar, a tabela de partições se tornará inválida.
Agora, este é um problema que pode ser resolvido em software - o Linux pode ser inteligente o suficiente para interpretar corretamente uma tabela de partição GPT, independentemente do tamanho do setor físico que a unidade alega ter. Mas isso não faz isso, e provavelmente não faz parte do padrão, então ...
O que você precisa fazer é obter as compensações exatas de bytes de suas partições enquanto estiver no fechamento USB
parted /dev/usbdrive unit b print free
e, em seguida, veja se esses deslocamentos de partição funcionam para a unidade interna
losetup --find --show --read-only --offset 1048576 /dev/internaldrive
file -s /dev/loopX
e, se tudo correr bem, recriar a tabela de partições com os mesmos (bytes) deslocamentos para o disco interno (faça um backup dos primeiros / últimos megabytes do disco primeiro)
parted /dev/internaldisk unit b mklabel gpt mkpart 1048576 42424242 ...
Não sei se existe um particionador que seja inteligente o suficiente para 'reparar' essas tabelas de partições de tamanho incorreto do setor automaticamente. Ele venceria a abordagem manual, mas ...