需要检查CD-ROM是否加载

需要检查CD-ROM是否加载

我检查了文件/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 确定驱动器是否“忙”。由于在划痕上读取可能需要很多秒,并且在此过程中您甚至无法打开设备,因此这项检查是值得做的。

相关内容