Backup del sistema

De Wikijoan
Dreceres ràpides: navegació, cerca

En aquest document faig investigacions i aproximacions per tal d'aconseguir fer backups en els diferents ambents que necessito: Linux, Windows, ús de SSH i RSYNC, backups incrementals si o no, backups comprimits si o no,...

Contingut

backup bàsic de directoris i fitxers

http://banyut.obolog.com/copias-seguridad-ubuntu-crontab-rsync-dd-65952

cp -rp ~/joan /media/sdb5/backup/diumenge

és un backup funcional, però totalment ineficient perquè cada vegada es transmet tota la informació, encara que els canvis hagin estat mínims.

backup amb rsync

rsync -altgvbp /home/banyut /media/sdb5/backup/domingo

d'aquesta manera només es fa còpia dels arxius nous i els modificats des de l'últim backup

opcions:

*-g, --group. This  option  causes  rsync  to set the group of the destination file to be the same as the source file.


Ubuntu Server (local) confia en linuxserver (institut)

des de l'insti això funciona

scp /home/joan/mysql_backup/copia_wikidb141108.dmp joan@wikijoan.dyndns.org:/tmp
scp /home/joan/mysql_backup/copia_wikidb141108.dmp joan@wikijoan.dyndns.org: -> per copiar en el home de l'usuari joan

em demana password

Si miro el man, veig que no hi ha l'opció de ficar el password. La única possibilitat de què no em demani el password és l'opció -i identity file, que és la tècnica de clau pública/clau privada (el servidor on em vull connectar haurà de confiar en aquesta connexió).

el paquet ssh-keygen ja està instal.lat

linux-server:~ # ssh-keygen -t dsa
Generating public/private dsa key pair.
Enter file in which to save the key (/root/.ssh/id_dsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_dsa.
Your public key has been saved in /root/.ssh/id_dsa.pub.
The key fingerprint is:
48:a5:2d:04:5d:29:bc:78:1c:87:02:b5:c2:ad:03:9d root@linux-server
You have new mail in /var/spool/mail/root
linux-server:~ #

Segueixo els mateixos passos que vaig fer en el seu dia entre el UStudio i el Ubuntu Server:

linux-server# scp ~/.ssh/id_dsa.pub joan@wikijoan.dyndns.org:/tmp

entro per ssh en el servidor

linux-server# ssh joan@wikijoan.dyndns.org
joan@server$ cat /tmp/id_dsa.pub >> ~/.ssh/authorized_keys
joan@server$ chmod 0600 $HOME/.ssh/authorized_keys
joan@server$ rm -f /tmp/id_dsa.pub
joan@server$ exit

i ara ja puc fer una còpia sense que em demani el password:

linux-server# scp /home/joan/mysql_backup/copia_wikidb141108.dmp joan@wikijoan.dyndns.org: 

i no em demana el password


Preparant els punts de muntatge

Lo ideal seria que les diferents màquines (portàtil, institut Linux, institut BBDD,...) es connectessin directament al disc de xarxa per a fer les còpies de seguretat. En el disc de xarxa hi ha un servidor samba (puc fer PUT, GET), però no un servidor SSH. Per sincronitzar amb rsync necessito el servidor SSH. Hauré d'investigar més en aquesta línia

Si tinc el servidor Ubuntu sempre encès, com és la idea, aleshores puc fer uns punts de muntatge permanents, i aleshores les diferents màquines es sicronitzen per fer backup amb els servidors (contra aquests punts de muntatge que són les carpetes compartides del disc de xarxa). Una possibilitat és ficar els punts de muntatge en el fitxer /etc/fstab, per ex.:

//192.168.1.15/PUBLIC /media/PUBLIC cifs rw,user 0 0
//192.168.1.15/PRIVAT /media/PRIVAT cifs user=guest,password=****,rw,user 0 0
//192.168.1.15/LINKAT /home/joan/LINKAT cifs user=guest,password=****,rw,user 0 0
...

però el problema és que m'apareixen les icones dels recursos compartits a l'escriptori i a 'Llocs'. M'he barallat una mica per tal que no surtin, i segur que es pot (està relacionat amb la configuració del GNome), però encara no ho sé fer.

Una altra possibilitat és muntar les carpetes en un script d'inici que executi el root (el script /home/joan/.bashrc no ens val perquè l'executa joan, no el root, i el mount necessita sudo per executar-se)

script punts_muntatge.sh:

$ sudo joe /etc/init.d/punts_muntatge.sh
$ sudo update-rc.d punts_muntatge.sh defaults
 Adding system startup for /etc/init.d/punts_muntatge.sh ...
   /etc/rc0.d/K20punts_muntatge.sh -> ../init.d/punts_muntatge.sh
   /etc/rc1.d/K20punts_muntatge.sh -> ../init.d/punts_muntatge.sh
   /etc/rc6.d/K20punts_muntatge.sh -> ../init.d/punts_muntatge.sh
   /etc/rc2.d/S20punts_muntatge.sh -> ../init.d/punts_muntatge.sh
   /etc/rc3.d/S20punts_muntatge.sh -> ../init.d/punts_muntatge.sh
   /etc/rc4.d/S20punts_muntatge.sh -> ../init.d/punts_muntatge.sh
   /etc/rc5.d/S20punts_muntatge.sh -> ../init.d/punts_muntatge.sh

$ sudo chmod +x punts_muntatge.sh

fitxer punts_muntatge.sh

#punts de muntatge per al disc de xarxa
mount -t cifs //192.168.1.15/PUBLIC /mnt/PUBLIC -o username=guest,password=****,rw
mount -t cifs //192.168.1.15/PRIVAT /mnt/PRIVAT -o username=guest,password=****,rw
mount -t cifs //192.168.1.15/fotos /mnt/fotos -o username=guest,password=****,rw
mount -t cifs //192.168.1.15/UbuntuServer /mnt/UbuntuServer -o username=guest,password=****,rw
mount -t cifs //192.168.1.15/DELL_Studio /mnt/DELL_Studio -o username=guest,password=****,rw
mount -t cifs //192.168.1.15/DELL_WXP /mnt/DELL_WXP -o username=guest,password=****,rw
mount -t cifs //192.168.1.15/LINKAT /mnt/LINKAT -o username=guest,password=****,rw
mount -t cifs //192.168.1.15/BBDD /mnt/BBDD -o username=guest,password=****,rw

encara que la carpeta fotos no està protegida amb password, és necessari ficar username i password per tal que funcioni en la consola. (en la consola, sudo)

Tanmateix, com veurem tot seguit, és una mala idea fer els punts de muntatge en el directori /mnt. Així que els nous punts de muntatge estaran a dins del home:

fitxer punts_muntatge.sh

#punts de muntatge per al disc de xarxa
mount -t cifs //192.168.1.15/PUBLIC /home/joan/disc_xarxa/PUBLIC -o username=guest,password=****,rw
mount -t cifs //192.168.1.15/PRIVAT /home/joan/disc_xarxa/PRIVAT -o username=guest,password=****,rw
mount -t cifs //192.168.1.15/fotos /home/joan/disc_xarxa/fotos -o username=guest,password=****,rw
mount -t cifs //192.168.1.15/UbuntuServer /home/joan/disc_xarxa/UbuntuServer -o username=guest,password=****,rw
mount -t cifs //192.168.1.15/DELL_Studio /home/joan/disc_xarxa/DELL_Studio -o username=guest,password=****,rw
mount -t cifs //192.168.1.15/DELL_WXP /home/joan/disc_xarxa/DELL_WXP -o username=guest,password=****,rw
mount -t cifs //192.168.1.15/LINKAT /home/joan/disc_xarxa/LINKAT -o username=guest,password=****,rw
mount -t cifs //192.168.1.15/BBDD /home/joan/disc_xarxa/BBDD -o username=guest,password=****,rw

Preparant les còpies remotes des de Windows: Putty, PSCP

El Putty es pot fer servir des de la línia de comandes. Està explicat a

http://the.earth.li/~sgtatham/putty/0.60/puttydoc.txt

Ho trobarem en el capítol 8: 3.8 The PuTTY command line

C:\> putty.exe [-ssh | -telnet | -rlogin | -raw] [user@]host
C:\> putty.exe -ssh -pw **** joan@wikijoan.dyndns.org

Per a fer còpies la solució passa per una altra eina de la col.lecció del Putty: PSCP:

Ho trobem al capítol 5: Chapter 5: Using PSCP to transfer files securely

Chapter 5: Using PSCP to transfer files securely

       PSCP, the PuTTY Secure Copy client, is a tool for transferring files
       securely between computers using an SSH connection.

Una manera d'utilitzar-ho per fer còpies des de l'ordinador Windows al disc de xarxa és:

C:\> pscp.exe -r -pw **** C:/hosting_linux.txt joan@wikijoan.dyndns.org:/mnt/PUBLIC

-r copy directories recursively -p preserve file attributes -v show verbose messages -C enable compression -i private key file for authentification -batch disable all interactive prompts

per copiar tot un directori:

C:\> pscp.exe -r -pw **** C:/pentagrama joan@wikijoan.dyndns.org:/mnt/DELL_WXP

funciona tot i que hi ha alguns arxius que diu que no els pot obrir perquè Permission Denied. Quan ho torno a fer algun dels arxius que no em deixava ara em deixa, i alguns altres em dóna Permission Denied. Per tant, és un comportament erràtic.

el login joan/**** és el que em permet l'accés a la sessió de SSH. Per entrar al recurs compartit no cal ficar password, perquè la comanda per fer el punt de muntatge ja vaig introduir el password.

Si faig un backup a un directori local del servidor Ubuntu, aleshores no hi ha problema de permisos:

C:\> pscp.exe -r -pw **** C:/pentagrama joan@wikijoan.dyndns.org:/home/joan/backup

Important: el problema no ve pel pscp o SSH, sinó que és intern al Ubuntu Server Des del Ubuntu Server, la 1a comanda falla i la 2a no:

$ cp -R pentagrama /mnt/PUBLIC
$ sudo cp -R pentagrama /mnt/PUBLIC

És un problema de permisos, que es pot solucionar de diverses maneres. Una possibilitat és que la connexió amb pscp es faci des de l'usuari root (això de moment no es pot fer perquè per defecte a Ubuntu l'usuari root no pot iniciar una sessió). Una altra possibilitat seria que el propietari dels punts de muntatge sigui joan i no root (són root perquè al comanda mount només funcionava com a sudo)

mount només funciona com a sudo, però després d'haver-lo creat puc canviar el propietari:

sudo chown joan /mnt/BBDD
sudo chown -R joan /mnt/BBDD

i també canviem la pertanyença del grup:

sudo chgrp joan /mnt/BBDD
sudo chgrp -R joan /mnt/BBDD

Tanmateix, no ho solucionem, ja que si faig còpies en local contra el directori no funciona:

$ cp -R /home/joan/pentagrama /mnt/pentagrama

continua fallant per un tema de permisos, encara que tots els fitxers i directoris involucrats són propietari de joan.

Potser el problema és que el directori /mnt té un caràcter especial...

$ mkdir /home/joan/BBDD
$ sudo mount -t cifs //192.168.1.15/BBDD /home/joan/BBDD -o username=guest,password=****,rw

com que només l'usuari root pot fer mount, automàticament el propietari i grup són root, tot i que tothom hi té accés.

C:\> pscp.exe -r -pw **** C:/hosting_linux.txt joan@wikijoan.dyndns.org:/home/joan/BBDD

i ara funciona sense problemes. Conclusió: el directori /mnt és especial a nivell de permisos.

Recordem que una altra possibilitat que segur que funciona és connectar-me per pscp com a root, però primer hauríem d'habilitar l'inici de sessió de root.

Script de backup per a windows

http://www.michaelhorowitz.com/backupscript.html

Segueixo aquest document: http://www.pcmech.com/article/windows-batch-script-to-backup-data/

Zip

Eina en mode consola per a comprimir. És lliure, és un projecte de SourceForge (http://www.7-zip.org/)

Fitxer de configuració BackupConfig.txt

És on diem quins directoris i/o fitxers volem copiar.

# Enter file and folder names, one per line.C:\Documents and Settings\Jason Faulkner\Desktop
C:\Documents and Settings\Jason Faulkner\My Documents\Important Files
C:\Scripts\BackupScript.bat

Aquest fitxer estarà en el mateix directori que el script

script original backup_DELL_WXP.bat

Es fa una còpia local al directori C:\Backups

El script l'anomenarem script_DELL_WXP.bat

@ECHO OFF

REM BackupScript
REM Version 1.01, Updated: 2008-05-21
REM By Jason Faulkner (articles[-at-]132solutions.com)

REM Performs full or incremental backups of folders and files configured by the user.

REM Usage---
REM   > BackupScript

SETLOCAL ENABLEEXTENSIONS ENABLEDELAYEDEXPANSION

REM ---Configuration Options---

REM Folder location where you want to store the resulting backup archive.
REM This folder must exist. Do not put a '\' on the end, this will be added automatically.
REM You can enter a local path, an external drive letter (ex. F:) or a network location (ex. \\server\backups)
SET BackupStorage=C:\Backup

REM Which day of the week do you want to perform a full backup on?
REM Enter one of the following: Sun, Mon, Tue, Wed, Thu, Fri, Sat, *
REM Any day of the week other than the one specified below will run an incremental backup.
REM If you enter '*', a full backup will be run every time.
SET FullBackupDay=*

REM Location where 7-Zip is installed on your computer.
REM The default is in a folder, '7-Zip' in your Program Files directory.
SET InstallLocationOf7Zip=%ProgramFiles%\7-Zip

REM +-----------------------------------------------------------------------+
REM | Do not change anything below here unless you know what you are doing. |
REM +-----------------------------------------------------------------------+

REM Usage variables.
SET exe7Zip=%InstallLocationOf7Zip%\7z.exe
SET dirTempBackup=%TEMP%\backup
SET filBackupConfig=BackupConfig.txt

REM Validation.
IF NOT EXIST %filBackupConfig% (
  ECHO No configuration file found, missing: %filBackupConfig%
  GOTO End
)
IF NOT EXIST "%exe7Zip%" (
  ECHO 7-Zip is not installed in the location: %dir7Zip%
  ECHO Please update the directory where 7-Zip is installed.
  GOTO End
)

REM Backup variables.
FOR /f "tokens=1,2,3,4 delims=/ " %%a IN ('date /t') DO (
  SET DayOfWeek=%%a
  SET NowDate=%%d-%%b-%%c
  SET FileDate=%%b-%%c-%%d
)

IF {%FullBackupDay%}=={*} SET FullBackupDay=%DayOfWeek%
IF /i {%FullBackupDay%}=={%DayOfWeek%} (
  SET txtBackup=Full
  SET swXCopy=/e
) ELSE (
  SET txtBackup=Incremental
  SET swXCopy=/s /d:%FileDate%
)

ECHO Starting to copy files.
IF NOT EXIST "%dirTempBackup%" MKDIR "%dirTempBackup%"
FOR /f "skip=1 tokens=*" %%A IN (%filBackupConfig%) DO (
  SET Current=%%~A
  IF NOT EXIST "!Current!" (
    ECHO ERROR! Not found: !Current!
  ) ELSE (
    ECHO Copying: !Current!
    SET Destination=%dirTempBackup%\!Current:~0,1!%%~pnxA
    REM Determine if the entry is a file or directory.
    IF "%%~xA"=="" (
      REM Directory.
      XCOPY "!Current!" "!Destination!" /v /c /i /g /h /q /r /y %swXCopy%
    ) ELSE (
      REM File.
      COPY /v /y "!Current!" "!Destination!"
    )
  )
)
ECHO Done copying files.
ECHO.

SET BackupFileDestination=%BackupStorage%\Backup_%FileDate%_%txtBackup%.zip

REM If the backup file exists, remove it in favor of the new file.
IF EXIST "%BackupFileDestination%" DEL /f /q "%BackupFileDestination%"

ECHO Compressing backed up files. (New window)
REM Compress files using 7-Zip in a lower priority process.
START "Compressing Backup. DO NOT CLOSE" /belownormal /wait "%exe7Zip%" a -tzip -r -mx5 "%BackupFileDestination%" "%dirTempBackup%\"
ECHO Done compressing backed up files.
ECHO.

ECHO Cleaning up.
IF EXIST "%dirTempBackup%" RMDIR /s /q "%dirTempBackup%"
ECHO.

:End
ECHO Finished.
ECHO.

ENDLOCAL

Aquest fitxer és l'original, sense cap modificació. Fa una còpia completa dels directoris. La millor solució per mi és editar el fitxer BackupConfig.txt de manera que només es fa còpia dels directoris actius (aquells amb projectes oberts).

En el lloc pertinent es comenta com ha quedat finalment el fitxer backup_DELL_WXP.bat

script modificat backup_DELL_WXP.bat

El fitxer s'ha modificat per tal d'aconseguir els següents requisits:

El problema que hi ha en el script original és que matxaca el fitxer de destí, i si he canviat el config, aleshores de fet la informació es perd en el backup destí. Podria pensar que tinc una còpia i en realitat no tenir-la.

En el fitxer original, en la carpeta C:\Documents and Settings\Administrador\Configuración local\Temp\backup es copien tots els directoris, i quan s'ha fet tota la còpia es comprimeix a un sol fitxer. En el meu cas vull un comprimit per a cada carpeta.

El script final està a Backup_DELL_WXP.bat

la única cosa que no em funciona és que en el fitxer de configuració, les línies que comencen per # a partir de la segona línia també es pensa que és un directori, i dóna error perquè el directori no existeix. Hauria de trobar la manera comparar el primer caràcter de la fila amb #, però el tema de les expressions regulars és difícil.

RSYNC i SSH: còpies remotes entre màquines LINUX

Anem ja concretant com farem el backup.

Per defecte amb el Ubuntu ve instal.lat el ssh client. Si vull un servidor SSH:

sudo apt-get install ssh

i perquè vull un servidor SSH a cada màquina? Doncs perquè vull centralitzar els scripts en el servidor, i des del servidor connectar-me a les diferents màquines (Linux). Pensem que en el servidor és on tindré les tasques cron que em dirà quan s'executen els scripyd. És millor tenir-ho tot centralitzat en el servidor.

rsync -ave ssh --numeric-ids --delete joan@192.168.1.131:/home/joan/hola.txt /home/joan/disc_xarxa/DELL_Studio
rsync -ave ssh --numeric-ids --delete joan@192.168.1.131:/home/joan/how_to_ubuntu /home/joan/disc_xarxa/DELL_Studio

on disc_xarxa/DELL_Studio és un punt de muntatge al disc de xarxa IOMEGA. Aquestes dues comandes funcionen per copiar un fitxer individual o per copiar un directori sencer de forma recursiva, però em demana el password.

Per tal que no em demani el password he de fer un -password-file o bé utilitzar la tècnica clau pública/clau privada. Ara és el portàtil (DELL_Studio) el que ha de confiar en el Servidor. Per tant, la clau es genera en el servidor (que fa de client SSH) i s'ha de depositar en el portàtil (servidor SSH). Aquest mètode està explicat en SSH i el tornem a repetir. L'avantatge de fer-ho d'aquesta manera és que genero una sola clau, i aquesta l'he de ficar en els diferents servidors SSH que pugui tenir: DELL_Studio, LINKAT de l'institut.

joan@ubuntu$ ssh-keygen -t dsa
Your identification has been saved in /home/joan/.ssh/id_dsa.
Your public key has been saved in /home/joan/.ssh/id_dsa.pub.
The key fingerprint is:
13:02:00:96:c1:e4:07:80:70:ab:11:7c:ff:1e:7d:ad

Es genera un fitxer per guardar la clau a /home/joan/.ssh/id_dsa.

Quan demana passphrase deixar-ho en blanc (Enter)

copiar ~/.ssh/id_dsa.pub al portàtil (i al llapis, perquè el necessitaré copiar-lo al LINKAT):

joan@ubuntu$ scp ~/.ssh/id_dsa.pub joan@192.168.1.131:/tmp

ara en el DELL_Studio (192.168.1.131) (a on volem accedir sense password):

joan@portatil$ cat /tmp/id_dsa.pub >> ~/.ssh/authorized_keys
joan@portatil$ chmod 0600 $HOME/.ssh/authorized_keys
joan@portatil$ rm -f /tmp/id_dsa.pub

Fem la prova en el client:

i em puc connectar al DELL_Studio (portàtil) per fer una sessio ssh o per fer un rsync sense que em demani el password:

joan@ubuntu$ rsync -ave ssh --numeric-ids --delete joan@192.168.1.131:/home/joan/how_to_ubuntu /home/joan/disc_xarxa/DELL_Studio
joan@ubuntu$ ssh joan@192.168.1.131

Per fer un log del resultat puc fer: 59 20 * * * /home/joan/scripts_backup/backup_DELL_Studio.sh >/home/joan/scripts_backup /logs/sync-machine1.log 2>&1

Ara bé, com que vull fer un mail amb un informe dels resultats, m'interessa que en l'execució del script es generi el log i aleshores enviar-lo per mail.

Senzillament, rsync té l'opció --log-file=FILE

rsync -ave ssh --numeric-ids --delete joan@192.168.1.131:/home/joan/how_to_ubuntu /home/joan/disc_xarxa/DELL_Studio --log-file=/home/joan/scripts_backup/log/DELL_Studio_251108.log

http://tldp.org/HOWTO/SMB-HOWTO-11.html

export MAILTO="cursice"

usuari=cursice

home=/home/cursice

nomhost=festuc

dirBackup=elsMeusBackups

aGuardar=/home/cursice/

arxiuBackup=$dirBackup/cursice$(date +%Y%m%d).tgz

guarda=3

rsh -l$usuari $nomhost ls ">" $ArxiuBackup tar -zcf $usuari@$nomhost:$backupfile $aGuardar echo Backup $arxiuBackup finalitzat quants=$(rsh $nomhost -l$usuari ls -t $dirBackup/"cursice*.tgz"| wc -l )

num=$(($quants-$guarda))

echo $quants $num

if [ $num -gt 0 ] then l=$(rsh $nomhost -l$usuari ls -t $dirBackup/"cursice*.tgz" | tail -n $num ); echo esborrant $l ; rsh $nomhost -l$usuari "\rm" -f $l fi


creat per Joan Quintana Compte, novembre 2008

Eines de l'usuari
Espais de noms
Variants
Accions
Navegació
IES Jaume Balmes
Màquines recreatives
CNC
Informàtica musical
joanillo.org Planet
Eines