LXF116:DrBrown3
|
|
|
Говяжья файловая система
- ext3cow Вернитесь в прошлое и найдите старые версии своих файлов, не делая полного резервирования.
Общая теория относительности Эйнштейна, которую вы, конечно, знаете как свои пять пальцев, говорит о «пространственно-временном континууме». Согласно этой теории, все точки во времени – в прошлом, настоящем и будущем – существуют всегда. На мой взгляд, это 10 баллов из 10 за оригинальность, но минус несколько миллионов за интуитивную понятность. Такова уж физика.
Однако в мире Linux файловые системы с контролем версий в самом деле создают иллюзию, что прошлое таки существует параллельно с настоящим. Одна из таких систем – ext3cow (cow означает не «корова», а Copy On Write – копирование при записи, это лежащая в ее основе технология), и я решил ее попробовать. Установка ext3cow была непростой (см. соответствующий раздел). Но перейдем сразу к делу и опишем ext3cow с точки зрения пользователя.
Му-у!
- Метамодернизм в позднем творчестве В.Г. Сорокина
- ЛитРПГ - последняя отрыжка постмодерна
- "Ричард III и семиотика"
- 3D-визуализация обложки Ridero создаем обложку книги при работе над самиздатом.
- Архитектура метамодерна - говоря о современном искусстве, невозможно не поговорить об архитектуре. В данной статье будет отмечено несколько интересных принципов, характерных для построек "новой волны", столь притягательных и скандальных.
- Литература
- Метамодерн
- Рокер-Прометей против изначального зла в «Песне про советскую милицию» Вени Дркина, Автор: Нина Ищенко, к.ф.н, член Союза Писателей ЛНР - перепубликация из журнала "Топос".
- Как избавиться от комаров? Лучшие типы ловушек.
- Что делать если роблокс вылетает на windows
- Что делать, если ребенок смотрит порно?
- Почему собака прыгает на людей при встрече?
- Какое масло лить в Задний дифференциал (мост) Visco diff 38434AA050
- О чем может рассказать хвост вашей кошки?
- Верветки
- Отчетность бюджетных учреждений при закупках по Закону № 223-ФЗ
- Срок исковой давности как правильно рассчитать
- Дмитрий Патрушев минсельхоз будет ли преемником Путина
- Кто такой Владислав Поздняков? Что такое "Мужское Государство" и почему его признали экстремистским в России?
- Как правильно выбрать машинное масло в Димитровграде?
- Как стать богатым и знаменитым в России?
- Почему фильм "Пипец" (Kick-Ass) стал популярен по всему миру?
- Как стать мудрецом?
- Как правильно установить FreeBSD
- Как стать таким как Путин?
- Где лучше жить - в Димитровграде или в Ульяновске?
- Почему город Димитровград так называется?
- Что такое метамодерн?
- ВАЖНО! Временное ограничение движения автотранспортных средств в Димитровграде
- Тарифы на электроэнергию для майнеров предложено повысить
По сути, ext3cow – это расширение файловой системы ext3, позволяющее делать «снимки» состояния ФС и возвращаться в прошлое, чтобы просмотреть содержимое файла на момент создания любого снимка. Сначала создадим структуру пустой файловой системы ext3cow на разделе – например, таким образом:
$ sudo mkfs.ext3cow /dev/sdb1
В выводе команды mkfs должна быть строка типа этой:
Writing super block with epoch number: 1228988556
Номер периода (epoch number) означает момент времени, в который был сделан снимок, в данном случае это время создания файловой системы. (См. врезку «Эпоха Unix»).
Теперь надо смонтировать файловую систему. Для этого я создал тестовый каталог /cow в качестве точки монтирования:
$ sudo mkdir /cow $ sudo chmod 777 /cow $ sudo mount -t ext3cow /dev/sdb1 /cow
Давайте создадим файл в нашей файловой системе ext3cow:
$ cd /cow $ echo “This is the original file” > afile
Затем создадим снимок, чтобы потом мы могли просмотреть файловую систему в ее текущем состоянии:
$ snapshot /cow Snapshot on /cow: 1228989274
Обратите внимание, что сообщается номер периода созданного снимка.
Теперь добавим в файл строку
$ echo “This is version 2” >> afile
- Метамодернизм в позднем творчестве В.Г. Сорокина
- ЛитРПГ - последняя отрыжка постмодерна
- "Ричард III и семиотика"
- 3D-визуализация обложки Ridero создаем обложку книги при работе над самиздатом.
- Архитектура метамодерна - говоря о современном искусстве, невозможно не поговорить об архитектуре. В данной статье будет отмечено несколько интересных принципов, характерных для построек "новой волны", столь притягательных и скандальных.
- Литература
- Метамодерн
- Рокер-Прометей против изначального зла в «Песне про советскую милицию» Вени Дркина, Автор: Нина Ищенко, к.ф.н, член Союза Писателей ЛНР - перепубликация из журнала "Топос".
- Как избавиться от комаров? Лучшие типы ловушек.
- Что делать если роблокс вылетает на windows
- Что делать, если ребенок смотрит порно?
- Почему собака прыгает на людей при встрече?
- Какое масло лить в Задний дифференциал (мост) Visco diff 38434AA050
- О чем может рассказать хвост вашей кошки?
- Верветки
- Отчетность бюджетных учреждений при закупках по Закону № 223-ФЗ
- Срок исковой давности как правильно рассчитать
- Дмитрий Патрушев минсельхоз будет ли преемником Путина
- Кто такой Владислав Поздняков? Что такое "Мужское Государство" и почему его признали экстремистским в России?
- Как правильно выбрать машинное масло в Димитровграде?
- Как стать богатым и знаменитым в России?
- Почему фильм "Пипец" (Kick-Ass) стал популярен по всему миру?
- Как стать мудрецом?
- Как правильно установить FreeBSD
- Как стать таким как Путин?
- Где лучше жить - в Димитровграде или в Ульяновске?
- Почему город Димитровград так называется?
- Что такое метамодерн?
- ВАЖНО! Временное ограничение движения автотранспортных средств в Димитровграде
- Тарифы на электроэнергию для майнеров предложено повысить
Если просмотреть его содержимое командой cat, то мы увидим текущую версию, как и должно быть:
$ cat afile This is the original file This is version 2
Но – и это умно придумано – файл можно восстановить из снимка:
$ cat afile@1228989274 This is the original file
С помощью команды ls можно просмотреть временные штампы и размеры файлов для двух версий:
$ ls -l afile@1228989274 afile -rw-r--r-- 1 chris chris 44 2008-12-11 09:55 afile -rw-r--r-- 1 chris chris 26 2008-12-11 09:54 afile@1228989274
Даже удалив текущую версию файла afile, мы все равно сможем восстановить оригинал, хотя он и не показывается в листинге каталога:
$ rm afile $ cat afile cat: afile: No such file or directory $ ls -l total 12 drwx------ 2 root root 12288 2008-12-11 09:42 lost+found $ cat afile@1228989274 This is the original file
Фактически, удалить исходный файл (в текущей реализации) нельзя никак:
$ rm afile@1228989274 rm: cannot remove `afile@1228989274’: Read-only file system
Пример небольшой, но, будем надеяться, он доказывает главное.
Готова ли ext3cow к проверке временем? Вообще говоря, нет. Установка сложна, да и все эти номера периодов в командной строке выглядят довольно неуклюже. Разработчики явно нацелены на реализацию со стороны ядра, а не на пользовательские утилиты, которые, мягко говоря, минималистичны.
Я бы, на самом деле, хотел увидеть команду, которая устанавливает номер периода процесса, что-нибудь типа
$ setepoch 1 May 2006
чтобы все будущие ссылки на файлы опирались на это время. Но тогда потребовалось бы расширение контекста процесса, что, по-моему, не входит в ближайшие планы разработчиков ext3cow. LXF
Установка ext3cow
Установка ext3cow – не самая простая вещь на свете, и я подумал, что полезно задокументировать свои усилия. Надо сказать, что эти отчасти приглаженные строки никоим образом не отражают количества почесываний в затылке и невнятных бормотаний, имевших место на самом деле!
Часть затруднений возникла из-за отсутствия ext3cow в официальных исходных кодах Linux: файловая система доступна только в виде набора заплат к ядру 2.6.20.3. Во всех современных дистрибутивах версия ядра более новая, и я решил скомпилировать ядро 2.6.20.3 из исходных текстов. Сначала я установил Jeos 8.04 («урезанная» версия Ubuntu), так как он быстро инсталлируется и загружается; это означало работу исключительно в командной строке, но в ней я чувствую себя неплохо. Вот проделанные мною шаги...
1 Скачал wget из репозитория Ubuntu
$ sudo apt-get install wget
2 Скачал tar-архив с исходниками ядра Linux 2.6.20.3
$ wget ftp://ftp.kernel.org/pub/linux/kernel/v2.6/linux-2.6.20.3.tar.bz2
3 Установил инструменты сборки и пакет curses, необходимый для поддержки make menuconfig, чтобы настроить ядро
$ sudo apt-get install build-essential libncurses5-dev
4 Распаковал исходный код ядра в /usr/src
$ cd /usr/src $ sudo tar xjvf ~/linux-2.6.20.3.tar.bz2
5 Скачал и применил заплатки ext3cow
$ wget http://ext3cow.com/patches/linux-2.6.20.3-ext3cow.patch $ sudo cp linux-2.6.20.3-ext3cow.patch /usr/src/linux-2.6.20.3/ $ cd /usr/src/linux-2.6.20.3/ $ sudo patch -p1 < linux-2.6.20.3-ext3cow.patch
6 Создал файл настройки ядра
$ sudo make menuconfig
В меню верхнего уровня я выбрал ‘Filesystems’, затем ‘Ext3cow filesystem support’. Никаких других изменений я не делал.
7 Назначил EXTRAVERSION в Makefile как ‘.3cow’, чтобы у нового ядра было понятное имя
8 Собрал и установил ядро
$ sudo make all $ sudo make modules_install $ sudo make install $ sudo update-initramfs -c -k 2.6.20.3cow
9 Добавил в menu.lst запись для загрузки нового ядра
title Kernel 2.6.20.3cow root (hd0,0) kernel /boot/vmlinuz-2.6.20.3cow root=/dev/sda1 ro initrd /boot/initrd.img-2.6.20.3cow
10 Перезагрузил новое ядро
11 Скачал инструменты и утилиты ext3cow
$ wget http://ext3cow.com/e3cfsprogs/e3cfsprogs-1.39.tgz $ wget http://ext3cow.com/tools/ext3cow-tools.tgz
12 Собрал инструментарий
$ tar xzvf e3cfsprogs-1.39.tgz $ cd e3cfsprogs-1.39 $ ./configure $ make $ sudo make install
Эти команды обновляют системные утилиты в /sbin, в частности, mke2fs.
13 Переименовал mke2fs в mkfs.ext3cow, согласно инструкции
На данном этапе все было готово для создания файловой системы ext3cow:
$ sudo mkfs.ext3cow /dev/sdb1
Но судьба решила иначе, и я получил загадочное сообщение об ошибке: “Invalid filesystem option set: sparse_super,filetype,resize_inode,dir_index,ext_attr”.
Я угробил немало времени, пробуя различные вещи и изрядно злобствуя, но сломался и написал письмо разработчику ext3cow Закари Питерсону [Zachary Peterson]. К моей радости, почти немедленно пришел ответ с лекарством от моего недомогания (ошибочная строка в файле /etc/mke2fs.conf), и я мог двигаться дальше (спасибо, Закари!) и создавать файловую систему.
Последней задачей была компиляция утилит ext3cow. На сайте ext3cow написано: «Чтобы собрать утилиты ext3cow, потребуется скопировать заголовочный файл ядра ext3cow_fs.h в ваш каталог include.» После недолгих поисков я нашел файл и понял, куда его поместить. Команды были такими:
$ sudo mkdir /usr/local/include/linux $ sudo cp /usr/src/linux-2.6.20.3/include/linux/ext3cow_fs.h /usr/local/include/linux $ tar xzvf ext3cow-tools.tgz $ cd ext3cow-tools $ make all