![udevadm을 사용하여 initramfs 내에서 scsi 스캔이 완료될 때까지 기다리시겠습니까?](https://linux55.com/image/99720/udevadm%EC%9D%84%20%EC%82%AC%EC%9A%A9%ED%95%98%EC%97%AC%20initramfs%20%EB%82%B4%EC%97%90%EC%84%9C%20scsi%20%EC%8A%A4%EC%BA%94%EC%9D%B4%20%EC%99%84%EB%A3%8C%EB%90%A0%20%EB%95%8C%EA%B9%8C%EC%A7%80%20%EA%B8%B0%EB%8B%A4%EB%A6%AC%EC%8B%9C%EA%B2%A0%EC%8A%B5%EB%8B%88%EA%B9%8C%3F.png)
문제는 어디에 있습니까?
저는 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