Mini Ext3cow HOWTO
Contents
Ext3cow
file:ext3cow.png
Το παρακάτω mini how to θα αποτελέσει την δεύτερη προσπάθειά μου να κρατάω filesystem snapshots
ώστε να ΜΗΝ ξαναχάσω κανένα αρχείο χρησιμοποιώντας την φανταστική εντολή \rm -rf
Λίγη υπομονή λοιπόν μέχρι να βρω τον τρόπο !!!
Περιγραφή
Τι είναι το 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 να βοηθήσουν
Χρήσιμοι Σύνδεσμοι
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
http://www.ext3cow.com/Downloa[..]/e3cfsprogs-1.39.tgz
http://www.ext3cow.com/Download_files/ext3cow-tools.tgz
http://dev1.netkinetics.net/filetime/
Εγκατάσταση
$ 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
Χρήση
Αφού κάνουμε 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.
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
Παράδειγμα
Στις επόμενες γραμμές είναι ένα πλήρες παράδειγμα λειτουργίας του 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
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
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