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}"