/home/ericogr/blog

Experiências no desenvolvimento de aplicações e afins

Recuperando partições danificadas

Posted by ericogr em 11 junho 2009

Problema: depois de reparticionar o hd (sdb) utilizando as ferramentas do ubuntu server 9.04 e da instalação do grub, a partição NTFS (sda1) não pode mais ser montada (mount /dev/sdas1 /mnt -t ntfs). Ao tentar montar recebemos a mensagem:

The device ‘/dev/sda1’ doesn’t have a valid NTFS.
Maybe you selected the wrong device? Or the whole disk instead of a
partition (e.g. /dev/hda, not /dev/hda1)? Or the other way around?

Nesta partição (sda1) está instalado o Windows XP e com este erro, não é possível montar e muito menos iniciar o sistema.

Ainda não descobri a causa do problema, na verdade, já realizei o processo de particionamento uma série de vezes e nunca tive problemas. De qualquer forma, eu preciso da minha partição de volta ou, pelo menos, dos dados contidos nela!

A solução proposta aqui não se aplica a todos os casos, mas ela pode servir de base para solucionar outros tipos de problemas ligados a recuperação de partições danificadas. Como dizem por aí: siga os passos por conta e risco! Não venha reclamar que perdeu tudo porque seguiu os passos descritos aqui!

Solução adotada:

Depois de pesquisar em vários fóruns, achei um sistema operacional linux chamado System Rescue (http://www.sysresccd.org). Ele possui várias ferramentas interessantes para realizar recuperação de dados e uma delas é a testdisk (http://www.cgsecurity.org/wiki/TestDisk).

No meu caso, instalei a ferramenta no sistema operacional que já estava instalado na máquina em uma outra partição. Se eu não tivesse, uma boa opção seria utilizar o System Rescue mesmo (mais detalhes no site).

Para instalar o testdisk no ubuntu digite: sudo apt-get install testdisk

O site http://www.cgsecurity.org/wiki/TestDisk traz uma série de informações sobre a ferramenta. Ela possui suporte para os seguintes sistemas de arquivo:

  • BeFS ( BeOS )
  • BSD disklabel ( FreeBSD/OpenBSD/NetBSD )
  • CramFS, Compressed File System
  • DOS/Windows FAT12, FAT16 and FAT32
  • Windows exFAT
  • HFS, HFS+ and HFSX, Hierarchical File System
  • JFS, IBM’s Journaled File System
  • Linux ext2 and ext3
  • Linux LUKS encrypted partition
  • Linux RAID md 0.9/1.0/1.1/1.2
    • RAID 1: mirroring
    • RAID 4: striped array with parity device
    • RAID 5: striped array with distributed parity information
    • RAID 6: striped array with distributed dual redundancy information
  • Linux Swap (versions 1 and 2)
  • LVM and LVM2, Linux Logical Volume Manager
  • Mac partition map
  • Novell Storage Services NSS
  • NTFS ( Windows NT/2000/XP/2003/Vista/2008 )
  • ReiserFS 3.5, 3.6 and 4
  • Sun Solaris i386 disklabel
  • Unix File System UFS and UFS2 (Sun/BSD/…)
  • XFS, SGI’s Journaled File System

No meu caso, depois de instalar o testdisk, eu executei:

sudo su
testdisk

1. Selecione Create (se quiser criar um log)

TestDisk 6.10, Data Recovery Utility, July 2008
Christophe GRENIER <grenier@cgsecurity.org>
http://www.cgsecurity.org

TestDisk is a free data recovery software designed to help recover lost
partitions and/or make non-booting disks bootable again when these symptoms
are caused by faulty software, certain types of viruses or human error.
It can also be used to repair some filesystem errors.

Information gathered during TestDisk use can be recorded for later
review. If you choose to create the text file, testdisk.log , it
will contain TestDisk options, technical information and various
outputs; including any folder/file names TestDisk was used to find and
list onscreen.

Use arrow keys to select, then press Enter key:
[ Create ]  Create a new log file
[ Append ]  Append information to log file
[ No Log ]  Don’t record anything

2. Selecione o disco que tem as partições que serão recuperadas e selecione proceed. No meu caso foi /dev/sda:

TestDisk 6.10, Data Recovery Utility, July 2008
Christophe GRENIER <grenier@cgsecurity.org>
http://www.cgsecurity.org

TestDisk is free software, and
comes with ABSOLUTELY NO WARRANTY.

Select a media (use Arrow keys, then press Enter):
Disk /dev/sda – 160 GB / 149 GiB – ATA ST3160827AS
Disk /dev/sdb – 80 GB / 74 GiB – ATA ST380011A

[Proceed ] [  Quit  ]

3. Selecione o tipo de partição. No meu caso (e na maior parte dos outros) é a opção Intel:

TestDisk 6.10, Data Recovery Utility, July 2008
Christophe GRENIER <grenier@cgsecurity.org>
http://www.cgsecurity.org

Disk /dev/sda – 160 GB / 149 GiB – ATA ST3160827AS

Please select the partition table type, press Enter when done.
[Intel  ]  Intel/PC partition
[EFI GPT]  EFI GPT partition map (Mac i386, some x86_64…)
[Mac    ]  Apple partition map
[None   ]  Non partitioned media
[Sun    ]  Sun Solaris partition
[XBox   ]  XBox partition
[Return ]  Return to disk selection

4. Selecione a opção advanced:

TestDisk 6.10, Data Recovery Utility, July 2008
Christophe GRENIER <grenier@cgsecurity.org>
http://www.cgsecurity.org

Disk /dev/sda – 160 GB / 149 GiB – CHS 19457 255 63

[ Analyse  ]  Analyse current partition structure and search for lost partitions
[ Advanced ]  Filesystem Utils
[ Geometry ]  Change disk geometry
[ Options  ]  Modify options
[ MBR Code ]  Write TestDisk MBR code to first sector
[ Delete   ]  Delete all data in the partition table
[ Quit     ]  Return to disk selection

5. Agora selecione boot:

TestDisk 6.10, Data Recovery Utility, July 2008
Christophe GRENIER <grenier@cgsecurity.org>
http://www.cgsecurity.org

Disk /dev/sda – 160 GB / 149 GiB – CHS 19457 255 63

Partition                  Start        End    Size in sectors
1 * HPFS – NTFS              0   1  1 12157 254 63  195318207
2 P FAT32                12158   0  1 17020 254 63   78124095 [NO NAME]
3 E extended             17021   0  1 19456 254 63   39134340
5 L HPFS – NTFS          17021   1  1 19456 254 63   39134277 [New Volume]

[  Type  ]  [  Boot  ] [Image Creation]  [  Quit  ]
Boot sector recovery

6. Nesta máquina estou com um problema no Boot Sector. Neste caso, selecione Org. BS. Observe a mensagem Sectors are not identical:

TestDisk 6.10, Data Recovery Utility, July 2008
Christophe GRENIER <grenier@cgsecurity.org>
http://www.cgsecurity.org

Disk /dev/sda – 160 GB / 149 GiB – CHS 19457 255 63
Partition                  Start        End    Size in sectors
1 * HPFS – NTFS              0   1  1 12157 254 63  195318207

Boot sector
Status: OK

Backup boot sector
Status: OK

Sectors are not identical.

A valid NTFS Boot sector must be present in order to access
any data; even if the partition is not bootable.

[  Quit  ]  [  List  ]  [Org. BS ] [Backup BS]  [Rebuild BS]  [  Dump  ]

7. Restaurar o backup dos setores de boot. Pressione Y:

TestDisk 6.10, Data Recovery Utility, July 2008
Christophe GRENIER <grenier@cgsecurity.org>
http://www.cgsecurity.org

Copy original NTFS boot sector over backup boot, confirm ? (Y/N)

8.Observe que agora não há divergencia no boot sector (Sectors are identical):

TestDisk 6.10, Data Recovery Utility, July 2008
Christophe GRENIER <grenier@cgsecurity.org>
http://www.cgsecurity.org

Disk /dev/sda – 160 GB / 149 GiB – CHS 19457 255 63
Partition                  Start        End    Size in sectors
1 * HPFS – NTFS              0   1  1 12157 254 63  195318207

Boot sector
Status: OK

Backup boot sector
Status: OK

Sectors are identical.

A valid NTFS Boot sector must be present in order to access
any data; even if the partition is not bootable.

9. Agora vamos refazer setor de boot:

TestDisk 6.10, Data Recovery Utility, July 2008
Christophe GRENIER <grenier@cgsecurity.org>
http://www.cgsecurity.org

Disk /dev/sda – 160 GB / 149 GiB – CHS 19457 255 63
Partition                  Start        End    Size in sectors
1 * HPFS – NTFS              0   1  1 12157 254 63  195318207

Boot sector
Status: OK

Backup boot sector
Status: OK

Sectors are identical.

A valid NTFS Boot sector must be present in order to access
any data; even if the partition is not bootable.

[  Quit  ]  [  List  ]  [Rebuild BS] [Repair MFT]  [  Dump  ]

10. Agora clique na opção Write:

TestDisk 6.10, Data Recovery Utility, July 2008
Christophe GRENIER <grenier@cgsecurity.org>
http://www.cgsecurity.org

Disk /dev/sda – 160 GB / 149 GiB – CHS 19457 255 63
Partition                  Start        End    Size in sectors
1 * HPFS – NTFS              0   1  1 12157 254 63  195318207

filesystem size           195318207 195318207
sectors_per_cluster       8 8
mft_lcn                   786432 786432
mftmirr_lcn               12207387 144959613018195227
clusters_per_mft_record   -10 -127
clusters_per_index_record 1 114
Extrapolated boot sector and current boot sector are different.

[  Dump  ]  [  List  ]  [ Write  ] [  Quit  ]

11. Confirme a gravação do novo boot pressionando Y:

TestDisk 6.10, Data Recovery Utility, July 2008
Christophe GRENIER <grenier@cgsecurity.org>
http://www.cgsecurity.org

Write new NTFS boot sector, confirm ? (Y/N)

Pressione q várias vezes até sair do programa.
Neste ponto a partição deve estar pronta para ser utilizada. Você poderá monta-la e copiar seus dados para um local seguro.

Como este é um simples PC doméstico, não é sempre que faço backup dos meus dados e esta ferramenta foi a minha salvação. Quem sabe ela também não pode ser a sua!

Posted in linux, so | Etiquetado: , , , , , , , , , , , , | 1 Comment »

Instalando o Oracle Database 11g 64bit no Ubuntu Server 9.04 64bit

Posted by ericogr em 17 maio 2009

Introdução

Neste post vou tentar ajudar os iniciantes, com um pouco de conhecimento em linux, na instalação do Oracle 11g Database Server 64bit no Ubuntu Server 9.04 64bit. Provavelmente os passos descritos aqui poderão ser utilizado com futuras versões do Ubuntu/Oracle.

Hardware: A máquina servidor utilizada na instalação foi um AMD64 3200 com 1 Gb de memória RAM, HD de 80Gb, placa de rede Wireless 802.11 g, Ubuntu Server 9.04 64bit usando o novo sistema de arquivos EXT4. A máquina cliente é um notebook HP básico com Ubuntu 9.04 Desktop 32bit.

Os procedimentos a seguir foram executados por mim e não necessariamente representam a melhor forma de se fazer a instalação.

Resumo: para instalar o Oracle Database Server na máquina servidor, que NÃO vem com suporte para aplicações gráficas (por padrão), você precisará de uma máquina cliente, que TEM esse suporte. Presumindo que não temos acesso fácil ao servidor, poderemos usar o aplicativo ssh para conectar, executar as configurações necessárias e no final, enviar as telas que o instalador mostraria no servidor para a máquina cliente. Não vou entrar nos detalhes técnicos de como isso funciona, um outro post seria necessário só para este assunto. É importante lembrar que durante a instalação do Ubuntu Server, você instale também o OpenSSH para executar os passos aqui descritos remotamente. Não é recomendado instalar o servidor gráfico na máquina servidor.

O que motivou a criação deste post foi a falta de informações disponíveis em português para alguns problemas encontrados na instalação da versão 64bit, problemas que não ocorrem na versão 32bit do Ubuntu.

Não fornecerei detalhes sobre a instalação do Ubuntu (Server/Desktop), você poderá procurar algum tutorial para isso na internet, mas acredito ser bastante simples.

Instalação do Banco de Dados

Depois de instalado o sistema operacional e da rede entre a máquina servidor e a cliente estar configurada, precisamos efetuar algumas alterações recomendadas pela Oracle para que o banco de dados funcione adequadamente. É importante lembrar que o Ubuntu não é homologado para a instalação do Oracle Database Server.

Abaixo, colocarei uma longa “receita de bolo” que vai facilitar a configuração.

Observações:
1. O símbolo $ indica que os comandos devem ser executados com o usuário normal
2. O símbolo # indica que os comandos devem ser executados como root ($ sudo su)
3. Onde houver o símbolo S, os comandos devem ser executados no servidor e onde tiver o C, no cliente. Ex 01S indica que os comandos serão executados no servidor (usando o ssh).
4. Para conectar no servidor remoto, utilize o ssh <máquina>. Ex: ssh 192.168.0.100
5. A versão servidor do Ubuntu não vem com o X, portanto a instalação será feita a partir de outra máquina com um servidor X instalado (Ubuntu Desktop por exemplo).

Vamos lá…

01S. Atualize o sistema
# apt-get update
# apt-get dist-upgrade

02S. Baixar pacotes requeridos
# apt-get install gcc make binutils gawk x11-utils rpm alien ksh lsb-rpm libaio1 lesstif2 libmotif3 unzip

03S. Alterar link simbólico
# ln -sf /bin/bash /bin/sh

04S. Criar links simbólicos para alguns programas
# ln -s /usr/bin/awk /bin/awk
# ln -s /usr/bin/rpm /bin/rpm
# ln -s /usr/bin/basename /bin/basename
# ln -s /lib/libgcc_s.so.1 /lib/libgcc_s.so

05S. Adicionar o grupo oinstall, dba e nobody
# addgroup oinstall
# addgroup dba
# addgroup nobody

06S. Alterar o GID do grupo padrão do usuário para o valor especificado
# usermod -g nobody nobody

07S. Criar diretório de usuário Oracle
# mkdir /home/oracle

08S. Alterar os donos do diretório de usuário Oracle
# chown -R oracle:dba /home/oracle

09S. Adicionar usuário oinstall com senha password
# useradd -g oinstall -G dba -p password -d /home/oracle -s /bin/bash oracle

10S. Adicionar comando “su oracle” ao visudo para que todos os usuários do grupo admin possam entrar com usuário oracle sem senha (passo opcional)
# visudo

Na última linha do arquivo adicionar:
%admin ALL=NOPASSWD:/bin/su oracle

Para testar digite no prompt
$ sudo su oracle

11S. Criar /etc/rc.d e seus links
# mkdir /etc/rc.d
# for i in 0 1 2 3 4 5 6 S ; do ln -s /etc/rc$i.d /etc/rc.d/rc$i.d ; done

12S. Criar diretório para a instalação e alterar as permissões
# mkdir -p /u01/app/oracle
# chown -R oracle:dba /u01

13S. Criar e alterar o dono da pasta onde estará o instalador
# mkdir /home/oracle/inst
# chown -R oracle:oinstall /home/oracle/inst

14S. Alterar os parâmetros de configuração do kernel
# cd /etc
# cp sysctl.conf sysctl.conf.original
# pico sysctl.conf

#Linhas para serem adicionadas no final do arquivo
fs.file-max = 65535
kernel.shmall = 2097152
kernel.shmmax = 2147483648
kernel.shmmni = 4096
kernel.sem = 250 32000 100 128
net.ipv4.ip_local_port_range = 1024 65535
net.core.rmem_default = 4194304
net.core.rmem_max = 4194304
net.core.wmem_default = 262144
net.core.wmem_max = 262144

15S. Modificar o arquivo /etc/security/limits.conf que impõe limites para usuários
# cd /etc/security/
# cp limits.conf limits.conf.original
# pico /etc/security/limits.conf

#estas configurações devem ser adicionadas no final do arquivo
oracle soft nproc 2047
oracle hard nproc 16383
oracle soft nofile 1023
oracle hard nofile 65535

16S. Modificar configurações de segurança
# cd /etc/pam.d
# cp login login.original
# pico login

#adicionar as linhas no final do arquivo
session required /lib/security/pam_limits.so
session required pam_limits.so

17S. Reinicie o sistema
# reboot

18S. Entre com o usuário Oracle
$ sudo su oracle

19C. Desative os efeitos visuais (caso estejam ativados)

Na máquina onde serão exibidas as telas do instalador as telas podem não ser exibidas corretamente se os efeitos visuais estiverem habilitados.

– Clique em Sistema>Preferências>Aparência e clique na guia Efeitos Visuais
– Clique em Nenhum e depois em Fechar

20C. Verifique se a máquina está com as conexões TCP para o servidor X habilitadas
– Clique no menu Sistema>Administração>Janela de inicio de sessão
– Clique na aba Segurança
Desabilite a opção “Negar conexões TCP para o servidor X” (caso esteja marcado)

21C. Habilite a conexão TCP do servidor para a máquina cliente indicando o IP do servidor
# xhost +192.168.0.100

22S. Montar o dispositivo com os arquivos da instalação do oracle.
No meu caso é um drive de dvd que está em /dev/scd0. Substitua o /dev/scd0 de acordo com as configurações do seu sistema.
# if [ ! -e /media/cdrom ]; then mkdir -p /media/cdrom; fi
# mount /dev/scd0 /media/cdrom

23S. Copiar o arquivo de instalação do dispositivo
Copiar os arquivos do dvd/pendrive para a pasta /home/oracle/database. No meu caso, os arquivos estão na pasta linux do dvd.
# cp /media/cdrom/linux/linux.x64_11gR1_database_*.zip /home/oracle/inst

24S. Descompactado o arquivo de instalação do oracle.
# cd /home/oracle/inst
# unzip *.zip
# chown -R oracle.oinstall /home/oracle/inst

25S. Algum bug ao descompactar alguns arquivos me obrigaram a criar esta gambiarra (isso ocorreu na versão 64bit)

#sudo su oracle
$ mv /home/oracle/inst/database/install/unzip /home/oracle/inst/database/install/unzip.bak
$ ln -s $(which unzip) /home/oracle/inst/database/install/unzip

26S. Executar a instalação exportando o display para a máquina cliente
* Lembre-se que 192.168.0.105 é a máquina que tem o servidor X instalado (onde as imagens do instalador devem aparecer)
# export DISPLAY=192.168.0.105:0.0
# /home/oracle/inst/database/runInstaller -ignoreSysPrereqs

* Durante a instalação, pode ocorrer um erro ao executar um determinado processo. Ignore e prossiga com o procedimento.

Abaixo coloquei algumas telas do instalador. Você pode observar as opções que eu usei para configurar a sua instalação.

Instalação do Oracle 11g 64bit - Tela 1
Tela inicial do instalador

Instalação do Oracle 11g 64bit - Tela 2
Usar o grupo dba

Instalação do Oracle 11g 64bit - Tela 3
Marcar a versão Enterprise Edition

Instalação do Oracle 11g 64bit - Tela 4
Mudar o ORACLE_HOME

Instalação do Oracle 11g 64bit - Tela 5
Clique nas caixas de seleção de requisitos que estão em branco para que sejam marcadas como “verificadas pelo usuário”

Instalação do Oracle 11g 64bit - Tela 7
Optar por instalar somente o software. O banco de dados poderá ser configurado depois

Instalação do Oracle 11g 64bit - Tela 8
Mudei os privilégios dos grupos do sistema operacional para dba

Instalação do Oracle 11g 64bit - Tela 9
Finalmente o sumário

A instalação deve demorar alguns minutos…

Instalação do Oracle 11g 64bit - Erro 1Devem ocorrer dois erros como este durante a instalação. Estes erros não impedem a utilização do banco de dados

Instalação do Oracle 11g 64bit - Lista De Scripts
Nesta tela são exibidos os scripts que devem ser executados como root

Instalação do Oracle 11g 64bit - Tela 10
Finalizamos a instalação

27S. Editar o arquivo /etc/environment
# pico /etc/environment

Coloque o seguinte conteúdo:

ORACLE_HOME=/u01/app/oracle/product/11.1.0/db_1
PATH=”/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/u01/app/oracle/product/11.1.0/db_1/bin”

28S. Criar o arquivo oracledb
Depois de ter instalado o banco de dados, vamos criar o arquivo /etc/init.d/oracledb:

# pico /etc/init.d/oracledb

Conteúdo do arquivo:

#!/bin/bash
#
# /etc/init.d/oracledb
#
# Run-level Startup script for the Oracle Listener and Instances
# It relies on the information on /etc/oratab
export ORACLE_BASE=/u01/app/oracle
export ORACLE_HOME=/u01/app/oracle/product/11.1.0/db_1
export ORACLE_OWNR=oracle
export PATH=$PATH:$ORACLE_HOME/bin
if [ ! -f $ORACLE_HOME/bin/dbstart -o ! -d $ORACLE_HOME ]
then
echo “Oracle startup: cannot start”
exit 1
fi
case “$1” in
start)
# Oracle listener and instance startup
echo -n “Starting Oracle: ”
su $ORACLE_OWNR -c “$ORACLE_HOME/bin/lsnrctl start”
su $ORACLE_OWNR -c “$ORACLE_HOME/bin/dbstart $ORACLE_HOME”
touch /var/lock/oracle
echo “OK”
;;
stop)
# Oracle listener and instance shutdown
echo -n “Shutdown Oracle: ”
su $ORACLE_OWNR -c “$ORACLE_HOME/bin/lsnrctl stop”
su $ORACLE_OWNR -c “$ORACLE_HOME/bin/dbshut $ORACLE_HOME”
rm -f /var/lock/oracle
echo “OK”
;;
reload|restart)
$0 stop
$0 start
;;
*)
echo “Usage: `basename $0` start|stop|restart|reload”
exit 1
esac
exit 0

29S. Configurar a execução automática
# chmod a+x /etc/init.d/oracledb
# update-rc.d oracledb defaults 99

30S. Crie o banco de dados usando o SID orasrv

Observe que você deve alterar o endereço IP 192.168.0.105 para o da sua máquina cliente!

$ sudo su oracle
$ export DISPLAY=192.168.0.105:0.0
$ export ORACLE_HOME=/u01/app/oracle/product/11.1.0/db_1
$ export PATH=”/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/u01/app/oracle/product/11.1.0/db_1/bin”
$ dbca

31. Automatizar a execução do Oracle no boot:
# pico /etc/oratab

Altere o último caractere de N para Y assim (exemplo):

[original] orasrv:/u01/app/oracle/product/11.1.0/db_1:N
[alterado] orasrv:/u01/app/oracle/product/11.1.0/db_1:Y

* A última linha só existirá depois que o banco de dados for criado.

“E chegamos ao fim, espero que você tenha conseguido seguir os passos descritos aqui. Se tiver alguma sugestão, por favor, deixe seu comentário“.

Posted in banco de dados, oracle | Etiquetado: , , , , , , , , , | 4 Comments »