Em do_mounts.c , a variável saved_root_name está definida como o valor do parâmetro da linha de comandos root= , se presente. Este valor é uma string semelhante a um caminho passado pelo kernel , normalmente se parece com /dev/something (embora o prefixo /dev/ seja opcional), mas na verdade não corresponde a nenhum caminho no disco. Se o parâmetro root= estiver ausente, o valor de ROOT_DEV será usado; isso é normalmente 0, mas um valor diferente pode ser injetado no binário do sistema. A cadeia de ferramentas util-linux usada para incluir um utilitário chamado ' rdev para fazer isso (apenas x86), mas
desapareceu há alguns anos .
Tudo isso acontece somente se o initramfs ou initrd não cuidou da montagem da raiz (initramfs executando /init , que deveria chamar mount , initrd chamando pivot_root ).
Eu não sei sobre a parte do systemd. Não há muito que o systemd possa fazer sobre o sistema de arquivos raiz de qualquer maneira, além de montá-lo como leitura-gravação.