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

Контекст

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

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

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

Вопрос 1

  1. Существует ли (относительно)простой способ заставить BTRFS работать на RHEL8?

Пользовательское пространство btrfs-progs

Моя первая попытка выполнить эту работу состояла в том, чтобы скомпилировать и установить btrfs-progsсо следующим:

# Install deps
sudo dnf install libuuid-devel libblkid-devel lzo-devel zlib-devel libzstd-devel e2fsprogs-devel e2fsprogs-libs e2fsprogs libgcrypt-devel libsodium-devel libattr-devel
# Install deps for doc gen
sudo dnf install asciidoc xmlto source-highlight

# Shallow-clone latest release
git clone --depth 1 --branch v5.14.1 https://github.com/kdave/btrfs-progs.git
cd btrfs-progs
git switch -c v5.14.1

# Build
#   --disable-zoned since that feature needs kernel >=5.10
export CFLAGS="-O3 -pipe -frecord-gcc-switches -mtune=native -march=native"
export CPPFLAGS=$CFLAGS
export SODIUM_CFLAGS=$CFLAGS
export ZSTD_CFLAGS=$CFLAGS
export ZLIB_CFLAGS=$CFLAGS
export UUID_CFLAGS=$CFLAGS
export PYTHON_CFLAGS=$CFLAGS

./autogen.sh
./configure --with-crypto=libsodium --disable-zoned
make -j12
sudo make install

Кажется, что он установлен правильно и доступен моему пользователю:

$ which btrfs
/usr/local/bin/btrfs

$ ls -1 /usr/local/bin/ | grep btrfs
btrfs
btrfsck
btrfs-convert
btrfs-find-root
btrfs-image
btrfs-map-logical
btrfs-select-super
btrfstune
fsck.btrfs
mkfs.btrfs

$ btrfs version
btrfs-progs v5.14.1 

Однако root по-видимому, по умолчанию в пути нет /usr/local/bin. Я добавил export PATH+=":/usr/local/bin" to /etc/profile and/root/.bash_profile , but neither of them seem to get sourced automatically when using sudo or when dropping into a root shell withsudo su`.

При указании полного пути к бинарнику жалуется, что не может открыть /dev/btrfs-control. Запрашивая мою локальную поисковую систему, некоторые предлагают udev, но он уже установлен (, возможно, неправильно настроен?)

$ sudo btrfs version
sudo: btrfs: command not found

$ sudo /usr/local/bin/btrfs device scan
Scanning for Btrfs filesystems
WARNING: failed to open /dev/btrfs-control, skipping device registration: No such file or directory
WARNING: failed to open /dev/btrfs-control, skipping device registration: No such file or directory
WARNING: failed to open /dev/btrfs-control, skipping device registration: No such file or directory
WARNING: failed to open /dev/btrfs-control, skipping device registration: No such file or directory
ERROR: there were 4 errors while registering devices

Другие команды BTRFS, кажется, работают.:

$ sudo /usr/local/bin/btrfs filesystem show /dev/sda
Label: 'wdred'  uuid: aaaa-bbbb-cccc-dddd-eeee
    Total devices 4 FS bytes used 2.13TiB
    devid    1 size 5.46TiB used 1.07TiB path /dev/sda
    devid    2 size 5.46TiB used 1.07TiB path /dev/sdc
    devid    3 size 5.46TiB used 1.07TiB path /dev/sdb
    devid    4 size 5.46TiB used 1.07TiB path /dev/sdd

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

Вопросы 2, 3, 4

  1. Безопасно ли пытаться использовать btrfs для монтирования дисков с учетом вышеуказанных ошибок?
  2. Что случилось с ошибкой /dev/btrfs-controlна btrfs device scan?
  3. Как сделать так, чтобы sudoи sudo suпо умолчанию содержали /usr/local/binв своем пути?

Модуль ядра BTRFS

Я подумал, не лучше ли скомпилировать модуль ядра, но, не имея почти никакого опыта взлома ядра, это пошло не так.

Похоже, мне нужно установить CONFIG_BTRFS_FS=mв моей конфигурации ядра для запуска. В настоящее время его там нет, и я, кажется, помню, что мог сделать это в menuconfig.

$ grep "BTRFS" /boot/config-4.18.0-305.19.1.el8_4.x86_64 
# CONFIG_BTRFS_FS is not set

В документации RHEL упоминается, как загружать модули ядра и тому подобное, но не о том, как их собирать. Я проконсультировался с archwiki и попытался загрузить ядро ​​​​RHEL8 с сайта Red Hat. На странице загрузки RHEL8 была вкладка «Источники» с файлом.iso 20G. Я скачал его, смонтировал и обнаружил, что он заполнен файлами.rpm и совсем не похож на исходный репозиторий ядра Linux. Я был немного потерян.

Затем я перешел к /usr/src/kernels/, инициализировал репозиторий git из опасения, что могу испортить что-то важное, и продолжил попытки выяснить, как собрать модуль ядра или что-то изменить в menuconfig.

$ cd /usr/src/kernels/4.18.0-305.19.1.el8_4.x86_64
$ sudo su
# git init
# git add -A
# git commit -m "Unmodified kernel"

# make mrproper
  HOSTCC  scripts/basic/bin2c
scripts/kconfig/conf  --syncconfig Kconfig
arch/x86/Makefile:184: *** Compiler lacks asm-goto support..  Stop.
make: *** [Makefile:1361: _clean_arch/x86] Error 2

Из-за отсутствия поддержки asm-goto интернет предположил, что мне может понадобиться elfutils-libelf-devel, но, похоже, он у меня уже есть.

Для забавы я попытался построить его с clangи с gcc-toolset-10, но оба они имели одну и ту же ошибку.

Вопрос 5

  • Любые идеи, почему Compiler lacks asm-goto support?
  • Какой хороший ресурс о том, как собирать модули ядра / исправлять ядра / модифицировать ядро ​​вашей системы?

Информация о системе

$ uname -a
Linux rhel 4.18.0-305.19.1.el8_4.x86_64 #1 SMP Tue Sep 7 07:07:31 EDT 2021 x86_64 x86_64 x86_64 GNU/Linux

$ gcc --version
gcc (GCC) 8.4.1 20200928 (Red Hat 8.4.1-1)


$ scl run gcc-toolset-10 'gcc --version'
gcc (GCC) 10.2.1 20201112 (Red Hat 10.2.1-8)

$ clang --version
clang version 11.0.0 (Red Hat 11.0.0-1.module+el8.4.0+8598+a071fcd5)

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

1
задан 27 September 2021 в 01:32
1 ответ

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

Я добавилkernel-mlиз ELrepo вот так:

sudo rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
sudo yum install https://www.elrepo.org/elrepo-release-8.el8.elrepo.noarch.rpm
sudo yum --enablerepo=elrepo-kernel install kernel-ml

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

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

$ sudo reboot

$ uname -a
Linux rhel 5.14.8-1.el8.elrepo.x86_64 #1 SMP Sat Sep 25 10:32:52 EDT 2021 x86_64 x86_64 x86_64 GNU/Linux

$ sudo mount UUID=zzz -o defaults,noatime /mnt/hdd

$ ls /mnt/hdd
all my files :)
2
ответ дан 27 September 2021 в 05:34

Теги

Похожие вопросы