Alterar o número da partição de sda1 para sda2

20

Eu tenho um disco com duas partições: sda1 e sda2. Gostaria de alterar o número de sda1 para sda2 e sda2 para sda1.

É possível, mas não me lembro do procedimento. ou seja, minha primeira partição será sda2 e a segunda sda1, por isso preciso especificar uma ordem manual, não uma ordem automática, como no fdisk -> x -> f.

Como altero a ordem? Links para manuais ou tutoriais também são úteis.

Obrigado.

O motivo: eu tenho um aplicativo que precisa ler dados do sda1, mas os dados estão no sda2. Alterar a tabela de partição é a solução mais rápida para esse problema. O sistema não é crítico, mas não quero interromper o sistema por muito tempo.

Atualização : a versão fdisk do OpenBSD inclui essa funcionalidade.

Rufo El Magufo
fonte
11
Como geralmente é uma má idéia fazer o que você pede, descreva por que você deseja isso.
rozcietrzewiacz
Eu tenho backups, não se preocupe :)
Rufo El Magufo
Ok, você foi avisado e quer jogar, então aqui vai ... :)
rozcietrzewiacz

Respostas:

17

Para sua informação, é uma má ideia e você pode perder tudo. Se você ainda deseja fazer isso, aqui estão as etapas:

  1. Não faça isso. Se isso não ajudar, então:
  2. Use a sfdiskferramenta: Primeiro, faça um backup da tabela de partição usando

    sfdisk -d /dev/sda > sda.out
    

    Então vá em frente:

    sfdisk /dev/sda -O sda-partition-sectors.save
    

    Você verá algo assim

    Checking that no-one is using this disk right now ...
    OK
    
    Disk /dev/sda: 1018 cylinders, 124 heads, 62 sectors/track
    Old situation:
    Units = cylinders of 3936256 bytes, blocks of 1024 bytes, counting from 0
    
       Device Boot Start     End   #cyls    #blocks   Id  System
    /dev/sda1          0+      5       6-     23063+  83  Linux
    /dev/sda2          6    1017    1012    3890128   83  Linux
    /dev/sda3          0       -       0          0    0  Empty
    /dev/sda4          0       -       0          0    0  Empty
    Input in the following format; absent fields get a default value.
    <start> <size> <type [E,S,L,X,hex]> <bootable [-,*]> <c,h,s> <c,h,s>
    Usually you only need to specify <start> and <size> (and perhaps <type>).
    
    /dev/sda1 :
    

Agora, ele está pedindo que você forneça os novos detalhes para a partição 'sda1'. Então você tem que dar os números de sda2 aqui. Então, coloquei '6 1012' aqui e pressione Enter:

    /dev/sda1 :6 1012
    /dev/sda1          6    1017    1012    3890128   83  Linux
    /dev/sda2 :

Agora verifique se os números impressos após pressionar Enter são exatamente iguais aos impressos anteriormente para sda2. Se estiver tudo bem, continue fornecendo os novos números para sda2:

    /dev/sda2 :0
    /dev/sda2          0+      5       6-     23063+  83  Linux
    /dev/sda3 :

Desta vez, bastava digitar "0" no meu caso - mas você precisa garantir que os números não sejam alterados no seu.

Em seguida, continue com as outras partições da mesma maneira. Se você já alcançou o final do disco, pressionar Enter é suficiente. Por fim, verifique novamente se todos os números estão corretos e salve a tabela de partição (ou não). Se você estragou algo, dê uma olhada nas man sfdiskdescrições das opções '-d', '-O' e '-I'.

Observe também que, depois de fazer as alterações malucas, pode ser necessário executar 'sync' para que as partições sejam relidas antes de tentar montá-las.

rozcietrzewiacz
fonte
Obrigado pela resposta. Você está certo, isso é assustador :).
Rufo El Magufo
Maravilhosamente mal. O que acontece se os números não forem os mesmos? Desistir e reparticionar? (Isso é o que eu fiz)
supervacuo
11
@supervacuo O Testisk pode ajudá-lo então. Procure testdiskpacote no banco de dados de software da sua distribuição.
rozcietrzewiacz
@supervacuo Se os números não forem os mesmos, suas novas partições não estarão no mesmo lugar que as antigas e você poderá corrompê-las. Se você não fizer mais nada no disco, poderá restaurar a tabela de partições que você esperou ter feito backup antes de iniciar e tentar novamente. Caso contrário, é melhor esperar que os números corretos ainda estejam no seu console em algum lugar ou que você se lembre do tamanho e localização exatos das suas partições e resolva os números.
Micheal Johnson
31

Eu fiz isso de uma maneira mais fácil:

# sfdisk -d /dev/sdb > sdb.bkp

deixe uma cópia por segurança

# cp sdb.bkp sdb.new 

Agora edite sdb.new alterando SOMENTE a ordem das linhas e os números das partições, como no meu caso:

a partir de

# partition table of /dev/sdb
unit: sectors

/dev/sdb1 : start=  1026048, size=975747120, Id=83
/dev/sdb2 : start=     2048, size=   204800, Id=83
/dev/sdb3 : start=   206848, size=   819200, Id= b
/dev/sdb4 : start=        0, size=        0, Id= 0

para

# partition table of /dev/sdb
unit: sectors

/dev/sdb1 : start=     2048, size=   204800, Id=83
/dev/sdb2 : start=   206848, size=   819200, Id= b
/dev/sdb3 : start=  1026048, size=975747120, Id=83
/dev/sdb4 : start=        0, size=        0, Id= 0

jogá-lo de volta para a tabela de partição do disco?

# sfdisk /dev/sdb < sdb.new

Minha sequência de numeração foi alterada depois que encolhi e mudei para a direita a única partição (sdb1) para adicionar duas partições menores no início do disco usando gparted.

Se o último comando não funcionar, como no meu caso, altere-o para:

# sfdisk --no-reread -f /dev/sdb < sdb.new
Joao S Veiga
fonte
Isso funcionou para mim e eu não acabei precisando desse segundo comando.
Aaron Franke
Para mim, bem como, graças;) ... Nota Certifique-se toda a sua partição são desmontados antes de comandos
intika
3

Você teria que reescrever a tabela de partição da unidade para reverter a ordem, o que é um pouco arriscado. Se eu fosse você, eu resolveria o problema que faz com que você queira trocar a ordem dos nomes dos dispositivos e deixar as partições em paz.

Por exemplo, se você possui um script que precisa ser executado nas duas máquinas e deseja que ele acesse o mesmo dispositivo, crie um link em um diretório diferente (não / dev) com o mesmo nome nos dois servidores, mas com links para / dev / sda1 em um e / dev / sda2 no outro.

Você pode usar qualquer editor de partições ( fdiskou cfdisk) para editar as partições, mas é necessário anotar as configurações atuais ou tirar uma foto da tela. Exclua as duas partições e crie-as manualmente, especificando todos os valores corretos. Inicialize o sistema com um LiveCD para fazer isso.

Michael Dillon
fonte
Eu não posso mudar nada. Meu sistema é um Xen DomU e o problema está no Dom0. Eu poderia recriar a ordem das partições, mas é mais complexo na minha situação. De qualquer forma, gostaria de saber como alterar a ordem.
Rufo El Magufo
2

Primeiro, tudo isso é um exercício para tentar o seu melhor para quebrar as coisas, mas de qualquer maneira, aqui está outra abordagem que você pode tentar.

Nota: Você não mencionou de onde é inicializado, e esta solução, e nenhuma outra no momento em que estou escrevendo isso, estão abordando o que você teria que fazer para que o LILO ou GRUB funcionasse corretamente.

/dev/sda1e /dev/sda2são dispositivos de bloco (8,1) e (8,2). Você pode tentar usar mknodpara simplesmente trocar os dois.

telinit 1
(...)
rm -f /dev/sda{1,2}; mknod /dev/sda1 b 8 2; mknod /dev/sda2 b 8 1
chmod 640 /dev/sda{1,2}; chown root:disk /dev/sda{1,2}
reboot

Basta lembrar que esta troca só acontecerá após a sua partição que contém /dev/é carregado durante a inicialização, de modo a initrdainda terá os "corrigir" a menos que você consertá-lo lá também (exercício para o leitor - vai mkinitrd? Copiar a estranheza) Isso também não faz abordar contextos SELinux.

Aaron D. Marasco
fonte
O gerenciador de inicialização não é um problema :). Obrigado pela solução, mas preciso alterar a ordem na tabela de partições, não no sistema.
Rufo El Magufo
11
Isso não funcionará em nenhum sistema que use o udev e só ajudaria se o aplicativo lesse um arquivo chamado /dev/sda(em vez de ler o disco diretamente).
Gilles 'SO- stop be evil'
Ambos - concordaram. Toda a questão IMHO é um exercício de dor. Eu não tinha certeza sobre as udevcoisas; aparentemente o primeiro sistema em que eu sshparticipei não o possuía.
Aaron D. Marasco 16/08
2

Acabei de descobrir uma solução surpreendentemente fácil para esse problema. Digamos que você tenha apenas uma partição nomeada /dev/sda3. Você quer que seja chamado /dev/sda1. Abra gdisk, converta a tabela de partição em GPT, grave e saia. Em seguida, abra-o novamente, pressione classificar (isso mudará o número da GPT para 1) e, em seguida, converta a GPT novamente em MBR através das opções especializadas.

user1980127
fonte
1

- Editando partições / dev / sda3 para / dev / sda2 no terminal como root -

  1. Tabela de partição de backup

    sfdisk -d / dev / sda> sda.bkp

  2. Copie o backup da tabela de partição para a nova tabela de partição

    cp sda.bkp sda.new

  3. Editar nova tabela de partição

    gedit sda.new

insira a descrição da imagem aqui

Salvar fechar

  1. Reinstale a nova tabela de partição

    sfdisk --no-reler -f / dev / sda <sda.new

  2. Reinicie o computador

user264681
fonte
Embora isso seja possível, eu recomendaria o LiveCD GParted
eyoung100
11
Eu acho que você pode fazer melhor do que uma captura de tela de um editor de texto com uma fonte não monoespaçada, um ponto de inserção visível e erros visíveis no verificador ortográfico.
Micheal Johnson