just another ordinary, contentless weblog

/proc/partitions

pois é… quando eu disse que não estava bem ao fazer o último post, é porque eu não sabia como eu iria ficar depois…

bem, segunda passada é que eu não estava bem… tanto que fui capaz de fazer uma grande besteira.

não estou querendo dizer que o fato de eu não estar bem foi a causa do que aconteceu, mas que colaborou.

enfim, o que aconteceu foi:

há alguns meses o hd de meu notebook foi pro saco (eu tinha backup recente do meu homedir, ainda bem) e eu comprei outro e tal… daí segunda passada eu pus o hd antigo defeituoso num cabo usb-ide que tenho para verificar se conseguia ler alguns dos dados que acreditava ter perdido. e tharam! conseguia ler tudo… parecia que o hd nunca tinha apresentado algum problema (lembro bem que logo que troquei os hds, fiz o mesmo teste e ele não funcionou).

copiei imediatamente algum dos dados que queria e depois pensei: pô… tenho agora um disquetão de 40GB. prontamente deletei todas as partições que existiam e criei uma nova. só depois disto, percebi a besteira: eu estava excluindo as partições do /dev/hda e não do /dev/sda [1].

sim, eu havia ignorado o aviso que o fdisk dá quando você deleta uma partição que está montada.

ao perceber isto, pensei como eu poderia fazer para recuperar. de imediato, fiz um novo backup do meu homedir, por precaução. pensei, também, em deixar copiando todos os arquivos do disco para o meu novo disquetão de 40GB, mas a interface USB 1.1 é muito lenta, isso iria demorar MUITO tempo.

voltando a como recuperar, pensei: po, o fdisk só altera a tabela de partições do disco. não deve ter escrito nada na área de dados, sendo assim, as partições ainda existiam, mas as informações de onde elas começavam e terminavam é que havia sido sobreescritas.

as partições ainda estavam montadas, então um ‘df‘ me diria qual o tamanho exato de cada partição. engano. me diria o tamanho disponível em uma partição. não o tamanho dela, pois ao formatar a partição uma parte do espaço é usado pelo sistema de arquivos para indexa-los. comecei a procurar programas que faziam recuperação de tabela de partições para Linux, sem muito êxito.

foi aí que pensei no parted, que se não houvesse uma forma de recuperar a tabela de partições, poderia servir pelo menos para criá-las, uma vez que eu tivesse as informações precisas de como isso deveria ser feito.

ao consultar o help do parted, vi que havia um comando chamado ‘rescue’ e me interessei por ele:

(parted) rescue START END              rescue a lost partition near START and END

consultando a man page do parted, verifiquei que START e END são megabytes, então com comandos do tipo:

(parted) rescue 0 40000

e depois

(parted) rescue 300 40000

o parted foi encontrando, uma-a-uma, as primeiras partições.

os valores não são exatamente os que usei e ele pede alguma confirmação, depois de encontrar a partição, para escrever as informações na tabela de partições.

porém, o parted não se garantiu ao encontrar uma partição extendida. sugeriu que era uma partição primária, ignorando que haviam mais partições dentro da partição extendida.

em paralelo, eu estava tentando ver se conseguia criar partições, usando o fdisk, especificando o tamanho em bytes ou em blocos, mas tudo o que eu tinha era como criá-las por cilindro.

depois de mais um pouco de pesquisa e uma dica de Ulisses Montenegro, vi que daria para fazer isso por setores, que já é bem mais granularizado que cilindros. para isto, basta dar o comando ‘u’ no fdisk, que ele chaveia entre usando setores ou cilindros.

faltava apenas criar as 2 partições que existiam na partição extendida. a partição extendida, apesar de não ter sido detectada pelo parted, eu sabia que era de onde teria terminado a 3ª partição até o fim do disco e criei manualmente.

para fazer isso, eu precisaria saber exatamente quantos setores teria uma das partições que restava (a outra teria o restante).

aí que entrou o /proc/partitions

lá existia a informação que eu queria, mas ao invés de setores, estava em blocos, como é mostrado no fdisk -l.

pude confirmar que estavam corretos os tamanhos das partições criadas/recuperadas pelo parted.

e com ‘fdisk -l -u‘ são exibidos os tamanhos em blocos e quantos setores existem no disco, como se vê abaixo:

# fdisk -l -u

Disk /dev/hda: 40.0 GB, 40007761920 bytes
255 heads, 63 sectors/track, 4864 cylinders, total 78140160 sectors
Units = sectors of 1 * 512 = 512 bytes

   Device Boot      Start         End      Blocks   Id  System
[...]

daí com uma regra de três simples, ficou fácil saber com quantos setores as partições que faltavam deviam ser criadas.

pense numa torada de aço. 😛

mas isso tudo não me fez esquecer o que me fazia estar mal… só me distraiu por um tempo, durante a hora do almoço, que eu nem queria sair pra comer.

no final das contas foi até bom, já que não houve nenhum prejuízo e ainda tenho um disquetão de 40GB.

[1] para quem não sabe, no Linux, /dev/hda refere-se ao primeiro disco da primeira controladora IDE. /dev/sda refere-se ao primeiro disco SCSI. e a interface ide-usb, simula uma interface SCSI, de forma que mesmo sendo um disco IDE, os discos plugados nesta controladora sao vistos como discos SCSI.

Comments on: "/proc/partitions" (2)

  1. Virgínia said:

    uhauhauhauah nossa Bilo, alguém consegue ler teus posts? uhauhauhauha

  2. Posts like this make the ineenrtt such a treasure trove

Leave a comment for: "/proc/partitions"