Difference between revisions of "USBDisks"

From SME Server
Jump to navigationJump to search
Line 1: Line 1:
 
===USB Disks===
 
===USB Disks===
 
{{Incomplete}}
 
{{Incomplete}}
 +
{{Warning box|NTFS partitions are not supported, please use either fat32/vfat or ext2/ext3}}
 +
====Introduction====
 +
=====The Problem=====
 +
SME will automatically mount connected USB disk drives into the /media folder.
 +
Auto-mounting will be performed based on the specific USB port used to connect your drives unless you use another method to specify mount points.
  
 +
Imagine this example:
 +
* Connect USB 'A' to your system.  It is automatically assigned to /dev/sdc and auto-mounted to /media/usbdisk
 +
* Disconnect USB 'A' and connect USB 'B' (to the same or to a different USB port).  It will be assigned to /dev/sdc and auto-mounted to /media/usbdisk.
 +
* Re-connect USB 'A' while USB 'B' is still connected, and it will be assigned to /dev/sdd and auto-mounted to /media/usbdisk1.
  
{{Warning box|NTFS partitions are not supported, please use either fat32/vfat or ext2/ext3}}
+
Or this example:
 +
* Connect USB 'A' to the second USB port on your SME.  It is assigned to /dev/sdc
 +
* Connect USB 'B' to the first USB port without disconnecting USB 'A'.  USB 'B' is assigned to /dev/sdd
 +
* Leave both drives connected and re-boot.  USB 'B' is now connected to /dev/sdc, while USB 'A' is connected to /dev/sdd!
  
SME will automatically mount connected USB disk drives into the /media folder.
+
=====The Solution=====
Auto-mounting will be performed based on the specific USB port used to connect your drives unless you use another method to specify mount points.
+
The easiest way to avoid this behavior and provide reliable mount points for your USB drives is to label each drive, then specify the desired mount point in /etc/fstab based on the drive label.  This will allow you to:
 +
* Reliably mount your USB drives to drive-specific directories regardless of what device is assigned to the drive by SME.  This would allow you to specify separate USB disks for specific ibays by using lines like these in /etc/fstab:<br>
 +
LABEL=Disk1 /home/e-smith/files/ibays/ibay-1/html ext3 defaults
 +
LABEL=Disk2 /home/e-smith/files/ibays/ibay-2/html ext3 defaults
 +
* Reliably mount multiple disks in the one location, in case you want to use a rotating set of disk drives for backups, by using lines like these in /etc/fstab (just don't connect two of these drives at the same time!):<br>
 +
LABEL=Disk1 /mnt/backup ext3 defaults
 +
LABEL=Disk2 /mnt/backup ext3 defaults
 +
LABEL=Disk3 /mnt/backup ext3 defaults
  
This means that if you insert USB drive 'A', it should auto-mount to /media/usbdisk.  If you now dismount this disk and mount drive 'B' in the same USB port, it, too, will auto-mount to /media/usbdisk.  Additionally, if you connect drive 'A' to another USB port, it may auto-mount to /media/usbdisk1.
 
  
The easiest way to avoid this behavior is to provide a label for each of your USB drives, and specify the desired mount point in /etc/fstab based on the drive label.
 
 
====Supported FileSystems====
 
====Supported FileSystems====
 
=====ext2/ext3=====
 
=====ext2/ext3=====
Line 82: Line 99:
  
 
====labeling your USB drive====
 
====labeling your USB drive====
=====ext3=====
+
=====ext2/ext3=====
 
  e2label /dev/sdd1 MyLabel
 
  e2label /dev/sdd1 MyLabel
=====vfat=====
+
=====fat32/vfat=====
Linux uses 'mtools' to manage FAT, FAT32, and VFAT partitions.  'mtools' uses drive letters to access devices.  These drive letters must be defined in /etc/mtools.conf before any of the mtools will work.  You can create a definition for your USB drive using a command like this one (be sure to replace /dev/sdd1 with the device name identified above for your USB drive!):
+
'''mtools'''
 +
 
 +
SME includes 'mtools' which can be used to manage FAT, FAT32, and VFAT partitions.   
 +
 
 +
'mtools' uses drive letters instead of device names to access devices.  These drive letters must be defined in /etc/mtools.conf before any of the mtools will work.   
 +
 
 +
You can add your USB drive to /etc/mtools.conf using a command like the one shown below. However,
 +
* be sure to replace /dev/sdd1 with the device name identified above for your USB drive
 +
* be aware that the assigned device may change each time you reconnect your drive or reboot!
 
  echo 'drive e: file="/dev/sdd1"' >> /etc/mtools.conf
 
  echo 'drive e: file="/dev/sdd1"' >> /etc/mtools.conf
  
Once you have created the drive letter in mtools.conf you can view or edit the disk label using the following commands.
+
Once you have created the drive letter in mtools.conf you can view or edit the disk label using the following commands:
 +
* Show the current label:
 +
mlabel -s e:
 +
* Clear the volume label:
 +
mlabel -c e:
 +
* Assign a new volume label:
 +
mlabel e:MyLabel
  
Show the current label:
+
'''dosfslabel'''
mlabel -s e:
 
  
Clear the volume label:
+
SME also includes <code>dosfslabel</code> which appears to be related to labeling "dos" drives.
mlabel -c e:
+
dosfslabel /dev/sdd1
 +
produces the following output:
 +
Warning: FAT32 support is still ALPHA.
 +
MyLabel
  
Assign a new volume label:
+
While it is safe to use <code>dosfslabel</code> to check the label on a drive, you should not use it to create or change the label on any drive that contains data you care about.
mlabel e:MyLabel
 
  
 
====Customizing fstab====
 
====Customizing fstab====
 +
 
Add the following line to the /etc/fstab
 
Add the following line to the /etc/fstab
 
  LABEL=MyLabel /mnt/affadevice ext3 defaults
 
  LABEL=MyLabel /mnt/affadevice ext3 defaults
Line 105: Line 138:
 
* Replace 'ext3' with 'vfat' if your drive is formatted as fat32/vfat.
 
* Replace 'ext3' with 'vfat' if your drive is formatted as fat32/vfat.
 
* Replace /mnt/affadevice with the folder in which you want your USB drive mounted (here and in all "mount" commands)
 
* Replace /mnt/affadevice with the folder in which you want your USB drive mounted (here and in all "mount" commands)
 +
* Make sure that the mount directory (/mnt/affadevice in this example) is empty!  Linux will not mount a drive in a directory that is not empty.
 +
* Add multiple entries as described in [[USBDisks#The_Solution]] to meet your specific requirements.
  
 
====Mount your disk automatically at boot-up====
 
====Mount your disk automatically at boot-up====
Line 123: Line 158:
 
====More Information====
 
====More Information====
 
* There is a contrib for managing USB disks: http://forums.contribs.org/index.php?topic=35466.0
 
* There is a contrib for managing USB disks: http://forums.contribs.org/index.php?topic=35466.0
* Here is a link to the Microsoft KB article on fat volume size limits: <br>http://support.microsoft.com/kb/314463<br>Summary: 32GB limit during XP Setup, 8 Terabyte otherwise
 
* Here is a link to an old MS technote about fat32 limits with 'format' under Win2K: <br>http://www.microsoft.com/technet/prodtechnol/windows2000serv/reskit/prork/prdf_fls_pxjh.mspx?mfr=true<br>Summary: ''format'' under Windows 2000 has a 32GB limitation.
 
* Here is a link to some more info about fat32 along with a downloadable program for formatting large disks if you are having problems<br>http://www.ridgecrop.demon.co.uk/index.htm?fat32format.htm
 
 
 
  
 
----
 
----
 
[[Category:Howto]]
 
[[Category:Howto]]

Revision as of 13:33, 26 September 2007

USB Disks

Incomplete.png Incomplete:
This article or section needs to be expanded. Please help to fill the gaps or discuss the issue on the talk page


Warning.png Warning:
NTFS partitions are not supported, please use either fat32/vfat or ext2/ext3


Introduction

The Problem

SME will automatically mount connected USB disk drives into the /media folder. Auto-mounting will be performed based on the specific USB port used to connect your drives unless you use another method to specify mount points.

Imagine this example:

  • Connect USB 'A' to your system. It is automatically assigned to /dev/sdc and auto-mounted to /media/usbdisk
  • Disconnect USB 'A' and connect USB 'B' (to the same or to a different USB port). It will be assigned to /dev/sdc and auto-mounted to /media/usbdisk.
  • Re-connect USB 'A' while USB 'B' is still connected, and it will be assigned to /dev/sdd and auto-mounted to /media/usbdisk1.

Or this example:

  • Connect USB 'A' to the second USB port on your SME. It is assigned to /dev/sdc
  • Connect USB 'B' to the first USB port without disconnecting USB 'A'. USB 'B' is assigned to /dev/sdd
  • Leave both drives connected and re-boot. USB 'B' is now connected to /dev/sdc, while USB 'A' is connected to /dev/sdd!
The Solution

The easiest way to avoid this behavior and provide reliable mount points for your USB drives is to label each drive, then specify the desired mount point in /etc/fstab based on the drive label. This will allow you to:

  • Reliably mount your USB drives to drive-specific directories regardless of what device is assigned to the drive by SME. This would allow you to specify separate USB disks for specific ibays by using lines like these in /etc/fstab:
LABEL=Disk1 /home/e-smith/files/ibays/ibay-1/html ext3 defaults
LABEL=Disk2 /home/e-smith/files/ibays/ibay-2/html ext3 defaults
  • Reliably mount multiple disks in the one location, in case you want to use a rotating set of disk drives for backups, by using lines like these in /etc/fstab (just don't connect two of these drives at the same time!):
LABEL=Disk1 /mnt/backup ext3 defaults
LABEL=Disk2 /mnt/backup ext3 defaults
LABEL=Disk3 /mnt/backup ext3 defaults


Supported FileSystems

ext2/ext3
  1. recommended for USB drives intended for use only on SME
  2. works great under Linux
  3. supports hard links, symlinks
  4. can be read under Windows using explore2fs from http://www.chrysocome.net/explore2fs
  5. File & Disk size limits depend on the block size used when formatting the disk. SME defaults to a 1K block size.
    1K block size: 16GB max file size, 2TB max disk size
    2K block size: 256GB max file size, 8 TB max disk size.
    4K block size: 2TB max file size, 16 TB max disk size
  6. You can determine your current block size using (replace /dev/sdc1 with the correct value for your USB drive)
    dumpe2fs -h /dev/sdc1
fat32/vfat
  1. pre-configured on most USB hard drives
  2. supported natively by Windows
  3. (2^32)-1 byte ( 4GB - 1 byte) maximum file size
  4. Windows 2000 format and Windows XP Setup's format will not create a fat32 volume larger than 32 GB
  5. Maximum disk size dependent on cluster size. 32KB Clusters would allow a disk of approximately 8TB

Identifying your USB drive

After connecting your USB drive, execute the command

mount

and look for anything mounted in /media/???.

If your drive did not auto-mount, search /var/log/messages for the kernel commands related to your device using:

egrep "(kernel|fstab|scsi).*(usb|USB)" /var/log/messages

You should have a line logged by fstab-sync giving the auto-mount folder created and the device name for your new device that looks like this:

Sep 23 17:11:14 office fstab-sync[32193]: added mount point /media/usbdisk1 for /dev/sdd1

You should now be able to mount your USB drive using the values found in /var/log/messages. In our example, that would mean:

mount /media/usbdisk1

or

mount /dev/sdd1

Formatting your USB drive

ext2/ext3
  1. Copied with slight changes from Affa#Alternatively_setup_a_USB_drive
  2. Connect a USB hard disk to the USB Bus. Now you must determine what device the kernel has assigned to the drive. View the /var/log/message and search for Initializing USB Mass Storage driver. A few lines below you'll find the name of the device. In this example it is sdc. Replace /dev/sdc by your device in following instructions. Use the fdisk program to create a linux partition fdisk /dev/sdc You'll most likely find an existing vfat dos partition, which you have to delete first. In the following we assume, that you have created a single partition /dev/sdc1.
  3. Now format the drive with an ext3 filesystem mkfs.ext3 -L MyLabel /dev/sdc1
  4. Make the mount point mkdir -p /mnt/affadevice
  5. Customize /etc/fstab as shown here: Customizing fstab
  6. Mount the drive mount reads /etc/fstab to look for instructions on what to do if not specifically told on the command line. After updating /etc/fstab as recommended, you can "mount" your USB disk reliably by specifying either the target directory: mount /mnt/affadevice or the disk label: mount LABEL=MyLabel
  7. Crosscheck your work using the df command df
fat32/vfat

It's probably easier to format your fat32/vfat drive on your windows system (You *must* have one, or you wouldn't be using this format...)

There is a potential issue formatting a fat32/vfat drive larger than 32GB in Windows. This problem with various Microsoft format programs does not restrict Windows from successfully using drives up to 8TB.

This link provides more detailed information and a downloadable 'fat32format' program for formatting large disks in Windows, as well as covering various problems you may encounter related to specific hardware configurations: http://www.ridgecrop.demon.co.uk/index.htm?fat32format.htm.

Here are the official Microsoft statements about fat32/vfat:

You should also be able to format your drive from your SME server using (warning, untested!):

mkfs.vfat -n MyLabel /dev/sdd1

Since this command will destroy irretrievably all information on the specified device (/dev/sdd1 in this case), be very sure you know exactly which device is the drive you want to format!

labeling your USB drive

ext2/ext3
e2label /dev/sdd1 MyLabel
fat32/vfat

mtools

SME includes 'mtools' which can be used to manage FAT, FAT32, and VFAT partitions.

'mtools' uses drive letters instead of device names to access devices. These drive letters must be defined in /etc/mtools.conf before any of the mtools will work.

You can add your USB drive to /etc/mtools.conf using a command like the one shown below. However,

  • be sure to replace /dev/sdd1 with the device name identified above for your USB drive
  • be aware that the assigned device may change each time you reconnect your drive or reboot!
echo 'drive e: file="/dev/sdd1"' >> /etc/mtools.conf

Once you have created the drive letter in mtools.conf you can view or edit the disk label using the following commands:

  • Show the current label:
mlabel -s e:
  • Clear the volume label:
mlabel -c e:
  • Assign a new volume label:
mlabel e:MyLabel

dosfslabel

SME also includes dosfslabel which appears to be related to labeling "dos" drives.

dosfslabel /dev/sdd1

produces the following output: Warning: FAT32 support is still ALPHA. MyLabel

While it is safe to use dosfslabel to check the label on a drive, you should not use it to create or change the label on any drive that contains data you care about.

Customizing fstab

Add the following line to the /etc/fstab

LABEL=MyLabel /mnt/affadevice ext3 defaults
  • Replace 'ext3' with 'vfat' if your drive is formatted as fat32/vfat.
  • Replace /mnt/affadevice with the folder in which you want your USB drive mounted (here and in all "mount" commands)
  • Make sure that the mount directory (/mnt/affadevice in this example) is empty! Linux will not mount a drive in a directory that is not empty.
  • Add multiple entries as described in USBDisks#The_Solution to meet your specific requirements.

Mount your disk automatically at boot-up

Use the following commands to create a script that will run at each re-boot if you want to re-mount your USB disk automatically:

cat <<EOF > /etc/e-smith/events/local/S95mount_USB
#! /bin/sh
mount LABEL=MyLabel
EOF

chmod +x /etc/e-smith/events/local/S95mount_USB

Once the script exists you can add additional mount commands by editing S95mount_USB using:

pico -w /etc/e-smith/events/local/S95mount_USB

The 'local' event will run each time your server boots up. If you connect or disconnect a drive and need to re-mount it you can re-run your auto-mount commands using:

signal-event local

More Information