Copier la partition racine / pour expérience système…

Bonjour,

Je souhaiterais être en mesure de “cloner” ma partition racine / qui contient tout sauf /home. J’aurais bien envie de tester la nouvelle sid, en particulier le wine 1.5 et des bananes. Il pourrait me permettre de faire tourner Artrage 2.6 (logiciel de peinture allant avec tablette Wacom qui prend la poussière depuis 3-4 ans).

Ayant réinstallé mon système récemment (cafouillage avec les drivers de carte graphique pour pouvoir lire des DVD du petit de belle-maman correctement… un fail magistral conclu par une perte du son suite à la désinstallation de GNOME installé sur une fausse manip), je ne souhaiterais pas refaire celà. J’ai cru comprendre que l’update sur sid était assez sport en ce moment. Sur le principe je vois les choses assez simplement.

Les étapes :
– dd if=/dev/zero of=/dev/<partition_à_vider>
– mount /dev/<partition_vide> /mnt/test
– cp -r * /mnt/test
– bidouille de grub pour la reconnaissance des deux systèmes au démarrage (c.f. la version os-prober http://www.isalo.org/wiki.debian-fr/R%C3%A9installer_Grub2)
– bidouille de la partition / de test, héhé

Notes :
– /home serait partagé via /etc/fstab, cela ne devrait pas poser trop de soucis.
– à terme ça pourrait être pas mal pour faire des back-up de config avant de faire manips qui peuvent allourdir la configuration ou de mettre le bronx (pinning etc…)

Questions :
– Voyez-vous un soucis que je n’aurais pas anticipé ? Je dois avouer que la partie Grub me fait un peu flipper.
– Est-ce réinventer la poudre ?
– Est-ce prendre des précautions inutiles ?

Merci pour vos avis !

heu…quel avantage aurait ta solution par rapport a un dual-boot tout simple ?
ou alors j’ai pas tout compris :017

Il me semble que fran.B propose quelque chose qui se prête très bien au tests, attention toute fois à ne pas faire de cafouillage :
https://www.debian-fr.org/comment-tester-sans-risque-t42530.html?hilit=chroot#p428985

Misaine :[quote]heu…quel avantage aurait ta solution par rapport a un dual-boot tout simple ?[/quote]

L’idée c’est partir d’une config existante plutôt que de faire une simple install from scratch + dual boot…

@Clochette : merci pour le post de fran.B… je vais regarder ça de près. Étape 0 : comprendre ces affaires de chroot

Aucun intérêt.

Marchera pas. mount attend un système de fichiers, pas une suite de zéros.

Vous pourriez essayer d’utiliser le programme mondorescue.

Aucun intérêt.
[/quote]
Oups… :blush: Merci de m’avoir mis ça sous le nez !

Ça ça ressemble à de la bonne suite de sauvegarde de système de bourrin… À investiguer. Merci pour le tuyau.

Les étapes:

  • préparer la nouvelle partoche (parted, …)
    2 solutions:
  • formater la partition (mkfs.ext4)
  • monter la partition (mount)
  • copier les données (avec cp -a et pas -r, ou mieux avec rsync --numeric-ids --devices --specials -A -X -H -W -a)
  • sync && umount
    Si les 2 partitions sont strictement identique, tu peux copier directement:
  • dd if=/dev/partitiondedepart of=/dev/partitiondestination bs=1M

Exemple de script que j’utilise pour cloner le plus rapidement des disques, en faisant du hotplog sata

Bon courage,

#!/bin/bash

backupfile=""
while [ 1 ]; do
    echo -n "OLD IP Address: "
    read oldip
    backup="backup_${oldip}.tgz"
    backupfile="/tmp/${backup}"
    wget -q http://xxx/~ed/xxx/${backup} -O${backupfile}
    if [ "$?" != "0" ]; then
        echo "No backup found. Please retry"
        echo ""
    else
        break
    fi
done
[ -f "${backupfile}" ] || exit "No backup file."

echo "Rescaning SCSI"
for host in /sys/class/scsi_host/*; do
    echo "- - -" >${host}/scan
done

echo "Setting up kernel"
sysctl -q -w vm.dirty_ratio=50
sysctl -q -w vm.dirty_writeback_centisecs=50000
sysctl -q -w vm.dirty_background_ratio=50
sysctl -q -w vm.swappiness=1
dpkg -l 2>&1|grep -q pwgen || apt-get install -f pwgen

kpartx -d /dev/sdb
echo "Zeroing start of disk"
dd if=/dev/zero of=/dev/sdb bs=32M count=1
echo "Copy Partition table..."
# This table should have proper alignment.
(cat <<EOF
# partition table of /dev/sdb
unit: sectors

/dev/sdb1 : start=     2048, size= 22528000, Id=83
/dev/sdb2 : start= 22530048, size=954243072, Id= 5
/dev/sdb3 : start=        0, size=        0, Id= 0
/dev/sdb4 : start=        0, size=        0, Id= 0
/dev/sdb5 : start= 22532096, size=  8806400, Id=82
/dev/sdb6 : start= 31340544, size= 55296000, Id=83
/dev/sdb7 : start= 86638592, size=  8806400, Id=83
/dev/sdb8 : start= 95447040, size= 45056000, Id=83
/dev/sdb9 : start=140505088, size=512000000, Id=83
EOF
) | sfdisk /dev/sdb

echo "Making swap..."
mkswap /dev/sdb5

MNTOPTIONS="rw,noatime,nodiratime,barrier=0,data=writeback"
for part in 1 6 7 8 9; do
    echo "Zeroing partition"
    dd if=/dev/zero of=/dev/sdb${part} bs=1M count=1
    echo "Copying partitions /dev/sda${part} -> /dev/sdb${part}"
    mkdir -p /mnt/sda${part}
    mkdir -p /mnt/sdb${part}
    # May use -E lazy_itable_init
    mkfs.ext4 -q /dev/sdb${part} && \
        tune2fs -c0 -i0 /dev/sdb${part} && \
        mount -o ro,noatime /dev/sda${part} /mnt/sda${part} && \
        mount -o ${MNTOPTIONS} /dev/sdb${part} /mnt/sdb${part} && \
        rsync --numeric-ids --devices --specials -A -X -H -W -a /mnt/sda${part}/ /mnt/sdb${part}/
    umount /dev/sda${part}
    umount /dev/sdb${part}
done

# Remount proper system
target=/mnt/target
[ -d $target ] || mkdir $target
mount -t ext4 -o ${MNTOPTIONS} /dev/sdb1 $target
mount -t ext4 -o ${MNTOPTIONS} /dev/sdb7 ${target}/tmp
mount -t ext4 -o ${MNTOPTIONS} /dev/sdb9 ${target}/home
mount -t ext4 -o ${MNTOPTIONS} /dev/sdb8 ${target}/usr
mount -t ext4 -o ${MNTOPTIONS} /dev/sdb6 ${target}/var
mount --bind /dev $target/dev
mount --bind /proc $target/proc

echo "Restore backup"
bak=$target/var/oldbackup
(mkdir -p $bak && cd $bak && tar xpzf ${backupfile})
cp $bak/cups/printers.conf $target/etc/cups
cp $bak/cups/ppd/* $target/etc/cups/ppd/
for f in hosts hostname resolv.conf; do
    cp $bak/etc/$f $target/etc/
done
cp $bak/etc/interfaces $target/etc/network/

echo "Reg��n��ration clefs SSH"
echo -e "#!/bin/sh\nexit 101" >$target/usr/sbin/policy-rc.d
chmod +x $target/usr/sbin/policy-rc.d
rm $target/etc/ssh/ssh_host*
chroot $target dpkg-reconfigure openssh-server
# policy-rc.d seems not enough with dpkg-reconfigure.. :/
chroot $target /etc/init.d/ssh stop
# STILL not enought!!!! :(
pkill -9 sshd

echo "Install GRUB"
chroot $target update-grub
chroot $target grub-install /dev/sdb

rm $target/usr/sbin/policy-rc.d

ROOTPW=$(pwgen -B -1 8)
echo "Root password: $ROOTPW"
chroot $target echo "root:$ROOTPW" | chpasswd -m
echo $ROOTPW > $target/root/passwd
chmod 600 $target/root/passwd

[ -d $target/var/log/install ] || mkdir $target/var/log/install
touch $target/var/log/install/installed

echo ${oldip}:$ROOTPW >> /tmp/passwords

echo "SYNC"
sync
umount $target/dev
umount $target/proc
for part in 6 7 8 9 1; do
    umount /dev/sdb${part}
done

kpartx -d /dev/sdb
echo "Disable / powerdown drive..."
echo "1" > /sys/block/sdb/device/delete

echo "Done ${oldip}"

Merci ed ! Sur le principe je pensais à un truc dans le genre. Ça en fait des alternatives.

Je bloque sur l’install de mondorescue : impossible de trouver un paquet ! J’ai trouvé ça en googlant un peu :
http://wiki.debian-facile.org/logiciel:mondorescue
mais pas de paquet mondo… Est-ce que je m’y prends mal ?

Quant à utiliser le dépôt ftp://ftp.mondorescue.org/debian, ça me paraît un peu vieux : il n’y a pas de debian 7.0, et je n’aime pas trop les dépôts tiers.

  • mkfs.ext4 /dev/new
  • mount /dev/new /mnt/new
  • mount /dev/old /mnt/old
  • rsync -av /mnt/old /mnt/new
  • umount /mnt/*
  • edit fstab
  • update-grub
  • telinit 6

Merci pour toutes vos suggestions… Je marque le sujet en résolu.