Hits :
4582
Mini Ext3cow HOWTO
Ext3cow
http://www.ext3cow.com
file:ext3cow.png
Το παρακάτω mini how to θα αποτελέσει την δεύτερη προσπάθειά μου να κρατάω filesystem snapshots
ώστε να ΜΗΝ ξαναχάσω κανένα αρχείο χρησιμοποιώντας την φανταστική εντολή
\rm -rf
Λίγη υπομονή λοιπόν μέχρι να βρω τον τρόπο !!!
top
Περιγραφή
Τι είναι το ext3cow;
Το ext3cow είναι ένα μεμονομένο σύστημα αρχείων, (όπως για παράδειγμα: ReiserFS, HFS, NTFS)
βασισμένο στο ext3, το οποίο υποστηρίζει versioning μέσα από το copy-on-write και ένα time-shifting interface.
Η υλοποίησή του έχει γίνει ως module στον πυρήνα και σου επιτρέπει να κρατάς snapshot ενός συστήματος αρχείων
που σου επιτρέπει την επαναφορά ενός αρχείου ακόμα και εάν το έχεις διαγράψει στο παρελθόν. Κάνοντας χρήση
της χρονικής στιγμής που το αρχείο τροποποιήθηκε (γράφτηκε – διαγράφτηκε) μπορεί κανείς να κρατάει versioning
του αρχείου αυτού.
Το cow σημαίνει copy-on-write και περισσότερα μπορεί να βρει κάποιος στο ακόλουθο url
http://en.wikipedia.org/wiki/Ext3cow
Τα snapshots μπορούν μέσα από ένα cron να βοηθήσουν
top
Χρήσιμοι Σύνδεσμοι
http://www.ext3cow.com
http://en.wikipedia.org/wiki/Ext3cow
http://en.wikipedia.org/wiki/Copy-on-write
http://www.ext3cow.com/Downloa[..]6.20.3-ext3cow.patch[link1]
http://www.ext3cow.com/Downloa[..]/e3cfsprogs-1.39.tgz[link2]
http://www.ext3cow.com/Download_files/ext3cow-tools.tgz
http://dev1.netkinetics.net/filetime/
top
Εγκατάσταση
$ su -
# cd /usr/src/
# wget -c http://www.ext3cow.com/Download_files/linux-2.6.20.3-ext3cow.patch
# cd linux
# patch -p1 < ../linux-2.6.20.3-ext3cow.patch
# make menuconfig
file:ext3cow_kernel.jpeg
# make
# make modules_install
# make install
# cd /boot
# mkinitramfs 2.6.21.1 -o initrd.img-2.6.21.1
Πρέπει να ρυθμίσουμε το grub (εάν δεν είναι δλδ) να ξεκινάει από τον νέο μας πυρήνα:
# vim /boot/grub/menu.lst
# reboot
top
Χρήση
Αφού κάνουμε reboot (ώστε ο νέος μας πυρήνας να φορτώνει με το νέο module ext3cow)
εάν δεν το έχει φορτώσει (
lsmod | grep ext3cow) να το φορτώσουμε εμείς. Έστω λοιπόν
ότι έχουμε ένα partition που θέλουμε να το διαμορφώσουμε με τύπο ext3cow:
# lsmod | grep ext3cow
# modprobe ext3cow
# cp /sbin/mkfs.ext3 /sbin/mkfs.ext3cow
και τώρα μπορούμε να διαμορφώσουμε την κατάτμηση του δίσκου που θέλουμε:
00:10:24:~# mkfs.ext3cow /dev/sda1
mke2fs 1.39 (29-May-2006)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
3145728 inodes, 6287431 blocks
314371 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=4169138176
192 block groups
32768 blocks per group, 32768 fragments per group
16384 inodes per group
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
4096000
Writing inode tables: done
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information:
Writing super block with epoch number: 1178572230
done
This filesystem will be automatically checked every 33 mounts or
180 days, whichever comes first. Use tune2fs -c or -i to override.
top
ext3cow-tools
Έχουμε έτοιμο το partition αλλά ΔΕΝ έχουμε ακόμα το εκτελέσιμο πρόγραμμα
με το οποίο θα παίρνουμε snapshots του filesystem. Το πακέτο είναι το ext3cow-tools
# wget http://www.ext3cow.com/Download_files/ext3cow-tools.tgz
# tar zxvf ext3cow-tools.tgz
# cd ext3cow-tools
# make
# cp e2d ss tt /usr/local/sbin/
Τα παραπάνω προγράμματα σημαίνουν:
- e2d : epoch-to-date: Επιστρέφει την ημερομηνία από έναν epoch αριθμό, π.χ.: e2d 1178657790
- ss : snapshot: Παίρνει ένα snapshot του συστήματος και επιτρέφει τον epoch αριθμό, π.χ.: ss επιτρέφει: Snapshot on .: 1178704899
- tt : current-time: Επιστρέφει τον τρέχων epoch αριθμό του συστήματος αρχείων μας, π.χ. ττ επιτρέφει: Epoch: 1178704899
top
Παράδειγμα
Στις επόμενες γραμμές είναι ένα πλήρες παράδειγμα λειτουργίας του ext3cow, γράφωντας,
σβήνοντας, επαναφέροντας και ξαναδιαγράφωντας αρχεία.
Για τις ανάγκες του παραδείγματος άλλαξα το PS1 μου ώστε να δείχνει ώρα για σύγκριση των epoch αριθμών του συστήματος αρχείων.
23:56:01:~# mount -t ext3cow /dev/sda1 /ext3cow/
23:56:11:~# cd /ext3cow/
23:56:15:ext3cow# ls -a
. .. lost+found
23:56:16:ext3cow# echo 'test 1' > test1
23:56:27:ext3cow# ss
Snapshot on .: 1178657790
23:56:30:ext3cow# ls -la
total 28
drwxr-xr-x 3 root root 4096 2007-05-08 23:56 .
drwxr-xr-x 23 root root 4096 2007-05-08 00:15 ..
drwx------ 2 root root 16384 2007-05-08 23:14 lost+found
-rw-r--r-- 1 root root 7 2007-05-08 23:56 test1
23:56:36:ext3cow# rm -f test1
23:56:40:ext3cow# ls
lost+found
23:56:56:ext3cow# tt
Epoch: 1178657790
23:56:58:ext3cow# e2d 1178657790
Tue May 8 23:56:30 2007
23:57:04:ext3cow# echo 'test 2' > test2
23:57:18:ext3cow# cat test1@1178657790 > test1
23:57:32:ext3cow# ls -la
total 32
drwxr-xr-x 3 root root 4096 2007-05-08 23:57 .
drwxr-xr-x 23 root root 4096 2007-05-08 00:15 ..
drwx------ 2 root root 16384 2007-05-08 23:14 lost+found
-rw-r--r-- 1 root root 7 2007-05-08 23:57 test1
-rw-r--r-- 1 root root 7 2007-05-08 23:57 test2
23:57:34:ext3cow# ss
Snapshot on .: 1178657857
23:57:37:ext3cow# rm -f test2
23:57:41:ext3cow# rm -f test1
23:57:42:ext3cow# tt
Epoch: 1178657857
23:57:50:ext3cow# e2d 1178657857
Tue May 8 23:57:37 2007
23:57:55:ext3cow# e2d 1178657790
Tue May 8 23:56:30 2007
23:58:05:ext3cow# ls
lost+found
23:58:08:ext3cow# cat test1@1178657790 test2@1178657857 > test3
23:58:23:ext3cow# ls -la
total 28
drwxr-xr-x 3 root root 4096 2007-05-08 23:58 .
drwxr-xr-x 23 root root 4096 2007-05-08 00:15 ..
drwx------ 2 root root 16384 2007-05-08 23:14 lost+found
-rw-r--r-- 1 root root 14 2007-05-08 23:58 test3
23:58:28:ext3cow# cat test3
test 1
test 2
23:58:30:ext3cow# tt
Epoch: 1178657857
23:58:34:ext3cow# e2d 1178657857
Tue May 8 23:57:37 2007
top
filetime
http://dev1.netkinetics.net/filetime/
Με το παραπάνω πρόγραμμα μπορούμε να δούμε ποια ήταν η χρονική στιγμή
που τροποποιήθηκε το αρχείο.
Εγκατάσταση:
gcc -o /usr/local/sbin/filetime filetime.c && strip /usr/local/sbin/filetime
Χρήση:
12:37:14:~# cd /ext3cow/
12:37:16:ext3cow# ls
lost+found test3
12:37:17:ext3cow# tt
Epoch: 1178657857
12:37:18:ext3cow# filetime test3
1178657903
12:37:44:ext3cow# e2d `tt`
Thu Jan 1 02:00:00 1970
12:37:53:ext3cow# e2d `filetime test3 `
Tue May 8 23:58:23 2007
top
ext3cow.hg
ο Tim Post έγραψε έναν δαίμονα ο οποίος χαρακτηρίζεται από τις παρακάτω ενέργειες:
- Τρέχει στο background εκτελώντας ένα snapshot ανά ν δευτερόλεπτα
- Μπορούμε να δηλώσουμε την κατάτμηση δίσκου που έχουμε διαμορφώσει σύμφωνα με το ext3cow
- Στέλνει διάφορα μηνύματα σε syslog
Για να το πετύχει αυτό 'τροποποίησε' ελάχιστα τον αρχικό κώδικα του Zach Peterson και πρόσθεσε το παραπάνω
εργαλείο (filetime) με νέο όνομα ft. Η εντολή αυτή μας δίνει την δυνατότητα να δούμε πότε έγινε η τελευταία
τροποποίηση ενός αρχείου μέσα στα διάφορα snapshots.
Παρακάτω είναι η εγκατάσταση των εργαλείων ext3cow.hg
# wget -c http://dev1.netkinetics.net/tgz/ext3cow-tools-hgsnap.tgz
# tar zxfv ext3cow-tools-hgsnap.tgz
# cd ext3cow-tools.hg
# make
εγώ εδώ κάνω μία τροποποίηση στο Makefile προσθέτωντας την παρακάτω γραμμή:
GCC = gcc -I/usr/src/linux/include/
# cp -i ft ss ssd tt /usr/local/sbin/
Ακολουθεί ένα παράδειγμα εκτέλεσης του δαίμονα ssd:
# ssd -l -f /ext3cow/
# ps -ef | grep ssd
root 21294 1 0 22:08 ? 00:00:00 ssd -l -f /ext3cow/
Παραμέτρους:
- -l : Απενεργοποιεί την δυνατότητα να γράφει διάφορα μηνύματα σε syslog
- -f : Δηλώνουμε ποιο είναι το κομμάτι δίσκου το οποίο έχουμε διαμορφώσει με ext3cow
- -i : Ορίζουμε σε πόσα δευτερόλεπτα θα εκτελείται κάθε snapshot. Η αρχική του τιμή είναι 3600 δλδ μία ώρα.
Με το νέο εργαλείο
ft μπορούμε να δούμε χρονικά πότε έγιναν οι τελευταίες αλλαγές σε ένα αρχείο ή σε ολόκληρο
το filesystem. π.χ.:
# ft -t test3
Mon May 21 21:47:09 2007
top
[link2] http://www.ext3cow.com/Download_files/e3cfsprogs-1.39.tgz