Mounting CDROMs on Solaris Unix in general and Solaris in particular has the propensity to make simple tasks complex and mounting CDROM is one of such cases. There are two main ways of mount CDROM on Solaris • •
Using vold daemon Direct mounting using mount command
Using vold The simplest way to mount CDROM on Solaris is use vold daemon. The vold daemon in Solaris manages the CDROM device and automatically performs the mounting similar to how Windows manages CDROMs (but not as transparent or reliable). If CD is detected in drive its should be automatically mounted to the /cdrom/cdrom0 directory. If you are running File Manager, a separate File Manager window displays the contents of the CDROM. If the /cdrom/cdrom0 directory is empty because the CDROM was not mounted, or if File Manager did not open a window displaying the contents of the CDROM the first step is to verify the vold daemon is running using the command: # pgrep vold If vold is running, the system displays the process identification number of vold. If the system does not display anything, restart the daemon by entering the following command: # /usr/sbin/vold & If the vold daemon is running but did not mount the CDROM, stop the vold daemon process and then restart the daemon. To stop the vold process, you must know the process identification number. you can get it by entering this command: # pgrep vold Restart the vold process by entering the following command: # pkill vold && /usr/sbin/vold & In Solaris 9, you need to stop the volume management service: /etc/init.d/volmgt stop
Using direct mount command If approach based on vold does not work you do try to do it via direct mount command. The first step is to determine the device which corresponds to the CDROM drive on you server or workstation.
CDROM on Solaris is usually linked to device /dev/sr0. You can determine the name of the device by entering the following command: ls -al /dev/sr* |awk '{print "/" $11}' This command returns the name(s) of the CDROM devices on the server. For example, the command can return the string /dev/dsk/c0t6d0s2. You can also get the device name in cxtydzsn format, associated with the CD drive: % iostat -En c1t0d0 Errors: 0
Soft Errors: 149 Hard Errors: 0 Transport
Vendor: MATSHITA Product: CDRW/DVD UJDA740 Revision: 1.00 Serial No: Size: 0.56GB <555350016 bytes> Media Error: 0 Device Not Ready: 0 No Device: 0 Recoverable: 0 Illegal Request: 149 Predictive Failure Analysis: 0 Here •
•
-E displays all device error statistics & -n shows the names in descriptive format. We are interested in only the logical device name though. slice 0 is the default
After you determined the name of device for CDROM drive you can use mount command (if mounting directory for example /cdrom does not exit you need to create it mkdir /cdrom; chmod a+rwx /cdrom ): mount -F hsfs -r /dev/sr0 /cdrom or mount -F hsfs -o ro /dev/dsk/c1t0d0s0 /cdrom to mount it (I would like to stress it again that directory /cdrom should exist and have proper permissions for operation to succeed). After then you can check the results using df command, for example / 959851 files
(/dev/dsk/c0d0s0
):11467100 blocks
... ... ... /cdrom
(/dev/dsk/c1t0d0s0 ):
0 blocks
If you want to simplify the mount process, you can add an entry to the /etc/vfstab file. Edit the /etc/vfstab file and add the following entry: /dev/dsk/cΨt6dΨs2
-
/cdrom
hsfs
-
no
ro
If you have UFS CDROM you can specify multiple entries, one for each typr of the filesystem, for example:
/dev/dsk/cΨt6dΨs2 - /cdrom-hsfs hsfs - no ro /dev/dsk/cΨt6dΨs2 - /cdrom-ufs ufs - no ro
Sharing CDROM mounted on Remote server/workstation Use a text editor to create an /etc/dfs/dfstab file, if one does not exist. Add the following line to the /etc/dfs/dfstab file: share F nfs o ro /cdrom/cd1 Ensure your remote machine is enabled as an NFS server by entering the following command: # ps -ef | grep nfs | grep -v grep This indicates whether the following daemons are running: /usr/lib/nfs/nfsd and /usr/lib/nfs/mountd. If these daemons are not running, you need to enable your machine as an NFS server by entering the following command: # /etc/init.d/nfs.server start If your machine is enabled as an NFS server, enter one of the following commands: # share or # shareall
Log on as superuser on target machine. Then create a /cdrom directory, if one does not already exist, by entering the following command: # mkdir -p /cdrom/cd1 Now you can mount the remote CDROM as NFS filesystem using command # /usr/sbin/mount -r remote_machine_name:/cdrom/cd1 /cdrom/cd1
Unmounting the CD-ROM Drive You need to move out of the CDROM directory to successfully unmount it: # cd / && umount /cdrom/cdrom0 If CDROM is mounted via NFS from remote computer you need unmount it in two places.
The typical problem is that some process is still using the mounted filesystem. The fuser utility lists processes using a file or files in a filesystem. To determine what processes may be preventing a filesystem's amount, the c switch should be used: fuser c /cdrom This command will list the process ids of processes with open files in the filesystem mounted under /mnt. The characters following the pid provide additional information about the file: c the process is using the file as its current working directory m the file is mapped with mmap o the process is using it as an open file r the file is the root directory of the process t the process is accessing the file as a text file y this file is the controlling terminal for the process
Before unmounting a filesystem, Solaris checks to ensure that no files are open to prevent loss of data. The following are steps that can be followed when a filesystem won't unmount. The fuser utility lists processes using a file or files in a filesystem. It's To determine what processes may be preventing a filesystem's umount, the c switch must be used as running this command as root:
fuser c /mnt /mnt: 19504tm 19492tm 19460tm
This command will list the process ids of processes with open files in the filesystem mounted under /mnt. The characters following the pid provide additional information about the file:
c the process is using the file as its current working directory m the file is mapped with mmap o the process is using it as an open file r the file is the root directory of the process t the process is accessing the file as a text file y this file is the controlling terminal for the process A useful option for fuser is u which adds the username owning the process to the display: fuser cu /mnt /mnt: 19504tm(root) 19492tm(root) 19460tm(qmchenry) If you feel comfortable killing the processes reported by fuser, you can do it in one quick blow with the k option:
fuser ck /mnt
This sends the SIGKILL signal to each process which is the same as running kill pid to each process. However, before you go to this extreme, perhaps the most common reason a filesystem won't unmount is because you (or a previous shell you used) has its current working directory in that filesystem.