Gentoo Documentation Guide Dimitry bradt This howto will show you how to use external (usb/firewire) storage devices HAL/pmount
Info

Hardware Abstraction Layer. It provides an easy way for applications to discover the hardware on the system. HAL is a hardware abstraction layer, which is a piece of software that provides a view of the various hardware attached to a system. In addition to this, HAL keeps detailed metadata for each piece of hardware and provides hooks such that system and desktop-level software can react to changes in the hardware configuration in order to maintain system policy.

The most important goal of HAL is to provide plug-and-play facilities for UNIX-like desktops with focus on providing a rich and extensible description of device characteristics and features. One example of the functionality provided by HAL is when you plug in a USB storage device. HAL can automatically create an appropriate entry in the /etc/fstab file and create the corresponding mount point in /mnt.

extra info : http://www.ometer.com/hardware.html

configuring HAL

Before emerging the needed programs you should enable KOBJECT_UEVENT and CONFIG_HOTPLUG in your kernel. Search after these options with "/", or adapt the .config located in /usr/src/linux/.config

KOBJECT_UEVENT=y
CONFIG_HOTPLUG=y

Before emerging you need to enable the hal use flag.

#euse -E hal
#emerge -v hal dbus hotplug
#rc-update add dbus default
#/etc/init.d/dbus start
#rc-update add hald default
#/etc/init.d/hald start

Instead of configuring our software; we could just use some applications to do this for us.

#echo "sys-apps/pmount ~x86" >> /etc/portage/package.keywords
#emerge -v pmount
#emerge -v ivman

Now your window manager automaticly asks you to mount your external devices. The only thing we could renice is let hal make symlinks of our devices. We do this by making sure it is owned by group hal.

BUS=="usb", SYSFS{serial}=="123456789011121314", SYSFS{product}=="JUMPDRIVE", KERNEL=="sd?1", NAME="%k", SYMLINK="usbdrive", GROUP="hal"
BUS=="usb", SYSFS{manufacturer}=="Sony", SYSFS{product}=="PSP Type A", KERNEL=="sd?1", NAME="%k", SYMLINK="psp", GROUP="hal"
BUS=="usb", SYSFS{manufacturer}=="Apple",  SYSFS{product}=="iPod", KERNEL=="sd?2", NAME="%k", SYMLINK="ipod", GROUP="hal"
/dev/usbdrive   /mnt/usbdrive   auto            noauto,rw,user                 0 0
/dev/ipod       /mnt/ipod       auto            noauto,rw,user                 0 0
/dev/psp        /mnt/psp        auto            noauto,rw,user                 0 0
external storage posibilities
configuring the kernel

Make sure the options below are marked like said below in your kernel config.

#vim /usr/src/linux/.config
MSDOS_FS=y
VFAT_FS=y
BLK_DEV_SD=y
CHR_DEV_ST=y
CHR_DEV_SG=y
USB_STORAGE=y
USB_UHCI_HCD=y
USB_OHCI_HCD=n
build the kernel
#make
#mount /boot/
#cp arch/your arch/boot/bzImage /boot

now you should reboot and move further from this point after you reboot

checking if hotplug detected your devices well
#dmesg | grep usb-storage
usb.c: USB device 4 (vend/prod 0xdda/0x2005) is not claimed by any active driver.

you can do this automaticly by putting your driver name in /etc/modules.autoload.d/kernel-2.{4|6}.

#emerge sg3_utils
# Description: apps for querying the sg SCSI interface (contains rescan_scsi_bus.sh)
#mkdir /mnt/usbstick
#mount -t vfat /dev/sda1 /mnt/usbstick

If you can't mount then try the alternative kernel config above that enables SCSI generic support. Then run the following that should give you the correct device name. You can now mount with the correct name (Eg. /dev/sdb1). You can also try with auto or msdos (for small cards) as the filesystem type (mount -t msdos /dev/x /mnt/x).

#sg_scan -i
#sg_map
editing your fstab
mounting your external usb-devices
# MY USB STICK
/dev/sda1               /mnt/stick      vfat            noauto,user,exec,sync     0 0

please note that you have to use vfat in the fstab file, because if you choose auto you won't get the full name but only the first 8 chars. Add the option "sync" to have synchronous changes between the actual usb mass storage device and the place that it's been mounted. Otherwise it would be done while you unmount it. This has the advantage of not losing data if you forgot to unmount a device and also you would see how long it will take when you are transfering data to it. You don't need to use vfat in the fstab file as long as /etc/filesystems is set up properly.

configuring your filesystems

Specifically, if vfat exists in /etc/filesystems before other fat file systems or by itself with an asterisk on the last line, it will be tried first during a mount. Read the mount (8) man page for more details.

#
# This file defines the filesystems search order used by a
# 'mount -t auto' command.
#
# Uncomment the following line if your modular kernel has vfat
# support and you want mount to try vfat.
vfat
# Uncomment the following line if your modular kernel has udf
# support and you want mount to try udf before iso9660.
udf
# Keep the last '*' intact as it directs mount to use the
# filesystems list available at /proc/filesystems also.
# Don't remove it unless you REALLY know what you are doing!
*
Mounting your windows partitions
the different filesystem types
#mount -t ntfs /dev/hda1 /mnt/win
#mount -t vfat /dev/hda2 /mnt/data
user permissions

On all three filesystems (MS-DOS, VFAT, NTFS), mount lets you pass the uid and gid options, which let you set the user and group IDs of who the files are chown'd to when the filesystem is mounted. To find out the values for uid and gid, run id $user.

umask: octal file permissions You can change permissions using the parameter umask. But be aware that it must be the bitmask of permissions that are not present for the mountpoint. It is an octal number, formed like this: * character '0': Indicates that this is an octal number, not decimal. * first digit: owner user permissions * second digit: owner group permissions * third digit: world permissions (every other user on the system)

#my windows partition
/dev/hda1  /mnt/ntfs  ntfs  uid=1000,gid=100  0 0

*utf8 You may also add utf8 option, if you can't see some files with international characters in filenames. e.g. /etc/fstab : /dev/hda1 /mnt/vfat vfat ro,utf8 0 0

for more options : 
#man mount(8)
captive ntfs

We need 'sys-fs/captive' (Description: Captive uses binary Windows drivers for full NTFS r/w access.) to get this to work. For now Captive is masked so you need to unmask it first

#echo "sys-fs/captive ~x86" >> /etc/portage/package.keywords

let's emerge captive now

#emerge captive

Now load the apropriate kernel module and make it load at boot

#modules-update
#modprobe fuse
#echo "fuse" >> /etc/modules.autoload.d/kernel-2.6

Congrats; Captive is now installed. To acquire the necessary filesystems drivers you should run the following command to locate your ntfs drives in a nice wizard. You should choose to download the propriate drivers from microsoft.com (You need a Windows SP2 license to do this legal.) (It doens't matter if your partitions are mounted or not; The programm looks for itself after the right partitions.) Caution : you need X-windows for this app.

#captive-install-acquire

After you walked through the wizard you should now be able to mount your windows partitions read/write.

#umount /mnt/win
#mount -t captive-ntfs /dev/hda1 /mnt/win

If the following works without errors you may want to put it in your /etc/fstab

/dev/hda2          /windows          captive-ntfs     users      0 0

Caution : You'll need to recompile fuse if you update your kernel !

#modprobe -r fuse
#emerge sys-fs/fuse
#modules-update
#modprobe fuse
1.0 2006-05-12