Do the fscking thing

No dia 22 de maio de 2016, a energia elétrica foi desligada na parte da manhã na Engenharia da UFMG para que a subestação fotovoltaica instalada seja ligada. O sistema do servidor kvm.cefala.org foi desligado graciosamente, de acordo com o arquivo syslog:

May 22 08:35:39 CEFALA apcupsd[1168]: Initiating system shutdown!
May 22 08:35:39 CEFALA apcupsd[1168]: User logins prohibited
May 22 08:35:39 CEFALA systemd[24851]: Stopping Default.
May 22 08:35:39 CEFALA systemd[24851]: Stopped target Default.
May 22 08:35:39 CEFALA systemd[24851]: Stopping Basic System.
May 22 08:35:39 CEFALA systemd[24851]: Stopped target Basic System.
May 22 08:35:39 CEFALA systemd[24851]: Stopping Paths.
May 22 08:35:39 CEFALA systemd[24851]: Stopped target Paths.
May 22 08:35:39 CEFALA systemd[24851]: Stopping Timers.
May 22 08:35:39 CEFALA systemd[24851]: Stopped target Timers.
May 22 08:35:39 CEFALA systemd[24851]: Stopping Sockets.
May 22 08:35:39 CEFALA systemd[24851]: Stopped target Sockets.
May 22 08:35:39 CEFALA systemd[24851]: Starting Shutdown.
May 22 08:35:39 CEFALA systemd[24851]: Reached target Shutdown.
May 22 08:35:39 CEFALA systemd[24851]: Starting Exit the Session...
May 22 08:35:39 CEFALA systemd[24851]: Received SIGRTMIN+24 from PID 27192 (kill).
May 22 08:35:39 CEFALA smartd[1127]: smartd received signal 15: Terminated
May 22 08:35:39 CEFALA rsyslogd: [origin software="rsyslogd" swVersion="8.4.2" x-pid="1197" x-info="http://www.rsyslog.com"] exiting on signal 15.

O nobreak do servidor aguentou 40 minutos e o sistema de detecção de baixa autonomia das baterias funcionou a contento:

May 22 07:55:56 CEFALA apcupsd[1168]: Running on UPS batteries.
[…]
May 22 08:35:39 CEFALA apcupsd[1168]: Battery charge below low limit.

Entretanto, quando a energia elétrica foi restabelecida, o servidor não voltou ao ar. O processo de boot foi interrompido, devido a problemas no sistema de arquivos que já existiam antes do nobreak entrar em ação:

May 22 08:35:37 CEFALA kernel: [2818552.456483] EXT4-fs error (device md3): ext4_read_dirblock:902: inode #103025245: block 32: com\ m find:Directory hole found

Para evitar que o servidor fique fora do ar em situações como esta no futuro, eu fiz as modificações abaixo, de modo a forçar a verificação do sistema de arquivos, via fsck, no momento do boot (inspiradas em uma questão do StackExchange):

  1. Criação do arquivo vazio /forcefsck, na raiz do sistema de arquivos. A presença deste arquivo é detectada pelo script de inicialização do sistema /etc/init.d/checkfs.sh. Entretanto, em sua execução, este script apaga o arquivo /forcefsck.
  2. Para a coisa ficar perene, o arquivo /etc/default/grub deve ser modificado com a adição de "forcefsck" na variável GRUB_CMDLINE_LINUX. O script /etc/init.d/checkfs.sh detecta a presença da opção forcefsck em /proc/cmdline. Existe também a opção do kernel fsck.mode=force, mas eu não encontrei documentação sobre ela para sistemas Debian.
  3. Enfim, para que o fsck seja executado sem intervenção humana, adicionei a linha FSCKFIX=yes no arquivo /etc/default/rcS.

Como não é possível, e nem desejável, fazer o teste desta nova configuração, teremos que esperar pelo próximo apagão e que ele ocorra num momento em que o sistema de arquivos contenha erros.

Update: A natureza nos deu uma mão e fez com que o teste acima pudesse ser realizado. No dia 21 de junho de 2016, houve falta de energia elétrica no CEFALA. O nobreak aguentou em torno de 40 minutos e o shutdown e o reboot foram realizados como esperado. Além disto, a partição /dev/md3 continha erros, que foram corrigidos convenientemente pelo fsck. Estas são as linhas relevantes do arquivo syslog:

Jun 21 09:32:03 CEFALA apcupsd[1133]: Battery charge below low limit.
Jun 21 09:32:03 CEFALA apcupsd[1133]: Initiating system shutdown!
Jun 21 09:32:03 CEFALA apcupsd[1133]: User logins prohibited
Jun 21 09:32:03 CEFALA smartd[1112]: smartd received signal 15: Terminated
Jun 21 09:32:03 CEFALA rsyslogd: [origin software="rsyslogd" swVersion="8.4.2" x-pid="1406" x-info="http://www.rsyslog.com"] exiting on signal 15.
Jun 21 10:21:00 CEFALA rsyslogd: [origin software="rsyslogd" swVersion="8.4.2" x-pid="1399" x-info="http://www.rsyslog.com"] start
Jun 21 10:21:00 CEFALA hdparm[282]: Setting parameters of disc: (none).
Jun 21 10:21:00 CEFALA keyboard-setup[283]: Setting preliminary keymap...done.
Jun 21 10:21:00 CEFALA kernel: [    0.000000] Initializing cgroup subsys cpuset
Jun 21 10:21:00 CEFALA mdadm-raid[280]: Generating udev events for MD arrays...done.
Jun 21 10:21:00 CEFALA kernel: [    0.000000] Initializing cgroup subsys cpu
Jun 21 10:21:00 CEFALA kernel: [    0.000000] Initializing cgroup subsys cpuacct
Jun 21 10:21:00 CEFALA kernel: [    0.000000] Linux version 3.16.0-4-amd64 (debian-kernel@lists.debian.org) (gcc version 4.8.4 (Debian 4.8.4-1) ) #1 SMP Debian 3.16.7-ckt11-1+deb8u3 (2015-08-04)
Jun 21 10:21:00 CEFALA kernel: [    0.000000] Command line: BOOT_IMAGE=/boot/vmlinuz-3.16.0-4-amd64 root=UUID=2cfbd920-4a21-4bcd-9e07-4b7337f6ea74 ro quiet
Jun 21 10:21:00 CEFALA kernel: [    0.000000] e820: BIOS-provided physical RAM map:
Jun 21 10:21:00 CEFALA systemd-fsck[487]: /dev/md3: recovering journal
Jun 21 10:21:00 CEFALA kernel: [    0.000000] BIOS-e820: [mem 0x0000000000000000-0x000000000009a3ff] usable
Jun 21 10:21:00 CEFALA kernel: [    0.000000] BIOS-e820: [mem 0x000000000009a400-0x000000000009ffff] reserved
Jun 21 10:21:00 CEFALA kernel: [    0.000000] BIOS-e820: [mem 0x00000000000e0000-0x00000000000fffff] reserved
Jun 21 10:21:00 CEFALA kernel: [    0.000000] BIOS-e820: [mem 0x0000000000100000-0x000000008c11afff] usable
Jun 21 10:21:00 CEFALA kernel: [    0.000000] BIOS-e820: [mem 0x000000008c11b000-0x000000008c1fafff] ACPI NVS
Jun 21 10:21:00 CEFALA kernel: [    0.000000] BIOS-e820: [mem 0x000000008c1fb000-0x000000008c4e7fff] ACPI data

O MRTG implementado pelo Arlindo e explicado num outro artigo, mostra como a carga da bateria evoluiu durante o apagão:

% de carga - apagão 2016-06-21

[N.B.: Segundo Arlindo, a existência das faixas brancas de menor espessura ao longo do gráfico não é algo que está relacionado à saúde do nobreak, mas ao script de coleta de dados via USB.]

social