Access External Media Devices Howto
Introduction
This page aims to explain how external media devices are handled and made accessible for use in the system.
Currently it is only possible to utilize one external media device at a time. Most devices only have access to either a USB or a SD-Card, but some devices may have the possibility to connect both. In these situations only one of them will be accessible by the system, therefore it is recommended to only have one external media device connected at one time. In general, the system will try to prioritize SD-Cards, but it is more deterministic to only connect one device.
However, the system can support external media devices that have multiple partitions specified. In the eyes of the system each individual partition will be handled as a separate media. So if there is a need to have access to different devices this is how it can be achieved.
Each external media device that needs to be accessible on the device must be explicitly matched against a media definition. This definition specifies how a device will be known in the system and what physical external media it will be linked with. If no matching media definition is present for an external media or its individual partitions, they will not be mounted in the system.
This page will go through both how to format and partition a connected media device from the system itself, how to ensure that these medias are identified and made accessible for use.
For additional information on the Media tools and commands, refer to this page.
For additional information on the boot configuration commands, refer to this page.
Partition and Format a Connected Media Device
It is possible to create up to four partitions on an external media device utilizing the systems built-in partitioning tool. This tool also allows the user to specify the wanted file system, selectable from the following file system types:
- vfat
- ext2
- ext3
- ext4
In addition, the size of the partitions needs to be set and an optional label can also be specified for the device. Later when we will set up the media definitions on the device this label can be used as a match indicator for the media. It is also possible to match a device’s partition number.
The dev names for a connected device will have the following naming convention when used in the media context for partition and formatting:
- Main disk device: sd[a-z]
- Partitions will be the same but with an added number for the partition instance: sd[a-z][1-9].
Partitioning a Device Using the Partition Tool
This section will provide an example how an external media can be partitioned and formatted in a very simple and easy way using the built-in media tools. In this example we want to partition our device, named sdb, in the following manner:
# | Device Name | Partition Number | Label | Size | Filesystem |
---|---|---|---|---|---|
1 | sdb1 | 1 | default | 50% | ext3 |
2 | sdb2 | 2 | my-files | 20% | vfat |
3 | sdb3 | 3 | - | 20% | ext2 |
4 | sdb4 | 4 | my-label | 10% | ext4 |
In order to partition the device in the manner described we enter the media context from the top level in the CLI:
example:/#> media example:/media/#>
In order to partition the device we use the partition
command on
the correct device (this command is tab completable) to enter the
partition context:
Tip
We can also check all the connected physical devices using
the show devices
command in the current context. We can only
partition the devices of the type disk
.
example:/media/#> show devices
NAME TYPE NUM LABEL FORMAT SIZE MOUNT-MEDIA
sda disk - - - 16.0M -
example:/#> partition sdb Entering partitioning mode with dev sdb as target... No changes will be performed until the start-partition command is invoked. When invoked the entire device sdb will be fully re-partitioned and reformatted, any files on the device will be LOST/REMOVED, keep this in mind before proceeding. example:/media/partition-sdb/#>
In this context we can define how we want the device to be partitioned
entirely before we start the operation by calling the
start-partitioning
command. Nothing will happen to the device
before this is invoked, so it is possible to just leave the context
without anything changing on the device.
In this case, since we want the fully re-partition the device, we remove any current partition configuration:
example:/media/partition-sdb/#> delete all
Now we can add the definitions for the partitions we want to create, as we specified in the table above:
example:/media/partition-sdb/#> add label default size 50% format ext3 example:/media/partition-sdb/#> add label my-files size 20% format vfat example:/media/partition-sdb/#> add size 20% format ext2 example:/media/partition-sdb/#> add label my-label size 10% format ext4
Before we initiate the partitioning and formatting of the device, it is best that we observe if the partitions we intend to create look as we expect:
example:/media/partition-sdb/#> show
Partition table for dev: sdb
# DEV-NAME PART-NUMB LABEL SIZE FS
1 /dev/sdb1 1 default 50% ext3
2 /dev/sdb2 2 my-files 20% vfat
3 /dev/sdb3 3 - 20% ext2
4 /dev/sdb4 4 my-label 10% ext4
When we have verified that the setup is what we intended we can start the actual partitioning and formatting of the device:
Warning
When we start the partitioning we will also reformat the device, so any files will be removed. Ensure that the device does not contain any files that needs to be saved elsewhere.
example:/media/partition-sdb/#> start-partitioning Understand that the content of media device will be lost during the partitioning and formatting of the device. Make sure that the device does not contain any files that needs to be saved elsewhere. Start partitioning and formatting of the device (y/N)? y Attempt to delete existing partitions on device /dev/sdb: 1: /dev/sdb1 [Partition numb: 1] 2: /dev/sdb2 [Partition numb: 2] 3: /dev/sdb3 [Partition numb: 3] 4: /dev/sdb4 [Partition numb: 4] Attempt to partition device /dev/sdb in the following manner: 1: /dev/sdb1 [Partition numb: 1], [Size: 50%] 2: /dev/sdb2 [Partition numb: 2], [Size: 20%] 3: /dev/sdb3 [Partition numb: 3], [Size: 20%] 4: /dev/sdb4 [Partition numb: 4], [Size: 10%] Initiate formatting of the partitions, this may take a while: 1: /dev/sdb1 [Partition numb: 1] [Label: default], format with ext3 FS... Formatting: 100% \ [============================================================] 2: /dev/sdb2 [Partition numb: 2] [Label: my-files], format with vfat FS... Formatting: 100% \ [============================================================] 3: /dev/sdb3 [Partition numb: 3] [Label: -], format with ext2 FS... Formatting: 100% \ [============================================================] 4: /dev/sdb4 [Partition numb: 4] [Label: my-label], format with ext4 FS... Formatting: 100% \ [============================================================] Device sdb successfully partitioned and formatted! example:/media/#>
If no error indications appeared, the device should now have been
partitioned and formatted according to the specified configuration. We
can verify this using the show devices
command:
example:/media/partition-sdb/#> show devices Connected Media Devices NAME TYPE NUM LABEL FORMAT SIZE MOUNT-MEDIA sdb disk - - - 3824M - sdb1 part 1 default ext3 1912M external sdb2 part 2 my-files vfat 764M - sdb3 part 3 - ext2 764M - sdb4 part 4 my-label ext4 382M -
We can also get a comprehensive overview of the connected external
media device in relation the media definitions specified on the system
using the show
command in the current context:
example:/media/partition-sdb/#> show MEDIA DEVICE LABEL FORMAT RW SIZE USED DESCRIPTION Active internal mtd:Config - jffs2 Yes 15.0M 5% config,cert external sdb1 default ext3 Yes 1.8G 0% logging Inactive Available - sdb2 my-files vfat - 764M - - sdb3 - ext2 - 764M - - sdb4 my-label ext4 - 382M -
As we can see only the first of our partitions that we created is
listed under the Active
tab. This is because it matches one of
the default matching rules for media definitions on the system, the
one named external.
Note
The default external media match rule, aptly named external
, is set to
match on the first partition of a device. In case a device have no
partitions it will match on that as well (No partition means the first
partition, in the context of the match rule).
Further, we can see the other three of our partitions are listed as
Available
. This means that a physical device exist, but they
have no matching media definition. Hence, this device is available for
matching.
Lastly, we currently have nothing listed under Inactive
. Any
media definition that have been created that finds no matching
physical device will be listed here.
The next step in order to make the additional external physical media devices accessible, is to create media definitions that can correctly match them. This is covered in the following section on this page.
Format a Specific Device or Partition
It is possible to simply format a given device or partition as well,
using the format
command that is also located in the media
context. In the example provided below we want to reformat one of our
partitions, sdb2
. It can be done in the following manner:
example:/media/partition-sdb/#> format sdb2 example:/media/format-sdb2/#>
After that we select the file system we want to format the device with, along with an optional label:
example:/media/format-sdb2/#> filesystem vfat example:/media/format-sdb2/#> label my-files
Before we start the formatting we can check our intended configuration:
example:/media/format-sdb2/#> show
Format settings for device sdb2
Filesystem : vfat
Label : my-files
When we are satisfied with the planned format options, we can initiate the actual formatting:
Note
No changes have actually been made to the device before we
use the start-formatting
command, it is still possible to exit
the formatting context without any changes to the device.
Warning
Observe, that once the formatting starts all files on the device will be lost, so ensure that any files that should be saved have been so.
example:/media/format-sdb2/#> start-formatting Warning: Formatting this dev will remove any files currently stored on it! Backup any data you want to keep before formatting the dev. Do you still want to proceed (y/N)?y Formatting: 100% \ [============================================================] Format successful! example:/media/#>
If everything went well we can use the show devices
command to
verify that the device was formatted with the correct options:
example:/media/partition-sdb/#> show devices Connected Media Devices NAME TYPE NUM LABEL FORMAT SIZE MOUNT-MEDIA sdb disk - - - 3824M - sdb1 part 1 default ext3 1912M external sdb2 part 2 my-files vfat 764M - sdb3 part 3 - ext2 764M - sdb4 part 4 my-label ext4 382M -
As we can see sdb2
has been correctly formatted.
Make Specific Media Accessible on the System
In order for an external media device to become mounted and accessible on the system, a media definition needs to be created. This media definition will specify a name that will be how to refer to a specific media when using it in the system. Furthermore, any media definition also have an associated match rule that will specify how a physical external media device will be linked with said media definition.
Only one match rule can be specified per media definition, and can be set to match on the following parameters:
-
partition
: Used to indicate a match based on a specific partition number on the physical media device. If no partitions exist on the device, that will count as a match for partition 1 (The first). -
label
: Used to indicate a match based on a specific label possibly present on the physical media device.
Default Media Definitions
By default the system will be configured with two media definitions. One is mean to represent the built-in flash memory and the other to serve as a general match rule for any potential connected media device. They are defined in the following manner:
Name | Match Rule | Description |
---|---|---|
internal | System Internal | Special definition and representation of the built-in flash, this media definition CANNOT be changed or removed. |
external | Partition: 1 | Base definition aimed to match the first partition located on any connected external physical media. If no partitions exist on the device this will also be a match in that case. |
The internal
media definition exist so that we can refer to the
built-in flash in the same manner as we do any external media device.
The external
media definition serve as the most simple way an
external media can be matched and be made available. This definition
is, in contrast to the previously mentioned, fully adjustable and even
removable.
Note
Removing the external
media definition in this case
would effectively be disabling any connected external media device,
since the device or any potential partition will not be mounted and
be made available.
Creating New Media Definitions
In this case we want to create additional media definitions in order to match all of the partitions we created during the example in the earlier section on this page.
In this case we will keep the default external
media definition
and create three additional definitions to match the other
partitions. In this case we want to have the following media
definitions configured to match the specific partitions.
Name | Match Rule | Intended Physical Device to Match |
---|---|---|
external | Partition: 1 | sdb1 |
files | Label: my-files | sdb2 |
stuff | Partition: 3 | sdb3 |
things | Label: my-label | sdb4 |
All the media definitions on the system are created in the boot configuration context. These settings will also be stored in the boot configuration.
Note
These media changes will not become active until the next reboot of the system. Therefore, making changes here without a reboot will not cause the media definitions to be mounted, even though the physical external devices currently exist.
In order to start configuring the new media definitions we need to enter the boot configuration context:
example:/#> boot example:/boot/#>
First we can check so that we do not already have any other media definitions except for the default ones:
example:/boot/#> show media Media Configuration # NAME R/O TIMEOUT MATCH 1 internal No ------- System Internal 2 external No 30 Partition number: 1
If the output matches the above we currently only have unchanged default media definitions.
From here we can create our new media definitions in accordance with the table presented above:
example:/boot/#> media files Creating new media definition... example:/boot/media-files/#> match label my-files example:/boot/media-files/#> end example:/boot/#>
example:/boot/#> media stuff Creating new media definition... example:/boot/media-stuff/#> match partition 3 example:/boot/media-stuff/#> end example:/boot/#>
example:/boot/#> media things Creating new media definition... example:/boot/media-things/#> match label my-label example:/boot/media-things/#> end example:/boot/#>
Now with our new media definitions they should appear like this:
example:/boot/#> show media Media Configuration # NAME R/O TIMEOUT MATCH 1 internal No ------- System Internal 2 external No 30 Partition number: 1 3 files No 30 Label: my-files 4 stuff No 30 Partition number: 3 5 things No 30 Label: my-label
Now we exit the boot context so that we write our new settings into the boot configuration:
example:/boot/#> end Saving bootloader configuration to FLASH 100% / [====================================================================] example:/#>
In order for these new media definitions to have any effect and become active, we need to reboot the device:
example:/#> reboot [...] Please press Enter to activate this console. example login: admin Password: example:/#>
Now after we have rebooted the device our media definitions should be active, if they indeed properly matched against any connected external media device and its partitions. We can check this with the show media command, from the top level context (not in the boot context, that is only the configuration):
example:/#> show media MEDIA DEVICE LABEL FORMAT RW SIZE USED DESCRIPTION Active internal mtd:Config - jffs2 Yes 15.0M 5% config,cert external sdb1 default ext3 Yes 1.8G 0% logging files sdb2 my-files vfat Yes 763.3M 0% stuff sdb3 - ext2 Yes 752.0M 0% things sdb4 my-label ext4 Yes 348.3M 0% Inactive Available
Now we can see that all combinations of media definitions and actual
physical external media devices are all listed under Active
. As
mentioned earlier, this means that they fully match correctly and are
now mounted and accessible in the system.
We can for instance access the media devices in the system’s VFS using
the media://MEDIA-NAME/FILE
format. For example we can use the
ls
command to list everything on the media:
example:/#> ls media://files/ /media/files/ MOD. DATE/LINK SIZE MD5 bar 2021-09-14 15:40 0 foo 2021-09-14 15:40 0 hello-world.txt 2021-09-14 15:40 0 Free: 763.3 MiB | Total: 763.3 MiB
For advanced users, these medias can also be accessed directly from the linux shell:
example:/#> shell Domain shell started. admin@example:~ # ls /media/ external files internal stuff things admin@example:~ #