我检查了文件/proc/sys/dev/cdrom/info
$ cat /proc/sys/dev/cdrom/info
CD-ROM information, Id: cdrom.c 3.20 2003/12/17
drive name: sr0
drive speed: 1
drive # of slots: 1
Can close tray: 1
Can open tray: 1
Can lock tray: 1
Can change speed: 1
Can select disk: 0
Can read multisession: 1
Can read MCN: 1
Reports media changed: 1
Can play audio: 1
Can write CD-R: 1
Can write CD-RW: 1
Can read DVD: 1
Can write DVD-R: 1
Can write DVD-RAM: 1
Can read MRW: 1
Can write MRW: 1
Can write RAM: 1
我无法找到应该考虑哪一列来确认 CD-ROM 已加载。
谷歌搜索还告诉我检查文件的值/proc/sys/dev/cdrom/lock
,在我的例子中该值是 1。这应该如何解释?
或者有没有其他方法可以获取这些信息。
答案1
根据我的测试,最好的方法是:
blockdev --getsize64 /dev/sr0
无需安装,它不关心介质是否为空,音频,...
如果您收到此错误:
blockdev: cannot open /dev/sr0: No medium found
这意味着 CD-ROM 未加载。如果您的输出是一个数字,零或更大(数字代表字节大小),则表示您的 CD-ROM 已加载。
当然,您可以使用 head、file、cd-info、可能的其他工具(可以使用 cat、grep、sed,但当光盘/介质不为空时它们就没那么有用),但本质上您最终会寻找错误/输出“未找到介质”行(文件工具除外)。
正如我所说,最好的方法是 blockdev(在我看来),但如果您愿意,您可以使用其他方法,例如:
head -1 /dev/sr0
无终端输出 - 表示 CD-ROM 已加载,但光盘是空的。
错误行“未找到介质”- 表示未加载 CD-ROM。
任何其他终端输出(错误除外)- 表示 cd-rom 已加载。
cd-info
最短的打字机。查找“未找到介质”行 - 如果您发现没有加载介质,则其他任何内容实际上都意味着介质已加载。另外,您还将获得有关您的 CD-ROM 的其他有用信息。
file -s /dev/sr0
终端输出“/dev/sr0:可写,无读权限”表示未加载介质,终端输出“/dev/sr0:空”表示介质已加载,但为空。
答案2
lock
只是告诉您驱动器上的弹出按钮(如果有)是否处于活动状态。通常在Linux上,当安装光盘时,弹出按钮被禁用。
来判断是否有什么是安装在光驱中后,您可以检查内容/etc/mtab
并查找安装点(例如/mnt/cdrom
)或光驱设备(例如/dev/cdrom
)。
答案3
检查 中的“ID_CDROM_MEDIA” udevadm info -q property /dev/cdrom
,尽管这当然只有在驱动器对新输入的 CD 的初始化在片刻之后完成的情况下才有效。
答案4
要测试驱动器是否已加载、为空、打开或未准备好,可以使用ioctl()
调用CDROM_DRIVE_STATUS
(0x5326)。这在Documentation/userspace-api/ioctl/cdrom.rst
和 处的 Linux 内核源代码中进行了记录Documentation/cdrom/cdrom-standard.rst
,并在 处的示例程序中使用Documentation/cdrom/ide-cd.rst
。请注意,这不会告诉您它是否已安装,或正在播放,或其他任何内容,只是告诉您是否存在某些东西。
我找不到程序来执行此操作,所以我编写了自己的程序。根据这次经验,您可能还需要检查 /sys/dev/block/主要的:次要的/inflight 确定驱动器是否“忙”。由于在划痕上读取可能需要很多秒,并且在此过程中您甚至无法打开设备,因此这项检查是值得做的。