User Tools

Site Tools


doc:howto:extroot

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
doc:howto:extroot [2012/09/12 05:18]
gene_wood
doc:howto:extroot [2015/07/28 11:35] (current)
Kr0nZ [Using Image Generator]
Line 1: Line 1:
 ====== Rootfs on External Storage (extroot) ====== ====== Rootfs on External Storage (extroot) ======
-To understand the concept ​of OpenWrt extrootplease read [[doc:​howto:​extroot:​extroot.theory]].+  * More often than not, a limited amount ​of storage is available on embedded devices. ​ While flash memory will generally accommodate a bare OpenWRT installation,​ more storage for applications and data can expand a device'​s potential; with many devices having expansion capabilities built-in (i.e. USB, SATA, and PCIe ports, NASetc.) 
  
-===== Alternatives to extroot ​===== +  * Applications are developed with the idea they should be installed in the root file system (rootfs). ​ By employing //extroot//, expansion of the storage capacity of your root file system is accomplished by using an added storage ​device. ​During the boot process, external storage space is mounted as the root file system, or in an overlay configuration ​over the original file systemTo understand the technical details, please read [[doc:howto:extroot:​extroot.theory|extroot theory]].
-  - configure ​your [[doc:​techref:​bootloader]] to boot from the external USB device ​directlyMost bootloaders can'​t...! +
-  - configure your bootloader to boot over the network ->​[[inbox:​netboot]] Many bootloaders can't...! +
-  - make ''​opkg''​ install new packages somewhere else: ->[[doc:techref:opkg#​Installation destinations]] +
-  - use [[kexec]]+
  
-==== Preparations ​==== +===== Alternatives ===== 
-  - Please read the article ​[[doc:howto:extroot:​extroot.theory]] for better understanding+    * Configuring ​the [[doc:techref:bootloader|bootloader]] to boot from an external USB drive, of which most can not
-  - This entire extroot functionality is **<color red>Work-in-Progress</​color>​**,​ so is this article, so please make sure to check [[#​Troubleshooting]] and the [[#Notes]] as a preparation and also later on from time to time!+      Popular bootloaders (i.e. U-Boot or RedBoot) ​[[wp>​Comparison_of_boot_loaders|support different file systems]], but they lack the necessary hardware drivers.
  
-===== OpenWrt Backfire 10.03+ ===== +    ​Configuring ​the bootloader ​to boot over the network via [[inbox:netboot|netboot]], of which most can not.
-==== Prerequisites ==== +
-  - you need to **mount** a **file system**, on which the overlay will be copied ​to. You could +
-    - follow ​[[doc:howto:​usb.essentials]] and additionally [[doc:​howto:​usb.storage]] for USB storage +
-    - alternatively follow [[doc:​howto:​sata.essentials]], [[doc:​howto:​ide.essentials]] or [[doc:​howto:​cf.essentials]] for other storage +
-    - alternatively follow [[doc:​howto:​client.overview#​Mounting Filesystems]] to mount a remote network file system+
  
-==== Required Packages ==== +    ​Make ''​opkg'' ​install new packages [[doc:​techref:​opkg#​Installation destinations|somewhere else]]; however: ​ 
-  ***''​block-extroot''​** +      Installing packages in root is more convenient, as files are installed in locations the OS expects them to reside.
-  ​***''​block-hotplug''​** +
-  ***''​block-mount''​**+
  
-Depending on your medium (USB-Device,​ IDE-Device, SATA-Device or SD/MMC device) you need: +    * Use [[doc:howto:​kexec|kexec]];​ howeverthis requires custom configurations on different ​devices
-  ***''​kmod-usb-core''​** Kernel support for USB +
-  ***''​kmod-usb2''​** Kernel support for USB2 (EHCI) controllers +
-  ***''​kmod-usb-ohci''​** ​ Kernel support for USB OHCI controllers +
-  ***''​kmod-usb-storage''​** ​ Kernel support for USB Mass Storage devices +
-or +
-  ***''​kmod-ata-ahci''​** Support for AHCI Serial ATA controllers +
-  * and any other required SATA drivers +
-or +
-  ***''​kmod-ide-core''​** Kernel support for IDEuseful for usb mass storage ​devices +
-  * and any other required IDE drivers +
-or +
-  ***''​kmod-mmc''​** ​ Kernel support for MMC/SD cards +
-  * and any required required drivers +
-You also need the kernel module for the filesystem with which you formated the partition you want to mount: +
-  ***''​kmod-fs-ext4''​** +
-or +
-  ***''​kmod-fs-ext3''​** +
-or +
-  ***''​kmod-fs-ext2''​**+
  
-Optionally:​ +===== Automatic Setup =====
-  ***''​e2fsprogs''​** contains essential ext2, ext3 and ext4 file system utilities (''​e2fsck'',​ ''​mke2fs'',​ ''​debugfs'',​ ''​dumpe2fs'',​ ''​tune2fs'',​ ..) considerably smaller than ->​[[http://​packages.debian.org/​squeeze/​e2fsprogs|e2fsprogs in Debian repos]] +
-      ***''​e2fsck''​** contained in ''​e2fsprogs''​. Cannot be installed alone. :!: Please regard RAM requirements to check big file systems.((Roughly 1 MB of RAM for every 1 GB of disk to successfully fsck the disk. [[http://​www.openbsd.org/​faq/​faq14.html#​LargeDrive|Source]].))+
  
-==== Installation ====+  * There'​s a project called [[https://​github.com/​attila-lendvai/​openwrt-auto-extroot|OpenWRT Auto extroot]] that can build a customized firmware image (using the [[doc:​howto:​imagegenerator|Image Generator]]).  
 +    * When this image is flashed, it will automatically set up extroot on any inserted storage device and then reboot (hopefully into the freshly set up extroot). 
 +    * It's a nice foundation for custom applications that require auto provisioning,​ or just for your convenience at home for an easy extroot setup.
  
-<​code>​ 
-opkg update 
-opkg install block-mount block-hotplug block-extroot 
-</​code>​ 
-Also opkg install any filesystem or usb packages you need 
  
-=== Duplicate data === +==== Prerequisites ==== 
-  ​- ​**Copy** necessary files from flash to the new root partition: +You need to **mount** a **file system**, on which the overlay will be copied to. 
-    ​For //pivot overlay// you can either use an empty new rootfs OR copy the contents of the current overlay (JFFS2) to the new rootfs (assuming the filesystem ​for the new external rootfs is mounted on ''/​mnt/​sda1''​)+    ​For USB, follow [[doc:​howto:​usb.essentials]] and additionally [[doc:​howto:​usb.storage]] ​for USB storage.  
-<​code>​tar -C /overlay -cvf - | tar -C /mnt/sda1 -xf -</​code>​+    * Alternatively,​ follow [[doc:howto:​sata.essentials]],​ [[doc:​howto:​ide.essentials]] or [[doc:​howto:​cf.essentials]] for other storage 
 +    * Alternatively,​ follow [[doc:​howto:​client.overview#​Mounting Filesystems]] to mount a remote network file system 
 + * See [[Storage]] for general information on configuring storage devices.
  
-=== Configuration === +Make sure that you can mount and have read/write access to your external storage device. For example, check if you can read/write from a manually mounted file system on your partitioned USB drive at ''/​dev/sda''​:
-The configuration of extroot is very simple ​and is done entirely in ''​[[doc:​uci:​fstab|/etc/config/​fstab]]''​.+
  
-| {{:​meta:​icons:​tango:​48px-outdated.svg.png?​nolink}}| For backfire the option ''​is_rootfs''​ is required for block-extroot mounts! |+    mount /dev/sda1 /mnt/sda1
  
-=== External overlay variant (pivot overlay) ===+You should check if the mount was succesful by running ''​mount''​ or ''​df''​. Now check if you can write to ''/​mnt/​sda1''​ by writing a file to it and reading it back. 
  
-This is the only variant available in Backfire. +===== Attitude Adjustment ===== 
- +  * For OpenWrt 12.09, the second extroot variant pivot root is addedDecide ​whether you want to pivot ''/​overlay''​ (recommended) or to pivot ''/''​ (entire root)
-Configure by setting the option **is_rootfs** in your ''/​etc/​config/​fstab''​. ​ Besides that, there is really nothing to be configured regarding //ExtRoot// that is different from any other mount. +
- +
-For Backfire 10.03, and 10.03.1-rc1 to 10.03.1-rc5 use the example given below. +
- +
-|''​config mount +
-        option device ​       /dev/sda1 +
-        option fstype ​       ext3 +
-        option options ​      ​rw,​sync +
-        option enabled ​      1 +
-        option enabled_fsck ​ 0 +
-        option is_rootfs ​    ​1''​| +
- +
-**''​Note:''​**  +
-Using the directory ''/​mnt''​ as target will make testing possible, first set is_rootfs to 0, reboot and check if all mounts well and than set it to 1 and reboot again. +
-Make sure the target it is **NOT** manually set to ''/​overlay.'' ​ ''/​overlay''​ is automatically used on a successful ''​is_rootfs''​-mount,​ but if for some reason this file system could not be made the rootfs it will be mounted on the target listed here.  Using ''/​overlay''​ will result in an double ''/​overlay''​ mount and screw thing up. +
- +
-===== OpenWrt ​Attitude Adjustment ​(Trunk) ​===== +
-==== Prerequisites ​==== +
-  ​- you need to **mount** a **file system**, on which the overlay will be copied toYou could +
-    - follow [[doc:​howto:​usb.essentials]] and additionally [[doc:​howto:​usb.storage]] for USB storage +
-    - alternatively follow [[doc:​howto:​sata.essentials]],​ [[doc:​howto:​ide.essentials]] or [[doc:​howto:​cf.essentials]] for other storage +
-    - alternatively follow [[doc:​howto:​client.overview#​Mounting Filesystems]] to mount a remote network file system +
-  - decide ​whether you want to pivot ''/​overlay''​ (recommended) or to pivot ''/''​ (entire root)+
  
 ==== Required Packages ==== ==== Required Packages ====
   ***''​block-mount''​**   ***''​block-mount''​**
-Depending on your medium (USB-DeviceIDE-Device, SATA-Device or SD/MMC device) you need: +This is the only required extroot package for OpenWrt 12.09see [[doc/techref/​block_mount]]. ​  
-  ***''​kmod-usb-core''​** Kernel support for USB +   
-  ​***''​kmod-usb2''​** Kernel support for USB2 (EHCI) controllers +==== Installation ==== 
-  ​***''​kmod-usb-ohci''​** ​ Kernel support for USB OHCI controllers +After preparing your storage ​device ​and its file systeminstallation proceeds as follows. First the required ​packages are installed. Then the existing files from the current JFFS2 overlay ​partition ​on flash are copied ​to the new storage device. Then the system is configured using fstab for activating extroot at boot.
-  ​***''​kmod-usb-storage''​** ​ Kernel support for USB Mass Storage devices +
-or +
-  ***''​kmod-ata-ahci''​** Support for AHCI Serial ATA controllers +
-  * and any other required SATA drivers +
-or +
-  ***''​kmod-ide-core''​** Kernel support for IDEuseful for usb mass storage devices +
-  * and any other required ​IDE drivers +
-or +
-  ***''​kmod-mmc''​** ​ Kernel support for MMC/SD cards +
-  * and any required required drivers +
-You also need the kernel module for the filesystem with which you formated ​the partition ​you want to mount: +
-  ***''​kmod-fs-ext4''​** (recommended,​ this also supports ext2 and ext3)+
  
-Optionally:​ +=== Install packages ​===
-  ***''​e2fsprogs''​** contains essential ext2, ext3 and ext4 file system utilities (''​e2fsck'',​ ''​mke2fs'',​ ''​debugfs'',​ ''​dumpe2fs'',​ ''​tune2fs'',​ ..) considerably smaller than ->​[[http://​packages.debian.org/​squeeze/​e2fsprogs|e2fsprogs in Debian repos]] +
-      ***''​e2fsck''​** contained in ''​e2fsprogs''​. Cannot be installed alone. :!: Please regard RAM requirements to check big file systems. +
- +
-Also **required**:​ +
-  ***''​kmod-scsi-generic''​** ​ Linux kernel (2.6.30 and later) uses the SCSI devices to link any storage media. +
- +
-==== Installation ====+
 <​code>​ <​code>​
 opkg update opkg update
Line 130: Line 54:
 === Duplicate data === === Duplicate data ===
  
-  - **Copy** necessary files from flash to the new root partition:+Copy necessary files from flash to the new root partition:
     - For //pivot overlay// you can either use an empty new rootfs OR copy the contents of the current overlay (JFFS2) to the new rootfs (assuming the filesystem for the new external rootfs is mounted on ''/​mnt/​sda1''​):<​code>​tar -C /overlay -cvf - . | tar -C /mnt/sda1 -xf -</​code>​     - For //pivot overlay// you can either use an empty new rootfs OR copy the contents of the current overlay (JFFS2) to the new rootfs (assuming the filesystem for the new external rootfs is mounted on ''/​mnt/​sda1''​):<​code>​tar -C /overlay -cvf - . | tar -C /mnt/sda1 -xf -</​code>​
     - For //pivot root// (only possible as of [[https://​dev.openwrt.org/​changeset/​26109/​trunk|r26109]]!) you must make sure to have a complete root filesystem on the external rootfs device. One possible way to get such a system (assuming the filesystem for the new external rootfs is mounted on ''/​mnt/​sda1''​) is to issue  <​code>​mkdir -p /tmp/cproot     - For //pivot root// (only possible as of [[https://​dev.openwrt.org/​changeset/​26109/​trunk|r26109]]!) you must make sure to have a complete root filesystem on the external rootfs device. One possible way to get such a system (assuming the filesystem for the new external rootfs is mounted on ''/​mnt/​sda1''​) is to issue  <​code>​mkdir -p /tmp/cproot
 mount --bind / /tmp/cproot mount --bind / /tmp/cproot
-tar -C /tmp/cproot -cvf - . | tar -C /mnt/sda1 -xf -+tar -C /tmp/cproot -cvf - . | tar -C /mnt/sda1 -x
 umount /​tmp/​cproot</​code>​ umount /​tmp/​cproot</​code>​
  
 === Configuration === === Configuration ===
- 
 The configuration of extroot is very simple and is done entirely in ''​[[doc:​uci:​fstab|/​etc/​config/​fstab]]''​. The configuration of extroot is very simple and is done entirely in ''​[[doc:​uci:​fstab|/​etc/​config/​fstab]]''​.
  
-//But// because this is such a **<color red>​WiP</​color>​**, you really need to read on before just switching ​extroot ​on!+== Old external overlay variant (pivot overlay) == 
 +Before [[https://dev.openwrt.org/changeset/25787/​trunk|r25787]] configure by setting the option ​**is_rootfs** in your ''/​etc/​config/​fstab''​. ​ Besides thatthere is nothing ​to be configured regarding ​extroot ​that is different from any other mount.
  
-| {{:​meta:​icons:​tango:​48px-outdated.svg.png?​nolink}}| ''​option is_rootfs''​ is deprecated **after** [[https://​dev.openwrt.org/​changeset/​25787/​trunk|r25787]]! **Before** Trunk r25787 the option ''​is_rootfs'' ​is required ​for block-extroot ​mounts! | +For trunk versions up to, but not including ​r25787 the following ​is an example ​for an extroot ​mount entry in the file /​etc/​config/​fstab. ​Note the fstypeoptions ​and enable_fchk options are optionalsee [[doc:​uci:​fstab|fstab]].
- +
-=== Old external overlay variant (pivot overlay) === +
-Before [[https://​dev.openwrt.org/​changeset/​25787/​trunk|r25787]] configure by setting ​the option **is_rootfs** in your ''​/​etc/​config/​fstab''​ ​Besides thatthere is really nothing to be configured regarding //ExtRoot// that is different from any other mount. +
- +
-For trunk versions up to, but not including r25787 ​and the releases +
-Backfire 10.03and 10.03.1-rc1 to 10.03.1-rc5 use the example given below.+
  
 |''​config mount |''​config mount
         option target ​       /mnt  # This is ignored once is_rootfs is set to 1         option target ​       /mnt  # This is ignored once is_rootfs is set to 1
-        option device ​       /dev/sda2+        option device ​       /dev/sda1
         option fstype ​       ext3         option fstype ​       ext3
         option options ​      ​rw,​sync         option options ​      ​rw,​sync
Line 160: Line 78:
         option is_rootfs ​    ​1''​|         option is_rootfs ​    ​1''​|
  
-**''​Note:''​**  + ​A ​''​target'' ​option is not mandatory as it will be the overlay file system. However, using the directory ''/​mnt''​ as target will make testing possiblefirst set is_rootfs to 0, reboot and check if all mounts well and than set it to 1 and reboot again. Make sure the target it is **not** manually set to ''/​overlay.'' ​ ''/​overlay''​ is automatically used on a successful ''​is_rootfs''​-mount,​ but if for some reason this file system could not be made the rootfs will be mounted on the target listed here.  Using ''/​overlay''​ will result in an double ''/​overlay''​ mount and screw things ​up. In later releases, the target is used to determine if a mount entry is an extroot device and ''​is_rootfs''​ is not used anymore to circumvent this
-Using the directory ''/​mnt''​ as target will make testing possiblefirst set is_rootfs to 0, reboot and check if all mounts well and than set it to 1 and reboot again. +
-Make sure the target it is **NOT** manually set to ''/​overlay.'' ​ ''/​overlay''​ is automatically used on a successful ''​is_rootfs''​-mount,​ but if for some reason this file system could not be made the rootfs ​it will be mounted on the target listed here.  Using ''/​overlay''​ will result in an double ''/​overlay''​ mount and screw thing up.+
  
 +| {{:​meta:​icons:​tango:​48px-outdated.svg.png?​nolink}}| ''​option is_rootfs''​ is deprecated **after** [[https://​dev.openwrt.org/​changeset/​25787/​trunk|r25787]]. Use the new overlay variant where the target is used to determine if a mount entry is an extroot device. **Before** Trunk r25787 the option ''​is_rootfs''​ is required for block-extroot mounts! |
  
-=== New external overlay variant (pivot overlay) ​===+ 
 +== New external overlay variant (pivot overlay) ==
  
 While ''​option is_rootfs''​ will still work after [[https://​dev.openwrt.org/​changeset/​25787/​trunk|r25787]],​ the preferred method of configuring the extroot is ''​option target /​overlay''​ in the ''​config mount''​ section for the rootfs device in the ''​[[doc:​uci:​fstab|/​etc/​config/​fstab]]''​ file. While ''​option is_rootfs''​ will still work after [[https://​dev.openwrt.org/​changeset/​25787/​trunk|r25787]],​ the preferred method of configuring the extroot is ''​option target /​overlay''​ in the ''​config mount''​ section for the rootfs device in the ''​[[doc:​uci:​fstab|/​etc/​config/​fstab]]''​ file.
  
-For trunk versions newer than and including r25787 use this variant. ​<color red>​Backfire releases do **not** support this</color>.+For trunk versions newer than and including r25787 use this variant. ​This is the entry in the /etc/​config/​fstab configuration file.
  
 |''​config mount |''​config mount
         option target ​       /overlay         option target ​       /overlay
-        option device ​       /dev/sda2+        option device ​       /dev/sda1
         option fstype ​       ext3         option fstype ​       ext3
         option options ​      ​rw,​sync         option options ​      ​rw,​sync
Line 179: Line 97:
         option enabled_fsck ​ 0''​|         option enabled_fsck ​ 0''​|
  
-**Note**: ​If the overlay mount fails it will appear on ''/​tmp/​overlay-disabled''​ instead of becoming the rootfs. ​No more double mounts even on failure. +If the overlay mount fails it will appear on ''/​tmp/​overlay-disabled''​ instead of becoming the rootfs. ​This means that you will have no more double mountseven on failure .
  
-=== Whole external root (pivot root) ===+== Whole external root (pivot root) ==
  
 After [[https://​dev.openwrt.org/​changeset/​26109/​trunk|r26109]] you can configure a non-overlay rootfs (called a ''​whole_root''​ extroot because the entire filesystem must be present on device, not only the changes from the SquashFS) using ''​option target /''​ in the ''​config mount''​ section for the rootfs device. After [[https://​dev.openwrt.org/​changeset/​26109/​trunk|r26109]] you can configure a non-overlay rootfs (called a ''​whole_root''​ extroot because the entire filesystem must be present on device, not only the changes from the SquashFS) using ''​option target /''​ in the ''​config mount''​ section for the rootfs device.
  
-Note that this isn't required or preferred, it's just another option for those who want it. Backfire releases do **not** support this.+Note that this isn't required or preferred, it's just another option for those who want it. This is new to OpenWrt 12. Backfire releases do **not** support this.
  
-In order to set up such a whole root overlay, ​refer to the example below.+In order to set up such a whole root overlay, ​use the following fstab mount entry in the file /​etc/​config/​fstab
  
 | ''​config mount | ''​config mount
         option target ​       /         option target ​       /
-        option device ​       /dev/sda2+        option device ​       /dev/sda1
         option fstype ​       ext3         option fstype ​       ext3
         option options ​      ​rw,​sync         option options ​      ​rw,​sync
Line 198: Line 115:
         option enabled_fsck ​ 0''​ |         option enabled_fsck ​ 0''​ |
  
-**Note**: ​If the non-overlay extroot mount fails before [[https://​dev.openwrt.org/​changeset/​26311/​trunk|r26311]] it will appear mounted to ''/​tmp/​rom-disabled'',​ while after [[https://​dev.openwrt.org/​changeset/​26311/​trunk|r26311]] it will appear mounted to ''/​tmp/​whole_root-disabled''​.+If the non-overlay extroot mount fails before [[https://​dev.openwrt.org/​changeset/​26311/​trunk|r26311]] it will appear mounted to ''/​tmp/​rom-disabled'',​ while after [[https://​dev.openwrt.org/​changeset/​26311/​trunk|r26311]] it will appear mounted to ''/​tmp/​whole_root-disabled''​. 
 + 
 +If the system on the extroot is obtained from a prebuilt image the md5sums will not match and you need to copy the md5sum from the active system:  
 + 
  
 +<​code>​cp /​.extroot.md5sum /​tmp/​whole_root-disabled/​etc/​extroot.md5sum</​code>​
 +or 
 +<​code>​cp /​.extroot.md5sum /​tmp/​overlay-disabled/​etc/​extroot.md5sum</​code>​
  
-== Examples ​==+=== Example ===
  
 The following steps were made on the [[toh:​huawei:​hg553]] using OpenWrt trunk@r28057:​ openwrt-HW553-jffs2-64k-cfe.bin after correctly setting up [[doc:​howto:​usb.essentials]] to obtain basic support for USB //and// [[doc:​howto:​usb.storage]] for USB storage. The following steps were made on the [[toh:​huawei:​hg553]] using OpenWrt trunk@r28057:​ openwrt-HW553-jffs2-64k-cfe.bin after correctly setting up [[doc:​howto:​usb.essentials]] to obtain basic support for USB //and// [[doc:​howto:​usb.storage]] for USB storage.
Line 214: Line 138:
 sync ; umount /mnt sync ; umount /mnt
 umount /​tmp/​cproot</​code>​ umount /​tmp/​cproot</​code>​
-NOTE: mkfs.ext4 is provided by package e2fsprogs!+Note: mkfs.ext4 is provided by package e2fsprogs.
  
-After that, fstab should be edited to reflect the desired mount point:+After that, /​etc/​config/​fstab should be edited to reflect the desired mount point:
  
 | ''​config mount | ''​config mount
Line 225: Line 149:
  option enabled 1  option enabled 1
  option enabled_fsck 0''​ |  option enabled_fsck 0''​ |
 +
 +Note the fstype, options and enable_fchk options are optional, see [[doc:​uci:​fstab|fstab]].
  
 After reboot you should check your mounts and get something like: After reboot you should check your mounts and get something like:
Line 237: Line 163:
 none on /​proc/​bus/​usb type usbfs (rw,​relatime)</​code>​ none on /​proc/​bus/​usb type usbfs (rw,​relatime)</​code>​
  
-== Last attempt ​==+===== Barrier Breaker ===== 
 +  * For Barrier Breaker, a new block-mount package is introduced, refer to [[doc/​techref/​block_mount]] and [[doc/​uci/​fstab]].  
 +  * Decide whether you want to pivot ''/​overlay''​ (recommended) or to pivot ''/''​ (entire root)
  
-If all previous don't work, try with a sysupgrade restoring configurations files (especially fstab with the desired configuration). Then be generated correctly a "​whole_root-disabled",​ that is need to fix (and repeat this operation ​for each new sysupgrade)Howeverif the files contained in the extroot are already updated, you may not need to perform this operation and extroot starts correctly (check with a //df// before and after reboot again)although it is best to clean the partition before, especially if we can not it to work when trying to enable:+==== Required Packages ==== 
 +  ***''block-mount''​** 
 +This is the only required extroot package ​for OpenWrt 12.09see [[doc/techref/block_mount]]. Note that from [[https://dev.openwrt.org/​changeset/​36988|r36988]] the new ''​block''​ utility can be usedwhich is the new runnable that is responsible for all mounting procedures. See [[doc/​uci/​fstab|fstab Configuration]] for more details. The extroot fstab configuration is unchanged from the new external overlay/​root variants in OpenWrt 12.09. 
 +  
 +Additional packages that may be needed are: 
 +  *''​kmod-usb-storage''​ 
 +  *''​kmod-fs-ext4''​ or other depending on the FS used for the external storage.
  
- mkdir -p /tmp/cproot 
- mount --bind / /tmp/cproot 
- tar -C /tmp/cproot -cvf - . | tar -C /​tmp/​whole_root-disabled -xf - 
- sync 
- umount /tmp/cproot 
- /​etc/​init.d/​fstab whole_root_enable 
- reboot 
  
-With any "overlay-disabled" ​is more easy (note that first we need clean overlay, ​check that it'​s ​ok before do any //rm//): + 
- rm -/tmp/overlay-disabled/* +==== Installation ==== 
- tar -C /overlay -cvf - . | tar -C /tmp/overlay-disabled ​-xf +After preparing your storage device and its file system, installation proceeds as follows. First the required packages are installed. Then the existing files from the current JFFS2 overlay partition on flash are copied to the new storage device. Then the system is configured using fstab for activating extroot at boot. 
- /​etc/​init.d/​fstab ​overlay_enable + 
- reboot+=== Install packages === 
 +<​code>​ 
 +opkg update 
 +opkg install block-mount 
 +</​code>​ 
 +Also opkg install ​any filesystem or usb packages you need 
 + 
 +=== Duplicate data === 
 + 
 +Copy necessary files from flash to the new root partition:​ 
 +    - For //​pivot ​overlay// you can either use an empty new rootfs OR copy the contents of the current overlay (JFFS2) to the new rootfs (assuming the filesystem for the new external rootfs is mounted on ''/​mnt/​sda1''​):<​code>​tar ​-C /overlay -cvf - . | tar -C /mnt/sda1 -xf -</​code>​ 
 +    - For //pivot root// (only possible as of [[https://​dev.openwrt.org/​changeset/​26109/​trunk|r26109]]!) you must make sure to have a complete root filesystem on the external rootfs device. One possible way to get such a system (assuming the filesystem for the new external rootfs ​is mounted on ''/​mnt/​sda1''​) is to issue  <​code>​mkdir -p /​tmp/​cproot 
 +mount --bind / /​tmp/​cproot 
 +tar -C /tmp/cproot -cvf - . | tar -C /mnt/sda1 -xf - 
 +umount /​tmp/​cproot</​code>​ 
 + 
 + 
 +=== Configuration === 
 +The configuration of extroot is very simple and is done entirely in ''​[[doc:​uci:​fstab|/​etc/​config/​fstab]]''​. 
 + 
 +== Pivot Overlay == 
 +The following is an example for an extroot /​etc/​config/​fstab mount entry for pivot overlay. Note the fstype, options and enable_fchk options are optional, see [[doc:​uci:​fstab|fstab]]. 
 + 
 +|''​config mount 
 +        option target ​       /overlay 
 +        option device ​       /dev/sda1 
 +        option fstype ​       ext3 
 +        option options ​      ​rw,​sync 
 +        option enabled ​      1 
 +        option enabled_fsck ​ 0''​| 
 + 
 +If the overlay mount fails it will appear on ''/​tmp/​overlay-disabled''​ instead of becoming the rootfs. This means that you will have no more double mounts, even on failure. 
 + 
 +Some users reported a problem with Barier Breaker 14.07 (and RC versions) on ar71xx devices, the problem was solved by user S-trace, thanks to him. The partition won't mount as /overlay, ​but still mount as /mnt/sdax. To get the right uuid run ''​block detect''​. 
 +  
 +|''​root@OpenWrt:/#​ cat /​etc/​config/​fstab 
 +config global 
 +        option anon_swap '​0'​ 
 +        option anon_mount '​0'​ 
 +        option auto_swap '​1'​ 
 +        option auto_mount '​1'​ 
 +        option delay_root '​5'​ 
 +        option check_fs '​0'​ 
 + 
 +config mount 
 +        option target '/​overlay'​ 
 +        option uuid '​1902a323-79a6-4b1a-a511-a58655974ee9'​ 
 +        option enabled '​1'​ 
 +        option fstype '​ext4'​ 
 + 
 +config mount 
 +        option target '/​mnt/​sda2'​ 
 +        option uuid '​dc64a6dd-de63-4363-b405-403cdced1649'​ 
 +        option enabled '​1'​ 
 +        option fstype '​ext4'​ ''​| 
 + 
 +This will work.  
 + 
 +There exists an issue where //''​option target '/​overlay'''//​ does not mount as the //''​overlay''//,​ and the issue appears to be the "/"​. ​ Eliminating the forward slash eliminates the issue; therefor, the command should be //''​**option target '​overlay'​**''//​ 
 +== Pivot Root == 
 +After [[https://​dev.openwrt.org/​changeset/​26109/​trunk|r26109]] you can configure a non-overlay rootfs (called a ''​whole_root''​ extroot because the entire filesystem must be present on device, not only the changes from the SquashFS) using ''​option target /''​ in the ''​config mount''​ section for the rootfs device. 
 + 
 +Note that this isn't required or preferred, ​it'​s ​just another option for those who want it. This is introduced in OpenWrt 12. 
 + 
 +In order to set up such a whole root overlay, use the following ​/etc/config/fstab mount entry 
 + 
 +| ''​config mount 
 +        option target ​       ​
 +        ​option device ​       /dev/sda1 
 +        option fstype ​       ext3 
 +        option options ​      ​rw,​sync 
 +        option enabled ​      1 
 +        option enabled_fsck ​ 0''​ | 
 + 
 +If the non-overlay extroot mount fails before [[https://​dev.openwrt.org/​changeset/​26311/​trunk|r26311]] it will appear mounted to ''​/tmp/rom-disabled'',​ while after [[https://​dev.openwrt.org/​changeset/​26311/​trunk|r26311]] it will appear mounted to ''/​tmp/​whole_root-disabled''​. 
 + 
 + 
 + 
 + 
 +=== Example === 
 +This example assumes you have a device connected properly, at ''/​dev/​sda''​ with a partition at ''/​dev/​sda1''​. The following will format at to an ext4 partition, mount it at ''/​mnt/​sda1'',​  
 +<​code>​mkfs.ext4 /​dev/​sda1 ​  
 +mount /dev/sda1 /mnt/sda1 
 +tar -C /overlay -cvf - . | tar -C /mnt/sda1 -xf - 
 +</​code>​ 
 +Note: mkfs.ext4 is provided by the package e2fsprogs. 
 + 
 +Next, edit your fstab, for example with vi: 
 +<​code>​ 
 +vi /​etc/​config/​fstab 
 +</​code>​ 
 + 
 +You need to modify the //target// line and //option enabled// line so that it looks like this (Note: In this example we have referred to the partition by its UUID instead of its device file. The UUID will be different for you as this is just an example. Alternatively,​ you can point to the right partition using the ''​device''​ option set to the device file ''/​dev/​sda1''​ as in the previous examples):​ 
 +<​code>​ 
 +config '​global'​ 
 +        option ​ anon_swap ​      '​0'​ 
 +        option ​ anon_mount ​     '​0'​ 
 +        option ​ auto_swap ​      '​1'​ 
 +        option ​ auto_mount ​     '​1'​ 
 +        option ​ delay_root ​     '​0'​ 
 +        option ​ check_fs ​       '​0'​ 
 + 
 +config '​mount'​ 
 +        option ​ target ​ '/overlay
 +        option ​ uuid    '​7d3abfaf-493a-46bb-9730-1d793ecb9783'​ 
 +        option ​ enabled '​1'​ 
 +</​code>​ 
 + 
 +You can also use UCI CLI commands to change the fstab file: 
 +<​code>​ 
 +uci set fstab.@mount[0].target=overlay 
 +uci set fstab.@mount[0].enabled=1 
 +uci commit fstab 
 +/​etc/​init.d/​fstab ​restart 
 +</​code>​ 
 + 
 +Reboot your system. 
 + 
 +To check if extroot is working run ''​df''​ and it should give an output like this: 
 +<​code>​ 
 +root@OpenWrt:​~#​ df 
 +Filesystem ​          ​1K-blocks ​     Used Available Use% Mounted on 
 +rootfs ​                ​2758072 ​   118004 ​  ​2501828 ​  5% / 
 +/​dev/​root ​                ​2048 ​     2048         0 100% /rom 
 +tmpfs                    63340        76     ​63264 ​  0% /tmp 
 +/​dev/​sda1 ​             2758072 ​   118004 ​  ​2501828 ​  5% /overlay 
 +overlayfs:/​overlay ​    ​2758072 ​   118004 ​  ​2501828 ​  5% / 
 +tmpfs                      512         ​0 ​      ​512 ​  0% /dev 
 +</​code>​ 
 + 
 +Notice ''​rootfs''​ and ''​overlayfs:/​overlay''​ share the same space and both are mounted on the root (''/''​). Further, ''/​dev/​sda1''​ is mounted on ''/​overlay''​ and is the overlay file system. For pivot root configurations the ''​overlayfs:/​overlay''​ entry in ''​df''​ will be absent.
  
 ===== Troubleshooting ===== ===== Troubleshooting =====
   * Add option force_space in ''/​etc/​opkg.conf''​ to allow installation of packets bigger than your ''/​rom''​ partitions free space: <​code>​echo option force_space >> /​etc/​opkg.conf</​code>​   * Add option force_space in ''/​etc/​opkg.conf''​ to allow installation of packets bigger than your ''/​rom''​ partitions free space: <​code>​echo option force_space >> /​etc/​opkg.conf</​code>​
-  * There is still a [[https://dev.openwrt.org/ticket/9454|bug]] in extroot that prevents it from working with 2.4 kernels: ​/backfire/10.03.1-rc4/brcm-2.4 and /​backfire/​10.03/​brcm-2.4Extroot does work with /backfire/10.03.1-rc4/​brcm47xx +  * Do not use vfat (FAT/FAT32); it does not workIf you have a FAT preformatted USB drive, you cannot use it for extroot without reformattingUse e.g. ext4 (install e2fsprogs, then format your FAT formatted USB drive using ''​mkfs.ext4 ​/dev/sda1''​ as per the example, also see [[storage]]). 
-  * If extroot ​does not work with 10.03.1 try the latest ​rc (currently 10.03.1-rc6).+  * On Barrier Breaker, ''​block-mount''​ will create a file ''​/etc/.extroot-uuid''​ on extroot filled with uuid of mtd partition ''​rootfs''​At boot time when trying to do extroot, ''​block-mount''​ would try to check the actual uuid with the content of ''​.extroot-uuid''​If they did not match, extroot would failSo if you want to continue use extroot after flashing a new firmwre, ''​/etc/.extroot-uuid''​ needs to be deleted first. 
 +  * If the partition containing your extroot ​isn't mounted during boot, but you can mount it without problems from a shell, you should try to increase ''​config '​global'​ / option delay_root''​ On my system I had to set it to 15 to get extroot working ​Another hint to this being the culprit is having a working swap or other partitions mounted after booting, but not your extroot. 
 +  * Another possibility to consider and try is to include in ''/​etc/​rc.local''​ the commands: ''​export PREINIT = 1'';''​mount_root'',​ as described in [[https://​dev.openwrt.org/​ticket/​14946|14946]] ticket, which in the case of running Chaos Calmer r44266 in the Comtrend AR-5387un, has been the only thing that allowed me to achieve extroot.
  
 +===== Chaos Calmer =====
  
-| {{:meta:icons:tango:48px-outdated.svg.png?​nolink}} | **Note:** Before OpenWrt '​Backfire'​ 10.03.1-RC4 the ''​block-extroot''​ package is still existent and //cannot// be installed later on with opkg. It has to be included in the image.\\ There is a separate howto_build for this [[doc:​howtobuild:​extroot.howtobuild]] ​ | +=== Partitioning === 
-| {{:meta:icons:tango:48px-outdated.svg.png?​nolink}} | As of [[https://dev.openwrt.org/changeset/26314/trunk|r26314]] ''​block-extroot''​ and ''​block-hotplug''​ have been merged with **''​block-mount''​**. |+  * <​html><​span style="​color:#​789600;​font-style:italic;​font-weight:bold">​The way I setup my PNY USB 3 256GB thumb drive was</​span></​html>​ 
 +    ​<​html><​span style="​color:#​00A3FF;​font-style:​italic;​font-weight:​bold">​sda1<​/span><​/html> overlay partition, 2GB, ext4 
 +    * <​html><​span style="​color:#​00A3FF;​font-style:italic;font-weight:bold">​sda2<​/span><​/html> swap partition, 1GB, swap //(file system option might be "Linux Swap")/
 +    ​<​html><​span style="​color:#​00A3FF;​font-style:​italic;​font-weight:​bold">​sda3</​span></​html>​ data partition, 230GB, ext4
  
 +    * <​html><​span style="​color:#​789600;​font-style:​italic;​font-weight:​bold">​Note:</​span></​html>​
 +        * <​html><​span style="​color:#​789600;​font-style:​italic">​I wanted a true 2GB and a true 1GB partition, so when you create a partition you will need to use size in MB and multiply every GB of storage you want by 1024 (1GB = 1024MB, 2GB = 2048MB, and so on).  Not doing this will result in a partition set to 1GB only having 976MB of usable space, a 2GB only 1952MB of usable space.</​span></​html>​
 + 
 +  * <​html><​span style="​color:#​FF0000;​font-style:​italic">​It'​s recommended to learn the pros and cons of ext4 and ext3 on solid state media, such as thumb drives, and choose what's best for you.</​span></​html>​
 +
 +
 +
 +
 +==== Pivot Overlay ==== 
 +
 +  * //For Pivot Root (not recommended),​ supplement appropriate commands/​steps from Barrier Breaker// ​
 +
 +=== Prerequisites ===
 +  * //​block-mount//​
 +  * //​kmod-fs-ext4//​
 +    * or //​kmod-fs-//​[filesystem of choice] ​
 +  * //​kmod-usb-storage-extras//​
 +    * <​code>​opkg update ; opkg install block-mount kmod-fs-ext4 kmod-usb-storage-extras</​code> ​  
 +
 +=== Steps ===
 +  * **1:** Format and partition drive the way you want, either in a Linux Live CD or via uci //​(recommend overlay @ s1, swap @ s2, and all other partitions @ s3 and beyond)//
 +  * **2:** Written in order of execution <​html><​span style="​color:#​789600;​font-style:​italic">​(if utilizing more than one storage device, substitute "​sda"​ for appropriate storage device)</​span></​html>:​
 +    * <​code>​
 +mount /dev/sda1 /mnt ; tar -C /overlay -cvf - . | tar -C /mnt -xf - ; umount /mnt
 +
 +echo > /​etc/​config/​fstab ; block detect > /​etc/​config/​fstab ; vi /​etc/​config/​fstab
 +</​code>​
 +  * **3:** Edit the following in <​html><​span style="​color:#​789600;​font-style:​italic;​font-weight:​bold">​fstab</​span></​html>​ //(" i " to edit, save via " alt: " then " :wq ")//:
 +    * **3.1:** Set all <​html><​span style="​color:#​789600;​font-style:​italic">​enabled '​0'</​span></​html>​ **-->** <​html><​span style="​color:#​789600;​font-weight:​bold">​enabled '​1'</​span></​html>​
 +    * **3.2:** Edit <​html><​span style="​color:#​789600;​font-style:​italic">​option target</​span></​html>​ of your overlay partition to show **-->​** ​ <​html><​span style="​color:#​789600;​font-weight:​bold">/​overlay</​span></​html> ​ (**__not__** **-->​** ​ //'​overlay'//,​ as it will cause broken, duplicate mounts)
 +    * **3.3:** Edit <​html><​span style="​color:#​789600;​font-style:​italic">​config '​mount'</​span></​html>​ of your swap partition to show **-->** <​html><​span style="​color:#​789600;​font-weight:​bold">​config '​swap'</​span></​html>​
 +    * **3.4:** Edit <​html><​span style="​color:#​789600;​font-style:​italic">​option target</​span></​html>​ of your other partition(s) to show whatever mount point(s) you want them to have (make sure to create the directories those mount points point to)
 +      * <​code>​
 +config '​global'​
 +        option ​ anon_swap ​      '​0'​
 +        option ​ anon_mount ​     '​0'​
 +        option ​ auto_swap ​      '​1'​
 +        option ​ auto_mount ​     '​1'​
 +        option ​ delay_root ​     '​5'​
 +        option ​ check_fs ​       '​0'​
 +
 +config '​mount'​
 +        option ​ target ​ '/​overlay'​
 +        option ​ uuid    '​c91232a0-c50a-4eae-adb9-14b4d3ce3de1'​
 +        option ​ enabled '​1'​
 +
 +config '​swap'​
 +        option ​ uuid    '​08b4f0a3-f7ab-4ee1-bde9-55fc2481f355'​
 +        option ​ enabled '​1'​
 +
 +config '​mount'​
 +        option ​ target ​ '/​data'​
 +        option ​ uuid    '​c1068d91-863b-42e2-bcb2-b35a241b0fe2'​
 +        option ​ enabled '​1'​
 +</​code>​
 +  * **4:** Reboot router and verify the partitions were mounted properly ​
 +    * <​html><​span style="​color:#​00A3FF;​font-style:​italic;​font-weight:​bold">​LuCI:</​span></​html>​ <​html><​span style="​color:#​C86400;​font-style:​italic">​System - Software</​span></​html>​ should show free space of overlay partition
 +    * <​html><​span style="​color:#​00A3FF;​font-style:​italic;​font-weight:​bold">​LuCI:</​span></​html>​ <​html><​span style="​color:#​C86400;​font-style:​italic">​System - Mount Points</​span></​html>​ should show USB partition mounted as ///​overlay//​
 +    * <​html><​span style="​color:#​0080FF;​font-style:​italic;​font-weight:​bold">​uci:</​span></​html>​ <​html><​span style="​color:#​AF4B00;​font-style:​italic">​mount</​span></​html>​ should show USB partition mounted as ///​overlay//​
 +      * <​code>​
 +root@OpenWRT:​mount
 +
 +/​dev/​root ​          on /rom               type squashfs (ro,​relatime)
 +proc                on /proc              type proc     ​(rw,​noatime)
 +sysfs               on /sys               type sysfs    (rw,​noatime)
 +tmpfs               on /tmp               type tmpfs    (rw,​nosuid,​nodev,​noatime)
 +/​dev/​ubi0_1 ​        on /​overlay ​          type ubifs    (rw,​noatime)
 +overlayfs:/​overlay ​ on /                  type overlay ​ (rw,​noatime,​lowerdir=/,​upperdir=/​overlay/​upper,​workdir=/​overlay/​work)
 +tmpfs               on /dev               type tmpfs    (rw,​relatime,​size=512k,​mode=755)
 +devpts ​             on /​dev/​pts ​          type devpts ​  ​(rw,​relatime,​mode=600)
 +/​dev/​sda1 ​          on /​overlay ​          type ext4     ​(rw,​relatime,​data=ordered)
 +/​dev/​sda3 ​          on /data              type ext4     ​(rw,​relatime,​data=ordered)
 +debugfs ​            on /​sys/​kernel/​debug ​ type debugfs ​ (rw,​noatime)
 +
 +</​code>​
 +      * <​code>​
 +root@OpenWRT:​df
 +
 +Filesystem ​          ​1K-blocks ​     Used Available Use% Mounted on
 +rootfs ​                  ​27180 ​     7796     ​17964 ​ 30% /
 +/​dev/​root ​                ​2304 ​     2304         0 100% /rom
 +tmpfs                   ​127668 ​     1468    126200 ​  1% /tmp
 +/​dev/​ubi0_1 ​           1998672 ​     8056   ​1869376 ​  0% /overlay
 +overlayfs:/​overlay ​      ​27180 ​     7796     ​17964 ​ 30% /
 +tmpfs                      512         ​0 ​      ​512 ​  0% /dev
 +/​dev/​sda1 ​             1998672 ​     8056   ​1869376 ​  0% /overlay
 +/​dev/​sda3 ​           242846048 ​   163864 230323224 ​  0% /data
 +</​code>​
 ===== Notes ===== ===== Notes =====
 +
 +==== Using Image Generator ====
 +As the kmod-fs-ext4 package is rather large, it can be a challenge setting up exroot on 4MB flash devices, where exroot is most needed.
 +Therefore, you can build an image to flash to your device with the required packages already included, this method saves considerable space on your device.
 +
 +Using the image generator makes building the image very easy.
 +
 +* [[http://​wiki.openwrt.org/​doc/​howto/​obtain.firmware.generate|See the Image Generator page for more detailed instructions.]]\\
 +
 + 1. Download image builder for your architecture\\
 + (ex: ar71xx, [[http://​downloads.openwrt.org/​chaos_calmer/​15.05-rc3/​ar71xx/​generic/​OpenWrt-ImageBuilder-15.05-rc3-ar71xx-generic.Linux-x86_64.tar.bz2]])\\
 + 2. Extract archive, change to directory\\
 + 3. To build your firmware just type: \\
 +  make image PROFILE="​TLMR3220"​ PACKAGES="​kmod-fs-ext4 kmod-usb-storage"​
 + * replace TLMR3220 with the profile for your own device, use 'make info' for a list\\
 +\\
 +Your new firmware file will be located within the '​bin'​ folder, with the packaged to enabled exroot already included.\\
 +
  
 ==== Remote File Systems ==== ==== Remote File Systems ====
-  * [[https://​forum.openwrt.org/​viewtopic.php?​id=32812]]+  * Forum: ​[[https://​forum.openwrt.org/​viewtopic.php?​id=32812|Fstab not mounting cifs at boot or through CLI]]
  
 ==== System Upgrade ==== ==== System Upgrade ====
Line 282: Line 451:
   - recreate the extroot   - recreate the extroot
   - copy back your data back to recreated extroot   - copy back your data back to recreated extroot
-  - remove the md5sums (''<​extroot>/​.extroot.md5sum''​ and ''<​extroot>/​etc/​extroot.md5sum''​). As of trunk [[https://​dev.openwrt.org/​changeset/​26312/​|r26312]] you can achieve the md5sum removal with <​code>/​etc/​init.d/​fstab ​enable_overlay</​code>​+  - remove the md5sums (''<​extroot>/​.extroot.md5sum''​ and ''<​extroot>/​etc/​extroot.md5sum''​). As of trunk [[https://​dev.openwrt.org/​changeset/​26312/​|r26312]] you can achieve the md5sum removal with <​code>/​etc/​init.d/​fstab ​overlay_enable</​code>​
   - make sure your ''/​etc/​config/​fstab''​ (located on the JFFS2) is correct   - make sure your ''/​etc/​config/​fstab''​ (located on the JFFS2) is correct
   - reboot.   - reboot.
  
 In future I plan to have a script that removes all non-conffiles (except also preserving files preserved by sysupgrade) pointed to the opkg list on the extroot, and few other cleanups, which will hopefully sanitize extroot so it can be safely used again. In future I plan to have a script that removes all non-conffiles (except also preserving files preserved by sysupgrade) pointed to the opkg list on the extroot, and few other cleanups, which will hopefully sanitize extroot so it can be safely used again.
 +
 +==== Accessing original root ====
 +
 +Sometimes you may need to access the original root overlay, for example to change your extroot settings. ​ A convenient way of doing this is to configure /​etc/​config/​fstab on your extroot partition to mount the original root overlay in another directory, like this:
 +
 +| ''​config mount
 + option target /​overlay-boot
 + option device /​dev/​mtdblock3
 + option fstype jffs2
 + option options rw,​sync
 + option enabled 1
 + option enabled_fsck 0''​ |
 +
 +This assumes the original overlay was on /​dev/​mtdblock3 - check your router'​s page on this wiki and look at the flash map to confirm what MTD block it is for you. Or run "$ cat /​proc/​mtd"​ and search the partition named rootfs_data to know where is your overlay.
 +
 +If you then create /​overlay-boot on the extroot partition, this directory will contain the original root overlay, which is used as the main root overlay until the extroot is up and running. ​ So you can then for example edit /​overlay-boot/​etc/​config/​fstab to change your extroot configuration (or temporarily disable it) should you ever need to.
  
 === Old Notes === === Old Notes ===
Line 299: Line 484:
 To upgrade kernel + kernel modules you need to first upgrade the kernel-modules (with opkg upgrade ... --force... ) and then immediately WITHOUT rebooting, reflash Kernel + SquashFS with ''​sysupgrade''​. Then reboot. To upgrade kernel + kernel modules you need to first upgrade the kernel-modules (with opkg upgrade ... --force... ) and then immediately WITHOUT rebooting, reflash Kernel + SquashFS with ''​sysupgrade''​. Then reboot.
  
 +===== Information on Legacy versions =====
 +
 +Backfire see: [[doc:​howto:​extroot.old]]
  
 {{tag>​USBrelated}} {{tag>​USBrelated}}
doc/howto/extroot.1347419911.txt.bz2 · Last modified: 2012/09/12 05:18 by gene_wood