Рейтинг:1

BTRFS на RHEL8 — компиляция модуля ядра или запуск инструментов пользовательского пространства

флаг it

Контекст

Недавно я установил RHEL 8, не понимая, что это больше не поддерживает BTRFS.

К сожалению, у меня 4 диска в BTRFS RAID10. У меня недостаточно места на других моих дисках для хранения данных, присутствующих на дисках BTRFS, поэтому копировать все это в другое место при загрузке с USB-накопителя нельзя.

У меня есть мой первоначальный вопрос, а затем несколько дополнительных вопросов относительно неудачных подходов, которые я использовал. Не стесняйтесь просто сосредоточиться на части этой проблемы «как заставить BTRFS работать», хотя мне любопытно узнать о других проблемах, если у вас есть ответы на любую часть этого.

Вопрос 1

  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

  1. Безопасно ли пытаться использовать btrfs для монтирования дисков с учетом вышеуказанных ошибок?
  2. Что случилось с /dev/btrfs-контроль ошибка на сканирование устройства btrfs?
  3. Как я могу получить судо и судо су иметь /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)

Спасибо, что дочитали до этого места! Любая помощь приветствуется.

Michael Hampton avatar
флаг cz
Предположительно, CONFIG_BTRFS включен в ядрах ELrepo kernel-ml. Вам также понадобится материал пользовательского пространства, которое находится в стадии тестирования elrepo (и было с тех пор, как RHEL 8 был в бета-версии). Это должно позволить вам восстановить ваши файлы, чтобы вы могли переключиться на другую файловую систему.
catleeball avatar
флаг it
Кажется, это сработало, спасибо @MichaelHampton!
флаг de
Другая возможность - включить репозитории Oracle Linux и установить нерушимое ядро ​​​​callwd.
catleeball avatar
флаг it
@kofemann есть ли причина использовать для этого Oracle UEK вместо основного ядра Linux?
Рейтинг:2
флаг it

В комментариях ответ @MichaelHampton сработал.

я добавил ядро-мл от ELrepo как это:

sudo rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
установить судо-юм https://www.elrepo.org/elrepo-release-8.el8.elrepo.noarch.rpm
sudo yum --enablerepo=elrepo-kernel установить ядро-мл

Обратите внимание, что я уже создал инструменты пользовательского пространства. btrfs-проги и изложил шаги сборки в вопросе выше. Если вы пришли сюда из Google, вам необходимо установить btrfs-проги в дополнение к модулю ядра.

Затем перезапустился, проверил, что у меня запущено основное ядро, и смог смонтировать свои диски с помощью BTRFS и прочитать их данные.

$ перезагрузить судо

$ uname -a
Linux rhel 5.14.8-1.el8.elrepo.x86_64 #1 SMP, сб, 25 сентября, 10:32:52 по восточному поясному времени 2021 x86_64 x86_64 x86_64 GNU/Linux

$ sudo mount UUID=zzz -o по умолчанию, noatime /mnt/hdd

$ лс /мнт/жесткий диск
все мои файлы :)

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.