В последнее время тема дедупликации данных является одним из центров внимания производителей и IT администраторов оборудования хранения информации. Она стала особенно актуальной в связи с текущей тенденцией экспоненциального роста данных, которую испытывают большинство современных дата-центров мира.
Дедупликация данных - это процесс нахождения и исключения избыточности данных посредством удаления дублирующихся копий информации на дисковом хранилище. Цель дедупликации заключается в том, чтобы разместить большее количество данных на меньшем пространстве. Одним из примеров применения дедупликации данных может служить замена повторных копий файлов ссылками на единственный экземпляр. Такой тип дедупликации называется файловым.
Традиционно выделяют несколько типов дедупликации в зависимости от уровня реализации - на уровне файлов, блоков данных и даже на битовом уровне. Механизм дедупликации на файловом уровне уже давно реализован и приобрел широкое применение в традиционных UNIX-подобных файловых системах, таких как ext2, при помощи отдельного хранения мета-информации о данных (концепция inode) и самих данных (концепция data block)[2, 3, 4, 5]. Это позволяет иметь одну копию файла на дисковом пространстве и хранить множество линков на единственный образ. Однако этот метод не применим даже при незначительном изменении файла. Одним из примеров служит хранение образов виртуальных машин множества пользователей. Изначальный образ является общим для всех пользователей, но изменения, вносимые каждым пользователем, являются индивидуальными, что не позволяет применять метод файловой дедупликации в данном случае, поскольку на уровне стандартной файловой системы UNIX могут адресоваться только линки на файлы в целом, а не на изменения в них. Поэтому в этом случае могла бы быть применена дедупликация на блочном уровне.
Также методы дедупликации делятся на inline и offline типы. Дедупликация, осуществляющаяся в момент записи данных на диск, называется inline дедупликацией, а та, которая реализуется отдельным процессом в последующее время, называется offline дедупликацией.
В рамках данной работы были достигнуты следующие результаты.
1. Изучены интерфейсы VFS подсистемы ядра Linux
2. Разработана архитектура файловой системы: спроектированы дисковая разметка и используемые структуры файловой системы для дедупликации данных, а также операции над ними
3. Реализована userspace утилита mkfs для создания дисковой разметки спроектированной файловой системы на блочном устройстве
4. Реализован драйвер файловой системы c поддержкой дедупликации данных на лету для ядра Linux
5. Проведена апробация реализованной функциональности:
• реализован драйвер, обеспечивающий доступ к внутренней статистике использования смонтированной файловой системы с помощью механизма /proc директорий;
• проведено сравнение различных подходов к организации процесса дедупликации данных для файловых систем.
[1] ZFS On-Disk Specification. Sun microsystems, 2006.
[2] Remzi H. Arpaci-Dusseau and Andrea C. Arpaci-Dusseau. Operating Systems: Three Easy Pieces. Filesystem Implementation. 2015.
[3] Daniel P. Bovet. Understanding the Linux Kernel, Third Edition. The Virtual Filesystem. 2005.
[4] Robert Love. Linux Kernel Development (3rd Edition). The Virtual Filesystem. Addison-Wesley Professional, 2010.
[5] Wolfgang Mauerer. Professional Linux Kernel Architecture. The Virtual Filesystem. 2008.
[6] Chris Mason Ohad Rodeh, Josef Bacik. BTRFS: The Linux B-tree Filesystem. IBM Research, 2012.