tuto:sauvegardes:externalisation_raid1

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentes Révision précédente
Prochaine révision
Révision précédente
tuto:sauvegardes:externalisation_raid1 [05/01/2012 17:08]
dani [Mettre en place le script d'externalisation]
tuto:sauvegardes:externalisation_raid1 [13/09/2016 11:11] (Version actuelle)
dani
Ligne 13: Ligne 13:
  
 <code> <code>
-fdisk /dev/sdc +gdisk /dev/sdc 
-[...](création d'une partition primaire /dev/sdc1 type fd)+[...](création d'une partition primaire /dev/sdc1 type fd00)
 </code> </code>
  
 Maintenant, nous allons créer le volume RAID /dev/md0 Maintenant, nous allons créer le volume RAID /dev/md0
 <code> <code>
-mdadm --create /dev/md0 --level=1 --force --raid-devices=1 /dev/sdc1+mdadm --create /dev/md0 --bitmap=internal --level=1 --force --raid-devices=1 /dev/sdc1
 </code> </code>
  
Ligne 25: Ligne 25:
  
 <code> <code>
-mdadm --create /dev/md0 --level=1 --raid-devices=2 /dev/sdc1 /dev/sdd1+mdadm --create /dev/md0 --bitmap=internal --level=1 --raid-devices=2 /dev/sdc1 /dev/sdd1
 </code> </code>
  
-La suite est classique, on crée un pv sur /dev/md0, puis un vg, et enfin un lv (en laissant toujours un peu d'espace non alloué au cas où), puis on formate ce lv en ext3, et on le configure pour se monter sur /var/lib/BackupPC.+La suite est classique, on crée un pv sur /dev/md0, puis un vg, et enfin un lv (en laissant toujours un peu d'espace non alloué au cas où), puis on formate ce lv en xfs, et on le configure pour se monter sur /var/lib/BackupPC.
  
 ===== Repérer les informations des disques d'externalisations ===== ===== Repérer les informations des disques d'externalisations =====
Ligne 39: Ligne 39:
 Maintenant, nous allons repérer l'ID de notre disque (ou plutôt de notre partition) Maintenant, nous allons repérer l'ID de notre disque (ou plutôt de notre partition)
  
-==== COS5 ou supérieur ====+==== EL5 ou supérieur (valable pour SME8) ==== 
  
 <code> <code>
 ll /dev/disk/by-id/ ll /dev/disk/by-id/
 </code> </code>
 +
  
 Ce qui va nous renvoyer quelque chose comme ça: Ce qui va nous renvoyer quelque chose comme ça:
 +
 +
 <code> <code>
 lrwxrwxrwx 1 root root  9 déc  7 17:31 scsi-3600605b000344d40128c7c6efd3ca27a -> ../../sda lrwxrwxrwx 1 root root  9 déc  7 17:31 scsi-3600605b000344d40128c7c6efd3ca27a -> ../../sda
Ligne 56: Ligne 60:
 lrwxrwxrwx 1 root root 10 déc  8 15:24 scsi-SATA_ST31500341AS_9VS2PNS6-part1 -> ../../sdd1 lrwxrwxrwx 1 root root 10 déc  8 15:24 scsi-SATA_ST31500341AS_9VS2PNS6-part1 -> ../../sdd1
 </code> </code>
 +
  
 Dans notre exemple, c'est /dev/sdd1 la partition qui nous intéresse, donc son ID est **scsi-SATA_ST31500341AS_9VS2PNS6-part1** (trop facile, dire que j'ai galéré à essayer de faire ça avec des règles udev à la con ;)) Dans notre exemple, c'est /dev/sdd1 la partition qui nous intéresse, donc son ID est **scsi-SATA_ST31500341AS_9VS2PNS6-part1** (trop facile, dire que j'ai galéré à essayer de faire ça avec des règles udev à la con ;))
  
-==== COS 4 (SME7) ====+==== EL4 (valable pour SME7) ==== 
  
 Sous CentOS 4, il n'y a pas de /dev/disk/by-id/, il faut donc jouer avec des règles udev pour obtenir l'équivalent (un chemin fixe pour un disque dur donné) Sous CentOS 4, il n'y a pas de /dev/disk/by-id/, il faut donc jouer avec des règles udev pour obtenir l'équivalent (un chemin fixe pour un disque dur donné)
  
-Il faut ajouter une règle de ce type dans **/etc/udev/rules.d/10-local_backup.rules**+ 
 +Il faut ajouter une règle de ce type dans **/etc/udev/rules.d/10-local_backup.rules** 
 <code> <code>
 BUS="usb", SYSFS{idProduct}="0606", SYSFS{idVendor}="05e3", KERNEL="sd?1", SYMLINK="backup-raid" BUS="usb", SYSFS{idProduct}="0606", SYSFS{idVendor}="05e3", KERNEL="sd?1", SYMLINK="backup-raid"
 </code> </code>
 +
  
 Pour repérer les idProduct et idVendor, on peut utiliser: Pour repérer les idProduct et idVendor, on peut utiliser:
 +
 +
 <code> <code>
 udevinfo -a -p $(udevinfo -q path -n /dev/sdd) | grep id udevinfo -a -p $(udevinfo -q path -n /dev/sdd) | grep id
 </code> </code>
 +
  
 qui devrait donner quelque chose du genre: qui devrait donner quelque chose du genre:
 +
  
 <code> <code>
Ligne 83: Ligne 95:
 </code> </code>
  
-ici, l'idProduct est **2338** et l'idVendor est **152d**+ 
 +ici, l'idProduct est **2338** et l'idVendor est **152d**  
  
 Avec la règle udev créée précédemment, le nom du device pour la synchro raid est **/dev/backup-raid** Avec la règle udev créée précédemment, le nom du device pour la synchro raid est **/dev/backup-raid**
  
 ===== Mettre en place le script d'externalisation ===== ===== Mettre en place le script d'externalisation =====
 +Nous pouvons maintenant mettre en place notre script d'externalisation:
 +(Par exemple dans /usr/local/bin/BackupPC_raidsync)
  
- +<code bash> 
-Nous pouvons maintenant mettre en place notre script d'externalisation: (Par exemple dans /usr/local/bin/BackupPC_raidsync) +#!/bin/bash
- +
- +
-<code bash>#!/bin/bash+
    
 # Read configuration # Read configuration
 if [ -e /etc/BackupPC/raidsync.conf ]; then if [ -e /etc/BackupPC/raidsync.conf ]; then
-. /etc/BackupPC/raidsync.conf+    . /etc/BackupPC/raidsync.conf
 else else
-echo "Configuration file /etc/BackupPC/raidsync.conf does not exist" +    echo "Configuration file /etc/BackupPC/raidsync.conf does not exist" 
-exit 1+    exit 1
 fi fi
    
Ligne 129: Ligne 142:
     touch $LOCK     touch $LOCK
 fi fi
- +
 RAID_DEVICES=$(/sbin/mdadm --detail $RAID | /bin/grep 'Raid Devices' | /bin/awk '{print $4}') RAID_DEVICES=$(/sbin/mdadm --detail $RAID | /bin/grep 'Raid Devices' | /bin/awk '{print $4}')
 logger "The array $RAID has $RAID_DEVICES active member(s)" logger "The array $RAID has $RAID_DEVICES active member(s)"
Ligne 135: Ligne 148:
 # Grow the RAID device to include one more drive (missing for now) # Grow the RAID device to include one more drive (missing for now)
 logger "Growing RAID array $RAID" logger "Growing RAID array $RAID"
-/sbin/mdadm --grow $RAID --raid-devices=$(($RAID_DEVICES+1))+/sbin/mdadm --grow $RAID --raid-devices=$(($RAID_DEVICES+1)) --force 
 + 
 +if [ -e "/sys/block/$(basename $RAID)/queue/max_sectors_kb" ]; then 
 +    # Check the max_sectors_kb before adding the new drive 
 +    OLDSIZE=$(cat /sys/block/$(basename $RAID)/queue/max_sectors_kb) 
 + 
 +    # Freeze the FS 
 +    /sbin/fsfreeze -f $TOPDIR 
 +fi
    
 # Add the removable device to the raid array # Add the removable device to the raid array
 logger "Adding $REMOVABLE_DEVICE to RAID array $RAID" logger "Adding $REMOVABLE_DEVICE to RAID array $RAID"
-/sbin/mdadm --manage $RAID --add $REMOVABLE_DEVICE+/sbin/mdadm --manage $RAID --add --write-mostly $REMOVABLE_DEVICE 
 + 
 +if [ -e "/sys/block/$(basename $RAID)/queue/max_sectors_kb" ]; then 
 +    # Now check the new max_sectors_kb 
 +    NEWSIZE=$(cat /sys/block/$(basename $RAID)/queue/max_sectors_kb) 
 + 
 +    REMOUNT="no" 
 +    # max_sectors_kb has changed ? 
 +    if [ "$OLDSIZE" != "$NEWSIZE" ]; then 
 +        # We need to update the max_sectors_kb of the device backing the filesystem 
 +        # to prevent bio too big errors 
 +        FSDEV=$(basename $(readlink /dev/disk/by-uuid/$(/sbin/blkid $(df -P $TOPDIR | tail -1 | awk '{print $1}') | sed 's/.*UUID="\([a-z0-9-]*\)".*/\1/'))) 
 +        FSDEVSIZE=$(cat /sys/block/$FSDEV/queue/max_sectors_kb) 
 +        if [ $FSDEVSIZE -gt $NEWSIZE ]; then 
 +            cat /sys/block/$(basename $RAID)/queue/max_sectors_kb > /sys/block/$FSDEV/queue/max_sectors_kb 
 +            REMOUNT="yes" 
 +        fi 
 +    fi 
 + 
 +    # Unfreez the FS 
 +    /sbin/fsfreeze -u $TOPDIR 
 + 
 +    # Remount the FS if needed (not sure if it's really needed) 
 +    if [ "$REMOUNT" == "yes" ]; then 
 +        mount -o remount $TOPDIR 
 +    fi 
 +fi
    
 SYNCING=1 SYNCING=1
Ligne 151: Ligne 198:
 logger "RAID array $RAID is now fully synced" logger "RAID array $RAID is now fully synced"
    
-# Stop backuppc and wait a few seconds to be sure the fs is clean +if [ "$CLEAN_REMOVE" == "yes" ]; then 
-logger "Stopping BackupPC server in order to have a consistent state" +    # Stop backuppc and wait a few seconds to be sure the fs is clean 
-/etc/init.d/backuppc stop +    logger "Stopping BackupPC server in order to have a consistent state" 
-/bin/sync +    /sbin/service backuppc stop 
-/bin/sleep 10+    /bin/sync 
 +    /bin/sleep 10
    
-# Now we can umount the volume +    # Now we can umount the volume 
-logger "Unmounting $TOPDIR in order to have a consistent state" +    logger "Unmounting $TOPDIR in order to have a consistent state" 
-umount $TOPDIR+    umount $TOPDIR 
 +else 
 +    sync; sync 
 +fi
    
 # Mark the disk as faulty # Mark the disk as faulty
 logger "Removing $REMOVABLE_DEVICE from the RAID array $RAID" logger "Removing $REMOVABLE_DEVICE from the RAID array $RAID"
 /sbin/mdadm --manage $RAID --fail $REMOVABLE_DEVICE /sbin/mdadm --manage $RAID --fail $REMOVABLE_DEVICE
-sleep 5+sleep 1
    
 # Remove it # Remove it
Ligne 171: Ligne 222:
 # And shrink the raid array so it doesn't report degraded state # And shrink the raid array so it doesn't report degraded state
 # Only use the force flag if $RAID_DEVICES is one # Only use the force flag if $RAID_DEVICES is one
-logger "Now shrinking the number of active members of $RAID, so it's not in a degraded state" FORCE='' if [ $RAID_DEVICES == 1 ]; then     FORCE='--force' fi /sbin/mdadm --grow $RAID $FORCE --raid-devices=$RAID_DEVICES   # We can remount the volume logger "$TOPDIR can be re-mounted" mount $TOPDIR   # and restart BackupPC logger "And BackupPC server can be restarted" /etc/init.d/backuppc start   # Send a mail logger "Sending mail to $MAIL_TO" if [ ! -z $MAIL_TO ]; then     for M in $MAIL_TO; do         /bin/mail -s 'Externalisation des sauvegardes' $M </etc/BackupPC/raidsync_mail.txt     done fi   # Now loop until the link to $REMOVABLE_DEVICE is no longer here (ie. the drive is disconnected) # This is to prevent the sync to start over and over logger "Waiting for $REMOVABLE_DEVICE to be removed" while [ -e $REMOVABLE_DEVICE ]; do     /bin/sleep 10 done   # And remove the lock logger "Remouving the lock file $LOCK" /bin/rm -f $LOCK +logger "Now shrinking the number of active members of $RAID, so it's not in a degraded state" 
-</code> +FORCE='' 
 +if [ $RAID_DEVICES == 1 ]; then 
 +    FORCE='--force' 
 +fi 
 +/sbin/mdadm --grow $RAID $FORCE --raid-devices=$RAID_DEVICES 
 +  
 +if [ "$CLEAN_REMOVE" == "yes" ]; then 
 +    # We can remount the volume 
 +    logger "$TOPDIR can be re-mounted" 
 +    mount $TOPDIR 
 +  
 +    # and restart BackupPC 
 +    logger "And BackupPC server can be restarted" 
 +    /sbin/service backuppc start 
 +fi 
 +  
 +# Send a mail 
 +if [ ! -z "$MAIL_TO]; then 
 +    for M in $MAIL_TO; do 
 +        logger "Sending mail to $M" 
 +        /bin/mail -s 'Externalisation des sauvegardes' $M < /etc/BackupPC/raidsync_mail.txt 
 +    done 
 +fi 
 +  
 +# Now loop until the link to $REMOVABLE_DEVICE is no longer here (ie. the drive is disconnected) 
 +# This is to prevent the sync to start over and over 
 +logger "Waiting for $REMOVABLE_DEVICE to be removed" 
 +while [ -e $REMOVABLE_DEVICE ]; do 
 +    /bin/sleep 10 
 +done 
 +  
 +# And remove the lock 
 +logger "Remouving the lock file $LOCK" 
 +/bin/rm -f $LOCK
  
 +</code>
 Puis lui donner les permissions: Puis lui donner les permissions:
- +<code bash> 
- +chmod +x /usr/local/bin/BackupPC_raidsync
-<code bash>chmod +x /usr/local/bin/BackupPC_raidsync+
 </code> </code>
- 
  
 On crée ensuite le fichier de configuration dans /etc/BackupPC/raidsync.conf On crée ensuite le fichier de configuration dans /etc/BackupPC/raidsync.conf
 +<code bash>
  
- +# Mount Point for BackupPC volume
-<code bash># Mount Point for BackupPC volume+
 # Default: /var/lib/BackupPC # Default: /var/lib/BackupPC
 TOPDIR='/var/lib/BackupPC' TOPDIR='/var/lib/BackupPC'
- +
 # Raid device on which BackupPC data are stored # Raid device on which BackupPC data are stored
 # Example: /dev/md3 # Example: /dev/md3
 RAID='/dev/md3' RAID='/dev/md3'
- +
 # Path to the removable block device. # Path to the removable block device.
 REMOVABLE_DEVICES[0]='/dev/disk/by-id/scsi-SATA_ST31500341AS_9VS2PNS6-part1' REMOVABLE_DEVICES[0]='/dev/disk/by-id/scsi-SATA_ST31500341AS_9VS2PNS6-part1'
 REMOVABLE_DEVICES[1]='/dev/disk/by-id/scsi-SATA_ST31500341AS_9VS2PNS7-part1' REMOVABLE_DEVICES[1]='/dev/disk/by-id/scsi-SATA_ST31500341AS_9VS2PNS7-part1'
- + 
 +# Set this to no if you don't want BackupPC to be stopped while the external device 
 +# is removed from the RAID array 
 +CLEAN_REMOVE="yes" 
 # Path for the lock file # Path for the lock file
 # Default: /var/lock/BkpcRaidSync # Default: /var/lock/BkpcRaidSync
 LOCK='/var/lock/bkpc-raidsync' LOCK='/var/lock/bkpc-raidsync'
- +
 # A valid mail adress to send a repport, and ask to remove the drive once the sync # A valid mail adress to send a repport, and ask to remove the drive once the sync
 # is completed # is completed
-# Just comment this line to disable email notification # You can configure several mail recipient separated with space +# Just comment this line to disable email notification 
-# eg: MAIL_TO='admin@domain1.com admin@domain2.com'+# You can enter several mail addresses separated by space 
 +# eg: MAIL_TO='admin@domain.com backups@domain.com'
 MAIL_TO='admin@domain.com' MAIL_TO='admin@domain.com'
 </code> </code>
- 
  
 En adaptant bien sûre les ID des disques à utiliser, le device md et l'adresse mail de la personne qui recevra les mails d'alertes (ou plutôt de demande d'échange de disque) En adaptant bien sûre les ID des disques à utiliser, le device md et l'adresse mail de la personne qui recevra les mails d'alertes (ou plutôt de demande d'échange de disque)
- 
  
 Et on place également le fichier text qui contient le corps du mail à envoyer, dans /etc/BackupPC/raidsync_mail.txt Et on place également le fichier text qui contient le corps du mail à envoyer, dans /etc/BackupPC/raidsync_mail.txt
- 
- 
 <code> <code>
-Les sauvegardes ont été copié sur le support externe. Vous devriez le déconnecter.+Les sauvegardes ont été copiées sur le support externe. Vous devriez le déconnecter.
 L'externalisation se lancera à nouveau dès qu'un support configuré sera connecté. L'externalisation se lancera à nouveau dès qu'un support configuré sera connecté.
 </code> </code>
  • tuto/sauvegardes/externalisation_raid1.1325779711.txt.gz
  • Dernière modification: 05/01/2012 17:08
  • de dani