# 7 - Disques, système et dépannage

Contrôler le stockage et le matériel, monter un disque, archiver et appliquer une méthode de diagnostic.

# 7.1 - Espace disque avec lsblk, df et du

## Voir les disques et partitions

```bash
lsblk
lsblk -f
lsblk -o NAME,SIZE,FSTYPE,FSVER,LABEL,UUID,MOUNTPOINTS
sudo blkid
```

`lsblk` affiche les périphériques bloc et leur hiérarchie. `lsblk -f` ajoute le système de fichiers, l'étiquette, l'UUID et le point de montage.

## Espace des systèmes de fichiers

```bash
df -h
df -hT
df -i
```

- `df -hT` affiche la taille, l'espace utilisé et le type de système de fichiers.
- `df -i` contrôle les inodes. Un système peut refuser de nouveaux fichiers même s'il reste des gigaoctets, lorsque tous les inodes sont utilisés.

Limiter la sortie aux systèmes locaux courants :

```bash
df -h -x tmpfs -x devtmpfs
```

## Taille des dossiers

```bash
du -sh dossier
du -h --max-depth=1 /var | sort -h
sudo du -xhd1 /var | sort -h
```

`-x` évite de traverser d'autres systèmes de fichiers montés. Sur un serveur, cette option limite les surprises.

Trouver de gros fichiers dans un emplacement précis :

```bash
sudo find /var -xdev -type f -size +500M -printf '%s %p\n' | sort -n
```

Afficher les plus gros éléments de façon lisible avec GNU `du` :

```bash
sudo du -ahx /var | sort -h | tail -n 30
```

Cette commande peut être longue et solliciter le stockage.

## Fichier supprimé mais encore ouvert

Si `df` indique beaucoup plus d'espace utilisé que `du`, un processus peut conserver un fichier supprimé ouvert :

```bash
sudo lsof +L1
```

Redémarrer proprement le service concerné libère généralement l'espace. Ne videz pas arbitrairement un descripteur de fichier dans `/proc`.

## Utilisation interactive

Si `ncdu` est installé :

```bash
sudo ncdu -x /var
```

## Réflexes avant de nettoyer

1. Identifier le système plein avec `df -hT` et `df -i`.
2. Localiser la consommation avec `du -x`.
3. Distinguer données, cache, journaux et fichiers ouverts supprimés.
4. Utiliser la procédure de nettoyage propre à l'application.
5. Vérifier le résultat et la santé du service.

Ne supprimez pas manuellement des fichiers inconnus sous `/var/lib`, qui contient souvent des bases de données et l'état des applications.

# 7.2 - Monter, démonter et archiver

## Voir les montages actuels

```bash
findmnt
findmnt /mnt/donnees
mount | column -t
```

## Monter temporairement un système de fichiers

Créer un point de montage et identifier d'abord le bon périphérique :

```bash
lsblk -f
sudo mkdir -p /mnt/donnees
sudo mount /dev/sdb1 /mnt/donnees
findmnt /mnt/donnees
```

Démonter lorsque plus aucun processus ne l'utilise :

```bash
sudo umount /mnt/donnees
```

Si la cible est occupée :

```bash
sudo fuser -vm /mnt/donnees
sudo lsof +D /mnt/donnees
```

Fermer proprement les fichiers et sessions concernés. Le démontage forcé ou paresseux peut masquer un problème et risquer une perte de données.

## Montage persistant avec fstab

Obtenir l'UUID :

```bash
lsblk -f
sudo blkid /dev/sdb1
```

Sauvegarder puis éditer :

```bash
sudo cp -a /etc/fstab /etc/fstab.bak
sudoedit /etc/fstab
```

Exemple indicatif :

```text
UUID=xxxx-xxxx  /mnt/donnees  ext4  defaults,nofail  0  2
```

Tester sans redémarrer :

```bash
sudo findmnt --verify --verbose
sudo mount -a
```

Une erreur dans `/etc/fstab` peut perturber le démarrage. Utiliser les options adaptées au système de fichiers et au besoin réel.

## Créer une archive tar

```bash
tar -cvf sauvegarde.tar dossier/
tar -czvf sauvegarde.tar.gz dossier/
tar -cJvf sauvegarde.tar.xz dossier/
```

Lister et extraire :

```bash
tar -tvf sauvegarde.tar.gz
mkdir extraction
tar -xzvf sauvegarde.tar.gz -C extraction/
```

Une archive provenant d'une source non fiable peut contenir des chemins dangereux. Lister d'abord son contenu et extraire dans un dossier vide sans privilèges.

## ZIP

```bash
zip -r archive.zip dossier/
unzip -l archive.zip
unzip archive.zip -d extraction/
```

## Contrôler l'intégrité

```bash
sha256sum sauvegarde.tar.gz > sauvegarde.tar.gz.sha256
sha256sum -c sauvegarde.tar.gz.sha256
```

Une somme de contrôle détecte une modification accidentelle, mais ne prouve l'authenticité que si la somme attendue vient d'une source fiable.

# 7.3 - Informations système et matériel

## Système d'exploitation et noyau

```bash
cat /etc/os-release
uname -a
uname -r
hostnamectl
uptime
```

`/etc/os-release` décrit la distribution ; `uname -r` indique le noyau actuellement démarré, qui peut différer du dernier noyau installé.

## Processeur et mémoire

```bash
lscpu
free -h
grep -E 'MemTotal|MemAvailable|SwapTotal|SwapFree' /proc/meminfo
```

## Matériel PCI, USB et disques

```bash
lspci
lspci -nnk
lsusb
lsblk -o NAME,MODEL,SERIAL,SIZE,TYPE,FSTYPE,MOUNTPOINTS
```

`lspci -nnk` affiche les identifiants matériels, le pilote utilisé et les modules disponibles, très utile pour un GPU ou une carte réseau.

## Modules du noyau

```bash
lsmod
modinfo nom_du_module
sudo modprobe nom_du_module
```

Retirer un module peut couper un périphérique actif. Ne pas utiliser `modprobe -r` à distance sur le pilote de la carte réseau employée.

## Périphériques et événements récents

```bash
sudo dmesg -T | tail -n 100
journalctl -k -b
udevadm info --query=all --name=/dev/sdb
```

## Temps et fuseau horaire

```bash
date
timedatectl
```

Sur un serveur, une horloge incorrecte peut casser TLS, Kerberos, l'authentification et la corrélation des journaux.

## Charge et sessions

```bash
uptime
w
last -n 20
```

Les trois valeurs de charge d'`uptime` couvrent environ 1, 5 et 15 minutes. Elles doivent être interprétées avec le nombre de processeurs logiques et l'attente d'entrées-sorties.

## Construire un petit rapport non sensible

```bash
{
  date
  hostnamectl
  uptime
  free -h
  df -hT
  ip -brief address
} > diagnostic-systeme.txt
```

Examiner le fichier avant de le transmettre : il peut révéler nom de machine, adresses IP, utilisateurs, numéros de série ou structure du stockage.

## Commandes optionnelles utiles

```bash
inxi -Fxxxz       # synthèse détaillée si inxi est installé
sudo dmidecode    # informations DMI/BIOS, nécessite root
sudo smartctl -a /dev/sda   # santé SMART si smartmontools est installé
```

Ne lancez pas de test SMART long ou destructif sur un disque de production sans connaître son impact et sans sauvegarde valide.

# 7.4 - Méthode de dépannage et mémo des commandes

## Méthode de dépannage

Une bonne résolution d'incident sépare les faits, les hypothèses et les modifications.

1. **Décrire le symptôme** : message exact, heure, utilisateur et action.
2. **Définir le périmètre** : une application, une machine, un VLAN ou tous les utilisateurs.
3. **Reproduire prudemment** : noter les étapes et éviter d'aggraver l'incident.
4. **Observer avant de modifier** : état du service, journaux, ressources, réseau.
5. **Formuler une hypothèse testable** : une cause à la fois.
6. **Changer une seule chose** : noter la commande et prévoir le retour arrière.
7. **Valider de bout en bout** : service, client, persistance après redémarrage si nécessaire.
8. **Documenter** : cause, correction, vérification et prévention.

## Collecte initiale

```bash
date
hostnamectl
uptime
systemctl --failed
free -h
df -hT
df -i
ip -brief address
ip route
```

Pour un service :

```bash
systemctl status mon-service --no-pager
journalctl -u mon-service --since "30 minutes ago" --no-pager
sudo ss -tulpn
```

## Mémo des commandes essentielles

| Besoin | Commande |
|---|---|
| savoir où je suis | `pwd` |
| lister en détail | `ls -lah` |
| changer de dossier | `cd chemin` |
| copier un dossier | `cp -a source destination` |
| déplacer/renommer | `mv -i source destination` |
| lire un gros fichier | `less fichier` |
| suivre un journal | `tail -F fichier.log` |
| rechercher du texte | `grep -RIn 'motif' chemin` |
| trouver un fichier | `find chemin -type f -name 'motif'` |
| espace disque | `df -hT` et `du -xhd1 chemin` |
| mémoire | `free -h` |
| processus | `ps aux`, `top`, `pgrep -a nom` |
| service | `systemctl status nom` |
| journaux | `journalctl -u nom -n 100` |
| réseau | `ip -brief address`, `ip route` |
| DNS | `getent hosts nom` |
| ports | `sudo ss -tulpn` |
| accès distant | `ssh utilisateur@serveur` |
| aide | `commande --help`, `man commande` |

## Commandes qui exigent une attention particulière

- `rm -rf` : suppression récursive sans confirmation.
- `chmod -R` et `chown -R` : changement récursif de droits ou propriétaire.
- `dd` : copie brute capable d'écraser un disque entier.
- `mkfs` : création d'un système de fichiers, donc destruction du contenu précédent.
- `fdisk`, `parted`, `zpool destroy` : modification ou destruction du stockage.
- `rsync --delete` : suppression dans la destination.
- modification de `/etc/fstab`, du réseau ou de SSH : risque de perte d'accès après redémarrage.

Avant une commande sensible :

```bash
whoami
pwd
ls -ld -- /chemin/cible
```

Utiliser ensuite un mode simulation lorsqu'il existe, par exemple `rsync -n`, puis relire la commande complète. Une sauvegarde n'est considérée valide qu'après un test de restauration.