บริบท
ฉันเพิ่งติดตั้ง RHEL 8 โดยไม่รู้ตัว ไม่รองรับ BTRFS อีกต่อไป.
ขออภัย ฉันมีดิสก์ 4 แผ่นใน BTRFS RAID10 ฉันมีพื้นที่ไม่เพียงพอในดิสก์อื่นๆ ที่จะเก็บข้อมูลที่มีอยู่ในดิสก์ BTRFS ดังนั้นการคัดลอกข้อมูลทั้งหมดไปที่อื่นในขณะที่บู๊ตจากไดรฟ์ USB นั้นไม่ใช่เรื่องไกลตัว
ฉันมีคำถามเริ่มต้น จากนั้นมีคำถามติดตามผลเกี่ยวกับแนวทางที่ฉันใช้ซึ่งล้มเหลว อย่าลังเลที่จะมุ่งเน้นไปที่ส่วน "วิธีทำให้ BTRFS ทำงาน" ของปัญหานี้ แม้ว่าฉันจะอยากรู้เกี่ยวกับปัญหาอื่นๆ หากคุณมีคำตอบสำหรับส่วนใดส่วนหนึ่งของเรื่องนี้
คำถามที่ 1
- มีวิธีง่ายๆ (ค่อนข้าง) ในการทำให้ BTRFS ทำงานบน RHEL8 หรือไม่
พื้นที่ผู้ใช้ btrfs-progs
ความพยายามครั้งแรกของฉันในการทำงานนี้คือการรวบรวมและติดตั้ง btrfs-progs
ด้วยสิ่งต่อไปนี้:
#ติดตั้งเดป
sudo dnf ติดตั้ง libuuid-devel libblkid-devel lzo-devel zlib-devel libzstd-devel e2fsprogs-devel e2fsprogs-libs e2fsprogs libgcrypt-devel libsodium-devel libattr-devel
# ติดตั้ง deps สำหรับ doc gen
sudo dnf ติดตั้ง asciidoc xmlto ซอร์สไฮไลต์
# Shallow-clone รุ่นล่าสุด
git clone -- ความลึก 1 --branch v5.14.1 https://github.com/kdave/btrfs-progs.git
ซีดี btrfs-progs
สวิตช์คอมไพล์ -c v5.14.1
# สร้าง
# --disable-zoned เนื่องจากคุณลักษณะนั้นต้องการเคอร์เนล >=5.10
ส่งออก 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
sudo ทำการติดตั้ง
ดูเหมือนว่าจะติดตั้งอย่างถูกต้องและผู้ใช้ของฉันสามารถเข้าถึงได้:
$ ซึ่ง btrfs
/usr/local/bin/btrfs
$ ls -1 /usr/local/bin/ | grep btrfs
btrfs
btrfsck
btrfs-แปลง
btrfs-ค้นหาราก
btrfs-ภาพ
btrfs-แผนที่ตรรกะ
btrfs-เลือกซุปเปอร์
btrfstune
fsck.btrfs
mkfs.btrfs
รุ่น $ btrfs
btrfs-progs v5.14.1
อย่างไรก็ตามเห็นได้ชัดว่ารูทไม่มี /usr/local/bin
ในเส้นทางของมันโดยปริยาย ฉันเพิ่ม ส่งออก PATH+=":/usr/local/bin" เป็น
/etc/profileและ
/root/.bash_profileแต่ดูเหมือนว่าทั้งคู่ไม่ได้รับแหล่งที่มาโดยอัตโนมัติเมื่อใช้งาน
ซูโดหรือเมื่อหยดลงในรูตเชลล์ด้วย
sudo su`.
เมื่อระบุเส้นทางแบบเต็มไปยังไบนารี มันจะบ่นว่าไม่สามารถเปิดได้ /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.13TiB
ส่วนที่ 1 ขนาด 5.46TiB ใช้เส้นทาง 1.07TiB /dev/sda
ส่วนที่ 2 ขนาด 5.46TiB ใช้เส้นทาง 1.07TiB /dev/sdc
devid 3 ขนาด 5.46TiB ใช้เส้นทาง 1.07TiB /dev/sdb
devid 4 ขนาด 5.46TiB ใช้เส้นทาง 1.07TiB /dev/sdd
อย่างไรก็ตาม ฉันกลัวที่จะเมานต์พาร์ติชันหรือดำเนินการใดๆ กับพาร์ติชันเนื่องจากข้อผิดพลาดข้างต้น เพราะกลัวว่าส่วนประกอบที่ขาดหายไปจะทำให้ข้อมูลของฉันยุ่งเหยิง
คำถามที่ 2, 3, 4
- ปลอดภัยไหมที่จะพยายามใช้ btrfs เพื่อเมานต์ดิสก์เนื่องจากข้อผิดพลาดข้างต้น
- เกิดอะไรขึ้นกับ
/dev/btrfs-ควบคุม
เกิดข้อผิดพลาด การสแกนอุปกรณ์ btrfs
?
- ฉันจะได้รับได้อย่างไร
ซูโด
และ ซูโด ซู
เพื่อที่จะมี /usr/local/bin
ในเส้นทางของมันไปโดยปริยาย?
โมดูลเคอร์เนล 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 และดูไม่เหมือน repo เคอร์เนลของลินุกซ์เลย ฉันหลงทางเล็กน้อย
จากนั้นฉันก็ไปที่ /usr/src/เมล็ด/
เริ่มต้น git repo ด้วยความกลัวว่าฉันจะไปขัดขวางสิ่งที่สำคัญ และพยายามหาวิธีสร้างโมดูลเคอร์เนลหรือเปลี่ยนแปลงสิ่งต่างๆ ใน menuconfig
$ ซีดี /usr/src/kernels/4.18.0-305.19.1.el8_4.x86_64
$ sudo ซู
# เริ่มต้นคอมไพล์
# git เพิ่ม -A
# git commit -m "เคอร์เนลที่ไม่ได้แก้ไข"
#ทำให้ถูกต้อง
สคริปต์ HOSTCC/พื้นฐาน/bin2c
สคริปต์/kconfig/conf --syncconfig Kconfig
arch/x86/Makefile:184: *** คอมไพเลอร์ขาดการสนับสนุน asm-goto.. หยุด
ทำ: *** [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 EDT 2021 x86_64 x86_64 x86_64 GNU/Linux
$ gcc -- รุ่น
gcc (GCC) 8.4.1 20200928 (เรดแฮท 8.4.1-1)
$ scl รัน gcc-toolset-10 'gcc --version'
gcc (GCC) 10.2.1 20201112 (เรดแฮท 10.2.1-8)
$ เสียงดังกราว --version
เสียงดังกราวเวอร์ชัน 11.0.0 (Red Hat 11.0.0-1.module+el8.4.0+8598+a071fcd5)
ขอบคุณที่อ่านมาถึงตรงนี้! ความช่วยเหลือใด ๆ ที่ชื่นชม