젠투 시스템의 DVD에 일부 백업을 기록하는 스크립트가 있습니다.
처음에는 파일을 수집하고 ISO 이미지를 만든 다음 cdrecord를 사용하여 이미지를 디스크에 구웠습니다.
굽기 프로세스가 완료된 후 작성된 DVD를 마운트한 다음 ISO 이미지를 마운트하고 파일과 크기를 비교하려고 합니다.
문제는 DVD를 먼저 꺼내지 않으면 DVD를 재생할 수 없다는 것입니다.
불행히도 내 시나리오에서는 작은 휴대용 USB DVDRW가 있기 때문에 DVD를 다시 가져올 수 없습니다.
이 문제를 어떻게 처리해야 하는지에 대한 아이디어가 있나요?
답변1
lsscsi를 사용하여 DVD 드라이브의 scsi ID를 확인합니다. (저는 숫자에 "A", "B", "C", "D"를 사용합니다)
# lsscsi
[0:0:0:0] disk ATA SAMSUNG MZNLN512 1L6Q /dev/sda
[A:B:C:D] cd/dvd PLDS DVD-RW DU8A6SH DU53 /dev/sr0
장치를 제거
# echo 1 > /sys/class/scsi_device/A\:B\:C\:D/device/delete
장치를 다시 로드합니다. 아래 예에서 "hostA"A는 위의 lsscsi 줄에서 나옵니다.
# echo 'B C D'> /sys/class/scsi_host/hostA/scan
답변2
이는 굽기 프로그램과 Linux 커널 사이의 알려진 문제입니다. 커널은 SG_IO ioctl을 레코더 장치에만 전달하며 장치 내용이 변경되었음을 인식하지 못합니다. 따라서 해당 장치 상태 모델과 데이터 버퍼는 오래된 상태로 유지됩니다.
미디어를 다시 로드하는 것 외에 커널이 미디어를 다시 평가하도록 하는 신뢰할 수 있는 방법을 모르겠습니다. Orion에서 제안한 udevadm 트리거가 도움이 된다면 정확한 명령 텍스트를 알고 싶습니다.
ISO 9660 파일 시스템이라면 xorriso는 SG_IO ioctl을 통해 파일의 실제 내용을 읽어서 파일을 비교할 수 있습니다.
xorriso -for_backup -indev /dev/sr0 -compare_r /disk/path1 /iso/path1 -compare_r /disk/path2 /iso/path2 ...more.compare_r...
/iso/pathX 대신 /disk/pathX를 사용하여 하드 디스크와 ISO의 디렉터리 트리 경로를 비교합니다.
-for_backup 명령이 실행되는 동안 xorriso를 통해 ISO를 생성하거나 --for_backup 옵션과 함께 xorrisofs를 사용하는 경우 더 편리합니다.
xorrisofs --for_backup ...mkisofs.arguments...
이러한 ISO는 다음을 통해 확인할 수 있습니다.
xorriso -for_backup -indev /dev/sr0 -check_md5_r 죄송합니다/--