![LUKS 在运行 Atom C3758 CPU 的 CentOS 上挂起](https://linux22.com/image/750313/LUKS%20%E5%9C%A8%E8%BF%90%E8%A1%8C%20Atom%20C3758%20CPU%20%E7%9A%84%20CentOS%20%E4%B8%8A%E6%8C%82%E8%B5%B7.png)
每当我尝试在 Supermicro A2SDi-8C-HLN4F 主板(Intel ATOM CPU C3758)上的 CentOS 安装上设置 LUKS 时,一切似乎都运行正常,直到创建文件系统(ext4)或尝试挂载文件系统(xfs)时,该过程完全冻结。无论我尝试使用—encrypted
kickstart 配置中的指令将其安装,还是尝试在物理驱动器(/dev/sde)、RAID 设备(/dev/md127)、LVM 中的物理卷或逻辑卷,甚至是回送挂载文件(/dev/loop0)上执行此操作,都没有关系。CentOS 7.7 和 8.1 中都出现了同样的问题。
我从某处看到内存可能存在问题,因此我切换了两个 DIMM 并运行 MemTest86+,结果没有任何错误。
尝试在上述设备上创建文件系统时使用的步骤:
cryptsetup --force-password luksFormat <device>
cryptsetup luksOpen <device> <testname>
mkfs -t ext4 /dev/mapper/<testname>
在执行 mkfs 命令期间,进程总是会挂起,并且即使使用 ,也无法终止该进程(或者更确切地说是 mkfs.ext4 子进程)kill -9
。
过了一会儿,我的 dmesg 中出现了以下内容:
[ 492.528687] Not tainted 4.18.0-147.5.1.el8_1.x86_64 #1
[ 492.528719] "echo 0 > /proc/sys/kernel/hung_task_timeout_secs" disables this message.
[ 492.528764] kworker/u17:0 D 0 4238 2 0x80000080
[ 492.528777] Workqueue: kcryptd/253:3 kcryptd_crypt [dm_crypt]
[ 492.528778] Call Trace:
[ 492.528787] ? __schedule+0x253/0x830
[ 492.528791] ? mempool_alloc+0x67/0x190
[ 492.528793] schedule+0x28/0x70
[ 492.528795] schedule_timeout+0x26d/0x390
[ 492.528803] ? qat_alg_sgl_to_bufl.isra.11+0x456/0x770 [intel_qat]
[ 492.528807] ? dma_direct_unmap_page+0x7a/0x80
[ 492.528809] wait_for_completion+0x11f/0x190
[ 492.528811] ? wake_up_q+0x70/0x70
[ 492.528814] crypt_convert+0xa13/0xf00 [dm_crypt]
[ 492.528818] ? bio_alloc_bioset+0xdc/0x210
[ 492.528820] ? __switch_to_asm+0x41/0x70
[ 492.528822] ? __switch_to_asm+0x35/0x70
[ 492.528825] kcryptd_crypt+0x2f3/0x3b0 [dm_crypt]
[ 492.528828] process_one_work+0x1a7/0x3b0
[ 492.528831] worker_thread+0x30/0x390
[ 492.528833] ? create_worker+0x1a0/0x1a0
[ 492.528835] kthread+0x112/0x130
[ 492.528837] ? kthread_flush_work_fn+0x10/0x10
[ 492.528839] ret_from_fork+0x35/0x40
使用以下命令启动命令strace mkfs ...
总是在输出中完全相同的字符处停止:
pwrite64(3, ”\3...”) = 4096
pwrite64(3, ”\3...”) = 4096
fsync(3
我不知道最后一行缺少的右括号有什么意义,但它总是停在这个确切的位置。
我该如何更准确地识别正在发生的事情以及问题可能出在哪里?
答案1
是什么帮我解决了这个问题?在错误消息中四处寻找。模块intel_qat
原来是罪魁祸首,还有另一个相关模块qat_c3xxx
。因此,通过将模块列入黑名单,它就不再挂起。
blacklist intel_qat /bin/false
blacklist qat_c3xxx /bin/false
过了一会儿,我收到建议检查 BIOS,其中深处有一个 QAT 设置,当在 BIOS 中禁用它时,黑名单不再需要。