Điểm:1

BTRFS trên RHEL8 - biên dịch mô-đun hạt nhân hoặc làm cho các công cụ không gian người dùng hoạt động

lá cờ it

Bối cảnh

Gần đây tôi đã cài đặt RHEL 8 mà không nhận ra rằng nó không còn hỗ trợ BTRFS.

Thật không may, tôi có 4 đĩa trong BTRFS RAID10. Tôi không có đủ dung lượng trên các đĩa khác của mình để chứa dữ liệu có trên các đĩa BTRFS, vì vậy việc sao chép tất cả dữ liệu đó ở nơi khác trong khi khởi động từ ổ USB là điều không cần thiết.

Tôi có câu hỏi ban đầu của mình, sau đó là một số câu hỏi tiếp theo liên quan đến các phương pháp mà tôi đã thực hiện nhưng không thành công. Vui lòng chỉ tập trung vào phần "làm thế nào để BTRFS hoạt động" của vấn đề này, mặc dù tôi tò mò muốn tìm hiểu về các vấn đề khác nếu bạn có câu trả lời cho bất kỳ phần nào của vấn đề này.

Câu hỏi 1

  1. Có cách nào (tương đối) dễ dàng để BTRFS hoạt động trên RHEL8 không?

Không gian người dùng btrfs-progs

Nỗ lực đầu tiên của tôi để thực hiện công việc này là biên dịch và cài đặt btrfs-progs với những điều sau đây:

# Cài deps
sudo dnf cài đặt libuuid-devel libblkid-devel lzo-devel zlib-devel libzstd-devel e2fsprogs-devel e2fsprogs-libs e2fsprogs libgcrypt-devel libsodium-devel libattr-devel
# Cài deps cho doc gen
Sudo dnf cài đặt asciidoc xmlto source-highlight

# Bản phát hành mới nhất của Shallow-clone
git clone --depth 1 --branch v5.14.1 https://github.com/kdave/btrfs-progs.git
cd btrfs-progs
công tắc git -c v5.14.1

# Xây dựng
# --disable-zoned vì tính năng đó cần kernel >=5.10
xuất CFLAGS="-O3 -pipe -frecord-gcc-switches -mtune=native -march=native"
xuất CPPFLAGS=$CFLAGS
xuất SODIUM_CFLAGS=$CFLAGS
xuất ZSTD_CFLAGS=$CFLAGS
xuất ZLIB_CFLAGS=$CFLAGS
xuất UUID_CFLAGS=$CFLAGS
xuất PYTHON_CFLAGS=$CFLAGS

./autogen.sh
./configure --with-crypto=libsodium --disable-zoned
tạo -j12
sudo thực hiện cài đặt

Có vẻ như nó được cài đặt chính xác và người dùng của tôi có thể truy cập được:

$ mà btrfs
/usr/local/bin/btrfs

$ ls -1 /usr/local/bin/ | grep btrfs
btrfs
btrfsck
btrfs-chuyển đổi
btrfs-tìm-root
hình ảnh btrfs
btrfs-map-logic
btrfs-chọn-siêu
btrfstune
fsck.btrfs
mkfs.btrfs

phiên bản $ btrfs
btrfs-progs v5.14.1 

Tuy nhiên, root dường như không có /usr/local/bin trong đường dẫn của nó theo mặc định. Tôi đã thêm xuất PATH+=":/usr/local/bin" sang /etc/hồ sơ/root/.bash_profile, nhưng dường như cả hai đều không tự động lấy nguồn khi sử dụng sudohoặc khi thả vào một vỏ gốc vớisudo su`.

Khi chỉ định đường dẫn đầy đủ đến tệp nhị phân, nó phàn nàn rằng nó không thể mở /dev/btrfs-kiểm soát. Truy vấn công cụ tìm kiếm cục bộ của tôi, một số đề xuất cần udev, nhưng công cụ đó đã được cài đặt (có thể bị định cấu hình sai?)

$ phiên bản btrfs sudo
sudo: btrfs: không tìm thấy lệnh

$ sudo /usr/local/bin/btrfs quét thiết bị
Quét hệ thống tập tin Btrfs
CẢNH BÁO: không mở được/dev/btrfs-control, bỏ qua đăng ký thiết bị: Không có tệp hoặc thư mục như vậy
CẢNH BÁO: không mở được/dev/btrfs-control, bỏ qua đăng ký thiết bị: Không có tệp hoặc thư mục như vậy
CẢNH BÁO: không mở được/dev/btrfs-control, bỏ qua đăng ký thiết bị: Không có tệp hoặc thư mục như vậy
CẢNH BÁO: không mở được/dev/btrfs-control, bỏ qua đăng ký thiết bị: Không có tệp hoặc thư mục như vậy
LỖI: có 4 lỗi khi đăng ký thiết bị

Các lệnh BTRFS khác dường như hoạt động:

$ Sudo /usr/local/bin/btrfs hiển thị hệ thống tập tin /dev/sda
Nhãn: 'wdred' uuid: aaaa-bbbb-cccc-dddd-eeee
    Tổng số thiết bị sử dụng 4 byte FS 2,13TiB
    devid 1 kích thước 5,46TiB đã sử dụng đường dẫn 1,07TiB /dev/sda
    devid 2 kích thước 5,46TiB đã sử dụng đường dẫn 1,07TiB /dev/sdc
    devid 3 kích thước 5,46TiB đã sử dụng đường dẫn 1,07TiB /dev/sdb
    devid 4 kích thước 5,46TiB đã sử dụng đường dẫn 1,07TiB /dev/sdd

Tuy nhiên, tôi đã ngại gắn kết các phân vùng hoặc thực hiện bất kỳ thao tác nào trên chúng do lỗi trên, vì sợ rằng các thành phần bị thiếu của nó sẽ khiến dữ liệu của tôi bị xáo trộn.

Câu hỏi 2, 3, 4

  1. Có an toàn không khi thử sử dụng btrfs để gắn các đĩa do các lỗi trên?
  2. Có chuyện gì với /dev/btrfs-kiểm soát lỗi trên quét thiết bị btrfs?
  3. Làm thế nào tôi có thể nhận được sudosudo su/usr/local/bin trong đường dẫn của nó theo mặc định?

Mô-đun hạt nhân BTRFS

Tôi tự hỏi liệu có thể tốt hơn nếu biên dịch một mô-đun hạt nhân hay không, nhưng hầu như không có kinh nghiệm hack hạt nhân, mọi thứ trở nên tồi tệ.

Có vẻ như tôi cần phải thiết lập CONFIG_BTRFS_FS=m trong cấu hình hạt nhân của tôi để bắt đầu. Nó hiện không có ở đó và tôi dường như nhớ mình có thể làm điều này trong menuconfig.

$ grep "BTRFS" /boot/config-4.18.0-305.19.1.el8_4.x86_64 
# CONFIG_BTRFS_FS chưa được đặt

Tài liệu RHEL đề cập đến cách tải các mô-đun hạt nhân, v.v., nhưng không đề cập đến cách xây dựng chúng. Tôi đã tham khảo archwiki và cố tải xuống hạt nhân RHEL8 từ trang Red Hat. Trang tải xuống cho RHEL8 có tab "Nguồn" với tệp .iso 20G. Tôi đã tải xuống, cài đặt nó và thấy nó chứa đầy các tệp .rpm và trông không giống bất kỳ thứ gì giống như kho lưu trữ nguồn nhân linux. Tôi hơi lạc lõng.

sau đó tôi đã đi đến /usr/src/nhân/, đã khởi tạo một git repo vì sợ rằng tôi sẽ ghi đè một thứ gì đó quan trọng, và tiếp tục cố gắng tìm ra cách xây dựng mô-đun hạt nhân hoặc thay đổi mọi thứ trong menuconfig.

$ cd /usr/src/kernels/4.18.0-305.19.1.el8_4.x86_64
$ sudo su
# git init
# git thêm -A
# git commit -m "Hạt nhân chưa sửa đổi"

# làm ông chủ
  Tập lệnh HOSTCC/cơ bản/bin2c
tập lệnh/kconfig/conf --syncconfig Kconfig
arch/x86/Makefile:184: *** Trình biên dịch thiếu hỗ trợ asm-goto.. Dừng lại.
thực hiện: *** [Tệp tạo tệp: 1361: _clean_arch/x86] Lỗi 2

Thiếu hỗ trợ asm-goto, internet gợi ý rằng tôi có thể cần elfutils-libelf-devel nhưng tôi dường như đã có điều đó.

Đối với funzies, tôi đã thử xây dựng nó với kêu vang và với gcc-toolset-10, nhưng cả hai đều có cùng một lỗi.

câu hỏi 5

  • Bất kỳ ý tưởng tại sao Trình biên dịch thiếu hỗ trợ asm-goto?
  • Tài nguyên tốt về cách xây dựng mô-đun hạt nhân/hạt nhân vá/sửa đổi hạt nhân hệ thống của bạn là gì?

Thông tin hệ thống

$ uname -a
Linux rhel 4.18.0-305.19.1.el8_4.x86_64 #1 SMP Thứ ba ngày 7 tháng 9 07:07:31 EDT 2021 x86_64 x86_64 x86_64 GNU/Linux

$ gcc --version
gcc (GCC) 8.4.1 20200928 (Mũ đỏ 8.4.1-1)


$ scl chạy gcc-toolset-10 'gcc --version'
gcc (GCC) 10.2.1 20201112 (Mũ đỏ 10.2.1-8)

$ clang --version
clang phiên bản 11.0.0 (Mũ đỏ 11.0.0-1.module+el8.4.0+8598+a071fcd5)

Cảm ơn đã đọc đến đây! Bất kỳ trợ giúp được đánh giá cao.

Michael Hampton avatar
lá cờ cz
Giả sử CONFIG_BTRFS được kích hoạt trong hạt nhân ELrepo kernel-ml. Bạn cũng cần nội dung không gian người dùng, đang trong quá trình thử nghiệm elrepo (và đã có kể từ khi RHEL 8 ở giai đoạn thử nghiệm). Điều này sẽ cho phép bạn khôi phục các tệp của mình để bạn có thể chuyển sang hệ thống tệp khác.
catleeball avatar
lá cờ it
Điều đó có vẻ hiệu quả, cảm ơn @MichaelHampton!
lá cờ de
Khả năng khác là kích hoạt kho lưu trữ Oracle Linux và cài đặt hạt nhân không thể phá vỡ callwd
catleeball avatar
lá cờ it
@kofemann có lý do nào để sử dụng Oracle UEK trên nhân linux dòng chính cho việc này không?
Điểm:2
lá cờ it

Trong các nhận xét, câu trả lời của @MichaelHampton đã hoạt động.

Tôi đã thêm nhân-ml từ ELrepo như thế này:

sudo rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
sudo yum cài đặt https://www.elrepo.org/elrepo-release-8.el8.elrepo.noarch.rpm
Sudo yum --enablerepo=elrepo-kernel cài đặt kernel-ml

Lưu ý rằng tôi đã xây dựng các công cụ không gian người dùng btrfs-progs và phác thảo các bước xây dựng trong câu hỏi trên. Nếu bạn đến đây từ Google, bạn sẽ cần cài đặt btrfs-progs ngoài mô-đun hạt nhân.

Sau đó, khởi động lại, kiểm tra xem tôi có đang chạy nhân chính không và có thể gắn các đĩa của mình bằng BTRFS và đọc dữ liệu của chúng.

khởi động lại $ sudo

$ uname -a
Linux rhel 5.14.8-1.el8.elrepo.x86_64 #1 SMP Thứ bảy ngày 25 tháng 9 10:32:52 EDT 2021 x86_64 x86_64 x86_64 GNU/Linux

$ Sudo mount UUID=zzz -o mặc định, không có thời gian /mnt/hdd

$ ls /mnt/hdd
tất cả các tập tin của tôi :)

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.