Como você descobre quando uma versão específica do kernel foi inicializada pela última vez?

1

Descubra quando uma versão específica do kernel foi inicializada pela última vez

Para aqueles que instalam manualmente as versões do kernel, o /boot pode crescer muito ao longo do tempo. Gostaria de descobrir quais versões do kernel não foram inicializadas há muito tempo como candidatas à remoção.

Última hora do arquivo acessado

Para facilitar este projeto, eu precisaria saber quando cada kernel foi inicializado pela última vez. Eu vi um Q & amp; A para encontrar arquivos mais antigos que uma determinada data usando o atime . No entanto, este Q & amp; A foi à procura de arquivos com mais de x dias. Estou procurando todos os arquivos e querendo saber o último horário de acesso.

Por meio do script bash, como alguém determinaria o último horário de acesso de um determinado arquivo?

Editar 1 - Tem de definir o último tempo de acesso da Versão do Kernel durante o arranque

Quando o grub monta o kernel, ele está no modo ro (somente leitura) e o último horário de acesso não é atualizado.

Se você executar update-initramfs -u -k all o arquivo initrd.img , o último horário de acesso será atualizado para todos os kernels, mesmo que eles não tenham sido inicializados hoje.

Ao instalar um novo kernel, todos os arquivos anteriores da versão do kernel system.map-w.x.yy-zzz do último acesso são atualizados, mesmo que não tenham sido inicializados hoje.

Para registrar corretamente quando uma versão do kernel foi REALMENTE inicializada, precisamos touch do arquivo vmlinuz-w.x.yy-zzz . Usando os poderes sudo, crie um arquivo como este em /etc/cron.d/ :

SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
@reboot   root    touch "/boot/vmlinuz-"'uname -r'

Agora, ao listar arquivos em /boot usando a resposta do muru:

localize / boot / vm * -printf "% Ac% p \ n"

Thu 21 Jul 2016 05:02:48 AM MDT /boot/vmlinuz-3.13.0-92-generic
Wed 26 Oct 2016 05:10:08 PM MDT /boot/vmlinuz-3.2.0-113-generic
Sat 15 Oct 2016 10:45:41 AM MDT /boot/vmlinuz-4.4.0-43-generic
Thu 20 Oct 2016 06:09:00 PM MDT /boot/vmlinuz-4.4.0-45-generic
Sat 06 Aug 2016 09:32:02 PM MDT /boot/vmlinuz-4.6.3-040603-generic
Sun 21 Aug 2016 12:59:04 PM MDT /boot/vmlinuz-4.7.1-040701-generic
Fri 26 Aug 2016 04:51:04 AM MDT /boot/vmlinuz-4.7.2-040702-generic
Thu 08 Sep 2016 06:46:52 PM MDT /boot/vmlinuz-4.7.3-040703-generic
Sun 25 Sep 2016 07:25:46 PM MDT /boot/vmlinuz-4.7.5-040705-generic
Sat 08 Oct 2016 03:08:45 PM MDT /boot/vmlinuz-4.8.1-040801-generic
Sat 22 Oct 2016 08:16:44 AM MDT /boot/vmlinuz-4.8.4-040804-generic
Sun 30 Oct 2016 12:56:12 PM MDT /boot/vmlinuz-4.8.5-040805-generic

Verifique o espaço livre antes de instalar a nova versão do Kernel

Antes de instalar um novo kernel, é uma boa idéia verificar quanto espaço está disponível em /boot e / ou quanto já está sendo usado com esses comandos:

rick@dell:~$ df /boot
Filesystem     1K-blocks     Used Available Use% Mounted on
/dev/sdc3       30106300 20449376   8104556  72% /
────────────────────────────────────────────────────────────────
rick@dell:~$ du /boot --max-depth 0 -h
565M    /boot

Para ver quanto espaço será salvo excluindo um kernel anterior específico, use este comando:

rick@dell:~$ du /boot/*4.8.1* -h
1.4M    /boot/abi-4.8.1-040801-generic
204K    /boot/config-4.8.1-040801-generic
44M /boot/initrd.img-4.8.1-040801-generic
3.6M    /boot/System.map-4.8.1-040801-generic
4.8M    /boot/vmlinuz-4.8.1-040801-generic
    
por WinEunuuchs2Unix 26.10.2016 / 01:02

2 respostas

2

Use o comando stat :

   %x     time of last access, human-readable
   %X     time of last access, seconds since Epoch

Então:

stat -c %X /some/file

Ou com find :

find /some/path -printf "%A@ %p\n"

Visto que find ' -printf :

  %a     File's  last  access time in the format returned by the C
         'ctime' function.

  %Ak    File's last access time in the  format  specified  by  k,
         which  is  either '@' or a directive for the C 'strftime'
         function.  The possible values for k  are  listed  below;
         some  of  them might not be available on all systems, due
         to differences in 'strftime' between systems.

         @      seconds  since  Jan.  1,  1970,  00:00  GMT,  with
                fractional part.
    
por muru 26.10.2016 / 04:05
0

Aceitei a resposta de muru, pois mostra corretamente como encontrar o último horário de acesso de um arquivo. No entanto, quando o grub monta o kernel, ele está em ro modo somente leitura, portanto, o último horário de acesso não é atualizado.

Além disso, quando você executa update-initramfs -u -k all , o arquivo initrd.img é atualizado com a hora atual de todos os kernels, mesmo que ele não tenha sido inicializado hoje.

Ao instalar um novo kernel, todos os arquivos do kernel system.map-w.x.yy-zzz são acessados, mesmo que não tenham sido inicializados hoje.

Para registrar corretamente quando um kernel foi inicializado pela última vez usando poderes sudo, crie um arquivo como este em /etc/cron.d/ :

SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
@reboot   root    touch "/boot/vmlinuz-"'uname -r'

Agora, ao listar arquivos em /boot usando a resposta de muru vmlinuz-x.w.yy-zzz será exibido quando esse kernel foi inicializado pela última vez.

    
por WinEunuuchs2Unix 30.10.2016 / 18:15