Контекст
Недавно я установил RHEL 8, не понимая, что это больше не поддерживает BTRFS.
К сожалению, у меня 4 диска в BTRFS RAID10. У меня недостаточно места на других моих дисках для хранения данных, присутствующих на дисках BTRFS, поэтому копировать все это в другое место при загрузке с USB-накопителя нельзя.
У меня есть мой первоначальный вопрос, а затем несколько дополнительных вопросов относительно неудачных подходов, которые я использовал. Не стесняйтесь просто сосредоточиться на части этой проблемы «как заставить BTRFS работать», хотя мне любопытно узнать о других проблемах, если у вас есть ответы на любую часть этого.
Вопрос 1
- Есть ли (относительно) простой способ заставить BTRFS работать на RHEL8?
Пользовательское пространство btrfs-progs
Моей первой попыткой выполнить эту работу было скомпилировать и установить btrfs-проги
со следующим:
# Устанавливаем депс
sudo dnf install libuuid-devel libblkid-devel lzo-devel zlib-devel libzstd-devel e2fsprogs-devel e2fsprogs-libs e2fsprogs libgcrypt-devel libsodium-devel libattr-devel
# Установить deps для генерации документов
sudo dnf установить asciidoc xmlto source-highlight
# Поверхностное клонирование последней версии
git clone --depth 1 --branch v5.14.1 https://github.com/kdave/btrfs-progs.git
cd btrfs-progs
Переключатель git -c v5.14.1
# Строить
# --disable-zoned, так как для этой функции требуется ядро >= 5.10
export CFLAGS="-O3 -pipe -frecord-gcc-switches -mtune=native -march=native"
экспортировать CPPFLAGS=$CFLAGS
экспорт SODIUM_CFLAGS=$CFLAGS
экспорт ZSTD_CFLAGS=$CFLAGS
экспортировать ZLIB_CFLAGS=$CFLAGS
экспортировать UUID_CFLAGS=$CFLAGS
экспортировать PYTHON_CFLAGS=$CFLAGS
./autogen.sh
./configure --with-crypto=libsodium --disable-zoned
сделать -j12
судо сделать установить
Кажется, он установлен правильно и доступен моему пользователю:
$ который бтрфс
/usr/местные/бин/btrfs
$ ls -1 /usr/local/bin/ | grep btrfs
бтрфс
бтрфск
btrfs-конвертировать
btrfs-найти-корень
btrfs-изображение
btrfs-карта-логический
btrfs-выберите-супер
бтрфстаун
fsck.btrfs
mkfs.btrfs
$ btrfs версия
btrfs-проги v5.14.1
Однако root, по-видимому, не имеет /USR/местные/бен
на своем пути по умолчанию. я добавил экспортировать PATH+=":/usr/local/bin" в
/etc/профильи
/root/.bash_profile, но ни один из них, похоже, не получает источник автоматически при использовании
судоили при попадании в корневую оболочку с
судо су`.
При указании полного пути к бинарнику жалуется, что не может открыть /dev/btrfs-контроль
. Запрашивая мою локальную поисковую систему, некоторые предполагают, что нужен udev, но он уже установлен (может быть, неправильно настроен?)
$ версия sudo btrfs
sudo: btrfs: команда не найдена
$ sudo /usr/local/bin/btrfs сканирование устройства
Сканирование файловых систем Btrfs
ВНИМАНИЕ: не удалось открыть /dev/btrfs-control, пропущена регистрация устройства: нет такого файла или каталога
ВНИМАНИЕ: не удалось открыть /dev/btrfs-control, пропущена регистрация устройства: нет такого файла или каталога
ВНИМАНИЕ: не удалось открыть /dev/btrfs-control, пропущена регистрация устройства: нет такого файла или каталога
ВНИМАНИЕ: не удалось открыть /dev/btrfs-control, пропущена регистрация устройства: нет такого файла или каталога
ОШИБКА: при регистрации устройств произошло 4 ошибки
Другие команды BTRFS работают:
$ файловая система sudo /usr/local/bin/btrfs показывает /dev/sda
Метка: 'wdred' uuid: aaaa-bbbb-cccc-dddd-eeee
Всего устройств Использовано 4 байта FS 2,13 ТиБ
devid 1 размер 5.46TiB использовал путь 1.07TiB /dev/sda
devid 2 размер 5.46TiB использовал путь 1.07TiB /dev/sdc
Девид 3 размером 5,46 ТБ использовал путь 1,07 ТБ /dev/sdb
Девид 4 размер 5.46TiB использовал путь 1.07TiB /dev/sdd
Тем не менее, я боялся монтировать разделы или выполнять какие-либо операции с ними из-за вышеуказанной ошибки, опасаясь, что отсутствующие компоненты могут исказить мои данные.
Вопросы 2, 3, 4
- Безопасно ли пытаться использовать btrfs для монтирования дисков с учетом вышеуказанных ошибок?
- Что случилось с
/dev/btrfs-контроль
ошибка на сканирование устройства btrfs
?
- Как я могу получить
судо
и судо су
иметь /USR/местные/бен
на своем пути по умолчанию?
Модуль ядра BTRFS
Я подумал, не лучше ли скомпилировать модуль ядра, но, не имея почти никакого опыта взлома ядра, дело пошло плохо.
Кажется, мне нужно установить CONFIG_BTRFS_FS=м
в моей конфигурации ядра для запуска. В настоящее время его там нет, и я, кажется, помню, что мог сделать это в менюконфигурация
.
$ grep "BTRFS" /boot/config-4.18.0-305.19.1.el8_4.x86_64
# CONFIG_BTRFS_FS не установлен
В документации RHEL упоминается, как загружать модули ядра и тому подобное, но не о том, как их собирать. Я проконсультировался с archwiki и попытался загрузить ядро RHEL8 с сайта Red Hat. На странице загрузки RHEL8 была вкладка «Источники» с файлом .iso 20G. Я скачал его, смонтировал и обнаружил, что он заполнен файлами .rpm и совсем не похож на исходный репозиторий ядра Linux. Я был немного потерян.
затем я пошел в /USR/SRC/ядра/
, инициализировал репозиторий git из-за боязни, что я испорчу что-то важное, и продолжил попытки выяснить, как собрать модуль ядра или изменить что-то в menuconfig.
$ cd /usr/src/kernels/4.18.0-305.19.1.el8_4.x86_64
$ судо су
# git инициировать
# git добавить -A
# git commit -m "Немодифицированное ядро"
# сделать mrproper
Скрипты HOSTCC/базовые/bin2c
скрипты/kconfig/conf --syncconfig Kconfig
arch/x86/Makefile:184: *** Компилятору не хватает поддержки asm-goto.. Стоп.
make: *** [Makefile:1361: _clean_arch/x86] Ошибка 2
Из-за отсутствия поддержки asm-goto интернет предположил, что мне может понадобиться elfutils-libelf-devel
но у меня это уже было.
Для забавы я попытался построить его с помощью лязг
и с gcc-toolset-10
, но у обоих была одна и та же ошибка.
Вопрос 5
- Любые идеи, почему
Компилятору не хватает поддержки asm-goto
?
- Какой хороший ресурс о том, как собирать модули ядра/исправлять ядра/модифицировать ядро вашей системы?
Системная информация
$ uname -a
Linux rhel 4.18.0-305.19.1.el8_4.x86_64 #1 SMP Вт, 7 сентября 07:07:31 по восточному поясному времени 2021 x86_64 x86_64 x86_64 GNU/Linux
$ gcc --версия
gcc (GCC) 8.4.1 20200928 (Red Hat 8.4.1-1)
$ scl запустить gcc-toolset-10 'gcc --version'
gcc (GCC) 10.2.1 20201112 (Red Hat 10.2.1-8)
$ лязг --версия
clang версии 11.0.0 (Red Hat 11.0.0-1.module+el8.4.0+8598+a071fcd5)
Спасибо, что дочитали до этого места! Любая помощь приветствуется.