udevadm을 사용하여 initramfs 내에서 scsi 스캔이 완료될 때까지 기다리시겠습니까?

udevadm을 사용하여 initramfs 내에서 scsi 스캔이 완료될 때까지 기다리시겠습니까?

문제는 어디에 있습니까? 저는 Archzfs와 함께 ArchLinux를 사용하고 있는데, ZFS에서 사용하는 모든 디스크의 SCSI 스캔이 완료되기 전에 initramfs의 zfs 후크가 조기에 풀 가져오기를 시도하고 실패하는 경우가 있습니다. 이로 인해 zfs가 내 시스템의 루트 파일 시스템으로도 사용되기 때문에 시작이 실패합니다. 이 문제를 해결하기 위해 scsi 스캔이 완료될 때까지 zfs 후크가 실행되는 것을 방지하는 몇 가지 명령을 찾고 있습니다( ashinitramfs 이미지 내에 저장되고 실행되는 스크립트일 뿐입니다).

이것은 udevadm과 어떤 관련이 있습니까? 3.6 이전 Linux 커널을 사용하는 경우 modprobe scsi_wait_scan ; rmmod scsi_wait_scan ;scsi 스캔이 완료될 때까지 차단 zfs 후크를 추가하기만 하면 됩니다. 하지만 저는 4.4 커널을 사용하고 있는데 이 모듈을 사용할 수 없습니다. 사용을 고려하고 있지만 udevadm settle실제로 이 목적에 적합한지는 잘 모르겠습니다. 이는 ArchLinux에 zfs 후크 이전에 실행되고 다음을 수행하는 udev 후크가 이미 있기 때문입니다.

run_hook() { msg ":: Triggering uevents..." udevadm trigger --action=add --type=subsystems udevadm trigger --action=add --type=devices udevadm settle }

그래서 아래에는https://bugs.launchpad.net/ironic-python-agent/+bug/1551300zfs 후크에 두 줄을 추가하기로 결정했습니다(zfs 가져오기 전).

# Force udev to list all devices, will block until scsi scan is completed udevadm trigger --verbose --dry-run --type=devices --subsystem-match=scsi_disk udevadm settle

이게 말이 돼? 아니면 뭔가 다른 것을 시도해 봐야 할까요? 솔루션 테스트의 문제점은 문제가 산발적으로만 발생한다는 것입니다. 즉, 다시 확인하지 않고 컴퓨터를 여러 번 다시 시작해도 문제가 해결되었다는 보장이 없습니다. 따라서 여기서 묻는 질문은 initramfs내 문제를 해결하기 위한 것이 아니라 udevadmscsi 스캔이 완료될 때까지 기다리는 것이 사용될 수 있는지 여부와 사용할 수 있다면 방법을 확인(또는 거부)하는 것입니다.

답변1

흥미롭게도 udevadm set은 SCSI 장치 스캔이 완료될 때까지 zfs가 로드되는 것을 막지 못하는 것 같습니다. 마침내 이와 같은 동기화 scsi 스캔을 강제하여 문제를 해결했습니다.

bronek@gdansk ~ % cat /etc/modprobe.d/zfs.conf
# Enforce synchronous scsi scan, to prevent zfs driver loading before disks are available
options scsi_mod scan=sync

관련 정보