<?xml version="1.0"?>
<?xml-stylesheet type="text/css" href="http://wiki.linuxformat.ru/wiki/skins/common/feed.css?303"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
		<id>http://wiki.linuxformat.ru/wiki/index.php?action=history&amp;feed=atom&amp;title=LXF116%3ADrBrown3</id>
		<title>LXF116:DrBrown3 - История изменений</title>
		<link rel="self" type="application/atom+xml" href="http://wiki.linuxformat.ru/wiki/index.php?action=history&amp;feed=atom&amp;title=LXF116%3ADrBrown3"/>
		<link rel="alternate" type="text/html" href="http://wiki.linuxformat.ru/wiki/index.php?title=LXF116:DrBrown3&amp;action=history"/>
		<updated>2026-05-13T03:53:16Z</updated>
		<subtitle>История изменений этой страницы в вики</subtitle>
		<generator>MediaWiki 1.19.20+dfsg-0+deb7u3</generator>

	<entry>
		<id>http://wiki.linuxformat.ru/wiki/index.php?title=LXF116:DrBrown3&amp;diff=10156&amp;oldid=prev</id>
		<title>Crazy Rebel: викификация, оформление</title>
		<link rel="alternate" type="text/html" href="http://wiki.linuxformat.ru/wiki/index.php?title=LXF116:DrBrown3&amp;diff=10156&amp;oldid=prev"/>
				<updated>2010-05-07T09:10:39Z</updated>
		
		<summary type="html">&lt;p&gt;викификация, оформление&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая страница&lt;/b&gt;&lt;/p&gt;&lt;div&gt;==Говяжья файловая система==&lt;br /&gt;
&lt;br /&gt;
: '''''ext3cow''''' Вернитесь в прошлое и найдите старые версии своих файлов, не делая полного резервирования.&lt;br /&gt;
&lt;br /&gt;
Общая теория относительности Эйнштейна, которую вы, конечно, знаете как свои пять пальцев, говорит о «пространственно-временном континууме». Согласно&lt;br /&gt;
этой теории, все точки во времени – в прошлом, настоящем и&lt;br /&gt;
будущем – существуют всегда. На мой взгляд, это 10 баллов из 10&lt;br /&gt;
за оригинальность, но минус несколько миллионов за интуитивную понятность. Такова уж физика.&lt;br /&gt;
&lt;br /&gt;
Однако в мире Linux файловые системы с контролем версий&lt;br /&gt;
в самом деле создают иллюзию, что прошлое таки существует&lt;br /&gt;
параллельно с настоящим. Одна из таких систем – ''ext3cow'' (cow&lt;br /&gt;
означает не «корова», а '''Copy On Write''' – копирование при записи,&lt;br /&gt;
это лежащая в ее основе технология), и я решил ее попробовать.&lt;br /&gt;
Установка ''ext3cow'' была непростой (см. соответствующий раздел). Но перейдем сразу к делу и опишем ''ext3cow'' с точки зрения пользователя.&lt;br /&gt;
&lt;br /&gt;
===Му-у!===&lt;br /&gt;
&lt;br /&gt;
{{Врезка|Заголовок=Из чего она сделана|Содержание=''Ext3cow'' доступна на сайте http://www.ext3cow.com и состоит из следующих основных компонентов:&lt;br /&gt;
* '''linux-2.6.20.3-ext3cow.patch''' Заплатки для поддержки ''ext3cow'' ядром 2.6.20.3.&lt;br /&gt;
* '''e3cfsprogs-1.39.tgz''' Модифицированные утилиты файловой системы ''ext3'', в частности, ''mkfs''.&lt;br /&gt;
* '''ext3cow-tools.tgz''' Три простых пользовательских утилиты:&lt;br /&gt;
:• '''''ss''''' Создает снимок файловой системы. (Я переименовал ее в ''snapshot'', потому что в Ubuntu уже есть утилита ''ss'').&lt;br /&gt;
:• '''''tt''''' Получает номер периода текущей версии файловой системы.&lt;br /&gt;
:• '''''e2d''''' Получает дату по заданному номеру периода.|Ширина=250px}}&lt;br /&gt;
&lt;br /&gt;
По сути, ''ext3cow'' – это расширение файловой системы ''ext3'', позволяющее делать «снимки» состояния ФС и возвращаться в&lt;br /&gt;
прошлое, чтобы просмотреть содержимое файла на момент создания любого снимка. Сначала создадим структуру пустой файловой системы ''ext3cow'' на разделе – например, таким образом:&lt;br /&gt;
&lt;br /&gt;
 $ sudo mkfs.ext3cow /dev/sdb1&lt;br /&gt;
&lt;br /&gt;
В выводе команды ''mkfs'' должна быть строка типа этой:&lt;br /&gt;
&lt;br /&gt;
 Writing super block with epoch number: 1228988556&lt;br /&gt;
&lt;br /&gt;
Номер периода ('''epoch number''') означает момент времени, в который был сделан снимок, в данном случае это время создания файловой&lt;br /&gt;
системы. (См. врезку «Эпоха Unix»).&lt;br /&gt;
&lt;br /&gt;
Теперь надо смонтировать файловую систему. Для этого я создал тестовый каталог '''/cow''' в качестве точки монтирования:&lt;br /&gt;
&lt;br /&gt;
 $ sudo mkdir /cow&lt;br /&gt;
 $ sudo chmod 777 /cow&lt;br /&gt;
 $ sudo mount -t ext3cow /dev/sdb1 /cow&lt;br /&gt;
&lt;br /&gt;
Давайте создадим файл в нашей файловой системе ''ext3cow'':&lt;br /&gt;
&lt;br /&gt;
 $ cd /cow&lt;br /&gt;
 $ echo “This is the original file” &amp;gt; afile&lt;br /&gt;
&lt;br /&gt;
Затем создадим снимок, чтобы потом мы могли просмотреть файловую систему в ее текущем состоянии:&lt;br /&gt;
&lt;br /&gt;
 $ snapshot /cow&lt;br /&gt;
 Snapshot on /cow: 1228989274&lt;br /&gt;
&lt;br /&gt;
Обратите внимание, что сообщается номер периода созданного снимка.&lt;br /&gt;
&lt;br /&gt;
Теперь добавим в файл строку&lt;br /&gt;
&lt;br /&gt;
 $ echo “This is version 2” &amp;gt;&amp;gt; afile&lt;br /&gt;
&lt;br /&gt;
{{Врезка|Заголовок=Эпоха Unix|Содержание=В Linux и Unix время измеряется в секундах, начиная с 00:00:00&lt;br /&gt;
UTC (Универсальное координированное время) 1 января 1970&lt;br /&gt;
года. Этот момент времени со всей важностью называют Эрой&lt;br /&gt;
[Unix] – The Epoch. Например, сезон охоты на куропаток 2009&lt;br /&gt;
года в Великобритании – «Славное 12 Августа» ['''день победы североирландских протестантов над католиками в битве при Бойне в 1690 г., – прим. пер.''']) начнется с временной отметки 1250035200. (Утилиту для конверсии можно найти на сайте http://www.epochconverter.com).&lt;br /&gt;
&lt;br /&gt;
Так как время хранится в 32-битных целых числах, во вторник 19 января 2038 года произойдет переполнение, и земля&lt;br /&gt;
завертится в противоположном направлении или произойдет нечто столь же катастрофическое. Используемые в ''ext3cow''&lt;br /&gt;
номера периодов – это просто время Unix с начала эпохи.| Ширина=200px}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Если просмотреть его содержимое командой ''cat'', то мы увидим текущую версию, как и должно быть:&lt;br /&gt;
&lt;br /&gt;
 $ cat afile&lt;br /&gt;
 This is the original file&lt;br /&gt;
 This is version 2&lt;br /&gt;
&lt;br /&gt;
Но – и это умно придумано – файл можно восстановить из снимка:&lt;br /&gt;
 &lt;br /&gt;
 $ cat afile@1228989274&lt;br /&gt;
 This is the original file&lt;br /&gt;
&lt;br /&gt;
С помощью команды ''ls'' можно просмотреть временные штампы и размеры файлов для двух версий:&lt;br /&gt;
&lt;br /&gt;
 $ ls -l afile@1228989274 afile&lt;br /&gt;
 -rw-r--r-- 1 chris chris 44 2008-12-11 09:55 afile&lt;br /&gt;
 -rw-r--r-- 1 chris chris 26 2008-12-11 09:54 afile@1228989274&lt;br /&gt;
&lt;br /&gt;
Даже удалив текущую версию файла '''afile''', мы все равно сможем восстановить оригинал, хотя он и не показывается в листинге&lt;br /&gt;
каталога:&lt;br /&gt;
&lt;br /&gt;
 $ rm afile&lt;br /&gt;
 $ cat afile&lt;br /&gt;
 cat: afile: No such file or directory&lt;br /&gt;
 $ ls -l&lt;br /&gt;
 total 12&lt;br /&gt;
 drwx------ 2 root root 12288 2008-12-11 09:42 lost+found&lt;br /&gt;
 $ cat afile@1228989274&lt;br /&gt;
 This is the original file&lt;br /&gt;
&lt;br /&gt;
Фактически, удалить исходный файл (в текущей реализации) нельзя никак:&lt;br /&gt;
&lt;br /&gt;
 $ rm afile@1228989274&lt;br /&gt;
 rm: cannot remove `afile@1228989274’: Read-only file system&lt;br /&gt;
&lt;br /&gt;
Пример небольшой, но, будем надеяться, он доказывает&lt;br /&gt;
главное.&lt;br /&gt;
&lt;br /&gt;
Готова ли ''ext3cow'' к проверке временем? Вообще говоря, нет. Установка сложна, да и все эти номера периодов в командной&lt;br /&gt;
строке выглядят довольно неуклюже. Разработчики явно нацелены на реализацию со стороны ядра, а не на пользовательские&lt;br /&gt;
утилиты, которые, мягко говоря, минималистичны.&lt;br /&gt;
&lt;br /&gt;
Я бы, на самом деле, хотел увидеть команду, которая устанавливает номер периода процесса, что-нибудь типа&lt;br /&gt;
&lt;br /&gt;
 $ setepoch 1 May 2006&lt;br /&gt;
&lt;br /&gt;
чтобы все будущие ссылки на файлы опирались на это время. Но тогда потребовалось бы расширение контекста процесса, что,&lt;br /&gt;
по-моему, не входит в ближайшие планы разработчиков ''ext3cow''. '''LXF'''&lt;br /&gt;
&lt;br /&gt;
===Установка ''ext3cow''===&lt;br /&gt;
&lt;br /&gt;
Установка ext3cow – не самая простая вещь на свете, и я подумал, что полезно задокументировать свои усилия. Надо сказать, что эти отчасти приглаженные строки никоим образом не отражают количества почесываний в затылке и невнятных бормотаний, имевших место на самом деле!&lt;br /&gt;
&lt;br /&gt;
Часть затруднений возникла из-за отсутствия ''ext3cow'' в официальных исходных кодах Linux: файловая система доступна только в виде набора&lt;br /&gt;
заплат к ядру 2.6.20.3. Во всех современных дистрибутивах версия ядра более новая, и я решил скомпилировать ядро 2.6.20.3 из исходных текстов.&lt;br /&gt;
Сначала я установил Jeos 8.04 («урезанная» версия Ubuntu), так как он быстро инсталлируется и загружается; это означало работу исключительно&lt;br /&gt;
в командной строке, но в ней я чувствую себя неплохо. Вот проделанные мною шаги...&lt;br /&gt;
&lt;br /&gt;
'''1''' Скачал wget из репозитория Ubuntu&lt;br /&gt;
&lt;br /&gt;
 $ sudo apt-get install wget&lt;br /&gt;
&lt;br /&gt;
'''2''' Скачал tar-архив с исходниками ядра Linux 2.6.20.3&lt;br /&gt;
&lt;br /&gt;
 $ wget ftp://ftp.kernel.org/pub/linux/kernel/v2.6/linux-2.6.20.3.tar.bz2&lt;br /&gt;
&lt;br /&gt;
'''3''' Установил инструменты сборки и пакет '''curses''', необходимый для поддержки ''make menuconfig'', чтобы настроить ядро&lt;br /&gt;
&lt;br /&gt;
 $ sudo apt-get install build-essential libncurses5-dev&lt;br /&gt;
&lt;br /&gt;
'''4''' Распаковал исходный код ядра в '''/usr/src'''&lt;br /&gt;
&lt;br /&gt;
 $ cd /usr/src&lt;br /&gt;
 $ sudo tar xjvf ~/linux-2.6.20.3.tar.bz2&lt;br /&gt;
&lt;br /&gt;
'''5''' Скачал и применил заплатки ''ext3cow''&lt;br /&gt;
&lt;br /&gt;
 $ wget http://ext3cow.com/patches/linux-2.6.20.3-ext3cow.patch&lt;br /&gt;
 $ sudo cp linux-2.6.20.3-ext3cow.patch /usr/src/linux-2.6.20.3/&lt;br /&gt;
 $ cd /usr/src/linux-2.6.20.3/&lt;br /&gt;
 $ sudo patch -p1 &amp;lt; linux-2.6.20.3-ext3cow.patch&lt;br /&gt;
&lt;br /&gt;
'''6''' Создал файл настройки ядра&lt;br /&gt;
&lt;br /&gt;
 $ sudo make menuconfig&lt;br /&gt;
&lt;br /&gt;
В меню верхнего уровня я выбрал '''‘Filesystems’''', затем '''‘Ext3cow filesystem support’'''. Никаких других изменений я не делал.&lt;br /&gt;
&lt;br /&gt;
'''7''' Назначил '''EXTRAVERSION''' в '''Makefile''' как '''‘.3cow’''', чтобы у нового ядра было понятное имя&lt;br /&gt;
&lt;br /&gt;
'''8''' Собрал и установил ядро&lt;br /&gt;
&lt;br /&gt;
 $ sudo make all&lt;br /&gt;
 $ sudo make modules_install&lt;br /&gt;
 $ sudo make install&lt;br /&gt;
 $ sudo update-initramfs -c -k 2.6.20.3cow&lt;br /&gt;
&lt;br /&gt;
'''9''' Добавил в '''menu.lst''' запись для загрузки нового ядра&lt;br /&gt;
&lt;br /&gt;
  title Kernel 2.6.20.3cow&lt;br /&gt;
  root (hd0,0)&lt;br /&gt;
  kernel /boot/vmlinuz-2.6.20.3cow root=/dev/sda1 ro&lt;br /&gt;
  initrd /boot/initrd.img-2.6.20.3cow&lt;br /&gt;
&lt;br /&gt;
'''10''' Перезагрузил новое ядро&lt;br /&gt;
&lt;br /&gt;
'''11''' Скачал инструменты и утилиты ''ext3cow''&lt;br /&gt;
&lt;br /&gt;
  $ wget http://ext3cow.com/e3cfsprogs/e3cfsprogs-1.39.tgz&lt;br /&gt;
  $ wget http://ext3cow.com/tools/ext3cow-tools.tgz&lt;br /&gt;
&lt;br /&gt;
'''12''' Собрал инструментарий&lt;br /&gt;
&lt;br /&gt;
  $ tar xzvf e3cfsprogs-1.39.tgz&lt;br /&gt;
  $ cd e3cfsprogs-1.39&lt;br /&gt;
  $ ./configure&lt;br /&gt;
  $ make&lt;br /&gt;
  $ sudo make install&lt;br /&gt;
&lt;br /&gt;
Эти команды обновляют системные утилиты в '''/sbin''', в частности, ''mke2fs''.&lt;br /&gt;
&lt;br /&gt;
'''13''' Переименовал ''mke2fs'' в ''mkfs.ext3cow'', согласно инструкции&lt;br /&gt;
&lt;br /&gt;
На данном этапе все было готово для создания файловой системы ''ext3cow'':&lt;br /&gt;
&lt;br /&gt;
  $ sudo mkfs.ext3cow /dev/sdb1&lt;br /&gt;
&lt;br /&gt;
Но судьба решила иначе, и я получил загадочное сообщение об ошибке: “Invalid filesystem option set: sparse_super,filetype,resize_inode,dir_index,ext_attr”.&lt;br /&gt;
&lt;br /&gt;
Я угробил немало времени, пробуя различные вещи и изрядно злобствуя, но сломался и написал письмо разработчику ''ext3cow'' Закари Питерсону [Zachary Peterson]. К моей радости, почти немедленно пришел ответ с лекарством от моего недомогания (ошибочная строка в файле '''/etc/mke2fs.conf'''), и я мог двигаться дальше (спасибо, Закари!) и создавать файловую систему.&lt;br /&gt;
&lt;br /&gt;
Последней задачей была компиляция утилит ''ext3cow''. На сайте ''ext3cow'' написано: «Чтобы собрать утилиты ext3cow, потребуется скопировать&lt;br /&gt;
заголовочный файл ядра '''ext3cow_fs.h''' в ваш каталог '''include'''.» После недолгих поисков я нашел файл и понял, куда его поместить. Команды&lt;br /&gt;
были такими:&lt;br /&gt;
&lt;br /&gt;
  $ sudo mkdir /usr/local/include/linux&lt;br /&gt;
  $ sudo cp /usr/src/linux-2.6.20.3/include/linux/ext3cow_fs.h /usr/local/include/linux&lt;br /&gt;
  $ tar xzvf ext3cow-tools.tgz&lt;br /&gt;
  $ cd ext3cow-tools&lt;br /&gt;
  $ make all&lt;/div&gt;</summary>
		<author><name>Crazy Rebel</name></author>	</entry>

	</feed>