Thayumanasamy Somasundaram

414 Kasha Laboratory

Institute of Molecular Biophysics

Florida State University

Tallahassee, FL 32306-4380

Telephone: 850-644-6448


For details, contact:

Thay ‘Soma’sundaram

Telephone: 850-644-6448

E-mail: soma@sb.fsu.edu

URL: www.sb.fsu.edu/~soma


Soma’s Computer Notes:  Installation of FireWire Drive under Linux


Copyright © 2003-2004 Thayumanasamy Somasundaram

 

.

.

.

.

.

.

.

.

.

.

.

.

 

 

 

. . . . . . . . . . . . . . . . . . . . . . . . . .

 

.

.

.

.

.

.

.

.

.

.

.

.

 
Soma’s Computer Notes

Procedure for installing a FireWire drive under Linux (Kernel version 2.4.18)

Notes for installing a 80 GB Maxtor FireWire drive (aka IEEE 1394) under Linux.  Updated on April 10, 2004; Original Version April 1, 2003.

FireWire drive under Linux

Tallahassee, April 10, 2004:  The following note describes how to install an external hard drive with FireWire (also known as IEEE 1394 or i-LINK) interface under Linux operating system (o/s) kernel ver. 2.4.18.  FireWire technology is defined by its developer Apple as:

 

“FireWire is a cross-platform implementation of the high-speed serial data bus -- defined by IEEE Standard 1394-1995 -- that can move large amounts of data between computers and peripheral devices.  It features simplified cabling, hot swapping, and transfer speeds of up to 400 megabits per second.” (http://developer.apple.com/firewire/)

FireWire external hard drives allow quick transfer (high transfer speed) of large amounts of data, transfer of data between multiple platforms (cross-platform), quick access to data (hot-swappable), and easy way to transport data sets (portable).  The note will describe how to integrate a FireWire drive into a Linux system, store and retrieve data from the drive.  This note is intended to help the X-Ray Facility users who may carry a FireWire drive back and forth between home and a synchrotron source.

FireWire devices feature a female port and are usually connected to another female port either at the back of a computer or on another FireWire device using a special cable that has two 6-pin male ends.  Some I-LINK devices are connected via a 4-pin interface and 4-pin cable.  Pictures of some of the interfaces and cables are shown below:

Installing the drive (may need root previlages)

FireWire drives are hot-pluggable and hot-swappable and this means that the operating system should detect the drive soon after it is attached to a computer.  In order for this to work, the Linux operating system kernel should have either pre-compiled versions of the following device drivers: IEEE 1394, OHCI 1394, and SBP-2 1394, or the device drivers are added as modules (using insmod command).  IEEE 1394 is the FireWire protocol, Open Host Controller Interface (OHCI) is the standard that allows a computer host to interface with Firewire and USB devices, Serial Bus Protocol-2 (SBP-2) is used specifically to transport SCSI across a 1394 bus.

While logged in as root, power-up the FireWire drive, wait for few seconds and then plug the device to the FireWire interface using the FireWire cable.  In principle, the drive should be recognized as a new device by the operating system of the computer and through SBP-2 it should be listed as a SCSI device.  Check the /var/log/dmesg file to find out the whether the o/s recognized the new device and if so the designation of the device name.

One quick way of checking for the device is to grep for ‘ieee1394’ or ‘ohci1394, or ‘1394’ in /var/log/dmesg file.  A typical dmesg output is shown below when a 80 GB Maxtor FireWire drive is hotplugged to a Linux box.   Notice the reference to the keywords mentioned in the last sentence:

ohci1394_0: OHCI-1394 1.0 (PCI): IRQ=[11]  MMIO=[feafd000-

ieee1394: Device added: node 0:1023, GUID 0010b9010131618d

ieee1394: sbp2: Node 0:1023: Max speed [S400] - Max payload [2048]

scsi2 : IEEE-1394 SBP-2 protocol driver

 

  Vendor: Maxtor    Model: 1394 storage      Rev: v1.2

  Type:   Direct-Access                     ANSI SCSI revision: 06

Attached scsi disk sda at scsi2, channel 0, id 0, lun 0

SCSI device sda: 156355584 512-byte hdwr sectors (80054 MB)

 sda: sda1

Based on the message above the o/s has detected a Maxtor 1394 SCSI storage device with 80 GB capacity, with direct-access and this device has been assigned a SCSI device label of sda1.  A typical picture of the external drive from Maxtor is shown below:

Maxtor FireWire External Hard drive (Maxtor 3000 DV; 80 GB)

Drive designation

It is essential to know the device designation before the device can be mounted.  One way to get the device designation is by examining the tail portion of dmesg.  Another way to find the same information is to run fdisk –l or sfdisk –l and look for the device designation.  Given below is print-out for sfdisk –l:

Disk /dev/hda: 2205 cylinders, 255 heads, 63 sectors/track

Units = cylinders of 8225280 bytes, blocks of 1024 bytes, counting from 0

   Device Boot Start     End   #cyls   #blocks   Id  System

/dev/hda1   *      0+    521     522-  4192933+   7  HPFS/NTFS

/dev/hda2        522     847     326   2618595   83  Linux

/dev/hda3        848     880      33    265072+  83  Linux

/dev/hda4        881    2204    1324  10635030    5  Extended

 

Disk /dev/sda: 9732 cylinders, 255 heads, 63 sectors/track

Units = cylinders of 8225280 bytes, blocks of 1024 bytes, counting from 0

   Device Boot Start     End   #cyls   #blocks   Id  System

/dev/sda1          0+   9728    9729- 78148161   83  Linux

                end: (c,h,s) expected (1023,254,63) found (512,254,63)

/dev/sda2          0       -       0         0    0  Empty

From the print-out above, we notice that there are two different drives: one IDE harddrive (/dev/hda) and one SCSI harddrive (/dev/sda).  The IDE harddrive has four partitions (/dev/hda1 through /dev/hda4) and the 80 GB SCSI device has one partition and has the label sda1.  Once the exact device designation has been known the next step is to mount the device.

Mounting Drive

Remember that under Linux and UNIX operating systemes, as opposed to Windows o/s, even a physical device is considered to be a file-system (f/s).  This means that the Maxtor harddrive is another file-system and NOT a device in the conventional sense (so read f/s for a device or a drive).  FireWire drives are often swapped between machines and therefore, it is desirable to mount the device when required rather than auto-mounted.  However, it is advisable to add an entry in the /etc/fstab file that specifies the mount point, the file system and partitions (if found).  From the sfdisk output we already know that out external hard drive has one partition with 80 GB capacity.  Note that if it is a brand new drive from a PC vendor it is likely to be formatted with vfat file system.  However, in our case we had earlier modified vfat file system to a Linux specific filesystem called ext3.  So we are going to add an entry in the /etc/fstab file that specifies these details and then mount the device (aka f/s).

root@tampa /etc]# vi fstab   |Edit fstab and add an entry for FireWire drive

Physical Device         Mount Point          Type    Options            Frq Pass

/dev/sda1               /mnt/fire0           ext3    noauto,owner,rw    0   0

 

root@tampa /etc]# mkdir –p /mnt/fire | Make a directory name for the mount point

root@tampa./etc]# mount –t ext3 /dev/sda1 /mnt/fire  | Mount the FireWire drive

 

[root@tampa root]# df -k |Find it in the list of mounted disks with correct file system

Filesystem           1k-blocks      Used Available Use% Mounted on

/dev/hda2              2577424   1688336    758160  70% /

/dev/hda6             10206972    114920   9573556   2% /data

/dev/hda3               256665     86192    157220  36% /home

none                    127880         0    127880   0% /dev/shm

/dev/sda1             76920416  35902704  37110304  50% /mnt/fire [specific mount pt.]

 

root@tampa./etc]# mount |Confirming the file system; mount with no options

/dev/hda2 on / type ext3 (rw)

none on /proc type proc (rw)

usbdevfs on /proc/bus/usb type usbdevfs (rw)

/dev/hda6 on /data type ext3 (rw)

none on /dev/pts type devpts (rw,gid=5,mode=620)

/dev/hda3 on /home type ext3 (rw)

none on /dev/shm type tmpfs (rw)

/dev/sda1 on /mnt/fire type ext3 (rw) [specific f/s]

Some additional commands that are of value to the root during the mounting process are described next.  For example, to confirm the number and nature of the SCSI devices, root can issue cdrecord –scanbus command.  A typical response will look like the following (here there are two Maxtor FireWire drives):

Cdrecord 1.10 (i686-pc-linux-gnu) Copyright (C) 1995-2001 Jörg Schilling

Using libscg version 'schily-0.5'

scsibus0:

        0,0,0     0) 'Maxtor  ' '1394 storage    ' 'v1.2' Disk

        0,1,0     1) 'Maxtor  ' '1394 storage    ' 'v1.2' Disk

        0,2,0     2) *

        0,3,0     3) *

        0,4,0     4) *

        0,5,0     5) *

        0,6,0     6) *

        0,7,0     7) *

Another way to look at the same information is to examine the text file /proc/scsi/scsi.

Attached devices:

Host: scsi0 Channel: 00 Id: 00 Lun: 00

  Vendor: Maxtor   Model: 1394 storage     Rev: v1.2

  Type:   Direct-Access                    ANSI SCSI revision: 06

Host: scsi0 Channel: 00 Id: 01 Lun: 00

  Vendor: Maxtor   Model: 1394 storage     Rev: v1.2

  Type:   Direct-Access                    ANSI SCSI revision: 06

Once the f/s is mounted, in our case as /mnt/fire, the users can access it to write, read, and modify the data found in the drive.  Once all the needed data is stored simply unplug the cable connecting the device to a computer, switch off the power supply and carefully pack it for transport.

Mounting Two Devices

This section deals with the process of mounting two FireWire devices, for example, two external drives, or one external drive and a DVD-R drive.  Once again we go over the process of finding the designation and mount the drives independently.  A typical output for sfdisk –l for two external drive may look like the following:

Disk /dev/hda: 2205 cylinders, 255 heads, 63 sectors/track

Units = cylinders of 8225280 bytes, blocks of 1024 bytes, counting from 0

   Device Boot Start     End   #cyls   #blocks   Id  System

/dev/hda1   *      0+    521     522-  4192933+   7  HPFS/NTFS

/dev/hda2        522     847     326   2618595   83  Linux

/dev/hda3        848     880      33    265072+  83  Linux

Disk /dev/sda: 9732 cylinders, 255 heads, 63 sectors/track

Units = cylinders of 8225280 bytes, blocks of 1024 bytes, counting from 0

/dev/sda1          0+   4177    4178- 33559753+  83  Linux

/dev/sda2       4178    9731    5554  44612505   83  Linux

Disk /dev/sdb: 9732 cylinders, 255 heads, 63 sectors/track

Units = cylinders of 8225280 bytes, blocks of 1024 bytes, counting from 0

/dev/sdb1          0+   9728    9729- 78148161   83  Linux

                end: (c,h,s) expected (1023,254,63) found (512,254,63)

/dev/sdb2          0       -       0         0    0  Empty

We note that the there are three drives: one IDE drive (/dev/hda) and two SCSI disks (/dev/sda + /dev/sdb).  The IDE drive has several partitions (/dev/hda1-hda3) and the first SCSI disk has two partitions (/dev/sda1+sda2) and the second SCSI disk has one partition (/dev/sdb1).  If we now know what kind of filesystems these drives belong to we can mount them independently.

[root@tampa root]# mount /dev/sda1 /mnt/fire1| Mount with no specific f/s

[root@tampa root]# mount –t reiserfs /dev/sda2 /mnt/fire2 | Mount with specific f/s

[root@tampa root]# df -k

Filesystem           1k-blocks      Used Available Use% Mounted on

/dev/hda2              2577424   1692664    753832  70% /

/dev/hda6             10206972    114920   9573556   2% /data

/dev/hda3               256665     86221    157191  36% /home

none                    127880         0    127880   0% /dev/shm

/dev/sda1             33558720   3869464  29689256  12% /mnt/fire1

/dev/sda2             44611136  34015316  10595820  77% /mnt/fire2

[root@tampa root]# mount -t ext3 /dev/sdb1 /mnt/fire0 | Mount with specific f/s

[root@tampa root]# df -k

Filesystem           1k-blocks      Used Available Use% Mounted on

/dev/hda2              2577424   1692668    753828  70% /

/dev/hda6             10206972    114920   9573556   2% /data

/dev/hda3               256665     86223    157189  36% /home

none                    127880         0    127880   0% /dev/shm

/dev/sda1             33558720   3869464  29689256  12% /mnt/fire1

/dev/sda2             44611136  34015316  10595820  77% /mnt/fire2

/dev/sdb1             76920416  35902704  37110304  50% /mnt/fire0

[root@tampa root]# mount |Just confirm the f/s by issuing mount command with no arguments

/dev/hda2 on / type ext3 (rw)

none on /proc type proc (rw)

usbdevfs on /proc/bus/usb type usbdevfs (rw)

/dev/hda6 on /data type ext3 (rw)

none on /dev/pts type devpts (rw,gid=5,mode=620)

/dev/hda3 on /home type ext3 (rw)

none on /dev/shm type tmpfs (rw)

/dev/sda1 on /mnt/fire1 type reiserfs (rw)

/dev/sda2 on /mnt/fire2 type reiserfs (rw)

/dev/sdb1 on /mnt/fire0 type ext3 (rw)

If, instead of two external harddrives, there is one FireWire drive and one FW dvd-rom drive (see for more details, NFS_DVD_Linux.doc) then we mount them separately as shown below:

[root@tampa root]# mount -t ext3 /dev/sda1 /mnt/fire1 | Mount with specific f/s

[root@tampa root]# mount -t iso9660 –o ro /dev/scd0 /mnt/fw-dvd | Mount dvd

[root@tampa root]# df -k

Filesystem           1k-blocks      Used Available Use% Mounted on

/dev/hda2              2577424   1692388    754108  70% /

/dev/hda6             10206972    114920   9573556   2% /data

/dev/hda3               256665     86300    157112  36% /home

none                    127880         0    127880   0% /dev/shm

/dev/scd0              3942432   3942432         0 100% /mnt/fw-dvd

/dev/sda1             76920416   1920720  71092288   3% /mnt/fire1

[root@tampa log]# mount

/dev/hda2 on / type ext3 (rw)

none on /proc type proc (rw)

usbdevfs on /proc/bus/usb type usbdevfs (rw)

/dev/hda6 on /data type ext3 (rw)

none on /dev/pts type devpts (rw,gid=5,mode=620)

/dev/hda3 on /home type ext3 (rw)

none on /dev/shm type tmpfs (rw)

/dev/scd0 on /mnt/fw-dvd type iso9660 (ro)

/dev/sda1 on /mnt/fire1 type ext3 (rw)

Now with the native cd-rom drive(IDE cd-r/dvd-rom in lap-top), FireWire DVD-R,-RW drive and FireWire external drive then the mounting will go as follows:

[root@tampa log]# grep -i 'cd' /var/log/dmesg

hdc: HL-DT-STCD-RW/DVD-ROM GCC-4240N, ATAPI CD/DVD-ROM drive  [IDE drive]

hdc: ATAPI 24X DVD-ROM CD-R/RW drive, 2048kB Cache, UDMA(33)  [SCSI/FireWire drive]

Uniform CD-ROM driver Revision: 3.12

root@tampa log]# dmesg |grep -i 'sd' |more

Installing knfsd (copyright (C) 1996 okir@monad.swb.de).

Attached scsi disk sda at scsi0, channel 0, id 0, lun 0

SCSI device sda: 156355584 512-byte hdwr sectors (80054 MB)

sda: sda1

EXT3 FS 2.4-0.9.17, 10 Jan 2002 on sd(8,1), internal journal

 

[root@tampa root]# mount -t iso9660 –o ro /dev/hdc /mnt/cdrom | Mount cdrom

[root@tampa root]# mount -t ext3 /dev/sda1 /mnt/fire1 | Mount with specific f/s

[root@tampa root]# mount -t iso9660 –o ro /dev/scd0 /mnt/fw-dvd | Mount dvd

[root@tampa log]# df -k

Filesystem           1k-blocks      Used Available Use% Mounted on

/dev/hda2              2577424   1692388    754108  70% /

/dev/hda6             10206972    114920   9573556   2% /data

/dev/hda3               256665     86300    157112  36% /home

none                    127880         0    127880   0% /dev/shm

/dev/hdc                287466    287466         0 100% /mnt/cdrom

/dev/scd0              3942432   3942432         0 100% /mnt/fw-dvd

/dev/sda1             76920416   1920720  71092288   3% /mnt/fire1

 

[root@tampa log]# mount | Confirm the f/s by issuing mount command with no arguments

/dev/hda2 on / type ext3 (rw)

none on /proc type proc (rw)

usbdevfs on /proc/bus/usb type usbdevfs (rw)

/dev/hda6 on /data type ext3 (rw)

none on /dev/pts type devpts (rw,gid=5,mode=620)

/dev/hda3 on /home type ext3 (rw)

none on /dev/shm type tmpfs (rw)

/dev/hdc on /mnt/cdrom type iso9660 (ro)

/dev/scd0 on /mnt/fw-dvd type iso9660 (ro)

/dev/sda1 on /mnt/fire1 type ext3 (rw)

 

Finally, once the devices (f/s) are mounted the user can access them depending upon their access control.  For example, cd-rom will have read-only access and hard-drive will have read and write access.  Once the experiment is complete the user (or root) can umount the device whenever it is required using the  umount command

[root@raccoon /]# umount /mnt/fw-dvd

[root@raccoon /]# umount /mnt/cdrom

[root@raccoon /]# umount /mnt/fire1

Trouble-shooting

If things have gone correctly you will be able to mount the devices on to a Linux workstation.  Some of the frequent problems are dealt with below.  If you still can’t resolve the problem consult with Thayumana Somasundaram (soma@sb.fsu.edu | 850-644-6448) or Mike Zawrotny (850-644-0069 | zawrotny@sb.fsu.edu).

1) Can’t umount /mnt/fw-dvd at workstation

When trying to unmount /mnt/fw-dvd at workstation after the use, the user (root) may encounter an error stating that the dvd is busy and the user can’t unmount it.  In this event, first make sure you have successfully un exported the device from all clients.  A typical session is shown below:

[root@neptune ~]# umount /mnt/fw-dvd

umount: /mnt/fw-dvd: device is busy

Now un export the device from other clients

[root@neptune ~]# exportfs -vu raccoon.chem.fsu.edu:/mnt/fw-dvd

unexporting raccoon.chem.fsu.edu:/mnt/fw-dvd

unexporting raccoon.chem.fsu.edu:/mnt/fw-dvd from kernel

[root@neptune ~]# umount /mnt/fw-dvd

2).Can’t umount /mnt/fw-dvd at workstation

When trying to unmount /mnt/fw-dvd at workstation after the use, the user may encounter an error stating that the dvd is busy and the user can’t unmount it.  This may happen if the user is physically in the /mnt/fw-dvd or any of the subdirectories.  Change directory to home and run fuser –vu  /mnt/fw-dvd command or lsof |grep ‘/mnt/fw-dvd’ and ensure no process is accessing the f/s and umount it.  A typical session is shown below:

[root@tampa /mnt/fw-dvd]# umount /mnt/fw-dvd

umount: /mnt/fw-dvd: device is busy

[root@tampa /mnt/fw-dvd]# fuser -vu /mnt/fw-dvd

 

                     USER        PID ACCESS COMMAND

/mnt/fw-dvd          root     kernel mount  /mnt/fw-dvd

 

[root@tampa /mnt/fw-dvd]# lsof |grep /mnt/fw-dvd

tcsh      2398 soma  cwd    DIR       11,0   67584     47104 /mnt/fw-dvd

rxvt      2414 soma  cwd    DIR       11,0   67584     47104 /mnt/fw-dvd

[root@tampa /mnt/fw-dvd]# cd /home

[root@tampa /mnt/fw-dvd]# kill –9 2424 or close the rxvt

[root@tampa /mnt/fw-dvd]# umount /mnt/fw-dvd

3).Can’t see the FireWire when hotplugged

After you hot-plug a FireWire drive if you are unable to see the device there could be several reasons.  Just ensure that you FireWire is powered.  If it is powered and running, try unplugging and replugging it again.  Even after these tries, if you don’t see the device (i.e, when you list them as SCSI devices using more /proc/scsi/scsi or cdrecord –scanbus commands) the modules may not have properly been installed.  To remedy this problem, uninstall and re-install the relevant modules in a set sequence.  Given below is the sequence:

1)     List the modules

[root@raccoon log]# lsmod

Module                  Size  Used by    Not tainted

sg                     33924   0  (autoclean)

sr_mod                 16632   0  (autoclean)

soundcore               6468   0  (autoclean)

sbp2                   19744   0  (unused)         [For Firewire]

ohci1394               18784   0  (unused)         [For Firewire]

ieee1394               45064   0  [sbp2 ohci1394]  [For Firewire]

 

2)     Remove the modules one at a time in the following sequence:

[root@raccoon log]# rmmod sbp2

[root@raccoon log]# rmmod ohci1394

[root@raccoon log]# rmmod ieee1394

 

3)     Reinstall the modules one at a time in the following sequence (reverse of rmmod):

[root@raccoon log]# insmod ieee1394

[root@raccoon log]# insmod ohci1394

[root@raccoon log]# insmod sbp2

 

4)     Now repeat the dvdrecord command. You will be able to see the firewire drives.

[root@raccoon ~]# more /proc/scsi/scsi

Attached devices:

Host: scsi0 Channel: 00 Id: 05 Lun: 00

  Vendor: ARCHIVE  Model: Python 04106-XXX Rev: 735B

  Type:   Sequential-Access                ANSI SCSI revision: 02

Host: scsi0 Channel: 00 Id: 06 Lun: 00

  Vendor: IBM      Model: DDYS-T36950N     Rev: S80D

  Type:   Direct-Access                    ANSI SCSI revision: 03

Host: scsi1 Channel: 00 Id: 00 Lun: 00

  Vendor: HP       Model: CD-Writer+ 9500  Rev: 1.0e

  Type:   CD-ROM                           ANSI SCSI revision: 02

Host: scsi2 Channel: 00 Id: 00 Lun: 00

  Vendor: Maxtor   Model: 3000DV           Rev: 0100

  Type:   Direct-Access                    ANSI SCSI revision: 06