Aggiunto appunti prime tre lezioni
This commit is contained in:
parent
9e2c9d8a1a
commit
861529137b
122
101/001_comandi_ispezione_hw.md
Normal file
122
101/001_comandi_ispezione_hw.md
Normal file
@ -0,0 +1,122 @@
|
|||||||
|
## Comandi di ispezione delle periferiche
|
||||||
|
|
||||||
|
I comandi `lspic` e `lsusb` elencano tutti i dispositivi PCI e USB identificati dal SO. Ogni parte hardware richiede un componente software per controllare il dispositivo corrispondente, chiamato *kernel modules*. I moduli el kernel LInux relativi ai dispositivi hardware sono anche chiamati *drivers*.
|
||||||
|
|
||||||
|
### lscpi
|
||||||
|
|
||||||
|
```bash
|
||||||
|
> lspci
|
||||||
|
00:00.0 Host bridge: Advanced Micro Devices, Inc. [AMD] Raven/Raven2 Root Complex
|
||||||
|
00:00.2 IOMMU: Advanced Micro Devices, Inc. [AMD] Raven/Raven2 IOMMU
|
||||||
|
00:01.0 Host bridge: Advanced Micro Devices, Inc. [AMD] Family 17h (Models 00h-1fh) PCIe Dummy Host Bridge
|
||||||
|
00:01.2 PCI bridge: Advanced Micro Devices, Inc. [AMD] Raven/Raven2 PCIe GPP Bridge [6:0]
|
||||||
|
00:01.3 PCI bridge: Advanced Micro Devices, Inc. [AMD] Raven/Raven2 PCIe GPP Bridge [6:0]
|
||||||
|
```
|
||||||
|
I numeri esadecimali all'inizio di ogni riga sono gli indirizzi univoci del corrispondente dispositivo. Per ottenere maggiori dettagli su un dispositivo:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
lspci -s 04:00.0 -v
|
||||||
|
|
||||||
|
04:00.0 Network controller: Intel Corporation Wi-Fi 6 AX200 (rev 1a)
|
||||||
|
Subsystem: Intel Corporation Wi-Fi 6 AX200NGW
|
||||||
|
Flags: bus master, fast devsel, latency 0, IRQ 33, IOMMU group 0
|
||||||
|
Memory at fcb00000 (64-bit, non-prefetchable) [size=16K]
|
||||||
|
Capabilities: [c8] Power Management version 3
|
||||||
|
Capabilities: [d0] MSI: Enable- Count=1/1 Maskable- 64bit+
|
||||||
|
Capabilities: [40] Express Endpoint, IntMsgNum 0
|
||||||
|
Capabilities: [80] MSI-X: Enable+ Count=16 Masked-
|
||||||
|
Capabilities: [100] Advanced Error Reporting
|
||||||
|
Capabilities: [14c] Latency Tolerance Reporting
|
||||||
|
Capabilities: [154] L1 PM Substates
|
||||||
|
Kernel driver in use: iwlwifi
|
||||||
|
```
|
||||||
|
Il **modulo del kernel** puo' essere identificato nella riga `Kernel driver in use:`.
|
||||||
|
|
||||||
|
Un modo rapido per verificare quale modulo del kernel e' in uso per il dispositivo specificato:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
lspci -s 04:00.0 -k
|
||||||
|
|
||||||
|
04:00.0 Network controller: Intel Corporation Wi-Fi 6 AX200 (rev 1a)
|
||||||
|
Subsystem: Intel Corporation Wi-Fi 6 AX200NGW
|
||||||
|
Kernel driver in use: iwlwifi
|
||||||
|
Kernel modules: iwlwifi
|
||||||
|
```
|
||||||
|
|
||||||
|
### lsusb
|
||||||
|
|
||||||
|
```bash
|
||||||
|
lsusb
|
||||||
|
|
||||||
|
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
|
||||||
|
Bus 001 Device 002: ID 046d:c52b Logitech, Inc. Unifying Receiver
|
||||||
|
Bus 001 Device 003: ID 8087:0029 Intel Corp. AX200 Bluetooth
|
||||||
|
Bus 001 Device 004: ID 3434:0381 Keychron Keychron V8
|
||||||
|
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
|
||||||
|
Bus 003 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
|
||||||
|
Bus 004 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
|
||||||
|
Bus 005 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
|
||||||
|
Bus 006 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
|
||||||
|
```
|
||||||
|
|
||||||
|
Per maggiori dettagli su un dispositivo specifico:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
lsusb -vd 3434:0381
|
||||||
|
```
|
||||||
|
|
||||||
|
### lsmod
|
||||||
|
|
||||||
|
Mostra un elenco di tutti i moduli attualmente caricati:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
lsmod
|
||||||
|
|
||||||
|
Module Size Used by
|
||||||
|
nft_chain_nat 12288 3
|
||||||
|
xt_MASQUERADE 16384 1
|
||||||
|
nf_nat 65536 2 nft_chain_nat,xt_MASQUERADE
|
||||||
|
bridge 389120 0
|
||||||
|
stp 12288 1 bridge
|
||||||
|
llc 16384 2 bridge,stp
|
||||||
|
```
|
||||||
|
dove `Size` indica la RAM occupata da modulo, byte. Mentre `Used by` indica i moduli dipendenti dal modulo colonna `Module`.
|
||||||
|
|
||||||
|
### modprobe
|
||||||
|
|
||||||
|
Comando usato per *caricare* o *scaricare* i moduli del kernel.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
modprobe -r module
|
||||||
|
|
||||||
|
# se module non sia usato da un processo in esecuzione sul sistema
|
||||||
|
```
|
||||||
|
|
||||||
|
### lscpu e lshw
|
||||||
|
|
||||||
|
Mostra informazioni riguardo alla cpu e all'hardware del sistema.
|
||||||
|
|
||||||
|
### modinfo
|
||||||
|
|
||||||
|
Mostra una descrizione del modulo specificato: `modinfo nvme_core`. Per la lista di tutti i parametri disponibili: `modinfo -p nvme_core`.
|
||||||
|
|
||||||
|
I parametri personalizzati possono essere resi persistenti includendoli nel file `/etc/modprobe.conf/` o in file con estensione .conf nella directory `/etc/modprobe.d/`.
|
||||||
|
|
||||||
|
Per impedire il caricamento di un modulo inserire la riga `blacklist module` nel file `/etc/modprobe.d/blacklist.conf`.
|
||||||
|
|
||||||
|
## File informativi e File dei dispositivi
|
||||||
|
|
||||||
|
I comandi precedenti sono dei front-end per leggere le informazioni hardware memorizzate dal SO. Tali informazioni sono presenti in file conservati nelle directory `/proc` e `/sys`.
|
||||||
|
|
||||||
|
La directory `/proc` contiene informazioni relative ai processi in esecuzione e alle risorse hardware. Alcuni dei file importanti:
|
||||||
|
|
||||||
|
- `/proc/cpuinfo`
|
||||||
|
- `/proc/meminfo`
|
||||||
|
|
||||||
|
`/sys` contiene informazioni relative ai dispositivi hardware.
|
||||||
|
|
||||||
|
Ogni file all'interno della directory `/dev/`, invece, e' associato a un dispositivo di sistema, in particolare a un dispositivo di archiviazione. I dispositivi rimovibili sono gestiti da `udev`, che crea i dispositivi corrispondenti in `/dev/`. Quando vengono rilevati dei nuovi dispositivi, `udev` cerca una regola corrispondente nella cartella `/etc/udev/rules.d/`.
|
||||||
|
|
||||||
|
## Dispositivi di archiviazione
|
||||||
|
|
||||||
|
Generalmente chiamati *block device*, in quanto i dati vengono letti in blocchi di dati. Ogni dispositivo a blocchi e' identificato da un file in `/dev/`. Dalla versione 2.6 del kernel, tutti i dispositivi, indipendentemente dal tipo di hardware, sono identificati come dispositivi SCSI, tramite la sigla `sd`. Le partizioni sono elencate numericamente. L'eccezione sono le *schede SD* e i dispositivi *nvme*.
|
66
101/002_avviare_il_sistema.md
Normal file
66
101/002_avviare_il_sistema.md
Normal file
@ -0,0 +1,66 @@
|
|||||||
|
## BIOS o UEFI
|
||||||
|
|
||||||
|
Il kernel viene caricato da un programma chiamato *bootloader*, a sua volta caricato da un firmware preinstallato come il BIOS o UEFI. Una volta caricato, il kernel continua il processo di avvio identificando e caricando l'hardware.
|
||||||
|
|
||||||
|
### BIOS
|
||||||
|
|
||||||
|
Il BIOS (*Basic Input/Output System*) e' un programma memorizzato in un chip di memoria non volatile collegato alla scheda madre.
|
||||||
|
|
||||||
|
I primi 440 byte nel primo dispositivo di archiviazione - seguendo l'ordine definito nel BIOS - sono il primo stadio del bootloader (*bootstrap*). I primi 512 byte di *ogni* dispositivo di archiviazione sono denominati *MBR* e contengono la tabella delle partizioni.
|
||||||
|
|
||||||
|
I passaggi per l'avvio di un sistema dotato di BIOS sono:
|
||||||
|
|
||||||
|
- Il processo POST (*power-on self-test*) identifica semplici guasti hardware
|
||||||
|
- Il BIOS attiva i componenti di base per caricare il sitema
|
||||||
|
- Il BIOS carica il primo stadio del bootloader dall'MBR (i primi 440 byte nel primo dispositivo di archiviazione)
|
||||||
|
- Il primo stadio del bootloader richiama il secondo, responsabile del caricamento del kernel.
|
||||||
|
|
||||||
|
### UEFI
|
||||||
|
|
||||||
|
UEFI (*Unified Extensible Firmware Interface*), e' sempre un firmware, come il BIOS, ma e' in grado di identificare le partizioni e leggere diversi filesystem. Inoltre non si basa sull'MBR, prendendo in considerazioni solo le impostazioni memorizzate nella sua memoria non volatile (NVRAM). Nella partizione *ESP* (*EFI System Partition*), di un *qualsiasi filesystem compatibile* (es. FAT32), sono contenuti dei programmi, chiamati *EFI applications*, che vengono eseguiti automaticamente o richiamati da un menu d'avvio. Una di queste applicazioni e' il bootloader.
|
||||||
|
|
||||||
|
I passaggi per l'avvio di un sistema con UEFI sono:
|
||||||
|
|
||||||
|
- Il processo POST (*power-on self-test*) identifica semplici guasti hardware
|
||||||
|
- UEFI attiva i componenti di base per caricare il sitema
|
||||||
|
- UEFI esegue l'applicazione predefinita memorizzata nel filesystem della partizione ESP. Di solito, il bootloader
|
||||||
|
- Il bootloader carica il kernel.
|
||||||
|
|
||||||
|
UEFI supporta una funzione chiamata **Secure Boot**, che consente l'esecuzione solo di applicazioni EFI firmate, ossia autorizzate dal produttore.
|
||||||
|
|
||||||
|
### Bootloader
|
||||||
|
|
||||||
|
Uno dei piu' utilizzati e' GRUB. Permette di passare dei parametri al kernel, seguendo il modello `option=value`.
|
||||||
|
|
||||||
|
Alcuni dei parametri:
|
||||||
|
|
||||||
|
- `init`: imposta un iniziatore di sistema alternativo, per esempio `init=/bin/bash`
|
||||||
|
- `systemd.unit`: imposta il *target* da attivare, per esempio: `systemd.unit=graphical/target`
|
||||||
|
- `mem`: imposta la qualità di RAM disponibile per il sistema
|
||||||
|
- `quiet`: nasconde i messaggi di avvio
|
||||||
|
- `root`: imposta la partizione di root
|
||||||
|
- `rootflags`: opzioni di mount per il filesystem di root
|
||||||
|
|
||||||
|
I parametri del kernel devono essere aggiunti al file `/etc/default/grub` alla riga `GRUB_CMDLINE_LINUX` per renderli persistenti.
|
||||||
|
|
||||||
|
Una volta che il sistema e' in esecuzione, i parametri usati per la sessione corrente sono visibili nel file:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
cat /proc/cmdline
|
||||||
|
|
||||||
|
BOOT_IMAGE=/vmlinuz-6.11.2-amd64 root=/dev/mapper/pc--vg-root ro systemd.show_status=1 quiet splash
|
||||||
|
```
|
||||||
|
|
||||||
|
## Inizializzazione del sistema
|
||||||
|
|
||||||
|
L'inizializzazione del SO inizia quando il bootloader carica il kernel nella RAM. Il kernel aprira' l'*initramfs* (*initial RAM filesystem*), un filesystem temporaneo usato durante il processo di avvio. Il suo scopo principale e' quello di fornire i moduli richiesti, in modo che il kernel possa accedere al filesystem root *reale* del SO.
|
||||||
|
|
||||||
|
Il kernel, non appena il filesystem root e' disponibile, montera' tutti i filesystem configurati in `/etc/fstab`, quindi eseguira' il primo programma, chiamato `init`, responsabile dell'esecuzione di tutti gli script e demoni di inizializzazione del sistema. Solo ora initramfs viene rimosso dalla RAM.
|
||||||
|
|
||||||
|
### Ispezionare l'inizializzazione
|
||||||
|
|
||||||
|
Tutti gli errori generano messaggi. Lo spazio di memoria in cui il kernel memorizza i suoi messaggi e' chiamato *kernel ring buffer*.
|
||||||
|
|
||||||
|
Un comando per visualizzare i messaggi del kernel e' `dmesg -T`. Nei sistemi che usano *systemd* e' possibile usare il comando `journalctl -k`. L'opzione `-D` puo' essere usata per leggere messaggi di registro al di fuori della cartella `/var/log/journal`.
|
||||||
|
|
||||||
|
I messaggi di log sono memorizzati in vari file all'interno della directory `/var/log/`.
|
15
101/003_runleve_riavvio_e_spegnimento.md
Normal file
15
101/003_runleve_riavvio_e_spegnimento.md
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
## Sistema di init
|
||||||
|
|
||||||
|
I servizi (o *demoni*) possono essere controllati da script di shell, come in `SysVinit`, o da un programma e dai suoi file di configurazione, come in `systemd`.
|
||||||
|
|
||||||
|
Il sistema di init e' il primo programma lanciato dal kernel, quindi il suo **PID** (*Process Identification Number*) sara' sempre 1.
|
||||||
|
|
||||||
|
### SysVinit
|
||||||
|
|
||||||
|
Fornisce un set predefinito di stati di sistema, chiamati *runlevel*, numerati da 0 a 6.
|
||||||
|
|
||||||
|
- **runlevel 0**: spegnimento del sistema
|
||||||
|
- **runlevel 1**, s o single: modalita' utente singolo, senza rete (manutenzione)
|
||||||
|
- **runlevel 2**,**3** o **4**: modalita' multiutente con accesso tramite console
|
||||||
|
- **runlevel 5**: modalita' multiutente grafica
|
||||||
|
- **runlevel 6**: riavvio del sistema
|
Loading…
x
Reference in New Issue
Block a user