Méthodes et outils de diagnostic

Apprivoiser et soigner les bobos de son ordinateur avec des logiciels libres !

Sommaire (1)

Sommaire (2)

Sommaire (3)

GLOSSAIRE

Vérification de la mémoire

sysinfo : vue d'ensemble matériel + système d'exploitation

Moniteur système (GNOME/MATE) : ressources

Moniteur système (GNOME/MATE) : processus

Moniteur système (GNOME/MATE) : systèmes de fichiers

Hardinfo : vue plus détaillée + benchmark

Stacer : autre outil de monitoring + outils

Mesurer la mémoire utilisée par un programme

Manque de mémoire ?

Boot-Loader : comment démarre un ordinateur ?

BIOS libre ?

Les combinaisons selon l'âge et le modèle de la machine

L'UEFI

$ efibootmgr -v
BootCurrent: 0000
Timeout: 1 seconds
BootOrder: 0000,0002
Boot0000* debian        HD(1,GPT,f85104c8-fb59-4526-b921-ed16cb3dc5c3,0x600,0x20000)/File(\EFI\debian\shimx64.efi)
Boot0002  UEFI: Built-in EFI Shell      VenMedia(5073b95c-db36-429b-a648-be47694c8012)..BO

Comparaison des systèmes MBR et GPT

Le chargeur GRUB

GRUB avec disque partitionné en MBR

GRUB avec disque partitionné en GPT

Le chargeur GRUB (suite)

Le chargeur GRUB (le retour de la suite)

GRUB 0.97 (legacy)

GRUB 2.0

Fichier de config

/boot/grub/grub.conf ou /boot/grub/menu.lst

/boot/grub/grub.cfg (Généré par « update-grub »)

Numéro de partition

Commence à 0

Commence à 1

1er périphérique identifié hd0 dans les deux GRUB.

Réglages généraux

via grub.conf

via /etc/default/grub

Menus personnalisés

via grub.conf

via /etc/grub.d/40_custom

Notation partition dans grub.cfg

hda/sda/etc...

Prends en charge les UUID

Récapitulatif des utilitaires

Vérification MBR

# dd if=/dev/sda bs=512 count=1 > mbr && file mbr
1+0 enregistrements lus
1+0 enregistrements écrits
512 octets (512 B) copiés, 0,000757801 s, 676 kB/s
mbr: DOS/MBR boot sector
# dd if=/dev/sda bs=512 count=1 | strings |grep -i grub
1+0 enregistrements lus
1+0 enregistrements écrits
512 octets (512 B) copiés, 0,00104736 s, 489 kB/s
GRUB

Recréer l'amorçage GRUB2 en boot legacy

fdisk -l                      # pour vous aider à trouver la partition sur laquelle est votre ubuntu
mount /dev/sdaX /mnt          # montage de celle-ci en remplaçant le X par le bon numéro de partition
mount --bind /dev /mnt/dev    # lien symbolique du dossier /dev en cours d'utilisation vers le disque monté
mount --bind /dev/pts /mnt/dev/pts   # lien symbolique du dossier /dev/pts en cours d'utilisation vers le disque monté
mount --bind /sys /mnt/sys    # lien symbolique du dossier /sys en cours d'utilisation vers le disque monté
mount -t proc /proc /mnt/proc # Pour que Grub2 trouve /proc/mounts
chroot /mnt /bin/bash         # mise à la racine du disque monté
mount -a                           # montage des partitions dans le chroot
apt install grub-pc            # installation du logiciel Grub2 (sur le disque maintenant à la racine)
update-grub                        # création d'un nouveau fichier de configuration : grub.cfg
grub-install /dev/sda              # installation de grub sur le MBR

Si la dernière commande sort une erreur, tapez :

grub-install --force /dev/sda

Démontez les partitions montées dans le chroot :

umount -a

(Ignorez les éventuelles erreurs signalées.)

À partir de là, vous pouvez sortir du disque monté en effectuant ctrl+D. Puis, démontez ce disque :

sudo umount /mnt/{dev/pts,dev,sys,proc}
sudo umount /mnt

Recréer l'amorçage GRUB2 en boot UEFI

fdisk -l                      # pour vous aider à trouver la partition sur laquelle est votre ubuntu
mount /dev/sdaX /mnt          # montage de celle-ci en remplaçant le X par le bon numéro de partition
mount --bind /dev /mnt/dev    # lien symbolique du dossier /dev en cours d'utilisation vers le disque monté
mount --bind /dev/pts /mnt/dev/pts   # lien symbolique du dossier /dev/pts en cours d'utilisation vers le disque monté
mount --bind /sys /mnt/sys    # lien symbolique du dossier /sys en cours d'utilisation vers le disque monté
mount -t proc /proc /mnt/proc # Pour que Grub2 trouve /proc/mounts
chroot /mnt /bin/bash         # mise à la racine du disque monté
mount -a                           # montage des partitions dans le chroot
apt install grub-efi-amd64            # installation du logiciel Grub2 en version EFI (sur le disque maintenant à la racine)
# ou grub-efi-amd64-signed pour la version secureboot
# ou grub-efi-ia32 pour la version 32bit (à priori non-secureboot)
update-grub                        # création d'un nouveau fichier de configuration : grub.cfg
grub-install              # installation de l'entrée grub dans l'UEFI
efibootmgr -v           # pour vérifier l'ajout de l'entrée

Démontez les partitions montées dans le chroot :

umount -a

(Ignorez les éventuelles erreurs signalées.)

À partir de là, vous pouvez sortir du disque monté en effectuant ctrl+D. Puis, démontez ce disque :

sudo umount /mnt/{dev/pts,dev,sys,proc}
sudo umount /mnt

Le mécanisme UEFI SecureBoot

Schéma d'amorçage en mode UEFI + secureboot

Fonctionnement générique d'une signature éléctronique

Secureboot avec ses propre clefs de bout en bout

Démarrage du noyau et système d'init

Options de démarrage du noyau Linux

C-states

Optimiser le temps de démarrage (1) : état des lieux

dmesg
$ sudo systemd-analyze                 # affiche la durée de démarrage du système, sans détail.
Startup finished in 4.310s (kernel) + 28.745s (userspace) = 33.056s
graphical.target reached after 28.730s in userspace

$ sudo systemd-analyze blame           # affiche la durée des processus lors du démarrage.
 20.789s plymouth-quit-wait.service
 17.433s apt-daily-upgrade.service
  9.893s apt-daily.service
  5.626s NetworkManager-wait-online.service
   948ms snapd.service
   753ms keyboard-setup.service
   589ms dev-sdb1.device
   570ms lm-sensors.service
   538ms snap-chromium-1213.mount
   531ms snap-dosbox\x2dx-569.mount
   462ms snap-gtk2\x2dcommon\x2dthemes-9.mount
   457ms snap-core-9665.mount
   426ms snapd.seeded.service
   367ms snap-gtk2\x2dcommon\x2dthemes-13.mount

Optimiser le temps de démarrage (2) : chemin critique

$ sudo systemd-analyze critical-chain  # affiche la durée des processus du "chemin critique"
The time after the unit is active or started is printed after the "@" character.
The time the unit takes to start is printed after the "+" character.

graphical.target @28.730s
└─multi-user.target @28.730s
  └─rc-local.service @7.735s +202ms
    └─network-online.target @7.732s
      └─NetworkManager-wait-online.service @2.090s +5.626s
        └─NetworkManager.service @1.760s +319ms
          └─dbus.service @1.676s
            └─basic.target @1.661s
              └─sockets.target @1.661s
                └─snapd.socket @1.660s +1ms
                  └─sysinit.target @1.657s
                    └─snapd.apparmor.service @1.635s +21ms
                      └─apparmor.service @1.300s +333ms
                        └─local-fs.target @1.296s
                          └─run-user-1000-gvfs.mount @9.397s
                            └─run-user-1000.mount @2.107s
                              └─local-fs-pre.target @979ms
                                └─keyboard-setup.service @225ms +753ms
                                  └─systemd-journald.socket @223ms
                                    └─system.slice @223ms
                                      └─-.slice @221ms

Exemple de debug : problème casque+micro bluetooth

$ lsusb   # avant/après branchement du dongle pour trouver la ligne s'il y en a hésitation)
ID 0b05:17cb ASUSTek Computer, Inc. Broadcom BCM20702A0 Bluetooth

* Logiciels utilisés
        * Ubuntu 18.04.4 64bit
        * Environnement GNOME-shell par défaut
        * Mixeur pulseaudio + ALSA
        * Service bluetooth
                * apairage du matériel
* Recherche de logs
        * État du service bluetooth
                * sudo service bluetooth status
        * Infos générales
$ uname -a; lspci -nnk | grep -iA2 net; lsusb; dmesg | grep -i bluetooth; dmesg | grep -i firmware; lsmod | grep bluetooth

On s'aperçoit qu'il y a une erreur de chargement de firmware :

[    2.510816] bluetooth hci0: Direct firmware load for brcm/BCM20702A1-0a5c-216f.hcd failed with error -2
[    2.510820] Bluetooth: hci0: BCM: Patch brcm/BCM20702A1-0a5c-216f.hcd not found

Exemple de debug : problème casque+micro bluetooth (suite)

$ tail -f kern.log
$ hex2hcd BCM20702A1_001.002.014.1443.1467.hex -o BCM20702A1-0b05-17cb.hcd
$ sudo cp BCM20702A1-0b05-17cb.hcd /lib/firmware/brcm/
[ 4011.892911] usb 1-3.1: New USB device found, idVendor=0b05, idProduct=17cb, bcdDevice= 1.12
[ 4011.892917] usb 1-3.1: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[ 4011.892921] usb 1-3.1: Product: BCM20702A0
[ 4011.892924] usb 1-3.1: Manufacturer: Broadcom Corp
[ 4011.892928] usb 1-3.1: SerialNumber: 5CF37090798B
[ 4012.020044] Bluetooth: hci0: BCM: chip id 63
[ 4012.021039] Bluetooth: hci0: BCM: features 0x07
[ 4012.037041] Bluetooth: hci0: BCM20702A
[ 4012.038055] Bluetooth: hci0: BCM20702A1 (001.002.014) build 0000
[ 4012.038151] bluetooth hci0: firmware: direct-loading firmware brcm/BCM20702A1-0b05-17cb.hcd

Conclusion : les pilotes non-libres (ou partiellement car firmware) et les constructeurs non-coopératifs, c'est chiant !

Prochain atelier jitsi Graoutalk : 3ème partie des méthodes et outils de diagnostic

Wayland, X11, Xorg, Mutter, Compositor, DRM, GLX, à vos souhaits !

Accélération graphique : pilotes

Accélération graphique : API 2D

$ vainfo
libva info: VA-API version 1.4.0
libva info: va_getDriverName() returns 0
libva info: Trying to open /usr/lib/x86_64-linux-gnu/dri/i965_drv_video.so
libva info: Found init function __vaDriverInit_1_4
libva info: va_openDriver() returns 0
vainfo: VA-API version: 1.4 (libva 2.4.0)
vainfo: Driver version: Intel i965 driver for Intel(R) Bay Trail - 2.3.0
vainfo: Supported profile and entrypoints
      VAProfileMPEG2Simple            : VAEntrypointVLD
      VAProfileMPEG2Simple            : VAEntrypointEncSlice
      VAProfileMPEG2Main              : VAEntrypointVLD
      VAProfileMPEG2Main              : VAEntrypointEncSlice
      VAProfileH264ConstrainedBaseline: VAEntrypointVLD
      VAProfileH264ConstrainedBaseline: VAEntrypointEncSlice
      VAProfileH264Main               : VAEntrypointVLD
      VAProfileH264Main               : VAEntrypointEncSlice
      VAProfileH264High               : VAEntrypointVLD
      VAProfileH264High               : VAEntrypointEncSlice
      VAProfileH264StereoHigh         : VAEntrypointVLD
      VAProfileVC1Simple              : VAEntrypointVLD
      VAProfileVC1Main                : VAEntrypointVLD
      VAProfileVC1Advanced            : VAEntrypointVLD
      VAProfileNone                   : VAEntrypointVideoProc
      VAProfileJPEGBaseline           : VAEntrypointVLD

Accélération graphique : API 3D

$ glxinfo  | grep -A 11 "Extended renderer info"
Extended renderer info (GLX_MESA_query_renderer):
    Vendor: Intel Open Source Technology Center (0x8086)
    Device: Mesa DRI Intel(R) Bay Trail  (0xf31)
    Version: 18.3.6
    Accelerated: yes
    Video memory: 1536MB
    Unified memory: yes
    Preferred profile: core (0x1)
    Max core profile version: 4.2
    Max compat profile version: 3.0
    Max GLES1 profile version: 1.1
    Max GLES[23] profile version: 3.0

$ vulkaninfo | head -n 30
ERROR: [Loader Message] Code 0 : /usr/lib/i386-linux-gnu/libvulkan_intel.so: wrong ELF class: ELFCLASS32
ERROR: [Loader Message] Code 0 : /usr/lib/i386-linux-gnu/libvulkan_radeon.so: wrong ELF class: ELFCLASS32
INTEL-MESA: warning: Bay Trail Vulkan support is incomplete
INTEL-MESA: warning: ../src/intel/vulkan/anv_device.c:1200: FINISHME: Implement pop-free point clipping
==========
VULKANINFO
==========

Vulkan Instance Version: 1.1.97

Instance Extensions:
====================
Instance Extensions     count = 17
        VK_EXT_acquire_xlib_display         : extension revision  1
        VK_EXT_debug_report                 : extension revision  8
        VK_EXT_debug_utils                  : extension revision  1
        VK_EXT_direct_mode_display          : extension revision  1
        VK_EXT_display_surface_counter      : extension revision  1
        ...

USB-gadget

Aller plus loin

Infos sur le diaporama

Permission vous est donnée de copier, distribuer et/ou modifier ce document selon les termes de la Licence GNU Free Documentation License, version 1.3 ou ultérieure publiée par la Free Software Foundation ; sans section inaltérable, sans texte de première page de couverture et sans texte de dernière page de couverture. Une copie de cette licence est incluse dans la section appelée GNU Free Documentation License de ce document.

SpaceForward
Right, Down, Page DownNext slide
Left, Up, Page UpPrevious slide
GGo to slide number
POpen presenter console
HToggle this help