ßàØÃÂâÕàë áÕÓÞÔÃÂï - Xakep Online
ßàØÃÂâÕàë áÕÓÞÔÃÂï - Xakep Online
ßàØÃÂâÕàë áÕÓÞÔÃÂï - Xakep Online
You also want an ePaper? Increase the reach of your titles
YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.
116 UnixoidХАКЕР 04 /171/ 2013Для гарантии целостности файловая система используетхеши данных и метаданных. Файловая система может иметьнесколько корней (подтомов), благодаря чему одну файловуюсистему можно использовать для размещения нескольких виртуальныхокружений или сэндбоксов. Уже реализован механизмпрозрачной компрессии данных с помощью алгоритмовlzo и zlib, который позволяет сэкономить дисковое пространствои при этом поднять производительность ФС (распаковкаданных происходит быстрее их чтения с диска). Реализованасистема онлайн-дефрагментации, а также динамического расширенияи сжатия ФС по необходимости.Чтобы сделать работу файловой системы поверх RAIDмассивовболее эффективной и повысить надежность, разработчикитесно интегрировали Btrfs с подсистемой управлениятомами Device Mapper. Такой дизайн позволяет консолидироватьработу файловой системы и подсистемы RAID, в результате чеговозрастает как производительность, так и надежность массива.Файловая система знает об используемой RAID-схеме, текущемсостоянии дисков и балансирует нагрузку в зависимости от условий(например, наиболее используемые файлы будут автоматическиперемещены на более производительный диск). Сбойв работе RAID-массива позволяет вовремя остановить операцииввода-вывода и восстановить свою работу, дождавшись переконфигурирования.В совокупности с контрольными суммами,которые файловая система хранит для каждого блока, RAIDмассивна основе Btrfs становится крайне надежным.На текущий момент Btrfs уже достаточно стабильна для повседневногоприменения и в некоторых тестах производительностиобгоняет еxt4. Она использовалась в качестве основнойФС в мобильной платформе MeeGo и доступна для использованияпо умолчанию во многих дистрибутивах.Согласно синтетическимтестам, ext4 остаетсясамой производительнойФС в LinuxДАТЫ ВЫХОДАФАЙЛОВЫХСИСТЕМ1987Minix FS (0.01)1992ext (0.96c)1993ext2 (0.99.15)2001ReiserFS (2.4.1)2001ext3 (2.4.15)2006ext4 (2.6.28, 2.6.19)2009Btrfs (2.6.29)В скобках указано первоепоявление ФС в ядреLinux.SYSFSРаботая над ядром экспериментальной ветки 2.5.X и реализуяновую подсистему управления драйверами устройств, разработчикирешили оснастить ядро новым интерфейсом отладки,реализованным в виде виртуальной файловой системы. Интерфейсбыл назван ddfs (Device Driver Filesystem) и позволялполучать различную информацию об устройствах, состояниидрайверов и другие низкоуровневые данные.К моменту релиза ядра 2.6 оказалось, что ddfs можетбыть полезна и для многих других приложений, работающихс железом, поэтому ФС было решено переименовать в sysfs(System Filesystem) и включить в будущий релиз. Это событиеповлекло за собой целый ряд изменений в подходе к построениюокружения Linux. Вся «железная» информация теперьхранилась централизованно и всегда в актуальном состоянии,что позволило проектам вроде KDE и GNOME реализоватьдействительно умное управление оборудованием. Интерфейсыуправления железом также начали перекочевывать в sysfs,разгружая и без того запутанную procfs. И наконец, sysfs позволилавыпилить из ядра файловую систему devfs, отвечающуюза динамическое создание файлов-устройств, и заменить еена легковесный и гибкий в управлении демон udev, полностьюруководствующийся информацией из sysfs.Сегодня ядро Linux без sysfs представить невозможно. Файловаясистема используется огромным количеством утилит,демонов и систем умного управления энергосбережением.Она занимает центральное место в подсистеме управленияоборудованием Android и других мобильных систем, основанныхна ядре Linux. С помощью sysfs можно разгонять процессор,управлять яркостью дисплея, настройками жестких дискови планировщиков.FUSEС самого момента своего появления ядро Linux критиковалосьза монолитный дизайн, снижающий надежность ОС, затрудняющийразработку и тестирование драйверов и не обладающийдостаточной гибкостью. Линус Торвальдс никогда не воспринималвсерьез подобную критику, однако добавил-таки в ядроверсии 2.6.14 интерфейс FUSE, позволяющий выносить файловыесистемы из ядра, реализуя их в виде обычных приложений.FUSE представляет собой небольшой модуль ядра, посредствомобращения к которому (через сокет) любое приложениеможет реализовать собственную файловую систему илифайловый интерфейс к любым другим сущностям. С помощьюFUSE были созданы приложения, позволяющие подключатьв виде файловых систем tar-архивы, FTP-, SMB- и WebDAVресурсы,специальные шифрующие файловые системы и многое,многое другое.Наиболее известный представитель ФС на основе FUSE —драйвер NTFS-3G, позволяющий подключать NTFS на чтениеи запись, но реализованный полностью в пространстве пользователя.С помощью FUSE также разработаны многие серьезныефайловые системы, такие как, например, кластерная файловаясистема GlusterFS, используемая в крупных компанияхдля хранения данных в облаке, а также многие другие, ссылкина которые можно найти на официальном сайте FUSE (goo.gl/lrwB3).FUSE часто используется для прототипирования и отладкифайловых систем, планируемых к реализации внутри ядра,а создать свою ФС с ее помощью настолько просто, что этоможно сделать за полчаса, не обладая никакими специальнымизнаниями.CGROUPS И ПРОСТРАНСТВА ИМЕНКак и в любой другой UNIX-подобной операционной системе,в Linux всегда существовало несколько механизмов контроляпроцессов и их ресурсов. Это значения приоритета (nice) и лимитированиересурсов с помощью системного/библиотечноговызова ulimit. Эти интерфейсы не могли предоставить возможностигибкого управления ресурсами, поэтому компания Googleприступила к разработке технологии, изначально получившейимя process containers, а затем переименованной в Cgroups(Control Groups).Cgroups — это официально включенный в ядро 2.6.24фреймворк группировки процессов и управления их ресурсами,такими как количество оперативной памяти, процессорныересурсы, приоритеты ввода-вывода и доступа к сети. ТехнологияCgroups тесно связана с системой управления пространствамиимен, которая позволяет поместить выбранную группупроцессов в независимое от основной системы окружение,которое может иметь собственный корень файловой системы,