Skip to content

Egor22083/Linux-file-system

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Таланин 1303

Установка Системных зависимостей

Для сборки ядра Linux, компиляции модуля файловой системы, пользовательской утилиты и запуска виртуальной машины необходим ряд пакетов. В их числе — компилятор C/C++, инструменты генерации парсеров (flex, bison), библиотеки для работы с ELF-объектами и криптографией, статически собранный BusyBox для initramfs, а также эмулятор QEMU для тестирования модуля в изолированном окружении.

sudo apt update && sudo apt install -y build-essential g++ flex bison libelf-dev libssl-dev bc busybox-static qemu-system-x86 wget cpio gzip

Скачивание ядра

Проект собирается как внешний модуль для ядра Linux 6.12.90. Исходные тексты ядра необходимы для компиляции модуля — из них берутся заголовочные файлы, система сборки Kbuild и таблица символов. Архив загружается с официального зеркала kernel.org и распаковывается в рабочий каталог проекта.

cd ~/ws
wget https://cdn.kernel.org/pub/linux/kernel/v6.x/linux-6.12.90.tar.xz
tar -xf linux-6.12.90.tar.xz

Конфигурация ядра

Сначала создаётся базовая конфигурация ядра командой defconfig, подходящая для платформы x86_64. Затем включаются опции, необходимые для работы CellFS в виртуальной машине: поддержка virtio-блочных устройств (через них QEMU пробрасывает дисковый образ), загрузка и выгрузка модулей ядра, подсистема блочных устройств и вычисление контрольных сумм CRC32, которые CellFS использует для проверки целостности метаданных. Команда olddefconfig фиксирует изменения, автоматически выбирая значения по умолчанию для всех зависимых параметров.

cd linux-6.12.90
make defconfig
scripts/config --enable CONFIG_BLK_DEV_LOOP
scripts/config --enable CONFIG_VIRTIO_BLK
scripts/config --enable CONFIG_VIRTIO_PCI
scripts/config --enable CONFIG_EXT4_FS
scripts/config --enable CONFIG_CRC32
scripts/config --enable CONFIG_BLOCK
scripts/config --enable CONFIG_MODULES
scripts/config --enable CONFIG_MODULE_UNLOAD
scripts/config --set-str CONFIG_INITRAMFS_SOURCE ""
make olddefconfig

Сборка ядра

Компиляция ядра занимает несколько минут. Флаг -j$(nproc) задействует все доступные ядра процессора для параллельной сборки. Результатом является сжатый образ arch/x86/boot/bzImage, который впоследствии передаётся QEMU в качестве загрузочного ядра.

make -j$(nproc)

Сборка проекта

Команда make everything выполняет три задачи: собирает модуль ядра cellfs_module.ko через систему Kbuild, компилирует утилиту vol_admin для форматирования и диагностики томов CellFS из userspace, а также собирает набор автоматических тестов. Переменная KERNEL_SRC по умолчанию указывает на каталог linux-6.12.90 внутри проекта; при необходимости её можно переопределить.

cd ~/ws
make everything

Запуск тестов

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

make run_tests

Загрузка виртуальной машины

Скрипт boot_vm.sh автоматически создаёт дисковый образ, форматирует его утилитой vol_admin, собирает минимальный initramfs на базе BusyBox (включая модуль и утилиту) и запускает QEMU в консольном режиме. Виртуальная машина загружает собранное ядро, монтирует initramfs как корень и предоставляет интерактивную оболочку для работы с CellFS.

make vm

Внутри виртуальной машины

После загрузки виртуальной машины модуль CellFS загружается вручную командой insmod. Параметры указывают путь к блочному устройству, положение основного и зеркального заголовков на диске, максимальное количество меток (записей) и число чанков на каждую запись. После загрузки модуля файловая система монтируется стандартной командой mount.

insmod /lib/cellfs_module.ko
backing_path="/dev/vda"
hdr_sector=0
mirror_sector=5
label_cap=64
chunks_each=3
mount -t cellfs /dev/vda /mnt

Записи в CellFS создаются и читаются как обычные файлы. Имена файлов соответствуют номерам ячеек в формате rec_NNNNNN. Запись данных в файл размещает полезную нагрузку в соответствующих чанках на диске.

echo "payload" > /mnt/rec_000000
cat /mnt/rec_000000
ls /mnt

Утилита vol_admin позволяет из командной строки просматривать метаинформацию тома, проверять целостность заголовков и таблиц, выводить раскладку конкретной ячейки, а также полностью очищать или переинициализировать том.

vol_admin /dev/vda info
vol_admin /dev/vda check
vol_admin /dev/vda layout 0
vol_admin /dev/vda erase
vol_admin /dev/vda init

По завершении работы файловую систему необходимо размонтировать и выгрузить модуль перед выходом из виртуальной машины.

umount /mnt
rmmod cellfs_module

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors