ftp script curlftpfs
#Gnu/Linux
Automatiser des commandes FTP par script.
La lecture ce matin de l'excellent blog de Nicolargo sur le montage de son espace FTP en local: http://blog.nicolargo.com/2011/08/mounter-son-espace-de-sauvegarde-ftp-en-local-sous-debian.html?utm_source=twitterfeed&utm_medium=twitter
m'a donné l'idée de bloger ce post.
Je backup toutes les nuits mes différents DomU Xen de ma DediboxQC (une dizaine de VM), un des processus de ma backup est bien sur l'externalisation
J'externalise sur l'espace FTP Online de 200Go
Toutes les nuits je transfert environ: 40Go de données sur mon espace FTP.
La méthode de Nicolargo est séduisante, car elle permet de gérer son espace FTP comme un repertoire local et donc utiliser les commandes unix de base ( cp, mv etc...)
Pour ma part j'ai préféré scripter les commandes FTP avec de me faire une commande FTP "a tout faire"
Le script
voici mon script simple et très perfectible:
#!/bin/bash
#ftputil
###FTPUTIL##Antony Martineau 2010
################################
ftpserver="dedibackup-vit.online.net"
login="sd-25168"
password="*****"
###############################
for i in $*; do
if [ "$i" = "--put" ]; then
putparam=$(echo $* | gawk -F'--put' '{print $2}' | cut -d" " -f2)
param=$(echo $param | sed -r 's/(^| )--put( |$)/\1/g' | sed -r 's:(^| )'$scriptbefore'( |$):\1:g' | sed 's/[ \t]*$//')
echo -e "user $login $password\\nls\\nput $putparam\nquit" | ftp -n $ftpserver
elif [ "$i" = "--get" ]; then
getparam=$(echo $* | gawk -F'--get' '{print $2}' | cut -d" " -f2)
param=$(echo $param | sed -r 's/(^| )--get( |$)/\1/g' | sed 's/[ \t]*$//')
echo -e "user $login $password\\nls\\nget $getparam\nquit" | ftp -n $ftpserver
elif [ "$i" = "--ls" ]; then
lsparam=$(echo $* | gawk -F'--ls' '{print $2}' | cut -d" " -f2)
param=$(echo $param | sed -r 's/(^| )--ls( |$)/\1/g' | sed 's/[ \t]*$//')
echo -e "user $login $password\\nls\nquit" | ftp -n $ftpserver
elif [ "$i" = "--del" ]; then
delparam=$(echo $* | gawk -F'--del' '{print $2}' | cut -d" " -f2)
param=$(echo $param | sed -r 's/(^| )--del( |$)/\1/g' | sed 's/[ \t]*$//')
echo -e "user $login $password\\ndel $delparam\nquit" | ftp -n $ftpserver
fi
done
Comme on peut le voir le script est simple:
Il me permet simplement d'appeler la commande ftputil avec ses arguments
ftputil --ls pour lister
ftputil --put pour uploader
ftputil --get pour downloader
ftputil --del pour supprimer
Ainsi dans mes scripts de backups je n'ai plus qu'a appeler ma commande pour transferer mes fichiers..
ftputil --put la_backup_de_mon_domu.lzoPourquoi
Je connaissai déjà curlftpfs et ses avantages, mais j'ai préféré ma méthode car elle est plus performante à mon gout.
il suffit de faire un test de transfert pour s'en convaincre:
- Avec curlftpfs
xen-dedi:/stock # mount | grep curlftpfs
curlftpfs#ftp://sd-25168:******@dedibackup-vit.online.net/ on /backup
type fuse (rw,nosuid,nodev)
Mon ftp est bien monté sur mon /backup je test un transfert d'un iso ubuntu sur le montage
xen-dedi:/stock # cp /stock/ubuntu-10.04.2-server-amd64.iso /backup/ubuntu-10.04.2-server-amd64.iso
Je monitore en même temps le débit réseau sur mon interface eth0
Real time statistics for eth0 (refreshed every 1 sec)on obtient une moyenne de 49Mo/s ce qui est tout de même très acceptable.
Link encap:Ethernet HWaddr B8:AC:6F:97:A3:A2
inet addr:88.190.14.87 Bcast:88.190.14.255
Mask:255.255.255.0
inet6 addr: fe80::baac:6fff:fe97:a3a2/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:9806331 errors:0 dropped:0 overruns:0 frame:0
TX packets:53750134 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:1503239144 (1433.6MiB) TX bytes:78790434959 (75140.4MiB)
Interrupt:16 Memory:da000000-da012800
RX packets per second: 18645.00pkt/s
RX average packet size: 70.14bytes/pkt
RX throughput:
10.46Mb/s (1.24MiB/s)
TX packets per second: 35514.00pkt/s
TX average packet size: 1462.33bytes/pkt
TX throughput: 415.46Mb/s (49.52MiB/s)
- Avec les commandes FTP basiques
/stock/ftputil --put ubuntu-10.04.2-server-amd64.iso
Je monitore en même temps le débit réseau sur mon interface eth0ce qui est tout de même très acceptable
Real time statistics for eth0 (refreshed every 1 sec)
Link encap:Ethernet HWaddr B8:AC:6F:97:A3:A2
inet addr:88.190.14.87 Bcast:88.190.14.255
Mask:255.255.255.0
inet6 addr: fe80::baac:6fff:fe97:a3a2/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:10707550 errors:0 dropped:0 overruns:0 frame:0
TX packets:55902209 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:1566805384 (1494.2MiB) TX bytes:82030865865 (78230.7MiB)
Interrupt:16 Memory:da000000-da012800
RX packets per second: 3459.00pkt/s
RX average packet size: 70.18bytes/pkt
RX throughput:
1.94Mb/s (237.0KiB/s)
TX packets per second: 6928.00pkt/s
TX average packet size: 1509.71bytes/pkt
TX throughput: 83.67Mb/s (9.97MiB/s)
on obtient une moyenne de 84Mo/s.
26 août 2011
2 commentaires