Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 23/10/2009, à 12:06

maitaddi

Créer un LIVE USB à partir d'une installation depuis le Disque Dur

Bonjour,

Je tiens tout d'abord à préciser que je ne souhaite pas créer de LIVE USB depuis un CD LIVE Ubuntu, mais depuis une installation "customisée" sur mon disque dur.

Je précise :
- j'ai installé Ubuntu sur mon HDD
- j'ai personnalisé l'affichage et d'autres configurations

Maintenant, je souhaite créer une image sur ma clé USB et la rendre bootable pour ne plus avoir besoin de disque dur.

J'imagine que cela est possible, j'ai même eu l'idée de créer une image de mon disque dur et la copier sur la clé USB, puis rendre la clé bootable.... Mais ce n'est qu'une idée, je ne saurai la matérialiser.

Avez-vous une solution ou un link vers un début de réponse ?

Merci

Hors ligne

#2 Le 23/10/2009, à 13:16

compte supprimé

Re : Créer un LIVE USB à partir d'une installation depuis le Disque Dur

Salut,

Le boot d'un pc sous Ubuntu fonctionne grosso modo de la façon suivante :
1 - le bios va charger le mbr du disque défini comme disque de boot.
2 - Sur ce mbr tu as le stage1 de grub qui va charger la suite, afficher le menu de Grub.
3 - Tu sélectionne un noyau, Grub charge le noyau et l'initrd puis démarre le noyau
4 - le noyau décompresse l'initrd et démarre le process /init (qui est dans l'initrd).
5 - /init va charger les modules qui vont bien pour pouvoir monter ton répertoire racine
6 - /sbin/init est lancé.

Ce qu'il te faut pour ta clé usb c'est donc :
- rendre ta clé bootable (avec grub ou extlinux - qui dérive de syslinux)
- créer un initrd qui contiendra un script /init qui va chercher ta clé usb, s'assurer que c'est bien la bonne (et pas la carte sd de ton appareil photo ou autre périph usb).

J'avais fait chez moi ce genre de manip (sans installer un os complet). Ce soir j'essaye de retrouver le script et je le poste.

Commence déjà par créer une clé bootable avec un menu (grub ou extlinux). Ensuite tu pourras passer au chargement du noyau et au démarrage avec un initrd

#3 Le 23/10/2009, à 13:25

maitaddi

Re : Créer un LIVE USB à partir d'une installation depuis le Disque Dur

Je te remercie pour ton message.

J'avoue ne pas bien saisir le but des manip. Mon objectif est de "placer" mon OS sur ma clé USB. Or, à aucun moment, je ne vois le process pour copier l'OS sur la clé, depuis le disque dur ?!

Si tu peux poster le script, ca pourrai m'aider à y voir plus clair.

Merci

Hors ligne

#4 Le 23/10/2009, à 13:35

compte supprimé

Re : Créer un LIVE USB à partir d'une installation depuis le Disque Dur

La séquence que je t'indique c'est ce qui se passe quand le pc démarre. Cette séquence permet de déduire ce qu'il faut préparer avant :
a - Formater ta clé
b - Copier l'OS de ton disque vers ta clé
c - rendre ta clé bootable
d - créer un initrd qui va permettre au noyau de charger ta partition sur ta clé.

Le script que j'avais écrit n'intervient qu'à la phase d. Pour les phases a, b et c c'est à toi de bosser !

Dernière modification par oktoberfest (Le 23/10/2009, à 13:36)

#5 Le 23/10/2009, à 13:41

maitaddi

Re : Créer un LIVE USB à partir d'une installation depuis le Disque Dur

Okay wink

Je comprend mieux maintenant. Je pense pouvoir arriver facilement à mettre en oeuvre les points a,b et c.

Merci smile

Hors ligne

#6 Le 23/10/2009, à 13:46

breakolami

Re : Créer un LIVE USB à partir d'une installation depuis le Disque Dur

Remastersys permet de créer un ISO de ton système
Une fois ce ISO créé tu peux utiliser le créateur de démarrage usb pour le mettre dessus.


Kubuntu 24.04.1 sur MSI Katana 17, Intel i7 12ème génération, 1 Nvme M.2 P5 500Go, 1 Nvme M.2 P2 1000Go, 16Go de mémoire, Nvidia GeForce RTX 4060
https://www.youtube.com/@FrenchBusTransit

Hors ligne

#7 Le 23/10/2009, à 13:47

compte supprimé

Re : Créer un LIVE USB à partir d'une installation depuis le Disque Dur

Fais gaffe à truc tout con....

Vérifie le /etc/fstab qui sera sur ta clé. Il faut que tu indiques les bons devices pour chaque file system. Et ne te fie pas trop à un /dev/sdb car rien ne prouve que ta clé usb sera toujours vu comme sdb. L'idéal est de définir un label (par exemple root) à ta partition et de mettre une ligne du style :
LABEL=root             /       ext3         defaults      1 1

Sinon t'auras droit à un joli "root filesystem not found !".

Remarque : si t'as ce message c'est que tout le reste marche déjà !!

#8 Le 23/10/2009, à 14:21

smo

Re : Créer un LIVE USB à partir d'une installation depuis le Disque Dur

Ola

et ca reste une mauvaise idee d utiliser une cle comme disque dur

Je chipotte smile

autant customiser le squashfs d un live cd m enfin...

c est la mode en ce moment les install en dur sur cle usb smile

bon courage

++

Hors ligne

#9 Le 23/10/2009, à 14:27

compte supprimé

Re : Créer un LIVE USB à partir d'une installation depuis le Disque Dur

smo a écrit :

Ola

et ca reste une mauvaise idee d utiliser une cle comme disque dur

Je suis d'accord. J'avais commencé à le faire surtout pour bien assimiler le mécanisme de boot et l'initrd.

Maintenant si maitaddi a le temps, l'envie et la persévérance nécessaire, laissons-le faire, c'est très formateur.

Note : la personnalisation d'image Knoppix est assez simple et il y a pas mal de doc dessus sur le net.

Dernière modification par oktoberfest (Le 23/10/2009, à 14:28)

#10 Le 23/10/2009, à 14:33

maitaddi

Re : Créer un LIVE USB à partir d'une installation depuis le Disque Dur

disons que le choix de la clé usb n'est pas sans raison smile
Primo : j'ai besoin de faire des modifs et de les appliquer au démarrage, en mode persistant. Donc, le live cd ne fonctionnera pas en mode persistant.

Un disque dur produit de la chaleur, n'est ce pas ? Je dois diminuer au max. la chaleur produite par mes équipements. L'idéal est d'utiliser un pc fanless, mais j'en ai pas sous la main sad

Hors ligne

#11 Le 23/10/2009, à 14:38

compte supprimé

Re : Créer un LIVE USB à partir d'une installation depuis le Disque Dur

Je n'ai jamais été jusqu'au bout de mon idée (qui était comme toi de booter sur une clé pour limiter le bruit du pc), donc j'attends avec impatience ton retour big_smile

#12 Le 23/10/2009, à 18:49

compte supprimé

Re : Créer un LIVE USB à partir d'une installation depuis le Disque Dur

En vrac voici ce que j'avais fait :

Un script pour créer un initramfs :

#!/bin/sh

# Copyright 2006 Rob Landley <rob[AT]landley.net> and TimeSys Corporation[DOT]
# Licensed under GPL version 2

if [ $# -ne 2 ]
then
    echo "usage: mkinitramfs directory imagename.cpio.gz"
    exit 1
fi

if [ -d "$1" ]
then
    echo "creating $2 from $1"
    (cd "$1"; find . | cpio -o -H newc | gzip) > "$2"
else
    echo "First argument must be a directory"
    exit 1
fi

Un script pour extraire un initramfs dans un répertoire (le contraire du script précédent) :

if [ $# -ne 1 ]
then
    echo "usage : extractramfs <image.cpio.gz>"
    exit 1
fi

cd initramfs
zcat ../$1 | cpio -i -d -H newc --no-absolute-filenames

Et le fichier /init qui se trouve dans le initramfs :

#!/bin/sh

# Mount things needed by this script
busybox mount -t proc proc /proc
busybox mount -t sysfs sysfs /sys

# Create device nodes
busybox mknod /dev/null c 1 3
busybox mknod /dev/tty c 5 0

# Create all the symlinks to /bin/busybox
busybox --install -s

# Disable kernel messages from popping onto the screen
echo 0 > /proc/sys/kernel/printk

# Create all devices
echo -e "Creating device files...\c"
sleep 5
mdev -s
echo "done"

# Function for parsing command line options with "=" in them
# get_opt("init=/sbin/init") will return "/sbin/init"
get_opt() {
	echo "$@" | cut -d "=" -f 2-
}

# Defaults
init="/sbin/init"
root="/dev/hda1"

# Process command line options
for i in $(cat /proc/cmdline); do
	case $i in
		root\=*)
			root=$(get_opt $i)
			;;
		init\=*)
			init=$(get_opt $i)
			;;
	esac
done

echo "root option : $root"
echo "init option : $init"

# verify the the given partition is an ext2 partition
# if so, looks if the label of the partition
# is the label given in argument
# Arguments : partition (/dev/xxx), label
find_ext2_partition() {
    partition=$1
    label=$2

    echo "Analyzing /dev/$part"

    # Extract superblock
    echo -e "\tExtracting superblock...\c"
    dd if=/dev/$part of=/tmp/superblock.$part bs=1024 skip=1 count=1 2> /dev/null
    if [ $? -ne 0 ]; then
        echo "dd : can't read superblock"
        return 1
    fi
    echo "done"

    # Extract magic number (bytes 56 and 57)
    echo -e "\tExtracting magic number...\c"
    dd if=/tmp/superblock.$part of=/tmp/magic_number.$part bs=1 skip=56 count=2 2>/dev/null
    if [ $? -ne 0 ]; then
        echo "dd : can't read magic_number"
        return 1
    fi
    echo "done"

    magic_number=`od -x /tmp/magic_number.$part | head -n 1 | cut -d' ' -f2- | sed -e 's/ //g'`
    echo -e "\tMagic number : $magic_number"
    if [ "X$magic_number" = "Xef53" ]; then
        # It's an ext2 partition
        echo -e "\tThis is an ext2fs partition"

        # Extract the label
        echo -e "\tExtracting label...\c"
        dd if=/tmp/superblock.$part of=/tmp/label.$part bs=1 skip=120 count=16 2>/dev/null
        echo "done"
        part_label=`cat /tmp/label.$part`
        echo -e "\tlabel : $part_label"
        if [ "X$label" = "X$part_label" ]; then
            return 0
        fi
    fi

    return 1
# Ext
}

# Find the root device
if [ "X${root%=*}" = "XLABEL" ]
then
    # root has the form LABEL=xxx
    label=${root#*=}
    echo "Partition's label to find : $label"

    # now find the partition with this label !
    for part in `sed '1d;s/.* //' /proc/partitions `;
    do
        find_ext2_partition "/dev/$part" $label
        if [ $? -eq 0 ]; then
            root=/dev/$part
            echo "Root partition found : $root"
            break
        fi
    done
else
    # we're assuming root has the form /dev/xxx
    :
fi

#Mount the root device
echo "Root partition : $root"
mount "${root}" /newroot

#Check if $init exists and is executable
if [ -x "/newroot/${init}" ]; then
	#Unmount all other mounts so that the ram used by
	#the initramfs can be cleared after switch_root
	umount /sys /proc
	
	#Switch to the new root and execute init
	exec switch_root /newroot "${init}"
fi

#This will only be run if the exec above failed
echo "Failed to switch_root, dropping to a shell"
exec sh

Ce script cherche le file system / à partir de l'option root= passé au noyau. Si tu as mis root=/dev/sdX, il suppose que /dev/sdX est la partition cherchée, si tu as mis root=LABEL=toto il cherche une partitions ext2 dont le label est toto.
Bien sur dans l'initramfs il te faut un système minimum (les répertoires /proc, /sys, /bin, /bin/busybox...).
Bref à partir de ces trois scripts tu as encore du boulot pour finaliser ta clé usb.

Bon surf sur le net ! (Je suis pas trop dispo les prochains jours)

#13 Le 27/10/2009, à 12:22

maitaddi

Re : Créer un LIVE USB à partir d'une installation depuis le Disque Dur

Finalement, j'ai opté pour une installation sur HDD smile Les choses plus simples sont les meilleures. Au final, on voulait utiliser une clé USB pour réduire les interventions (maintenance) et les bugs HDD.

On peut dire que le sujet est clos, même si je n'ai pas testé ta solution smile

Hors ligne