Les serveurs Linux exécutent des applications métier critiques dans de nombreux types d'infrastructures, notamment les machines physiques, la virtualisation, le cloud privé, le cloud public et le cloud hybride. Il est important que les administrateurs système Linux comprennent comment gérer l'infrastructure matérielle Linux, y compris les fonctionnalités définies par logiciel liées à la mise en réseau, au stockage, aux conteneurs Linux et à plusieurs outils sur les serveurs Linux.
Le dépannage et la résolution des problèmes liés au matériel sous Linux peuvent prendre un certain temps. Même les administrateurs système très expérimentés passent parfois des heures à résoudre de mystérieuses incohérences matérielles et logicielles.
Les conseils suivants devraient faciliter et accélérer le dépannage du matériel sous Linux. Beaucoup de choses différentes peuvent causer des problèmes avec le matériel Linux; avant de commencer à essayer de les diagnostiquer, il est judicieux de se renseigner sur les problèmes les plus courants et où vous êtes le plus susceptible de les trouver.
Périphériques, modules et pilotes de diagnostic rapide
La première étape du dépannage consiste généralement à afficher une liste du matériel installé sur votre serveur Linux. Vous pouvez obtenir des informations détaillées sur le matériel en utilisant ls commandes telles que lspci , lsblk , lscpu , et lsscsi . Par exemple, voici la sortie de lsblk commande :
# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
xvda 202:0 0 50G 0 disk
├─xvda1 202:1 0 1M 0 part
└─xvda2 202:2 0 50G 0 part /
xvdb 202:16 0 20G 0 disk
└─xvdb1 202:17 0 20G 0 part
Si le ls les commandes ne révèlent aucune erreur, utilisez les processus init (par exemple, systemd ) pour voir comment fonctionne le serveur Linux. systemd est le processus d'initialisation le plus populaire pour démarrer les espaces utilisateur et contrôler plusieurs processus système. Par exemple, voici la sortie du statut systemctl commande :
# systemctl status
● bastion.f347.internal
State: running
Jobs: 0 queued
Failed: 0 units
Since: Wed 2018-11-28 01:29:05 UTC; 2 days ago
CGroup: /
├─1 /usr/lib/systemd/systemd --switched-root --system --deserialize 21
├─kubepods.slice
│ ├─kubepods-pod3881728a_f2af_11e8_af77_06af52f87498.slice
│ │ ├─docker-88b27385f4bae77bba834fbd60a61d19026bae13d18eb147783ae27819c34967.scope
│ │ │ └─23860 /opt/bridge/bin/bridge --public-dir=/opt/bridge/static --config=/var/console-config/console-c
│ │ └─docker-a4433f0d523c7e5bc772ee4db1861e4fa56c4e63a2d48f6bc831458c2ce9fd2d.scope
│ │ └─23639 /usr/bin/pod
....
Explorer plusieurs journaux
Dmesg vous permet de comprendre les erreurs et les avertissements dans les derniers messages du noyau. Par exemple, voici la sortie du dmesg | plus commande :
# dmesg | more
....
[ 1539.027419] IPv6: ADDRCONF(NETDEV_UP): eth0: link is not ready
[ 1539.042726] IPv6: ADDRCONF(NETDEV_UP): veth61f37018: link is not ready
[ 1539.048706] IPv6: ADDRCONF(NETDEV_CHANGE): veth61f37018: link becomes ready
[ 1539.055034] IPv6: ADDRCONF(NETDEV_CHANGE): eth0: link becomes ready
[ 1539.098550] device veth61f37018 entered promiscuous mode
[ 1541.450207] device veth61f37018 left promiscuous mode
[ 1542.493266] SELinux: mount invalid. Same superblock, different security settings for (dev mqueue, type mqueue)
[ 9965.292788] SELinux: mount invalid. Same superblock, different security settings for (dev mqueue, type mqueue)
[ 9965.449401] IPv6: ADDRCONF(NETDEV_UP): eth0: link is not ready
[ 9965.462738] IPv6: ADDRCONF(NETDEV_UP): vetheacc333c: link is not ready
[ 9965.468942] IPv6: ADDRCONF(NETDEV_CHANGE): vetheacc333c: link becomes ready
....
Vous pouvez également consulter tous les journaux du système Linux dans /var/log/messages fichier, où vous trouverez les erreurs liées à des problèmes spécifiques. Cela vaut la peine de surveiller les messages via la queue commande en temps réel lorsque vous apportez des modifications à votre matériel, comme le montage d'un disque supplémentaire ou l'ajout d'une interface réseau Ethernet. Par exemple, voici la sortie de tail -f /var/log/messages commande :
# tail -f /var/log/messages
Dec 1 13:20:33 bastion dnsmasq[30201]: using nameserver 127.0.0.1#53 for domain in-addr.arpa
Dec 1 13:20:33 bastion dnsmasq[30201]: using nameserver 127.0.0.1#53 for domain cluster.local
Dec 1 13:21:03 bastion dnsmasq[30201]: setting upstream servers from DBus
Dec 1 13:21:03 bastion dnsmasq[30201]: using nameserver 192.199.0.2#53
Dec 1 13:21:03 bastion dnsmasq[30201]: using nameserver 127.0.0.1#53 for domain in-addr.arpa
Dec 1 13:21:03 bastion dnsmasq[30201]: using nameserver 127.0.0.1#53 for domain cluster.local
Dec 1 13:21:33 bastion dnsmasq[30201]: setting upstream servers from DBus
Dec 1 13:21:33 bastion dnsmasq[30201]: using nameserver 192.199.0.2#53
Dec 1 13:21:33 bastion dnsmasq[30201]: using nameserver 127.0.0.1#53 for domain in-addr.arpa
Dec 1 13:21:33 bastion dnsmasq[30201]: using nameserver 127.0.0.1#53 for domain cluster.local
Analyse des fonctions réseau
Vous pouvez avoir des centaines de milliers d'applications cloud natives pour servir les services métier dans un environnement réseau complexe; ceux-ci peuvent inclure la virtualisation, le cloud multiple et le cloud hybride. Cela signifie que vous devez analyser si la connectivité réseau fonctionne correctement dans le cadre de votre dépannage. Les commandes utiles pour comprendre les fonctions de mise en réseau dans le serveur Linux incluent ip addr , tracerroute , nslookup , creuser , et ping , entre autres. Par exemple, voici la sortie du ip addr show commande :
# ip addr show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 9001 qdisc mq state UP group default qlen 1000
link/ether 06:af:52:f8:74:98 brd ff:ff:ff:ff:ff:ff
inet 192.199.0.169/24 brd 192.199.0.255 scope global noprefixroute dynamic eth0
valid_lft 3096sec preferred_lft 3096sec
inet6 fe80::4af:52ff:fef8:7498/64 scope link
valid_lft forever preferred_lft forever
3: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default
link/ether 02:42:67:fb:1a:a2 brd ff:ff:ff:ff:ff:ff
inet 172.17.0.1/16 scope global docker0
valid_lft forever preferred_lft forever
inet6 fe80::42:67ff:fefb:1aa2/64 scope link
valid_lft forever preferred_lft forever
....
En conclusion
Le dépannage du matériel Linux nécessite des connaissances considérables, notamment comment utiliser de puissants outils de ligne de commande et comprendre les journaux système. Vous devez également savoir comment diagnostiquer l'espace du noyau, où vous pouvez trouver la cause première de nombreux problèmes matériels. Gardez à l'esprit que les problèmes matériels sous Linux peuvent provenir de nombreuses sources différentes, y compris les périphériques, les modules, les pilotes, le BIOS, la mise en réseau et même les dysfonctionnements matériels les plus anciens.