Quando useresti pivot_root su switch_root?


19

Voglio capire meglio il processo di init Linux al fine di avviare un sistema su rete piuttosto che su nfs.

Nel processo mi sono imbattuto in due forme di cambio root. Uno chiamato switch_root e l'altro chiamato pivot_root. Questi script vengono eseguiti da un file system in memoria (initramfs) ottenuto tramite tftp utilizzando il processo di avvio di pxe.

Quando useresti uno sopra l'altro? Ho visto entrambi usati in alcuni script di init collocati in root.

Risposte:


16

Ho trovato una spiegazione meravigliosa qui . Tuttavia, lasciami provare a mettere in un formato più breve di ciò che ho capito nella risposta.

Versione più breve

  1. Durante l'avvio del sistema, è necessario uno spazio utenti iniziale. Può essere ottenuto usando initramfs o initrd.
  2. initrd viene caricato in ramdisk che è un vero e proprio sistema di file .
  3. initramfs non è un file system .
  4. Per initrd pivot_root è usato e per initramfs switch_root viene utilizzato.

Versione più lunga

Ora, alla spiegazione dettagliata di ciò che avevo messo sopra.

Mentre sia un initramfs che un initrd hanno lo stesso scopo, ci sono 2 differenze. La differenza più evidente è che un initrd è caricato in un ramdisk. Consiste in un vero filesystem (tipicamente ext2) che è montato in un ramdisk. Un initramfs, d'altra parte, non è un filesystem. È semplicemente un archivio (compresso) di cpio (di tipo newc) che viene decompresso in un tmpfs. Questo ha un effetto collaterale nel rendere gli initramfs un po 'più ottimizzati e in grado di caricare un po' prima nel processo di avvio del kernel di un initrd. Inoltre, la dimensione degli initramfs in memoria è inferiore, poiché il kernel può adattare la dimensione dei tmpfs a ciò che è effettivamente caricato, piuttosto che fare affidamento su dimensioni di ramdisk predefinite,

C'è anche un'altra differenza di effetto collaterale: come viene gestito il dispositivo root (e passando a esso). Poiché un initrd è un vero filesystem decompresso in ram, il dispositivo root deve effettivamente essere il ramdisk. Per un initramfs, esiste un kernel "rootfs" che diventa il tmpfs in cui è decompresso initramfs (se il kernel carica un initramfs; in caso contrario, il rootfs è semplicemente il filesystem specificato tramite il parametro root = kernel boot), ma questo rootfs temporaneo non dovrebbe essere specificato come parametro root = boot (e non ci sarebbe un modo per farlo, dal momento che non è collegato alcun dispositivo). Questo significa che puoi ancora passare il tuo vero dispositivo root al kernel quando usi un initramfs. Con un initrd, devi elaborare quello che il vero dispositivo root è te stesso. Inoltre, poiché il "vero" Il dispositivo root con un initrd è il ramdisk, il kernel deve davvero spostare i dispositivi root da un dispositivo reale (il ramdisk) all'altro (il tuo vero root). Nel caso di un initramfs, lo spazio initramfs (il tmpfs) non è un dispositivo reale, quindi il kernel non cambia i dispositivi reali. Pertanto, mentre il comando pivot_root viene utilizzato con un initrd, è necessario utilizzare un comando diverso per un initramfs. Busybox fornisce switch_root per farlo, mentre klibc offre new_root. un comando diverso deve essere usato per un initramfs. Busybox fornisce switch_root per farlo, mentre klibc offre new_root. un comando diverso deve essere usato per un initramfs. Busybox fornisce switch_root per farlo, mentre klibc offre new_root.


2
Ho usato pivot_rootin passato per initramfs, switch_rootnon esisteva in quel momento. switch_rootsembra essere un metodo conveniente per fare un pivot_rootpo 'più di pulizia e anche mosse /proc /sysed /devecc. e non solo la radice stessa
Daniel Alder,

2
Non puoi usare pivot_root su un rootfs initramfs, otterrai Argomento non valido. Puoi solo ruotare i filesystem reali.
TiCPU il

@TiCPU In che modo Linux uscirebbe dallo spazio utente iniziale?
Melab,

La soluzione fornita sembra essere sbagliata. Lo stesso Linus afferma che pivot_root () o chroot () cambieranno semplicemente il riferimento ai processi correnti /. Quindi dalla mia comprensione potrebbe essere qualsiasi percorso e non ha nulla a che fare con i veri "dischi".
erikbwork,

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.