我知道我的 CD-ROM 设备(/dev/sr0
),但是如何从脚本中检测驱动器是否为空或者其中是否有磁盘?
答案1
您可以使用命令获取有关任何块设备的信息blkid
。
[root@arch32-vm ~]# blkid /dev/sr0
/dev/sr0: UUID="2013-05-31-23-04-19-00" LABEL="ARCH_201306" TYPE="iso9660" PTTYPE="dos"
[root@arch32-vm ~]# echo $?
0
如果我移除磁盘,则不会得到任何输出,退出值为 2。(0 表示成功。非零值通常意味着发生了异常情况或发生了错误)
[root@arch32-vm ~]# blkid /dev/sr0
[root@arch32-vm ~]# echo $?
2
答案2
setcd -i
(在setcd
软件包中,至少在 Debian 中)可以告诉您驱动器的状态。与其他一些方法(至少是 mount,可能还有 blkid)不同,这将不是尝试关闭托盘,即使在具有此功能的驱动器上也是如此。(如果它在您放入光盘时试图关闭,这真的很烦人)。
托盘打开时:
$ setcd -i /dev/sr0 /dev/sr0: CD 托盘已打开
关闭托盘后:
$ setcd -i /dev/sr0 /dev/sr0: 驱动器尚未准备好
准备好之后:
$ setcd -i /dev/sr0 /dev/sr0: 驱动器中找到光盘:数据光盘类型 1 卷名:«name» 出版商:MKISOFS ISO 9660/HFS FILESYSTEM BUILDER & CDRECORD CD-R/DVD CREATOR (C) 1993 E.YOUNGDALE (C) 1997 J.PEARSON/J.SCHILLING 2005030913034700�2005030913034700�0000000000000000 数据准备者:MKISOFS ISO 9660/HFS FILESYSTEM BUILDER & CDRECORD CD-R/DVD CREATOR (C) 1993 E.YOUNGDALE (C) 1997 J.PEARSON/J.SCHILLING 2005030913034700�2005030913034700�0000000000000000
已关闭,但没有光盘:
$ setcd -i /dev/sr0 /dev/sr0: 未插入光盘
您可以相当轻松地编写脚本:
while true; do
cdinfo=$(setcd -i "$dev")
case "$cdinfo" in
*'Disc found'*)
break;
;;
*'not ready'*)
echo '(waiting for drive to be ready)' >&2;
sleep 3;
;;
*'is open'*)
echo '(drive is open)' >&2;
sleep 5;
;;
*)
printf 'Confused by setcd -i, bailing out:\n%s\n' "$cdinfo" &2
exit 1
esac
done
答案3
您可以使用 Python3 和标准库执行以下操作:
import fcntl
import os
CDROM_DRIVE = '/dev/sr0'
def detect_tray(CDROM_DRIVE):
"""detect_tray reads status of the CDROM_DRIVE.
Statuses:
1 = no disk in tray
2 = tray open
3 = reading tray
4 = disk in tray
"""
fd = os.open(CDROM_DRIVE, os.O_RDONLY | os.O_NONBLOCK)
rv = fcntl.ioctl(fd, 0x5326)
os.close(fd)
print(rv)
答案4
尝试安装该设备。
mount -t iso9660 /dev/sr0 /mnt/cdrom
然后检查返回值$?
如果返回 0,即“良好”,则表示有光盘。否则,它将返回“不良”的“1”或除“0”之外的任何内容
因此,为了默默检查,我会编写如下脚本。
cdrom_mount=0
mount -t iso9660 /dev/sr0 /mnt/cdrom >/dev/null 2>&1
if [[ $? -gt 0 ]]
then
cdrom_mount=true
else
cdrom_mount=false
fi
这是一个非常简单的例子,但您可以做类似的事情......