Difference between revisions of "Booting with a USB Root Filesystem"

From wiki.emacinc.com
Jump to: navigation, search
(Created page with "It is possible to boot most EMAC OE systems using a USB thumb drive as the root filesystem and to optionally load a kernel from. This method can be especially useful for updat...")
 
m (removed unnecessary command)
 
(5 intermediate revisions by one other user not shown)
Line 39: Line 39:
 
[ 2798.283834] sd 6:0:0:0: [sdd] Attached SCSI removable disk <br />
 
[ 2798.283834] sd 6:0:0:0: [sdd] Attached SCSI removable disk <br />
 
{{clos}}
 
{{clos}}
 +
 +
<br />
 +
{{ imbox | type=notice | text=If using a virtual machine, wait for Windows to install the Virtualbox USB driver. Then make the virtual machine aware of the USB drive by going into the Devices menu option in virtualbox, then sub-option USB and select your USB device.}}
 +
<br />
  
 
The output of the <code>dmesg</code> command shows that the root device node for the USB drive in this case is <code>sdd</code> and no partitions. Partitions on the drive would be listed as <code>sdd1</code>, <code>sdd2</code>, etc.  Inspect the output shown above to see the particular device node on the development PC where the USB drive is mounted. This will be different depending on the configuration of the development PC. The <code>/dev/</code> prefix will go before the device name, but is not shown in the output of <code>dmesg</code>. The device node will start with <code>sd</code>. The third letter will specify which of these devices is assigned to the USB drive. The number will indicate the partitions, if any. Press Ctrl and 'c' to exit dmesg.
 
The output of the <code>dmesg</code> command shows that the root device node for the USB drive in this case is <code>sdd</code> and no partitions. Partitions on the drive would be listed as <code>sdd1</code>, <code>sdd2</code>, etc.  Inspect the output shown above to see the particular device node on the development PC where the USB drive is mounted. This will be different depending on the configuration of the development PC. The <code>/dev/</code> prefix will go before the device name, but is not shown in the output of <code>dmesg</code>. The device node will start with <code>sd</code>. The third letter will specify which of these devices is assigned to the USB drive. The number will indicate the partitions, if any. Press Ctrl and 'c' to exit dmesg.
Line 52: Line 56:
 
* It is not mounted on one of the standard Linux filesystem mountpoints, such as <code>/</code>, <code>/boot</code>, <code>/usr</code>, or <code>/home</code>.
 
* It is not mounted on one of the standard Linux filesystem mountpoints, such as <code>/</code>, <code>/boot</code>, <code>/usr</code>, or <code>/home</code>.
 
* It '''is''' mounted in the <code>/media</code> directory, where it is expected.  It may alternatively get mounted in <code>/mnt</code>, depending upon the configuration of the Linux distribution in use.
 
* It '''is''' mounted in the <code>/media</code> directory, where it is expected.  It may alternatively get mounted in <code>/mnt</code>, depending upon the configuration of the Linux distribution in use.
 +
 +
If nothing is returned, then the USB drive did not get automatically mounted. Proceed to the next step.
  
 
Use <code>fdisk -l</code> to inspect the device node. Use <code>sudo</code> with <code>fdisk</code> to gain the required <code>root</code> privileges to run <code>fdisk</code>
 
Use <code>fdisk -l</code> to inspect the device node. Use <code>sudo</code> with <code>fdisk</code> to gain the required <code>root</code> privileges to run <code>fdisk</code>
  
{{clo}}
+
{{clop}}
{{clio | username=developer | hostname=ldc | pwd=~ | sudo fdisk -l /dev/sdd }}
+
{{cliop | username=developer | hostname=ldc | pwd=~ | sudo fdisk -l /dev/sdd }}<nowiki>
'Disk /dev/sdd: 3.7 GiB, 3980394496 bytes, 7774208 sectors <br />
+
 
Units: sectors of 1 * 512 = 512 bytes <br />
+
Disk /dev/sdd: 3.7 GiB, 3980394496 bytes, 7774208 sectors
Sector size (logical/physical): 512 bytes / 512 bytes <br />
+
Disk model: STORAGE DEVICE 
I/O size (minimum/optimal): 512 bytes / 512 bytes <br />
+
Units: sectors of 1 * 512 = 512 bytes
Disklabel type: dos <br />
+
Sector size (logical/physical): 512 bytes / 512 bytes
Disk identifier 0x00000000 <br />
+
I/O size (minimum/optimal): 512 bytes / 512 bytes
{{clos}}
+
Disklabel type: dos
 +
Disk identifier: 0x4fcf5773
 +
</nowiki>
 +
{{closp}}
 +
 
 +
The output of fdisk will also show information about any partitions that may exist on the USB drive. For example, another drive with a single FAT32 formatted partition will look like:
 +
{{clop}}
 +
{{cliop | username=developer | hostname=ldc | pwd=~ | sudo fdisk -l /dev/sdd }}<nowiki>
 +
 
 +
Disk /dev/sdd: 3.7 GiB, 3980394496 bytes, 7774208 sectors
 +
Disk model: STORAGE DEVICE 
 +
Units: sectors of 1 * 512 = 512 bytes
 +
Sector size (logical/physical): 512 bytes / 512 bytes
 +
I/O size (minimum/optimal): 512 bytes / 512 bytes
 +
Disklabel type: dos
 +
Disk identifier: 0xe6077d37
  
The output of fdisk will also show information about any partitions that may exist on the USB drive. For example, a drive with a single FAT32 formatted partition will look like:
+
Device    Boot Start     End Sectors  Size Id Type
{{clo}}
+
/dev/sdh1        2048 7774207 7772160 3.7G  c W95 FAT32 (LBA)
Disk /dev/sdd: 3.7 GiB, 3980394496 bytes, 7774208 sectors <br />
+
</nowiki>
Units: sectors of 1 * 512 = 512 bytes <br />
+
{{closp}}
Sector size (logical/physical): 512 bytes / 512 bytes <br />
 
I/O size (minimum/optimal): 512 bytes / 512 bytes <br />
 
Disklabel type: dos <br />
 
Disk identifier 0xb04870e5 <br />
 
<br />
 
Device    Boot Start     End Sectors  Size Id Type <br />
 
/dev/sdd1  *    8760 14438399 14429640 3.7G  c W95 FAT32 (LBA) <br />
 
{{clos}}
 
  
 
* As can be seen from the output of the <code>fdisk -l</code> command above, the disk is 3.7 GB in size, which corresponds with the size of the 4 GB USB drive being used in this example.
 
* As can be seen from the output of the <code>fdisk -l</code> command above, the disk is 3.7 GB in size, which corresponds with the size of the 4 GB USB drive being used in this example.
Line 92: Line 105:
 
Once the correct drive letter is determined, we will create a new Linux partition.
 
Once the correct drive letter is determined, we will create a new Linux partition.
  
{{clo}}
+
{{clop}}
{{clio | username=developer | hostname=ldc | pwd=~ | sudo fdisk /dev/sdd }}
+
{{cliop | username=developer | hostname=ldc | pwd=~ | sudo fdisk /dev/sdd }}<nowiki>
<br />
+
 
Welcome to fdisk (util-linux 2.31.1). <br />
+
Welcome to fdisk (util-linux 2.33.1).
Changes will remain in memory only, until you decide to write them. <br />
+
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command. <br />
+
Be careful before using the write command.
<br />
+
 
<br />
+
 
Command (m for help) o <br />
+
Command (m for help): o
Created a new DOS disklabel with disk identifier 0xe6077d37. <br />
+
Created a new DOS disklabel with disk identifier 0x05d5e983.
<br />
+
 
Command (m for help) n <br />
+
Command (m for help): n
Partition type <br />
+
Partition type
p  primary (0 primary, 0 extended, 4 free) <br />
+
  p  primary (0 primary, 0 extended, 4 free)
e  extended (container for logical partitions) <br />
+
  e  extended (container for logical partitions)
Select (default p) p <br />
+
Select (default p): p
Partition number (1-4, default 1) 1 <br />
+
Partition number (1-4, default 1): 1
First sector (2048-7774207, default 2048) <br />
+
First sector (2048-7774207, default 2048):
Last sector, +sectors or +size{K,M,G,T,P} (2048-7774207, default 7774207) <br />
+
Last sector, +/-sectors or +/-size{K,M,G,T,P} (2048-7774207, default 7774207):
<br />
+
 
Created a new partition 1 of type 'Linux' and of size 3.7 GiB. <br />
+
Created a new partition 1 of type 'Linux' and of size 3.7 GiB.
<br />
+
 
Command (m for help) p <br />
+
Command (m for help): p
Disk /dev/sdd: 3.7 GiB, 3980394496 bytes, 7774208 sectors <br />
+
Disk /dev/sdd: 3.7 GiB, 3980394496 bytes, 7774208 sectors
Units sectors of 1 * 512 = 512 bytes <br />
+
Disk model: STORAGE DEVICE 
Sector size (logical/physical) 512 bytes / 512 bytes <br />
+
Units: sectors of 1 * 512 = 512 bytes
I/O size (minimum/optimal) 512 bytes / 512 bytes <br />
+
Sector size (logical/physical): 512 bytes / 512 bytes
Disklabel type dos <br />
+
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier 0xe6077d37 <br />
+
Disklabel type: dos
<br />
+
Disk identifier: 0x05d5e983
Device    Boot Start    End Sectors  Size Id Type <br />
+
 
/dev/sdd1        2048 7774207 7772160  3.7G 83 Linux <br />
+
Device    Boot Start    End Sectors  Size Id Type
<br />
+
/dev/sdd1        2048 7774207 7772160  3.7G 83 Linux
Command (m for help) w <br />
+
 
The partition table has been altered. <br />
+
Command (m for help): w
Calling ioctl() to re-read partition table. <br />
+
The partition table has been altered.
Syncing disks. <br />
+
Calling ioctl() to re-read partition table.
<br />
+
Syncing disks.
{{clos}}
+
</nowiki>
 +
{{closp}}
  
 
The fdisk commands are:
 
The fdisk commands are:
Line 154: Line 168:
 
The first partition will be formatted with the ext4 filesystem.
 
The first partition will be formatted with the ext4 filesystem.
  
{{cli | username=developer | hostname=ldc | pwd=~ | sudo yes {{!}} mkfs.ext4 /dev/sdd1 }}
+
{{cli | username=developer | hostname=ldc | pwd=~ | yes {{!}} sudo mkfs.ext4 /dev/sdd1 }}
  
 
==Mount the Partition==
 
==Mount the Partition==
Line 160: Line 174:
 
The first partition of the USB drive will be mounted so that it is accessible to write to.
 
The first partition of the USB drive will be mounted so that it is accessible to write to.
  
{{cli | username=developer | hostname=ldc | pwd=~ | sudo mkdir -p /media/card }}
+
{{clop}}
{{cli | username=developer | hostname=ldc | pwd=~ | sudo mount /dev/sdd1 /media/card }}
+
{{clio | username=developer | hostname=ldc | pwd=~ | sudo mkdir -p /media/card }}
 +
{{clio | username=developer | hostname=ldc | pwd=~ | sudo mount /dev/sdd1 /media/card }}
 +
{{closp}}
  
 
The USB drive is now accessible through the <code>/media/card</code> directory.
 
The USB drive is now accessible through the <code>/media/card</code> directory.
Line 169: Line 185:
 
Locate where the filesystem archive has been downloaded. If the archive is called rootfs.tar.gz and is in the users Downloads directory:
 
Locate where the filesystem archive has been downloaded. If the archive is called rootfs.tar.gz and is in the users Downloads directory:
  
{{cli | username=developer | hostname=ldc | pwd=~ | cd /media/card }}
+
{{clop}}
{{cli | username=developer | hostname=ldc | pwd=/media/card | sudo tar zxf ~/Downloads/rootfs.tar.gz }}
+
{{clio | username=developer | hostname=ldc | pwd=~ | cd /media/card }}
 +
{{clio | username=developer | hostname=ldc | pwd=/media/card | sudo tar zxf ~/Downloads/rootfs.tar.gz }}
 +
{{clio | username=developer | hostname=ldc | pwd=/media/card | sync }}
 +
{{clio | username=developer | hostname=ldc | pwd=/media/card | cd }}
 +
{{clio | username=developer | hostname=ldc | pwd=~ | sudo umount /media/card }}
 +
{{closp}}
  
 +
It is now safe to remove the USB drive from the host computer.
  
 
==Configuring the Client to Boot from USB==
 
==Configuring the Client to Boot from USB==
Line 177: Line 199:
 
===Configuring U-Boot===
 
===Configuring U-Boot===
  
 +
Insert the USB drive into an available port on the target board.
 
Set the bootargs variable to tell the kernel to boot into the USB filesystem:
 
Set the bootargs variable to tell the kernel to boot into the USB filesystem:
  
  U-Boot> setenv bootargs console=${console} root=/dev/sda1 rootfstype=ext4
+
  U-Boot> setenv bootargs "console=${console} root=/dev/sda1 rootfstype=ext4 rootwait"
U-Boot> run bootargs
 
  
This line sets up the environment needed to boot from the USB drive.  These options will be passed to the Linux kernel when booting it.  The <code>console=${console}</code> part tells Linux to use the console setting from the U-Boot environment variable; this will usually be something along the lines of <code>console=ttyS0,115200n8</code>.  The <code>root=/dev/sda1</code> directive tells Linux to instantiate with the USB block device, <code>/dev/sda1</code>, as the root filesystem. The <code>rootfstype=ext4</code> directive tells Linux that the root filesystem is of the EXT4 variety.   
+
This line sets up the environment needed to boot from the USB drive.  These options will be passed to the Linux kernel when booting it.  The <code>console=${console}</code> part tells Linux to use the console setting from the U-Boot environment variable; this will usually be something along the lines of <code>console=ttyS0,115200n8</code>.  The <code>root=/dev/sda1</code> directive tells Linux to instantiate with the USB block device, <code>/dev/sda1</code>, as the root filesystem. The <code>rootfstype=ext4</code> directive tells Linux that the root filesystem is of the EXT4 variety.   
  
 
If the kernel is already programmed into the flash, it can be used in most cases to boot into the USB root filesystem. Execute the next line to load and run the default kernel.
 
If the kernel is already programmed into the flash, it can be used in most cases to boot into the USB root filesystem. Execute the next line to load and run the default kernel.
Line 192: Line 214:
 
===Alternate Kernel Load===
 
===Alternate Kernel Load===
  
An alternate kernel can be loaded into memory temporarily and booted if the kernel is not already programmed in the flash or a development kernel is to be tested. Also see [[ Loading_Images_with_U-Boot#Executing_kernel_from_RAM  | Executing kernel from RAM ]]
+
An alternate kernel can be loaded into memory temporarily and booted if the kernel is not already programmed in the flash or a development kernel is to be tested. The below example assumes a kernel named zImage-test was placed in the /boot directory of the USB drive. Also see [[ Loading_Images_with_U-Boot#Executing_kernel_from_RAM  | Executing kernel from RAM ]]
  
 
  U-Boot> usb start
 
  U-Boot> usb start
 +
U-Boot> usb storage
 +
U-Boot> ext2load usb 0:1 ${loadaddr} /boot/zImage-test
 +
U-Boot> bootz ${loadaddr}
 +
 +
The first two commands initialize the USB storage system in U-Boot. The <code>ext2load</code> line says to use the USB device 0 partition 1 and load into RAM at ${loadaddr} the file /boot/zImage-test from the USB drive. The last line boots the kernel that has been loaded into memory.
 +
 +
==Conclusion==
 +
 +
Using a USB thumb drive for the root filesystem allows boards to boot quickly into a rescue or known good version of a filesystem and provides a method for remotely backing up the filesystem installed on an embedded machine.  Setting up a machine to boot to a root filesystem via USB requires little work; most of the work is in setting up the USB thumb drive.
 +
 +
{{:Templateimpl:moreinfo | initials=MG | title=System Logging | desc=The page describes how to USB boot. | project=OE 5.0 }}
 +
* [[Loading_Images_onto_eMMC_Devices | Loading Images onto eMMC Devices]]
 +
* [[Loading_Images_with_U-Boot | Loading Images with U-Boot]]
 +
* [[Loading_Linux_Kernels_Onto_a_Board | Loading Linux Kernels Onto a Board]]

Latest revision as of 10:07, 27 April 2021

It is possible to boot most EMAC OE systems using a USB thumb drive as the root filesystem and to optionally load a kernel from. This method can be especially useful for updating or recovering the root filesystem when a network connection or a network file server is not available. This page describes the steps required to boot into a root filesystem residing on a USB thumb drive.

Prerequisites

Some prerequisites must be met prior to being able to boot a root filesystem from a USB drive.

USB Thumb Drive

Any blank USB drive. If it is not blank, this process will completely wipe the data that exists on the USB drive.

Root Filesystem

A complete root filesystem for the EMAC OE system to boot from must be stored on the USB drive.

Linux Host Computer

Either a native Linux host or Windows host running a Linux virtual machine.

Configuring the USB Thumb Drive

In a terminal window, start the dmesg log with the follow option to watch for new devices.

developer@ldc:~# dmesg -w

Insert the USB drive and watch for the device to be announced.

[ 2796.940110] scsi host6: usb-storage 1-1.2:1.0
[ 2797.963442] scsi 6:0:0:0: Direct-Access Generic STORAGE DEVICE 0272 PQ: 0 ANSI: 0
[ 2797.963905] sd 6:0:0:0: Attached scsi generic sg4 type 0
[ 2798.269544] sd 6:0:0:0: [sdd] 7774208 512-byte logical blocks: (3.98 GB/3.71 GiB)
[ 2798.271027] sd 6:0:0:0: [sdd] Write Protect is off
[ 2798.271030] sd 6:0:0:0: [sdd] Mode Sense: 0b 00 00 08
[ 2798.272502] sd 6:0:0:0: [sdd] No Caching mode page found
[ 2798.272508] sd 6:0:0:0: [sdd] Assuming drive cache: write through
[ 2798.279486] sdd:
[ 2798.283834] sd 6:0:0:0: [sdd] Attached SCSI removable disk



The output of the dmesg command shows that the root device node for the USB drive in this case is sdd and no partitions. Partitions on the drive would be listed as sdd1, sdd2, etc. Inspect the output shown above to see the particular device node on the development PC where the USB drive is mounted. This will be different depending on the configuration of the development PC. The /dev/ prefix will go before the device name, but is not shown in the output of dmesg. The device node will start with sd. The third letter will specify which of these devices is assigned to the USB drive. The number will indicate the partitions, if any. Press Ctrl and 'c' to exit dmesg.

  • At this point, it is wise to double check that device node is actually the USB drive and not a hard drive in the system. Specifying the wrong device node could cause a complete loss of data on a hard drive.

    Continuing with /dev/sdd as the example device node, type the following command:
developer@ldc:~# mount | grep sdd

/dev/sdd on /media/developer/FBF6-1988 type vfat

This shows that the device node, /dev/sdd, is in fact the USB drive. This is because:

  • It is not mounted on one of the standard Linux filesystem mountpoints, such as /, /boot, /usr, or /home.
  • It is mounted in the /media directory, where it is expected. It may alternatively get mounted in /mnt, depending upon the configuration of the Linux distribution in use.

If nothing is returned, then the USB drive did not get automatically mounted. Proceed to the next step.

Use fdisk -l to inspect the device node. Use sudo with fdisk to gain the required root privileges to run fdisk

developer@ldc:~# sudo fdisk -l /dev/sdd
Disk /dev/sdd: 3.7 GiB, 3980394496 bytes, 7774208 sectors Disk model: STORAGE DEVICE Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disklabel type: dos Disk identifier: 0x4fcf5773

The output of fdisk will also show information about any partitions that may exist on the USB drive. For example, another drive with a single FAT32 formatted partition will look like:

developer@ldc:~# sudo fdisk -l /dev/sdd
Disk /dev/sdd: 3.7 GiB, 3980394496 bytes, 7774208 sectors Disk model: STORAGE DEVICE Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disklabel type: dos Disk identifier: 0xe6077d37 Device Boot Start End Sectors Size Id Type /dev/sdh1 2048 7774207 7772160 3.7G c W95 FAT32 (LBA)
  • As can be seen from the output of the fdisk -l command above, the disk is 3.7 GB in size, which corresponds with the size of the 4 GB USB drive being used in this example.

Unmount all of the USB drives partitions that were listed from the mount command above.

developer@ldc:~# sudo umount /dev/sdd

If there is a partition listed:

developer@ldc:~# sudo umount /dev/sdd1

Repartition the USB Drive

Once the correct drive letter is determined, we will create a new Linux partition.

developer@ldc:~# sudo fdisk /dev/sdd
Welcome to fdisk (util-linux 2.33.1). Changes will remain in memory only, until you decide to write them. Be careful before using the write command. Command (m for help): o Created a new DOS disklabel with disk identifier 0x05d5e983. Command (m for help): n Partition type p primary (0 primary, 0 extended, 4 free) e extended (container for logical partitions) Select (default p): p Partition number (1-4, default 1): 1 First sector (2048-7774207, default 2048): Last sector, +/-sectors or +/-size{K,M,G,T,P} (2048-7774207, default 7774207): Created a new partition 1 of type 'Linux' and of size 3.7 GiB. Command (m for help): p Disk /dev/sdd: 3.7 GiB, 3980394496 bytes, 7774208 sectors Disk model: STORAGE DEVICE Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disklabel type: dos Disk identifier: 0x05d5e983 Device Boot Start End Sectors Size Id Type /dev/sdd1 2048 7774207 7772160 3.7G 83 Linux Command (m for help): w The partition table has been altered. Calling ioctl() to re-read partition table. Syncing disks.

The fdisk commands are:

o - Create a new empty partition table

n - Create a new partition

p - The type of partition is a primary partition

1 - Create the first partition

<ENTER> - Accept default start

<ENTER> - Accept default end

p - Print the new partition layout

w - Write the new partition layout and exit

Format the Partition

The first partition will be formatted with the ext4 filesystem.

developer@ldc:~# yes | sudo mkfs.ext4 /dev/sdd1

Mount the Partition

The first partition of the USB drive will be mounted so that it is accessible to write to.

developer@ldc:~# sudo mkdir -p /media/card
developer@ldc:~# sudo mount /dev/sdd1 /media/card

The USB drive is now accessible through the /media/card directory.

Extract Filesystem Archive

Locate where the filesystem archive has been downloaded. If the archive is called rootfs.tar.gz and is in the users Downloads directory:

developer@ldc:~# cd /media/card
developer@ldc:/media/card# sudo tar zxf ~/Downloads/rootfs.tar.gz
developer@ldc:/media/card# sync
developer@ldc:/media/card# cd
developer@ldc:~# sudo umount /media/card

It is now safe to remove the USB drive from the host computer.

Configuring the Client to Boot from USB

Configuring U-Boot

Insert the USB drive into an available port on the target board. Set the bootargs variable to tell the kernel to boot into the USB filesystem:

U-Boot> setenv bootargs "console=${console} root=/dev/sda1 rootfstype=ext4 rootwait"

This line sets up the environment needed to boot from the USB drive. These options will be passed to the Linux kernel when booting it. The console=${console} part tells Linux to use the console setting from the U-Boot environment variable; this will usually be something along the lines of console=ttyS0,115200n8. The root=/dev/sda1 directive tells Linux to instantiate with the USB block device, /dev/sda1, as the root filesystem. The rootfstype=ext4 directive tells Linux that the root filesystem is of the EXT4 variety.

If the kernel is already programmed into the flash, it can be used in most cases to boot into the USB root filesystem. Execute the next line to load and run the default kernel.

U-Boot> boot

The machine should now boot, and show output on its console as it does so.

Alternate Kernel Load

An alternate kernel can be loaded into memory temporarily and booted if the kernel is not already programmed in the flash or a development kernel is to be tested. The below example assumes a kernel named zImage-test was placed in the /boot directory of the USB drive. Also see Executing kernel from RAM

U-Boot> usb start
U-Boot> usb storage
U-Boot> ext2load usb 0:1 ${loadaddr} /boot/zImage-test
U-Boot> bootz ${loadaddr}

The first two commands initialize the USB storage system in U-Boot. The ext2load line says to use the USB device 0 partition 1 and load into RAM at ${loadaddr} the file /boot/zImage-test from the USB drive. The last line boots the kernel that has been loaded into memory.

Conclusion

Using a USB thumb drive for the root filesystem allows boards to boot quickly into a rescue or known good version of a filesystem and provides a method for remotely backing up the filesystem installed on an embedded machine. Setting up a machine to boot to a root filesystem via USB requires little work; most of the work is in setting up the USB thumb drive.

Further Information

Where to Go Next