web-dev-qa-db-fra.com

Comment savoir quand une version spécifique du noyau a été démarrée pour la dernière fois?

Découvrez quand une version spécifique du noyau a été démarrée pour la dernière fois

Pour ceux qui installent manuellement les versions du noyau, le /boot peut grossir avec le temps. J'aimerais trouver les versions du noyau qui n'ont pas été démarrées depuis longtemps en tant que candidats à la suppression.

Dernière heure d'accès au fichier

Pour faciliter ce projet, je devrais savoir quand chaque noyau a été démarré pour la dernière fois. J'ai vu un Q & A pour trouver des fichiers plus anciens qu'une certaine date en utilisant le atime. Cependant, ce Q&R est allé chercher des fichiers de plus de x jours. Je recherche tous les fichiers et je veux connaître la dernière heure d'accès.

Via le script bash, comment déterminer le dernier temps d'accès d'un fichier donné?

Edit 1 - Doit définir la dernière heure d'accès de la version du noyau lors du démarrage

Lorsque grub monte le noyau, il est en mode ro (lecture seule) et la dernière heure d'accès n'est pas mise à jour.

Si vous exécutez update-initramfs -u -k all le fichier initrd.img la dernière heure d'accès est mise à jour pour tous les noyaux même s'ils n'ont pas été démarrés aujourd'hui.

Lors de l'installation d'un nouveau noyau, tous les fichiers de la version précédente du noyau system.map-w.x.yy-zzz la dernière heure d'accès est mise à jour même si elle n'a pas été démarrée aujourd'hui.

Pour enregistrer correctement quand une version du noyau a VRAIMENT démarré, nous devons touch le fichier vmlinuz-w.x.yy-zzz. En utilisant les pouvoirs Sudo, créez un fichier comme celui-ci dans /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`

Maintenant, lors de la liste des fichiers dans /boot en utilisant la réponse de muru:

trouver/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

Vérifiez l'espace libre avant d'installer la nouvelle version du noyau

Avant d'installer un nouveau noyau, c'est une bonne idée de vérifier combien d'espace est disponible dans /boot et/ou combien est déjà utilisé avec ces commandes:

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

Pour voir combien d'espace sera économisé en supprimant un noyau précédent spécifique, utilisez cette commande:

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
1
WinEunuuchs2Unix

Utilisez la commande stat :

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

Donc:

stat -c %X /some/file

Ou avec find:

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

Puisque pour find's -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.
2
muru

J'ai accepté la réponse de muru car elle montre correctement comment trouver la dernière heure d'accès à un fichier. Cependant, quand grub monte le noyau, il est en mode ro en lecture seule donc la dernière heure d'accès n'est pas mise à jour.

De plus, lorsque vous exécutez update-initramfs -u -k all le fichier initrd.img est mis à jour avec l'heure actuelle pour tous les noyaux même s'il n'a pas été démarré aujourd'hui.

Lors de l'installation d'un nouveau noyau, tous les fichiers du noyau system.map-w.x.yy-zzz sont accessibles même s'il n'a pas été démarré aujourd'hui.

Pour enregistrer correctement le dernier démarrage d'un noyau à l'aide des pouvoirs Sudo, créez un fichier comme celui-ci dans /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`

Maintenant, lors de la liste des fichiers dans /boot en utilisant la réponse de muru vmlinuz-x.w.yy-zzz s'affichera lors du dernier démarrage de ce noyau.

0
WinEunuuchs2Unix