terça-feira, 4 de dezembro de 2007

Dicas de Linux - Open Source Notes

Essas são minhas anotações e dicas de Linux que fui guardando com o tempo, e agora resolvi publicar, está meio bagunçado mas quem sabe ajude alguém

COMO FAZER BACKUP HARD DISK COM LINUX

MONTAR O HARD DISK A SER COPIADO

$ mount -t vfat /dev/hda1 /mnt/hda1

# ZERAR OS BITS DO ESPAÇO LIVRE DO HARD DISK !!!!!!!!!!!!!! É NECESSÁRIO FAZER ISSO PORQUE O "ESPAÇO LIVRE" EM DISCO ESTÁ CHEIO DE ARQUIVOS ANTIGOS, QUANDO É REMOVIDO UM ARQUIVO ELE CONTINUA NO HARD DISK, SÓ É APAGADA A SUA REFERÊNCIA DA TABELA DO SISTEMA DE ARQUIVOS
* SE NÃO ZERAR OS BITS DE ESPAÇO LIVRE ANTES DE COPIAR COM dd + gzip O TAMANHO DO ARQUIVO DE IMAGEM VAI CONTINUAR COM O MESMO TAMANHO DO HARD DISK INTEIRO ( ESPAÇO LIVRE + ESPAÇO USADO)

# RECOMENTA-SE RODAR UM fsck na unidade para achar arquivos perdidos
$ fsck -a /dev/hda

$ dd bs=2048 if=/dev/zero of=/mnt/hda1/dummy.zeros
dd: escrevendo em `/mnt/hda1/dummy.zero': Não há espaço disponível no
dispositivo # NORMAL OCORRER ESSE ERRO
$ rm /mnt/hda1/dummy.zeros

# FAZER A COPIA COM TAMANHO DEFINIDO DE 614MB (2048 x 300k)
# NO CASO FOI MONTADO UMA UNIDADE SAMBA PARA ARMAZENAR OS DADOS

$ mount -t smbfs //192.168.0.100/backup /mnt/samba

# COM COMPACTAÇÃO GZIP
$ dd bs=2048 skip=0 count=300k if=/dev/hda gzip -c > /mnt/samba/image00.img.gz
$ dd bs=2048 skip=300k count=300k if=/dev/hda gzip -c > /mnt/samba/image01.img.gz
$ dd bs=2048 skip=600k count=300k if=/dev/hda gzip -c > /mnt/samba/image02.img.gz
...

FAZENDO COPIA PARA UM SERVIDOR FTP

# CRIA UM ARQUIVO FIFO E ENVIA ESSE ARQUIVO POR FTP

$ mkfifo /root/fifo
$ dd bs=2048 if=/dev/hda gzip > /root/fifo &
$ ftp servidor.ftp.com
ftp> binary
ftp> put "|cat /root/fifo" imagem.img

Obs.: tudo que está depois do put "| é o comando a ser executado na máquina LOCAL, e sua saída (standard output) será enviada para o arquivo imagem.img no servidor remoto

# OU ENTÃO DIRETO SEM FIFO!!!

ftp> put "|dd bs=2048 if=/dev/hda" backup.img


FAZENDO COPIA COM NETCAT

mesma coisa:
$ cat /dev/hda > image.img
$ dd if=/dev/hda > image.img

onde vai receber o arquivo:
$ nc -l -p 1234 > arquivo.img

onde vai enviar
$ cat /dev/hda nc ip_do_outro_pc 1234

JUNTANDO MULTIPLOS ARQUIVOS DE IMAGEM

# É POSSÍVEL CONCATENAR ARQUIVOS .IMG SALVOS SEPARADAMENTE
# ISSO É POSSÍVEL POIS NÃO EXISTE UM "CABEÇALHO" INFORMANDO
# O TIPO DO ARQUIVO, ELES SÃO ARQUIVOS "RAW"

$ cat image00.img image01.img image02.img > imagefull.img
$ mount imagefull.img /mnt/hda1

COMO RESTAURAR

# BOOTAR O PC COM LINUX LIVE-CD OU DISQUETE BOOT COM LINUX

$ gzip -dc /path/to/image00.img.gz dd of=/dev/hda


SALVAR MBR

# COPIA OS PRIMEIROS 512 BYTES DO HARD-DISK
# É AONDE SE ENCONTRA A MASTER BOOT RECORD

$ dd if=/dev/hda of=/path/to/mbr_backup.img count=1 bs=512

# RESTAURAR
$ dd if=/path/to/mbr_backup.img of=/dev/hda


CRIAR CD BOOTAVEL

# PRIMEIRO FAZER A IMAGEM DE UM DISQUETE DE BOOT
$ dd if=/dev/fd0 /usr/boot.img

# CRIAR DIRETORIO ONDE FICARA OS ARQUIVOS
$ mkdir toms-image
$ cd toms-image
/toms-image$

# CRIA UM DIRETORIO COM OS ARQUIVOS DO CD
/toms-image$ mkdir utilities

# COPIA O QUE QUISER PARA ESSE DIRETORIO
/toms-image$ cp /blah/* utilities

# CRIA A IMAGEM DO CD
/toms-image$ mkisofs -r -b tomsrtbt.img \
-c boot.catalog \
-o tomboot.iso .


CRIANDO UM "HARD DISK" EM UM ARQUIVO

METODO1
# COMO CRIAR UM FILESYSTEM EM UM ARQUIVO FAT32
# Criando um sistema de arquivo com 3Megas
$ mkfs.vfat -F 32 -C /root/fakefs 3000

# OBTER INFORMAÇÕES SOBRE O ARQUIVO CRIADO
$ file fakefs
fakefs: x86 boot sector, mkdosfs boot message display, code offset 0x58, OEM-ID " mkdosfs", sectors 6000 (volumes <=32 MB) , Media descriptor 0xf8, heads 64, FAT (32 bit), sectors/FAT 46, serial number 0x46624778, label: " " Outros comandos: $ fsck /root/fakefs $ fdisk -l /root/fakefs # MONTANDO A IMAGEM $ mount /root/fakefs /mnt/fakefs -o loop METODO 2:
CRIAR UM ARQUIVO COM ZEROS DO TAMANHO DESEJADO
E FORMATAR O ARQUIVO COM O SISTEMA

$ dd if=/dev/zero of=/bootable-image/boot.img bs=1024 count=25000
$ mkfs.msdos /bootable-image/boot.img


TIPS & TRICKS DIVERSOS LINUX

TESTE DE PERFORMANCE DE TRANSFERENCIA FTP

ftp> put "|dd if=/dev/zero bs=1M count=100" /dev/null
( Control + C para parar o teste... )
O FTP normalmente mostra a taxa de transferência, dá pra usar como ferramenta de benchmark de rede, levando em conta que a unidade de transferência de arquivo para rede é mbps (Mega BIT POR SEGUNDO) e quando transferimos arquivos é utilizado o KBps (KiloByte por segundo), ou seja, uma rede de 100mbps

100.000.000 bit por segundo
divide por 8, pois 8 bit = 1 byte
100.000.000 / 8 = 12.500.000 bytes por segundo
divide por 1024, pois quando tratamos de dados armazenados em disco rígido é um arquivo binário utilizamos base 2, 2^10=1024 que é o número mais próximo do "1000" em decimal
12.500.000 / 1024 = 12207 kiloByte por segundo
12207 / 1024 = 11,9 MegaByte por segundo

Considerando que existe ainda o cabeçalho IP e TCP, normalmente se consegue nos melhor dos melhores dos casos em uma rede de 100mbps a taxa de transferência de 9 megabytes por segundo.


MP3 PARA FTP EM REALTIME

$ mkfifo /root/fifo
$ cat musica.mp3 > fifo &
ftp ftp.seusite.com
login:
senha: *******
$ binary
ftp> put "|cat /root/fifo" musicaonline.mp3

No winamp, dar control + L e abrir a página web http://www.suapagina.com/hello/musicaonline.mp3

CONFIGURANDO REDE NO BRAÇO

PC 10.0.0.3
GATEWAY 10.0.01
DNS 200.192.168.1
No terminal como root:

# ifconfig eth0 10.0.0.3 netmask 255.255.0.0 up
# route add default gw 10.0.0.1

Edite o arquivo /etc/resolv.conf para configurar o DNS:
nameserver 200.192.168.1
nameserver 4.2.2.2
nameserver 4.2.2.3

route add default gw 192.168.0.1


TRANSFERENCIA DE ARQUIVO COM NETCAT

Upload to QEMU-Puppy:
$ tar cv files nc -l -p 1234 -w 10 # On host
$ nc qemuserver 1234 tar xv # On guest (QEMU-Puppy)

Download from QEMU-Puppy:
$ nc -l -p 1234 -w 10 tar xv # On host
$ tar cv files nc qemuserver 1234 # On guest (QEMU-Puppy)


DICAS DE NETCAT (TCP SWISS KNIFE)

http://drkmario.blogspot.com/search/label/firewall

Redirectionando o command.com
No server (windows):
C:\> nc -L -p 23 -e cmd.exe # listen on port 23, bind cmd.exe

No cliente (linux):
# nc serverip 23

Redirecionar o Bash (sem prompt)
No server (linux):
# nc -l -p 1234 -e /bin/bash

Redirecionar o Bash (com prompt)
No server (linux):
# nc -l -p 1234 -c "bash -i"

To scan a range of ports on a server:
nc -z -r -v www.acme.com 70-80

netcat era muito utilizado para fazer um "backdoor" rápido em servidores linux/unix e embutidos em programas de windows para fazer trojans, por esse motivo os anti-virus de windows atuais detectam o nc.exe como um vírus

Poor man's web server com netcat

On the server:
$ nc -L -p 1234 < /home/index.html OBS: -d daemoniza o netcat no DOS ou linux!!!!! LIMITAÇÕES SMB:
Samba tem limitação de 2GB, então tem que quebrar a imagem em menos de 2 Gb
To make the gzipped split image do `dd if=/dev/hda gzip -c split -b 2000m - smb/backup/henry-8-13-05.img` and then to compute the md5sum do `cat henry* gzip -dc md5sum`.

$ cat /dev/hda gzip -c --fast nc x.x.x.x 1234 # CLARO, ZERAR O ESPAÇO VAZIO ANTES!!!
$ dd if=/dev/zero of=/mnt/hda1/dummy.zero
$ dd if=/dev/zero of=/mnt/hda1/dummy.zero2
$ rm /mnt/hda1/dummy* (dois devido limitação de 4gb do fat32)
# Quebrando o arquivo em partes
# O espaço utilizado pelo HD era de 1.2 Gigabytes
$ dd bs=1M count=600 if=/dev/hda nc x.x.x.x 1234
$ dd bs=1M skip=600 if=/dev/hda nc x.x.x.x 1234
# O resto que devia ser só zeros compactar para não ocupar muito
$ dd bs=1M if=/dev/hda gzip -c --fast nc x.x.x.x 1234
Obs.: Após compactado em gzip se executar um "gzip -l imagem.img.gz" ele mostra tamanho errado, mas descompactando ele fica certo Para dar um RECOVER NO HD
$ dd bs=1M seek=0 if=/cdrom/imagem1.img of=/dev/hda
$ dd bs=1M seek=600 if=/cdrom/imagem2.img of=/dev/hda
$ gzip -dc imagem3.img.gz dd seek=1200 of=/dev/hda Para criar uma "imagem" a partir dos pedaços
$ dd bs=1M seek=0 if=/cdrom/imagem1.img of=/mnt/imagem.img
$ dd bs=1M seek=600 if=/cdrom/imagem2.img of=/mnt/imagem.img
$ gzip -dc /cdrom/imagem3.img.gz dd bs=1M seek=1200 of=/mnt/imagem.img

COMO MONTAR A IMAGEM DE UMA PARTIÇÃO COMPLETA FEITA COM dd if=/dev/hda of=imagem.img

CADA SETOR TEM 512 bytes
PRIMEIRA TRILHA = 63 SETORES (ONDE FICA A MBR)
LOGO, A PRIMEIRA PARTIÇÃO (HDA1) INICIA NORMALMENTE NO BYTE (63*512)=32256 mount -o loop=/dev/loop0,offset=32256 fullimage.img /mnt/hdimagem
A PARTIÇÃO FOI MONTADA NO DIRETORIO DE DESTINO O DEVICE VIRTUAL QUE CONTÉM A PARTIÇÃO E O LOOP0 (assim como o /dev/hda1 é um "pedaço" do /dev/hda, o /dev/hdimagem é um pedaço do /dev/loop0) é possível dar até um fsck no disco virtual
$ fsck /dev/loop0

Referencia de criar HD virtual no linux: http://www.osdev.org/osfaq2/index.php/Disk%20Images%20Under%20Linux


MUDAR CONFIGURAÇOES DO TERMINAL APENAS COM ECHO!

http://alexis.m2osw.com/console.html
http://www.die.net/doc/linux/man/man4/console_codes.4.html

ESC [ 1 ; n ] Set color n as the underline color
ESC [ 2 ; n ] Set color n as the dim color
ESC [ 8 ] Make the current color pair the default attributes.
ESC [ 9 ; n ] Set screen blank timeout to n minutes.
ESC [ 10 ; n ] Set bell frequency in Hz.
ESC [ 11 ; n ] Set bell duration in msec.
ESC [ 12 ; n ] Bring specified console to the front.
ESC [ 13 ] Unblank the screen.
ESC [ 14 ; n ] Set the VESA powerdown interval in minutes.

# Blank screen after 5 min.
$ echo -e "\033[9;5]" >/dev/console

# beep
$ echo -e "\a"

ESC-[10;xx] selects the bell frequency in Hertz. The value should be in the range 21-32766, otherwise the result is undefined. If the `xx' argument is missing, the default value (750Hz) will apply, as in `ESC-[10].
ESC-[11;xx] selects the bell duration, in milli-seconds. If you specify more than 2 seconds, the default applies (125ms). Once again, if the `xx' argument is missing (ESC-[11]) the default value will be used.

Forcing reboot
Linux is not Windows XP and if reboot fail you usually still connect by SSH and do something. This commands will show you how to remotely hard reboot machine. Hard reboot mean that shutdown scripts will not run and machine reboot immediately without syncing hard disk drives, shutdown applications etc.

FORCE REBOOT
echo 1 > /proc/sys/kernel/sysrq
echo b > /proc/sysrq-trigger
This commands enable sysrq and after this call fast reboot. If you want to force shutdown machine try this.

Force shutdown
echo 1 > /proc/sys/kernel/sysrq
echo o > /proc/sysrq-trigger

Utilizei bastante esses comandos de alterar as configurações de terminal com cat quando criei um CD de restauração de um pc, que bootava uma mini distribuição em floppy chamada HAL91 e não tinha o comando setterm , que é o comando que altera essas configurações do terminal.

COMO QUEBRAR UM ARQUIVO DE IMAGEM GZIPADA UNICA
EM VARIAS IMAGENS GZIPADAS "ON THE FLY"


PARA COPIAR:

Supondo que tenha uma imagem "sda1.img.gz" enorme de um hd inteiro
e queira quebrar em várias de 4gb
tem que descompacta "on the fly" e recompactar os pedaços novamente

# gunzip -c sda1.img.gz dd bs=100M count=40 skip=0 gzip -c --fast > sda1.part1.gz
# gunzip -c sda1.img.gz dd bs=100M count=40 skip=40 gzip -c --fast > sda1.part2.gz
# gunzip -c sda1.img.gz dd bs=100M count=40 skip=80 gzip -c --fast > sda1.part3.gz
...
gera vários arquivos de 4gb da imagem original que serão recompactados

Obs.: O bs (Block Size) tem que ser menor que o tamanho de RAM disponível
-------- VERIFICAR SE OS PEDAÇOS ESTÃO CORRETOS ----------------
# gunzip -c sda1.img.gz md5sum
d0e2695759b4376826004e9a0cecb8cf -

# mkfifo fifo1

# mkfifo fifo2

# gunzip -c sda1.part1.gz > fifo1 &
[1] 10646

# gunzip -c sda1.part2.gz > fifo2 &
[2] 10669

# cat fifo1 fifo2 md5sum
d0e2695759b4376826004e9a0cecb8cf -

PARA RESTAURAR
OBS.: DEIXAR A UNIDADE SDA DESMONTADA AO RESTAURAR

# gunzip -c sda1.part1.gz dd bs=100M seek=0 of=/dev/sda1
# gunzip -c sda1.part2.gz dd bs=100M seek=40 of=/dev/sda1
# gunzip -c sda1.part3.gz dd bs=100M seek=80 of=/dev/sda1
...
restaura os arquivos no hd


FAZENDO BACKUP DE PARTIÇÕES (NÃO DE TODO O DISCO)

# PRIMEIRO FAZER CÓPIA DA MBR
--------------------------------------------------------------
Código de arranque do SO | Master Partition Table | Assinatura
--------------------------------------------------------------
446 bytes | 16B 16B 16B 16B | 2bytes
--------------------------------------------------------------
Total: 512 bytes

COPIANDO A MBR
# dd bs=512 count=1 if=/dev/hda of=mbr_backup.img

TALVEZ FOSSE MELHOR COPIAR A PRIMEIRA TRILHA
NO CASO DO HD COM 63 SETORES x 512 bytes = 32256
# dd bs=32256 count=1 if=/dev/hda of=1st_track_backup.img

ZERAR A PARTIÇÃO!!!!!!!!!!
# mount /dev/hda1 /mnt/hda1
# for((i=0;i<10;i++);do bs="100M" if="/dev/zero" of="/mnt/hda1/dummy$i.zero" bs="10M" if="/dev/hda1"> hda1.img.gz

RESTAURANDO
# dd if=mbr_backup.img of=/dev/hda
# gunzip -c hda1.img.gz dd of=/dev/hda1
# gunzip -c hda2.img.gz dd of=/dev/hda2
...

MONTANDO UM ARQUIVO ÚNICO DE IMAGEM PARA DAR BOOT NO QEMU

CRIAR ARQUIVO DUMMY COM ZEROS PARA PREENCHER RESTO DA PRIMEIRA TRILHA
DE TAMANHO 32256 bytes - 512 bytes = 31744
# dd bs=31744 count=1 if=/dev/zero of=mbr_dummy.img

GERAR O ARQUIVO DO HD COMPLETO
# mkfifo fifo
# gunzip -c hda1.img.gz > fifo
# cat mbr_backup.img mbr_dummy.img fifo > harddisk.img
# qemu harddisk.img

VERIFICAR SE FOI GRAVADO CORRETAMENTE
# hexdump -n512 harddisk.img
mostra a assinatura da MBR do harddisk (termina com aa55)

# hexdump -n32256 harddisk.img
mostra a primeira trilha completa

# COMPARAR OS PRIMEIROS BYTES DO HDA1, DEVEM SER IGUAIS!
# hexdump -s32256 -n16 harddisk.img
# hexdumo -n16 hda1.img


RECUPERANDO PARTITION TABLE DANIFICADA

whatis g[13:48:40]root@amd500:~# whatis gpart
gpart (8) - guess PC-type hard disk partitions
[13:48:40]root@amd500:~# whatis gparted
gparted (1) - GNOME frontend for parted
[13:48:48]root@amd500:~# whatis parted
parted (8) - a partition manipulation program
[13:48:54]root@amd500:~# whatis fdisk
fdisk (8) - Partition table manipulator for Linux
[13:48:59]root@amd500:~# whatis cfdisk
cfdisk (8) - Curses based disk partition table manipulator for Linux

---------------------------------------------------------------------------------------
gpart tries to guess which partitions are on a hard disk. If the primary partition
table has been lost, overwritten or destroyed the partitions still exist on the disk but
the operating system cannot access them.
gpart ignores the primary partition table and scans the disk (or disk image, file)
sector after sector for several filesystem/partition types. It does so by "asking" filesystem
recognition modules if they think a given sequence of sectors resembles the beginning of
a filesystem or partition type.
-----------------------------------------------------------------------------------------
gparted uses libparted to detect and manipulate devices and partition tables while several (optional)
filesystemtools provide support for filesystems not included in libparted.
------------------------------------------------------------------------------------------
GPART E UMA COISA, GPARTED E OUTRA COISA :P
gpart - recupera mbr perdida ou danificada
gparted - particionador de disco
------------------------------------------------------------------------------------------

UDP OVER SSH TCP FORWARDING

UTILIZANDO VERSAO MAIS RECENTE DO NETCAT COM -L

In more detail: the first thing I do is setting up an SSH tunnel from client to
intermediate, on some arbitrary TCP port:
ssh -L 5901:127.0.0.1:5901 intermediate

Next, I set up a TCP->UDP bridge on intermediate, which directs the UDP traffic
to server:
netcat -u -L server:27960 -t -p 5901

Finally, I set up an UDP->TCP bridge on client:
netcat -t -L 127.0.0.1:5901 -u -p 27960

So now I would theoretically just need to start ET on the client an connect to 127.0.0.1.

UTILIZANDO VERSAO MAIS ANIGUINHA DO NETCAT

entrar no servidor remoto, e redirecionar uma porta:
local# ssh -L 6667:localhost:6667 server.com.br
remote# mkfifo fifo
remote# nc -l -p 6667 <> fifo

no pc local:
local# mkfifo fifo
local# nc -l -u -p 53 <> fifo

-> Agora é so apontar o dns pro local:53 se for linux adicionar em /etc/resolv.conf o 127.0.0.1 (localhost)

Atualização DELL INSPIRON 15R com Update para Windows 10 22H2 travado em 61% ou 99%

 Como atualizar notebook DELL INSPIRON 15R com Windows 10 que está com a atualização travada em 61% ou 99%: Processo de atualização manual d...