back с venti
1 отговора
147 прегледа
back с venti
По време на дискусията за backup няколко пъти споменавах за архивиращата система на Plan9, venti. В последните няколко седмици се забавлявах с конфигурирането на venti за Linux, и понеже днес няма много нови теми в клуба, реших да порекламирам venti :)
Първо малко въведение за venti (пълната статия може да се прочете тук. Venti архивира блокове (а не файлове) с данни. Ако един блок е записан веднъж, той не може да бъде изтрит повече. Блоковете се адресират използвайки 20 байтов адрес, получен от пресмятането на SHA1 хеша на съдържанието на блока (затова и съдържанието на блоковете не може да бъде променяно). За да получи съдържанието на някой блок, клиентът трябва да изпрати този 20 байтов адрес, наречен score. Опита да се запише блок с едно и също съдържание няколко пъти, води до записването му само веднъж. Venti използва твърди дискове (директно или като файлове върху файлова система) за запазване на данните. Дисковото пространство е разделено на 512 МБ арени. Арените се запълват последователно. Когато някоя арена се запълни, тя се "запечатва" и данните в нея не се променят повече.
Тъй като venti не разбира от файлове, има програма, наречена vac, която разцепва файловете на блокове, създава специални блокове съдържащи адресите на блоковете на файла. Като краен резултат, всеки файл се адресира от един 20 байтов адрес (на блока, съдържащ адресите на блоковете на файла). Адресите на файловете от една директория, заедно с метаинформацията от файловата система се записват в специален блок, чиито адрес е адреса на директорията. По този начин, като краен резултат от изпълнението на vac се получава един 20 байтов адрес, чрез който може да се проследи цялата файлова йерархия записана във venti.
Тъй като всеки блок се записва само веднъж във venti, архивирането на директория, в която файловете не са променени, (почти) не заема допълнително място на дисковете. Така, почти "безплатно" във venti могат да се правят инкрементални архиви.
Достъпът до архивите е малко неконвенционален. Използвайки адреса, получен от vac, user-space програма vacfs, и модул за ядрото v9fs, архива може да се монтира като файлова система, и да се копира/сравняват файлове и т.н. Ако потребителят пази всички scores, тя може да има достъп до всички архиви. По този начин се получава практически вечен архив.
Сега за моята конфигурация... Изрових един стар 40GB (5400rpm) харддиск. Разделих го на два партишъна, индекс (не споменах за индекса по-горе, защото не е важен за разбиране на идеята) и арени. След форматирането се получиха 71 арени по 512MB. Написах си скриптчета, записващи /home (5GB) и някои важни директории от десктоп-а (10-ина GB), както и $HOME (2GB) и / (10GB) на лаптоп-а. Архивирам /home директориите на десктопа и лаптопа всеки ден, останалите от време на време. Резултатите за инкрементални архиви на директориите са следните (всички архиви се правят по 100MBps локална мрежа, в момента venti работи на отделен компютър):
На диска всички тези архиви (от последните 5-6 дни) заемат 16.96MB.
Понеже една от причините за архивиране е предпазване от повреда на твърдите дискове, няма много смисъл архива да се пази само на твърд диск. Затова записвам всички "запечатани" арени на DVD-R, а тези които са все още отворени на DVD-RW. Засега не го правя много редовно, вероятно веднъж месечно. Нарочно не искам да го автоматизирам и да оставям DVD-RW носителя в записвачката.
Първо малко въведение за venti (пълната статия може да се прочете тук. Venti архивира блокове (а не файлове) с данни. Ако един блок е записан веднъж, той не може да бъде изтрит повече. Блоковете се адресират използвайки 20 байтов адрес, получен от пресмятането на SHA1 хеша на съдържанието на блока (затова и съдържанието на блоковете не може да бъде променяно). За да получи съдържанието на някой блок, клиентът трябва да изпрати този 20 байтов адрес, наречен score. Опита да се запише блок с едно и също съдържание няколко пъти, води до записването му само веднъж. Venti използва твърди дискове (директно или като файлове върху файлова система) за запазване на данните. Дисковото пространство е разделено на 512 МБ арени. Арените се запълват последователно. Когато някоя арена се запълни, тя се "запечатва" и данните в нея не се променят повече.
Тъй като venti не разбира от файлове, има програма, наречена vac, която разцепва файловете на блокове, създава специални блокове съдържащи адресите на блоковете на файла. Като краен резултат, всеки файл се адресира от един 20 байтов адрес (на блока, съдържащ адресите на блоковете на файла). Адресите на файловете от една директория, заедно с метаинформацията от файловата система се записват в специален блок, чиито адрес е адреса на директорията. По този начин, като краен резултат от изпълнението на vac се получава един 20 байтов адрес, чрез който може да се проследи цялата файлова йерархия записана във venti.
Тъй като всеки блок се записва само веднъж във venti, архивирането на директория, в която файловете не са променени, (почти) не заема допълнително място на дисковете. Така, почти "безплатно" във venti могат да се правят инкрементални архиви.
Достъпът до архивите е малко неконвенционален. Използвайки адреса, получен от vac, user-space програма vacfs, и модул за ядрото v9fs, архива може да се монтира като файлова система, и да се копира/сравняват файлове и т.н. Ако потребителят пази всички scores, тя може да има достъп до всички архиви. По този начин се получава практически вечен архив.
Сега за моята конфигурация... Изрових един стар 40GB (5400rpm) харддиск. Разделих го на два партишъна, индекс (не споменах за индекса по-горе, защото не е важен за разбиране на идеята) и арени. След форматирането се получиха 71 арени по 512MB. Написах си скриптчета, записващи /home (5GB) и някои важни директории от десктоп-а (10-ина GB), както и $HOME (2GB) и / (10GB) на лаптоп-а. Архивирам /home директориите на десктопа и лаптопа всеки ден, останалите от време на време. Резултатите за инкрементални архиви на директориите са следните (всички архиви се правят по 100MBps локална мрежа, в момента venti работи на отделен компютър):
Десктоп:
/home (81889 файла / 5.89GB) 594s
pics (7354 файла / 9.30GB) 466s
Лаптоп:
/ (192913 файла / 10.26GB) 873s
$HOME (100874 файла / 2.32GB) 717s
На диска всички тези архиви (от последните 5-6 дни) заемат 16.96MB.
Понеже една от причините за архивиране е предпазване от повреда на твърдите дискове, няма много смисъл архива да се пази само на твърд диск. Затова записвам всички "запечатани" арени на DVD-R, а тези които са все още отворени на DVD-RW. Засега не го правя много редовно, вероятно веднъж месечно. Нарочно не искам да го автоматизирам и да оставям DVD-RW носителя в записвачката.
Re: back с venti
Вчера ми се наложи за пръв път да използвам backup-a . Бях изтрил една програма...
venti rules :)
$ find /mnt/archives -name amount.c
/mnt/archives/2005/02/10/.../amount.c
/mnt/archives/2005/02/11/.../amount.c
$
venti rules :)