Опубликован: 19.10.2005 | Уровень: специалист | Доступ: платный | ВУЗ: Европейский Университет в Санкт-Петербурге
Лекция 13:

Резервное копирование и восстановление

Система контроля версий

Система контроля версий изначально предназначалась разработчикам программного обеспечения, но затем стала удобным средством организации хранения любых документов и файлов, могущих иметь разные версии. Физически система контроля версий обычно включает в себя несколько программ (или одну с широкой функциональностью) и правила хранения и описания версий.

В разных системах UNIX могут использоваться разные системы контроля версий. Очень широко распространена CVS, применяющаяся, в частности, для обновлений FreeBSD. В Solaris такая система носит название SCCS (Source Code Control System). Общим для всех систем такого типа является наличие репозитория, т.е. каталога, в котором хранятся копии документов (файлов) и их описания.

Система контроля версий может быть использована и как средство отслеживания изменений, что очень полезно при модификации файлов конфигурации, и как средство резервного копирования. В последнем случае репозиторий надо регулярно копировать на какие-либо независимые носители. Сама по себе система контроля версий не обеспечивает ни создания резервных копий, ни ведения жесткого контроля версий: и то, и другое требует организационной культуры сотрудников! Помните: система контроля версий - это только инструмент, и только его постоянное и корректное использование поможет вам организовать работу удобно и надежно.

Что даст SCCS? Прежде всего - историю изменений каждого файла, помещаемого в репозиторий, и наличие, таким образом, большого количества резервных копий (пусть и на том же самом носителе). При повреждении актуальной версии файла ее можно будет восстановить из репозитория. При наличии резервных носителей работа еще более упрощается.

Кроме того, комментарии, которыми следует снабжать все файлы, помещаемые в репозиторий, помогут разобраться в смысле давно сделанных изменений и, при необходимости, установить их авторство. Согласитесь, системный администратор иногда очень хочет знать, кто из двух его помощников-стажеров изменил пароль босса и сам того не заметил... Система SCCS поможет узнать, кто автор самых полезных и самых вредных изменений в системе.

Поскольку SCCS создает копии файлов, которые, возможно, не предназначены для публичного доступа к ним, при создании каталога репозитория следует соблюдать осторожность в назначении прав доступа к нему. Например, вы можете счесть полезным запрет чтения такого файла всем, за исключением пользователя root и ответственной за резервное копирование роли.

Как начать работу с SCCS

Прежде всего, надо создать подкаталог SCCS в том каталоге, где расположены файлы, подлежащие помещению в репозиторий. Их оригиналы сохраняются на прежних местах с прежними именами. А вот для работы с репозиторием следует применять программу SCCS.

Основные команды программы sccs перечислены в табл. 23.1:

Таблица 23.1. Основные команды программы SCCS
команда назначение
create инициализация файла истории
clean очистка текущего каталога
deledit внесение изменений в репозиторий и извлечение файла
delget внесение изменений в репозиторий и извлечение файла только для чтения
delta внесение изменений в репозиторий
edit извлечение файла
enter инициализация файла истории
get извлечение файла только для чтения
info вывод полной информации о файле
unedit возвращение файла к состоянию, в котором он был до последнего изменения

Итак, начнем. Предположим, мы создаем репозиторий для файлов из каталога /usr/develop (пример c каталогом /etc так часто рассматривается в литературе, что мы сочли его банальным, если вы желаете сделать репозиторий для каталога /etc, просто замените все /usr/develop в нашем примере на /etc).

cd /usr/develop
mkdir SCCS

теперь создаем файл истории проекта для файлов q и q1:

/usr/ccs/bin/sccs create q q1

q:
No id keywords (cm7)
q1:
No id keywords (cm7)
1.1
2 lines
No id keywords (cm7)
1.1
40 lines
No id keywords (cm7)

Файлы оригиналов (т.е. того, что было до помещения файлов в репозиторий) сохраняются с именами, идентичными именам оригиналов, но с добавленной в начале запятой. Файлы истории предваряются префиксом s.:

ls -l SCCS
total 6
-r--r--r-- 1 root other 155 Июн 26 16:01 s.q
-r--r--r-- 1 root other 1877 Июн 26 16:01 s.q1

ls -l
-rw-r--r-- 1 root other 7 Май 5 20:15 ,q
-r--r--r-- 1 root other 7 Июн 26 16:01 q
-rw-r--r-- 1 root other 1729 Июн 20 23:32 ,q1
-r--r--r-- 1 root other 1729 Июн 26 16:01 q1

Посмотрим содержимое файла q и попробуем его изменить.

Для редактирования файла следует его извлечь из репозитория; это делается командой sccs edit:

bash-2.05# /usr/ccs/bin/sccs edit q
1.1
new delta 1.2
2 lines

Посмотрим, как выглядит файл:

bash-2.05# cat q
test

Отлично, выглядит по-прежнему. Если его изменить, а затем дать команду извлечения из репозитория, сделанные изменения пропадут, файл будет прежним. Изменения в файл следует вносить только после того, как файл извлечен из репозитория для модификации. Добавим строку в конец файла:

bash-2.05# cat >> q
test1

Теперь внесем изменения в файл истории в репозитории:

bash-2.05# /usr/ccs/bin/sccs delta q
comments? new line added
No id keywords (cm7)
1.2
1 inserted
0 deleted
2 unchanged

Если после внесения изменений в файл истории снова требуется изменить сам файл (в нашем случае - файл q), то вместо delta следует указать подкоманду deledit, что эквивалентно последовательности команд

/usr/ccs/bin/sccs delta q
/usr/ccs/bin/sccs edit q

Файл истории файла q в каталоге SCCS выглядит так:

h13611
s 00001/00000/00002
d D 1.2 04/06/26 16:12:03 root 2 1
c new line added
e
s 00002/00000/00000
d D 1.1 04/06/26 16:01:16 root 1 0
c date and time created 04/06/26 16:01:16 by root
e
u
U
f e 0
t
T
I 1
test

I 2
test1
E 2
E 1

Как видим, в файле истории сохраняется информация о самих изменениях, а также о времени и авторе этих изменений.

Алексей Антипин
Алексей Антипин
Россия, Томск, ТУСУР, 2010
Игорь Тарасенко
Игорь Тарасенко
Россия