문제는 어디에 있습니까?
저는 Archzfs와 함께 ArchLinux를 사용하고 있는데, ZFS에서 사용하는 모든 디스크의 SCSI 스캔이 완료되기 전에 initramfs의 zfs 후크가 조기에 풀 가져오기를 시도하고 실패하는 경우가 있습니다. 이로 인해 zfs가 내 시스템의 루트 파일 시스템으로도 사용되기 때문에 시작이 실패합니다. 이 문제를 해결하기 위해 scsi 스캔이 완료될 때까지 zfs 후크가 실행되는 것을 방지하는 몇 가지 명령을 찾고 있습니다( ash
initramfs 이미지 내에 저장되고 실행되는 스크립트일 뿐입니다).
이것은 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
내 문제를 해결하기 위한 것이 아니라 udevadm
scsi 스캔이 완료될 때까지 기다리는 것이 사용될 수 있는지 여부와 사용할 수 있다면 방법을 확인(또는 거부)하는 것입니다.
답변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