[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: [OT] [RISOLTO] cp -ax con filtro sulla dimensione dei file.



Ho trovato la soluzione, magari a qualcuno interessa.

Obiettivo: backuppare il sistema su una partizione separata /backup
escludendo i file più grossi di X megabytes.

In backup ho creato un file approssimativamente della dimensione di un DVD:

$ dd if=/dev/zero of=/backup/data bs=500M count=9

Creo un filesystem ext2 NEL file data:

$ mkfs.ext2 -F /backup/data

Creo una directory dove montare data:

$ mkdir /backup/data

Eseguo questo script:
-----------------------------------
#!/bin/bash

echo -n "Cleaning..."
apt-get clean >/dev/null 2>&1
apt-get autoclean >/dev/null 2>&1
echo "ok"

echo -n "Backup of backup..."
cp -al data data.old
echo "ok"

echo -n "Mounting..."
mount -t ext2 -o loop /backup/data /backup/mnt
echo "ok"

echo -n "Generating exclude list..."
/backup/gex.pl /home /backup/exlist.txt
echo "ok"

echo -n "Mounting data file..."
mount -t ext2 -o loop /backup/data /backup/mnt
echo "ok"

echo -n "Backupping..."
rsync -a --delete --exclude-from=/backup/exlist.txt /home /bin /boot
/etc /initrd /lib /media /opt /root /sbin /usr /var /backup/deb
s /backup/mnt
echo "ok"

echo -n "Sync..."
sync
echo "ok"

echo -n "Umount..."
umount /backup/data
echo "ok"
-------------------------------------

Lo script perl gex.pl serve a generare un file che contiene la lista
dei file da escludere, da passare a rsync:

-------------------------------------
#!/usr/bin/perl

$M = 1024*1024;
$MAXSIZE = 5*$M;

use File::Find;

$path = $ARGV[0];
$efile = $ARGV[1];

open(EXX,">".$efile) or die $!;
find(\&process,$path);
close(EXX);

sub process {
        my $fn = $File::Find::name;

        if(! -d $fn) {

                my $sz = (stat($fn))[7];

                if($sz > $MAXSIZE) {

                        $fn =~ s/\[/\\\[/g;
                        $fn =~ s/\]/\\\]/g;

                        print EXX $fn."\n";
                }
        }
}
-------------------

Le due espressioni regolari servono per "escapare" i caratteri [ e ]
che nell'exclude danno fastidio (a proposito quali sono gli altri
caratteri cattivi?)

Alla fine del processo ho il file data che contiene "l'immagine" del
mio sistema pronta per essere masterizzata su un dvd.

In data.old ho il vecchio backup, in caso mi servissero file che ho
cancellato tra un backup e l'altro.

Ora non mi rimane che scoprire come masterizzare il file data su un
dvd a riga di comando (fin'ora ho utilizzato solo k3b).

Ho letto da qualche parte che è possibile masterizzare direttamente in
ext2, senza prima creare un file iso, ma ancora non ho idea di come si
fa...

Una volta fatto quest'ultimo passo lascerò un dvd riscrivibile nel
masterizzatore, metterò tutto in cron e dormirò tranquillo...


PS: tornando alla questione del fare tutto "al volo" utilizzando i
classici strumenti GNU, sarebbe stato ottimo avere l'opzione di test
sulla size che ha find implementata in rsync... :-)

--
PicoStreamer - the real WEB live streaming software
vinz486.com



Reply to: