我有一个脚本可以在 Gentoo 系统上的 DVD 上写入一些备份。
最初,我收集了文件,创建了 ISO 映像,然后使用 cdrecord 将该映像刻录到磁盘上。
刻录过程完成后,我想安装写入的 DVD,然后安装 ISO 映像并比较文件和大小。
问题是,如果不先弹出 DVD,我就无法播放 DVD。
不幸的是,在我的场景中,我无法取回 DVD,因为我有一个小型便携式 USB DVDRW。
关于我应该如何处理这个问题有什么想法吗?
答案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 中的目录树路径而不是 /disk/pathX /iso/pathX 。
如果您在命令 -for_backup 生效时通过 xorriso 创建 ISO,或者使用 xorrisofs 和选项 --for_backup 创建 ISO,将会变得更加方便。
xorrisofs --for_backup ...mkisofs.arguments...
这样的 ISO 可以通过以下方式验证
xorriso -for_backup -indev /dev/sr0 -check_md5_r 抱歉/--