USB Storage

Please see the flash.layout.

Once you have obtained Basic USB support, you may want to connect a USB storage device to your router, for example a USB stick, a USB harddisk, etc. This article will tell you the steps and requirements to do this.

Preparations

The main course of action is as follows:

  1. Obtain basic USB support on your OpenWrt-powered device;
  2. Install USB storage prerequisites as shown below). A connected USB storage device (e.g. hard disc) can now be recognised by the system;
  3. If not already done, partition the device and create the file systems you want (see Storage on how to do this from within OpenWrt). The device itself and its partitions should immediately be available as Device files under /dev/. For example /dev/sda as the device, with /dev/sda1, /dev/sda2, … , the partitions. Or, in case it is not partitioned with a partition table and it has a single file system it may be directly accessible under e.g. /dev/sda. Subsequent devices you add will be /dev/sdb, /dev/sdc and so on. Make sure that the file system requirements are satisfied by installing the proper kernel packages for specific file system support (see Storage);
  4. These file systems can then be mounted and accessed, see Storage. Optionally, you can now configure automatic mounting at boot using /etc/config/fstab and you can configure it as root file system using extroot.

Required Packages for USB Storage

When your USB device is properly recognised by the system, using the proper driver kernel packages listed in Basic USB support, the following packages facilitate USB storage support:

  • kmod-usb-storage required … Kernel support for USB Mass Storage devices.
  • kmod-fs-<file_system> required … the file system you formatted your partition in. Common examples include kmod_fs_ext4, kmod-fs-hfs, kmod_fs_hfsplus, kmod-fs-msdos, kmod-fs-ntfs, kmod-fs-reiserfs and kmod-fs-xfs. For handling of ntfs filesystems, the package ntfs-3g must be installed in addition.
  • kmod-usb-storage-extras optional … Kernel support for some more drivers, such as for SmartMedia card readers.
  • block-mount recommended & required (if using fstab UCI configuration or luci Mount Points) … Scripts used to mount and check block devices (filesystems and swap) and hotplug capability (recognition when device is plugged in).
  • kmod-scsi-generic FIXME probably required … Any mass storage is a generic SCSI device.
Before the Attitude Adjustment release, other optional packages included: block-hotplug for USB recognition upon plug-in and block-extroot required for rootfs on external storage. In r26314 the three opkg packages block-mount, block-extroot and block-hotplug have been merged into a single package block-mount.

Additional Packages for USB Storage

  • e2fsprogs additional This package contains essential ext2/ext3/ext4 filesystem utilities for formatting and checking for errors on ext2/ext3/ext4 filesystems like mkfs.ext3, mkfs.ext4, fsck and other core utilities.

Examples

The following will install USB storage support, assuming USB works already, install ext4 file system support and mount a connected USB drive, pre-partitioned with a Linux swap partition and an ext4 partition.

opkg update
opkg install kmod-usb-storage block-mount kmod-fs-ext4
mkswap /dev/sda1
swapon /dev/sda1
mkdir -p /mnt/share
mount -t ext4 /dev/sda2 /mnt/share -o rw,sync

Note that partitions are usually auto detected, so this should work as well using default settings:

  mount /dev/sda2 /mnt/share

Another example is how to use an external usb stick with a FAT32 partition (but we'll keep ext4 support also). See also Storage.

opkg update
opkg install kmod-usb-storage block-mount block-hotplug kmod-fs-ext4 kmod-fs-vfat kmod-nls-cp437 kmod-nls-iso8859-1
mkdir -p /mnt/usb
mount -t vfat /dev/sda1 /mnt/usb

Disable writing when not mounted

You may create an empty file to indicate that the disk is not plugged in so that you don't put files directly onto NAND by doing

umount /mnt/usb   #make sure the disk isn't mounted before doing this
touch /mnt/usb/USB_DISK_NOT_PRESENT
chmod 555 /mnt/usb 
chmod 444 /mnt/usb/USB_DISK_NOT_PRESENT
This will prevent only processes not running as root from writing onto NAND (see this discussion). You can of course also use this file in your own scripts.

LUKS

  1. Install required packages:
    opkg install cryptsetup lvm2 kmod-crypto-aes kmod-crypto-misc kmod-crypto-xts kmod-crypto-iv kmod-crypto-cbc kmod-crypto-hash kmod-dm
  2. Create necessary config files: Most of the kmod-crypto-* packages create file in /etc/modules.d folder that automatically installs provided modules at boot time. However kmod-crypto-misc containing sha256 module (among others) is an exception to this, hence we need to create such a file manually:
    echo sha256_generic >/etc/modules.d/11-crypto-misc
  3. Mounting your encrypted partition: Replace /dev/encrypted_partition with a path to the device file of your encrypted partition and /mnt/mountpoit with your desired mount point:
    cryptsetup luksOpen /dev/encrypted_partition usbstorage_luks && mount /dev/mapper/usbstorage_luks /mnt/mountpoint
  4. Umounting:
    umount /mnt/mountpoint && cryptsetup luksClose usbstorage_luks

Notes

<none yet>


Back to top

doc/howto/usb.storage.txt · Last modified: 2014/11/16 14:02 by camd