如何让
Linux更新其CDROM大小的想法而不弹出?换句话说,我怎么能先安装一个新烧光的CDROM,而不先弹出它?
我正在无障碍的增量备份到CDROM.每天my script使用“wodim -msinfo”和“genisoimage -C”来生成使用“wodim-multi”附加到CDROM的图像.然后我的脚本安装CDROM来检查新文件是否正确附加.如果Linux在安装之前更新了CDROM大小的思想,则该脚本只能读取新文件.大小在/ sys / block / sr2 / size和/ proc / partitions中.以前,我的脚本使用“弹出”,然后“弹出-t”让Linux重新读取CDROM. “弹出-t”在我的新CDROM刻录机上不起作用.如何在不弹出CDROM的情况下更新/ proc / partition更新?
看来,“wodim -msinfo”和“genisoimage -C”步骤也要求CDROM自从上次刻录到CDROM之后被弹出,否则我得到消息“genisoimage:无效的参数,在旧的图像上寻找错误”.
有人在2003年问这个问题,但他们收到的答案并不会更新我的CDROM大小. http://compgroups.net/comp.os.linux.questions/rescan-cdrom-frm-command-line/456190
#include <fcntl.h> #include <stdio.h> #include <linux/cdrom.h> int main(void) { int i = 0; int fd = open("/dev/cdrom",O_RDWR); if (fd == -1) { perror("Could not open cdrom"); return 1; } if (ioctl(fd,CDROM_MEDIA_CHANGED)) perror("ioctl"); if (ioctl(fd,CDROMRESET)) perror("ioctl CDROMRESET"); if (ioctl(fd,CDROM_NEXT_WRITABLE,&i)) perror("ioctl CDROM_NEXT_WRITABLE,"); else printf("CDROM_NEXT_WRITABLE %d\n",i); if (ioctl(fd,CDROM_LAST_WRITTEN,&i)) perror("ioctl CDROM_LAST_WRITTEN,"); else printf("CDROM_LAST_WRITTEN %d\n",i); return 0; }
这正是当我创建新的CDROM时会发生什么.我必须弹出它,然后将其推回来安装.
% genisoimage -r -V archive -input-charset ASCII -quiet /usr/lib/vlc > /tmp/libvlc.iso % grep -H sr2 /proc/partitions ; cat /sys/block/sr2/size /proc/partitions: 11 2 2 sr2 4 % wodim driveropts=burnfree -tao -data dev=/dev/sr2 /tmp/libvlc.iso wodim: Operation not permitted. Warning: Cannot raise RLIMIT_MEMLOCK limits. Device type : Removable CD-ROM Version : 0 Response Format: 2 Capabilities : Vendor_info : 'TSSTcorp' Identification : 'CDDVDW SE-S084C ' Revision : 'TU00' Device seems to be: Generic mmc2 DVD-R/DVD-RW. Using generic SCSI-3/mmc CD-R/CD-RW driver (mmc_cdr). Driver flags : MMC-3 SWABAUdio BURNFREE Supported modes: TAO PACKET SAO SAO/R96P SAO/R96R RAW/R16 RAW/R96P RAW/R96R Speed set to 1764 KB/s Starting to write CD/DVD at speed 10.0 in real TAO mode for single session. Last chance to quit,starting real write in 0 seconds. Operation starts. Track 01: Total bytes read/written: 17078272/17078272 (8339 sectors). % grep -H sr2 /proc/partitions ; cat /sys/block/sr2/size /proc/partitions: 11 2 2 sr2 4 % sudo mount /dev/sr2 /mnt mount: /dev/sr2 is write-protected,mounting read-only mount: wrong fs type,bad option,bad superblock on /dev/sr2,missing codepage or helper program,or other error In some cases useful info is found in syslog - try dmesg | tail or so. % grep -H sr2 /proc/partitions ; cat /sys/block/sr2/size /proc/partitions: 11 2 2 sr2 4 % sudo mount /dev/sr2 /mnt mount: /dev/sr2 is write-protected,or other error In some cases useful info is found in syslog - try dmesg | tail or so. % sudo eject /dev/sr2 % #push CDRW back in % grep -H sr2 /proc/partitions ; cat /sys/block/sr2/size /proc/partitions: 11 2 16682 sr2 33364 % sudo mount /dev/sr2 /mnt mount: /dev/sr2 is write-protected,mounting read-only
我已经尝试过各种各样的hdparm选项,但是它们都没有工作,也没有改变内核对CDROM大小的想法,或允许它挂载.
:; sudo hdparm -z /dev/sr2 /dev/sr2: re-reading partition table BLKRRPART Failed: Invalid argument :; sudo hdparm -F /dev/sr2 /dev/sr2: SG_IO: bad/missing sense data,sb[]: 70 00 05 00 00 00 00 0a 00 00 00 00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 SG_IO: bad/missing sense data,sb[]: 70 00 05 00 00 00 00 0a 00 00 00 00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 :; sudo hdparm -Y /dev/sr2 /dev/sr2: issuing sleep command SG_IO: bad/missing sense data,sb[]: 70 00 05 00 00 00 00 0a 00 00 00 00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 :; sudo hdparm -w /dev/sr2 /dev/sr2: resetting drive Hdio_DRIVE_RESET Failed: Invalid argument :; grep -H sr2 /proc/partitions ; cat /sys/block/sr2/size /proc/partitions: 11 2 2 sr2 4 :; sudo mount /dev/sr2 /mnt mount: /dev/sr2 is write-protected,or other error In some cases useful info is found in syslog - try dmesg | tail or so.
指定文件系统的类型没有帮助.
:; grep -H sr2 /proc/partitions ; cat /sys/block/sr2/size /proc/partitions: 11 2 2 sr2 4 :; sudo mount -t iso9660 /dev/sr2 /mnt [sudo] password for root: (pam_mount.c:365): pam_mount 2.14: entering auth stage mount: /dev/sr2 is write-protected,or other error In some cases useful info is found in syslog - try dmesg | tail or so. (pam_mount.c:133): clean system authtok=0x7f0a33b97450 (1073741824) :; grep -H sr2 /proc/partitions ; cat /sys/block/sr2/size /proc/partitions: 11 2 2 sr2 4
从dmesg(1)得到的消息是
[1209552.092616] isofs_fill_super: bread Failed,dev=sr2,iso_blknum=16,block=16
解决方法
我在BD驱动器上遇到同样的问题.对我来说有用的是取消绑定(取消电源)设备并重新绑定.这里是粗略的步骤
>通过“lsscsi -v”找到usb设备
[11:0:0:0] cd/dvd TSSTcorp BDDVDW SE-506AB TS01 /dev/sr1 dir: /sys/bus/scsi/devices/11:0:0:0 [/sys/devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.2/2-1.2:1.0/host11/target11:0:0/11:0:0:0]
关闭设备电源/准备断开连接
sudo bash -c "echo 2-1.2 | tee /sys/bus/usb/drivers/usb/unbind"
>启动设备/重新连接
sudo bash -c "echo 2-1.2 | tee /sys/bus/usb/drivers/usb/bind"
取消绑定/绑定是重置许多USB设备的好方法…