BIND e cache

Tenho tido problemas com o BIND. Penso que é um problema de erros na cache, ou algo parecido. Quando tento aceder a um sítio a partir do nome, na rede interna, o browser diz que não consegue aceder ao sítio. Mas se eu aceder a partir das máquinas periféricas – os gateways – acedo sem problemas.

Independentemente do problema, aqui fica uma solução para limpar a cache do BIND.

Para fazer dump da cache:

rndc dumpdb -cache

Para ver o conteúdo do dump:

vi /var/named/named_dump.db

Para apagar a cache:

rndc flush

Depois é necessário recarregar o BIND:

rndc reload

Ver mais em: How to view and clear Bind DNS server’s cache on Linux

Ficheiro de swap

Precisei de aumentar o espaço de swap numa máquina com o Ubuntu. No Slackware costumo criar partições de swap, mas esta máquina Ubuntu tinha um ficheiro de swap, ao invés de uma partição.

Segui as instruções do site Linuxize, e criei dois ficheiros de 2G cada.

sudo swapon --show
sudo fallocate -l 2G /swapfile2
sudo chmod 600 /swapfile2
sudo mkswap /swapfile2
sudo swapon /swapfile2
sudo vi /etc/fstab
sudo swapon --show

sudo swapon --show
sudo fallocate -l 2G /swapfile3
sudo chmod 600 /swapfile3
sudo mkswap /swapfile3
sudo swapon /swapfile3
sudo vi /etc/fstab
sudo swapon --show
sudo free -h

O ficheiro /etc/fstab ficou com 3 ficheiros de swap, como indicado abaixo:

/swapfile             none            swap    sw              0       0
/swapfile2            none            swap    sw              0       0
/swapfile3            none            swap    sw              0       0

O resultado dos comandos de consulta foi:

$ sudo swapon --show
NAME       TYPE SIZE   USED PRIO
/swapfile  file   2G 977,5M   -2
/swapfile2 file   2G     0B   -3
/swapfile3 file   2G     0B   -4

$ sudo free -h
          total        used        free      shared  buff/cache   available
Mem:       7,7G        1,7G        122M        195M        5,9G        5,5G
Swap:      6,0G        977M        5,0G

Extrair um ficheiro de um tar

Precisei de extrair um ficheiro de um tar. Já não é a primeira vez. Fica aqui a solução para consultas futuras.

Em dezembro passado, movi o conteúdo das pastas de email, do servidor, para a máquina Windows, para mais tarde os arquivar.

Na prática cada pasta de email é um ficheiro na diretoria home do utilizador.

Um dos ficheiros que movi perdeu-se no éter, e desapareceu mesmo. Fiquei sem emails daquela pasta, de um período de 4 anos. Felizmente tenho backups diários de todas as máquinas e guardo-os durante 1 ano.

Aqui vai o comando:

tar xzvf /store/baks/bak.2018-12-26.MAQUINA5.tar.gz -C . home/user/Pasta

O parâmetro -C . é para dizer que quero que faça o restore para a diretoria atual.

Ideia tirada do stackoverflow.

postgres

Criei um pacote de instalação do postgres, versão 10, para o Slackware, a partir dos ficheiros do slackbuilds.org.

Precisei de colocar a BD numa drive SSD e, por isso, a configuração foi um pouco diferente do normal. Seguem as instruções.

installpkg postgresql-10.2-x86_64-1_SBo.tgz

groupadd -g 209 postgres
useradd -u 209 -g 209 -d /disco4/pgsql postgres
mkdir /disco4/pgsql
chown -R postgres:postgres /disco4/pgsql
su postgres -c "initdb -D /disco4/pgsql/10.2/data --locale=en_US.UTF-8 -A md5 -W"

Depois tive que atualizar a diretoria das BDs no ficheiro /etc/rc.d/rc.postgresql. Onde estava:

DATADIR=/var/lib/pgsql/$PG_VERSION/data

alterei para

DATADIR=/disco4/pgsql/$PG_VERSION/data

Depois já se pode arrancar com o postgres:

/etc/rc.d/rc.postgresql start

Para criar um utilizador “alex” e dar-lhe permissões de administrador, executar os comandos seguintes, inserindo a password de superuser, de cada vez:

sudo -u postgres createuser alex
sudo -u postgres createdb alex
sudo -u postgres psql

Com este último comando, entramos no psql e deve emitir-se o comando seguinte para atribuir permissões de administrador ao novo utilizador:

alter user alex with encrypted password 'password';

Para sair: \q

O postgres – vá-se lá saber porquê – cria uma BD de nome alex para o utilizador alex e atribui-a ao utilizador. Se quisermos criar outra BD para esse utilizador, podemos emitir os comandos seguintes, ainda dentro do psql:

sudo -u postgres createdb nova_bd
sudo -u postgres psql
grant all privileges on database nova_bd to alex ;

Depois, para sair, escrever \q

O utilizador alex pode agora entrar com o seu login:

psql -U alex

e ligar-se à sua nova BD:

\c nova_bd

Para correr um script SQL externo – por exemplo, para criar uma nova BD – executar o comando:

\i script.sql


Par ausar o postgres a partir do Python3, deve instalar-se o pacote seguinte:

pip3 install -U psycopg2-binary

Stale file handle

As minhas máquinas Linux vão buscar os pacotes de atualização do Slackware a um repositório meu, que atualizo diariamente.

Por vezes, quando me tento ligar à máquina onde está esse repositório, a partir de outras máquinas, obtenho a mensagem: Stale file handle

Por exemplo: df: /mnt/slack: Stale file handle, ou então: mount.nfs: Stale file handle

A solução é reiniciar o nfsd na máquina repositório,

/etc/rc.d/rc.nfsd restart

e depois remontar as pastas remotas nas outrs máquinas.

mount -a

Pode ser necessário desmontar a pasta primeiro:

umount /mnt/slack

Instalar Linux num RAID de raiz

Para instalar o Slackware num sistema RAID logo de raiz, é necessário seguir os passos seguintes.

Na instalação, antes de fazer ‘setup’:

Criar as partições nos discos, de tamanho igual, como sendo do tipo RAID (tipo FD no fdisk, ou FD00 no gdisk).

Depois, criar o array de RAID. O exemplo seguinte é para um RAID 1.

mdadm –create /dev/md0 –level=1 –raid-devices=2 –metadata=0.90 /dev/sda2 /dev/sdb2

O parâmetro –metadata=0.90 é por causa do lilo, que precisa disto para discos RAID de arranque. Não aceita a versão metadata=1.2 (não sei se ainda tem esta limitação).

Depois, manda-se instalar o sistema em /dev/md0.


Caso surja algum erro e seja necessário parar o RAID, eis os comandos:

mdadm –stop /dev/md0


Outras operações que por vezes tenho que efetuar com os RAIDs:

Se for necessário renomear os RAIDs:
mdadm –stop /dev/md2
mdadm –assemble /dev/md0 /dev/sda3 /dev/sdc3

# Normalmente tenho que fazer o seguinte:

mdadm –stop /dev/md127
mdadm –assemble /dev/md3 /dev/sda1 /dev/sdb1

mdadm –stop /dev/md126
mdadm –assemble /dev/md2 /dev/sdg1 /dev/sdh1

# mas pode ser melhor dar um nome ao RAID passando um parâmetro –name=2 ou –name=3
# em princípio isto tem que ser feito logo na criação

# Depois de criar/modificar o RAID, deve-se reescrever o ficheiro /etc/mdadm.conf

cp /etc/mdadm.conf /etc/mdadm.conf.ori
echo ‘DEVICES /dev/sd[abcdefgh]1’ > /etc/mdadm.conf
mdadm –detail –scan >> /etc/mdadm.conf

Parar e reiniciar um RAID
mdadm –stop /dev/md3
mdadm –assemble /dev/md3 /dev/sdc1 /dev/sdd1

Substituir um disco RAID1 que falhou. Ver:
http://www.howtoforge.com/replacing_hard_disks_in_a_raid1_array

# Dizer que o disco falhou
mdadm –manage /dev/md3 –fail /dev/sdc1

# Remover o disco do RAID
mdadm –manage /dev/md3 –remove /dev/sdc1

# Adicionar disco ao RAID
mdadm –manage /dev/md3 –add /dev/sdc1

Converter o disco de sistema em RAID 1

Numa das máquinas, talvez a mais antiga, o disco de sistema (boot) não está em RAID. É a única onde isso acontece, e vou tentar convertê-lo hoje para RAID 1.

Li vários artigos na net@ – principalmente este – para ver se havia uma forma expedita de fazer isto, mas parece que tem mesmo que ser feito “à unha”. A solução que vou descrever abaixo é muito próxima da que imaginei a priori.

Arranjar um disco de tamanho igual ao do disco de boot.
Criar partições iguais.

No meu caso, o disco de boot tinha as partições seguintes:

Device Boot Start End Sectors Size Id Type
/dev/sda1 2048 4196351 4194304 2G 82 Linux swap
/dev/sda2 4196352 8390655 4194304 2G 82 Linux swap
/dev/sda3 8390656 488397167 480006512 228.9G 83 Linux

Com o fdisk, criei também duas partições de SWAP com 2GB cada e uma de Linux RAID, no disco novo:

Device Boot Start End Sectors Size Id Type
/dev/sdb1 2048 4196351 4194304 2G 82 Linux swap
/dev/sdb2 4196352 8390655 4194304 2G 82 Linux swap
/dev/sdb3 8390656 488397167 480006512 228.9G fd Linux raid autodetect

Adicionei as partições de SWAP ao fstab:

/dev/sdb1 swap swap defaults 0 0
/dev/sdb2 swap swap defaults 0 0

Para copiar a partição sda3 para a sdb3, desliguei a máquina, e arranquei com o DVD de instalação de uma versão recente do Slackware.

Depois, criei o array do RAID. De notar o atributo missing que indica que há um disco em falta, que irá ser adicionado mais tarde:

mdadm --create --metadata=0.90 /dev/md0 --level=1 --raid-devices=2 missing /dev/sdb3

O parâmetro --metadata=0.90 é necessário porque este volume vai ser um volume de arranque e o lilo precisa disso.

Para confirmar se o RAID foi bem criado, corri o comando cat /proc/mdstat

Personalities : [linear] [raid0] [raid1] [raid10] [raid6] [raid5] [raid4] [multipath]
md0 : active raid1 sdb3[1]
239871104 blocks super 1.2 [2/1] [_U]
bitmap: 0/2 pages [0KB], 65536KB chunk

Depois formatei o RAID:

mkfs.ext4 /dev/md0

E copiei os ficheiros

mount /dev/sda3 /mnt/d1
mount /dev/md0 /mnt/d2
cp -rp /mnt/d1/* /mnt/d2

Nota: experimentei várias outras formas de copiar os ficheiros, mas esta foi a única que funcionou. Tentei copiar a partição inteira (com dd), tentei também usar o rsync, mas não estava instalado no sistema base de instalação do Slackware.

Como a cópia pode demorar muito tempo, pode verificar-se o andamento da cópia, noutra janela de consola (CTRL+ALT+F2), onde é o process ID do comando cp:

cat /proc//io

No meu caso, para 176GB, demorou 1h26m.

Depois da cópia feita, é necessário preparar o RAID para o arranque.

cp /mnt/d2/etc/mdadm.conf /mnt/d2/etc/mdadm.conf.ori
echo 'DEVICES /dev/sd[abcdefgh]3' > /mnt/d2/etc/mdadm.conf
mdadm --detail --scan >> /mnt/d2/etc/mdadm.conf

No lilo.conf, tenho que colocar, no início:

boot = /dev/md0
raid-extra-boot="/dev/sda,/dev/sdb"

e, mais abaixo:

root = /dev/md0

Para isso:

vi /mnt/d2/etc/lilo.conf

Como o ficheiro /proc/partitions não existe no disco do RAID, porque só existe no disco do sistema ativo, mas como preciso dele para correr o lilo, faço o seguinte:

cp /proc/partitions /mnt/d2/proc

Depois, corri o lilo, com a opção -H, porque um dos discos do RAID não está ainda ativo.

chroot /mnt/d2
lilo -H
exit

No ficheiro /mnt/d2/etc/fstab corrigi o caminho para o boot:

/dev/md0 / ext4 defaults 1 1

Desliguei a máquina. Retirei o DVD. No arranque, pedi para arrancar com o disco novo, aquele onde está o RAID.

Confirmei que o sistema tinha arrancado com o disco novo, com o comando cat /proc/mdstat.

Com o comando fdisk /dev/sda transformei a partição /dev/sda3 em Linux RAID.
Depois, adicionei o disco /dev/sda3 ao RAID.

mdadm --manage /dev/md0 --add /dev/sda3

E depois executei o comnando cat /proc/mdstat para verificar o estado do RAID.

Personalities : [linear] [raid0] [raid1] [raid10] [raid6] [raid5] [raid4] [multipath]
md0 : active raid1 sda3[2] sdb3[1]
240003136 blocks [2/1] [_U]
[>....................] recovery = 0.3% (810240/240003136) finish=68.8min speed=57874K/sec

Aumentar o RAID

Tive que aumentar um RAID 1, de 2TB para 3TB, em Linux.

O RAID 1 era constituído pelos dispositivos /dev/sdc1 e /dev/sdd1, cada um com 1.922.599.672 bytes.
Constituiam o dispositivo /dev/md1.

Desliguei a máquina, retirei um dos discos – o /dev/sdc – e adicionei um disco de 3TB.

No arranque, o RAID não arrancou corretamente. Ao invés, arrancou como /dev/md127, como é usual sempre que há problemas. Tive que o parar com o comando

mdadm --stop /dev/md127

Entrei no fdisk, para criar uma partição no disco, e ele queixou-se de que não podia criar uma partição maior do que 2TB.


Device does not contain a recognized partition table.
The size of this disk is 2.7 TiB (3000592982016 bytes). DOS partition table format cannot be used on drives for volumes larger than 2199023255040 bytes for 512-byte sectors. Use GUID partition table format (GPT).

Estranhei aquela coisa da partição DOS, mas como já tinha tido um problema semelhante há 4 anos atrás, decidi usar o gdisk.

Com o gdisk criei uma partição de 3TB e defini-a como Linux RAID, com o código FD00, ao invés do FD do fdisk.

Depois de ter parado o RAID incompleto (mdadm --stop /dev/md127), tentei iniciar o novo RAID:

mdadm --assemble /dev/md1 /dev/sdc1 /dev/sdd1

mas a máquina queixou-se:

mdadm: /dev/sdc1 has no superblock - assembly aborted

Tive então que aplicar os comandos seguintes:

mdadm --zero-superblock /dev/sdc
mdadm --zero-superblock /dev/sdc1
mdadm --assemble --run /dev/md1 /dev/sdd1
mdadm --add /dev/md1 /dev/sdc1

Depois, para verificar que tudo estava OK, corri o comando seguinte, que me mostrou o RAID a ser construído:

cat /proc/mdstat

Personalities : [linear] [raid0] [raid1] [raid10] [raid6] [raid5] [raid4] [multipath]
md1 : active raid1 sdc1[2] sdd1[1]
1953382336 blocks super 1.2 [2/1] [_U]
[>....................] recovery = 0.0% (707264/1953382336) finish=184.0min speed=176816K/sec

———————

Quando o mdstat chegou a 100%, parei a máquina e fiz o mesmo para o /dev/sdd.
Após terminar, montei o RAID no sistema de ficheiros, usandp a informação do /etc/fstab:

mount -a

———————

Por fim, para estender o /dev/md1 para 3TB, executei os seguintes comandos

e2fsck -f /dev/md1
mdadm --grow /dev/md1 --size=2881959520
resize2fs /dev/md1

Note-se que o parâmetro size vem em kilobytes.

Falha no disco

Durante um upgrade de uma máquina virtual, o disco principal da máquina falhou. Como as máquinas – a correr em Oracle Virtual Machine – arrancam em modo headless, só percebo a falha porque a máquina não regista, os novos serviços instalados, no meu servidor de logs.

Entrei no VirtualBox, abri uma janela dessa máquina e vi a mensagem – que me aparece de tempos a tempos – a pedir CTRL-D para reboot, ou passwrod de root para manutenção. Introduzi a password e segui os passos indicados neste site para reparar o disco e recuperar a máquina. São os seguintes:

  • Entrar em modo monoutilizador: init 1
  • Desmontar o disco: umount /dev/sda2
  • Verificar o disco: fsck /dev/sda2

Depois, e uma vez que a máquina ainda nem arrancou, fazer reboot.

Slackware 15

Enquanto aguardamos a saída do Slackware 15, o Patrick publicou a seguinte mensagem no Changelog da versão current, enquanto decorria o maior eclipse lunar do século:

Fri Jul 27 21:01:22 UTC 2018
Hey folks, my first order of business here needs to be a huge thank you to
everyone who has donated at https://paypal.me/volkerdi to help keep this
project going. As most of you are already aware by now, the financal situation
here at Slackware HQ has not been great for many years, including not getting
any pay for the last two years and forcing me (and my family) to live very
frugally while I continued to work on the project hoping I’d figure out a way
to actually monitize it by the time that Slackware 15.0 is ready for release.
(…)