Journalling Flash File System
From DD-WRT Wiki
Revision as of 22:10, 30 April 2008 (edit) S2s2 (Talk | contribs) m (Structure, Grammer, Tidying. I'll do more tomorrow when I've had a nap!) ← Previous diff |
Revision as of 23:39, 21 May 2008 (edit) (undo) S2s2 (Talk | contribs) (Second/third edition edit. First edition dumped when ff crashed. Using Opera!! yeah..) Next diff → |
||
Line 1: | Line 1: | ||
- | + | = Introduction = | |
- | + | '''[[Glossary#Journalling Flash File System (JFFS)|Journalling Flash File System]]''' (JFFS/JFFS2) is a re-writable area within a DD-WRT-enabled device. | |
- | + | ||
- | + | ||
- | + | * Located in ''/jffs''. | |
- | + | Contents stored: | |
+ | * On DD-WRT Device main flash directly on the device (''/jffs''), or | ||
+ | * ''mount --bind /storagelocation /jffs''.<br>Where ''storagelocation'' is | ||
+ | ** Off-board supplemental flash, see [[SD/MMC_mod]], (''/mmc/jffs''). | ||
+ | ** Network Area Storage [NAS], or Server. (''//servername/sharename'') | ||
+ | ** JFFS reports as it's own free space, the free space on Share or SD Card, in the Web Interface | ||
- | + | '''Examples of the kind of programs and data are''': | |
+ | * Custom configuration files | ||
+ | * NoCat splash pages and configuration | ||
+ | * [[Ipkg|ipkg]] | ||
+ | * Web-site hosting | ||
+ | * Many other things. | ||
+ | * JFFS must be Enabled to use /jffs-dependent applications properly. | ||
+ | ** ''ipkg'' requires JFFS enabled; creating a mount-point at ''/jffs'' is not enough.<br> | ||
- | + | = Enable JFFS: Create ''/jffs'' = | |
- | '' | + | ==Prerequisites== |
+ | |||
+ | On 4MB routers, enabling JFFS is made possible by using the DD-WRT Standard-NoKaid builds. NoKaid removes a specific XBOX module, leaving room for JFFS. The Mini builds of DD-WRT also work. This leaves between about 320KB - 700KB+ of available re-writable space in /jffs.'' | ||
+ | |||
+ | ''Very old versions of some Linksys routers (no longer manufactured for many years) contained 8MB of Flash and 32MB of RAM, many DD-WRT-capable devices today contain 4MB of Flash memory; a few models from certain manufacturers contain more flash (La Fonera, [[ASUS WL-500g Premium|ASUS WL-500GP]]), some contain less (2MB). See [[Supported_Devices|Supported Devices]].<br> | ||
+ | |||
+ | == Flash Wear: A Warning == | ||
+ | Take care not to store frequently changing files (i.e. often-changing log files) on Flash as this can cause flash wear-out over time. | ||
+ | * A journalling flash file system is specifically designed to minimize frequent overwrites. * Files which are read many times but written infrequently work well on main flash. | ||
+ | * Using the space provided by [[SD/MMC_mod]] removes wear from occurring on unreplaceable main flash. | ||
+ | |||
+ | == Directions for (normal) users: Web Interface== | ||
''The steps to enable JFFS through the router web page are very specific. To avoid having to reset and reprogram your router, it's smart to make a backup here of your settings. If you follow these steps exactly, it should not lock up.'' | ''The steps to enable JFFS through the router web page are very specific. To avoid having to reset and reprogram your router, it's smart to make a backup here of your settings. If you follow these steps exactly, it should not lock up.'' | ||
- | # On the router web page click on | + | # On the router web page click on ''Administration''. |
- | # Scroll down until you see | + | # Scroll down until you see ''JFFS2 Support''. |
- | # Click | + | # Click ''Enable JFFS''. |
- | # Click | + | # Click ''Save''. |
- | # Wait couple seconds, then click | + | # Wait couple seconds, then click ''Apply''. |
- | # Wait again. Go back to the | + | # Wait again. Go back to the ''Enable JFFS'' option, click ''Clean JFFS''. |
- | # '''Do not click "Save".''' Click | + | # '''Do not click "Save".''' Click '''Apply''' instead. |
The router formats the available space, which is now shown in the JFFS2 Support box. | The router formats the available space, which is now shown in the JFFS2 Support box. | ||
- | + | ==Directions for (freaky) Linux Gurus: CLI== | |
- | Enter the following commands | + | Enter the following commands from the CLI: |
nvram set jffs_mounted=1 | nvram set jffs_mounted=1 | ||
Line 35: | Line 56: | ||
reboot | reboot | ||
- | might reboot/hang after cleaning which might take long | + | Note: Device might reboot/hang after cleaning which might take long; be patient. |
'''WARNING''' | '''WARNING''' | ||
- | I tried the previous commands under La Fonera firmware v24 RC4 and corrupted all my settings. I had to recover my unit with the procedures on La Fonera flashing page. I am not sure if this is a bug or these commands are not suited for La Fonera. Please try to use the web interface above. It works for me. | + | A user comments: I tried the previous commands under La Fonera firmware v24 RC4 and corrupted all my settings. I had to recover my unit with the procedures on La Fonera flashing page. I am not sure if this is a bug or these commands are not suited for La Fonera. Please try to use the web interface above. It works for me. |
- | + | To unmount the JFFS: | |
- | + | ||
- | + | ||
- | + | ||
- | To unmount the JFFS | + | |
nvram set sys_enable_jffs2=0 | nvram set sys_enable_jffs2=0 | ||
Line 55: | Line 72: | ||
Afterwards you can delete these variables with "nvram unset <variable>". | Afterwards you can delete these variables with "nvram unset <variable>". | ||
- | = | + | =Increasing JFFS Space: Options= |
+ | == Add a 1GB flash memory card == | ||
+ | * Add the [[SD/MMC mod]] | ||
+ | ** up to (at least) 1GB storage using common swappable SD memory cards (built-in support with DD-WRT v2.4 and above). | ||
+ | ** Windows XP: [[WinSCP]] can be used to transfer files to and from the router, eliminating the need to pull the card out and put it in a card reader on a PC. | ||
+ | ** Linux, Mac OS X: Other SCP transfer applications exist. | ||
+ | ** Removed cards can be accessed natively in Linux or OS X, or on Windows with the Ext2FS driver [[http://www.fs-driver.org]]. | ||
+ | ** On older firmware (v2.3), the limited JFFS space can be used to hold the drivers to load support for the SD card. | ||
+ | == Add USB Storage == | ||
+ | * Routers with USB storage: A [[Linksys WRTSL54GS]] or [[ASUS WL-500g Premium]] device has USB capability (and more Flash and RAM). | ||
+ | ** Some firmwares (older): Drivers and startup files are stored in a small amount of JFFS space | ||
+ | ** Current firmware: USB support available within current v2.4 builds. | ||
- | == | + | ==Using [[CIFS]] (Samba): Storing ''/jffs'' content remotely== |
+ | One option is to create a share on the network and mount it on the router at ''/jffs'' using [[CIFS]]. Exact steps at [[CIFS]] | ||
- | + | Overview: | |
- | * | + | * Create a share on a CIFS-capable server called ''jffs''. |
+ | ** Standard Microsoft Windows Shared Folder | ||
+ | ** Other operating systems may refer to SMB or Samba | ||
+ | * In the Web GUI mount the [[CIFS]] share at ''/jffs''. | ||
+ | * Folder ''/jffs'' appears locally, while | ||
+ | * Content actually saved remotely, on | ||
+ | ** NAS (Network Attached Storage) | ||
+ | ** Server (PC or some type of file server)<br>'''Costs:''' | ||
+ | *** Equipment: Requires existing NAS or PC Server<br>Setting up a NAS or Server only for router maybe not economical. | ||
+ | *** Electricity: if entire Server is only serving router | ||
+ | *** Availability: CIFS share must be available | ||
+ | **** 24/7, or whenever the DD-WRT Device is on. | ||
+ | **** Storing /jffs on quality equipment is required (i.e. Raid, Power Backup)<br>Remote storage down means /jffs down, could mean DD-WRT Device down (increases the weak points). | ||
+ | *** Security: CIFS is limited to Microsoft's SMB protocol, offering up to only 128-bit security. | ||
+ | *** LAN Connection Required: NAS cannot be wirelessly attached to DD-WRT Device. | ||
+ | *** Hassle: Using Microsoft Windows as the ''jffs'' Server | ||
+ | **** Symbolic links in ''/jffs'' may not work. | ||
+ | **** Rename (mv) commands on the ''/jffs'' mount may not work. | ||
- | + | '''Most people only own an (inexpensive) Windows PC, and it is ill-advised to use a common Desktop PC as a 24/7 Server.''' | |
- | + | External Links:<br> | |
+ | See [http://wrt-wiki.bsr-clan.de/index.php?title=Jffs.<br> | ||
+ | Linux Newbies: [http://wrt-wiki.bsr-clan.de/index.php?title=Jffs_sharing_in_a_Linux_server.<br> | ||
- | + | The following examples may be out of date: | |
- | + | ===(Depricated) Use a Startup Script: Samba Example 1=== | |
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
Read first, howto use [[Startup Scripts]]. Then place the following into your startup script to mount the JFFS partition: | Read first, howto use [[Startup Scripts]]. Then place the following into your startup script to mount the JFFS partition: | ||
Line 86: | Line 123: | ||
*NOTE: username is guest if hosted on Windows XP & 'Simple File Sharing' is enabled. | *NOTE: username is guest if hosted on Windows XP & 'Simple File Sharing' is enabled. | ||
- | === | + | ===(Depricated) Use Samba Startup Scripts: Example 2=== |
This method uses 2 scripts: The first will be started from /tmp/smbshare, mount the samba share under /jffs and start the other script. The second will be started from /jffs and unmount /tmp/sambashare. | This method uses 2 scripts: The first will be started from /tmp/smbshare, mount the samba share under /jffs and start the other script. The second will be started from /jffs and unmount /tmp/sambashare. | ||
Line 151: | Line 188: | ||
*BONUS NOTE OF HAPPINESS: You need to save the script files in UNIX format, not DOS. One text editor that can do this is UltraEdit. Or Crimson Editor, which is free :o) | *BONUS NOTE OF HAPPINESS: You need to save the script files in UNIX format, not DOS. One text editor that can do this is UltraEdit. Or Crimson Editor, which is free :o) | ||
- | === | + | ===(Depricated) Use Samba Startup Script: Example 3 === |
This method requires 2 shares available for DD-WRT, but allows you to have 2 different areas of storage for the router. Some might find it useful. It is an amalgamation of the previous 2 methods. | This method requires 2 shares available for DD-WRT, but allows you to have 2 different areas of storage for the router. Some might find it useful. It is an amalgamation of the previous 2 methods. | ||
Line 160: | Line 197: | ||
Procedure: | Procedure: | ||
- | + | # Enable JFFS<br /> | |
- | + | # Enable [[Samba]]<br /> | |
- | + | # Create a shell script in the Samba share, as follows:<br /> | |
+ | |||
#!/bin/sh | #!/bin/sh | ||
umount /jffs | umount /jffs | ||
smbmount //<server's IP>/<jffs share name> /jffs -o username=<your username>,password=<your password> | smbmount //<server's IP>/<jffs share name> /jffs -o username=<your username>,password=<your password> | ||
- | + | ||
- | + | # Enter the name of the script in the Samba startup script box in the GUI<br /> | |
+ | # Reboot | ||
As an example, my DD-WRT has these shares: | As an example, my DD-WRT has these shares: | ||
Line 173: | Line 212: | ||
* '''/tmp/smbshare''' located in a shared folder on my NAS called '''ddwrt''', which contains scripts (including '''startup.sh''' containing the above commands), yet to be installed packages and other static data | * '''/tmp/smbshare''' located in a shared folder on my NAS called '''ddwrt''', which contains scripts (including '''startup.sh''' containing the above commands), yet to be installed packages and other static data | ||
* '''/jffs''' located in a shared folder called '''jffs''', which contains program data for installed packages | * '''/jffs''' located in a shared folder called '''jffs''', which contains program data for installed packages | ||
- | |||
- | ===IPKG Note=== | ||
- | NOTE: Though not using the JFFS partition on the router, you must still have JFFS enabled in order to use ipkg. Disabling jffs also disables ipkg! | ||
== Testing == | == Testing == |
Revision as of 23:39, 21 May 2008
Contents |
Introduction
Journalling Flash File System (JFFS/JFFS2) is a re-writable area within a DD-WRT-enabled device.
- Located in /jffs.
Contents stored:
- On DD-WRT Device main flash directly on the device (/jffs), or
- mount --bind /storagelocation /jffs.
Where storagelocation is- Off-board supplemental flash, see SD/MMC_mod, (/mmc/jffs).
- Network Area Storage [NAS], or Server. (//servername/sharename)
- JFFS reports as it's own free space, the free space on Share or SD Card, in the Web Interface
Examples of the kind of programs and data are:
- Custom configuration files
- NoCat splash pages and configuration
- ipkg
- Web-site hosting
- Many other things.
- JFFS must be Enabled to use /jffs-dependent applications properly.
- ipkg requires JFFS enabled; creating a mount-point at /jffs is not enough.
- ipkg requires JFFS enabled; creating a mount-point at /jffs is not enough.
Enable JFFS: Create /jffs
Prerequisites
On 4MB routers, enabling JFFS is made possible by using the DD-WRT Standard-NoKaid builds. NoKaid removes a specific XBOX module, leaving room for JFFS. The Mini builds of DD-WRT also work. This leaves between about 320KB - 700KB+ of available re-writable space in /jffs.
Very old versions of some Linksys routers (no longer manufactured for many years) contained 8MB of Flash and 32MB of RAM, many DD-WRT-capable devices today contain 4MB of Flash memory; a few models from certain manufacturers contain more flash (La Fonera, ASUS WL-500GP), some contain less (2MB). See Supported Devices.
Flash Wear: A Warning
Take care not to store frequently changing files (i.e. often-changing log files) on Flash as this can cause flash wear-out over time.
- A journalling flash file system is specifically designed to minimize frequent overwrites. * Files which are read many times but written infrequently work well on main flash.
- Using the space provided by SD/MMC_mod removes wear from occurring on unreplaceable main flash.
Directions for (normal) users: Web Interface
The steps to enable JFFS through the router web page are very specific. To avoid having to reset and reprogram your router, it's smart to make a backup here of your settings. If you follow these steps exactly, it should not lock up.
- On the router web page click on Administration.
- Scroll down until you see JFFS2 Support.
- Click Enable JFFS.
- Click Save.
- Wait couple seconds, then click Apply.
- Wait again. Go back to the Enable JFFS option, click Clean JFFS.
- Do not click "Save". Click Apply instead.
The router formats the available space, which is now shown in the JFFS2 Support box.
Directions for (freaky) Linux Gurus: CLI
Enter the following commands from the CLI:
nvram set jffs_mounted=1 nvram set enable_jffs2=1 nvram set sys_enable_jffs2=1 nvram set clean_jffs2=1 nvram set sys_clean_jffs2=1 nvram commit reboot
Note: Device might reboot/hang after cleaning which might take long; be patient.
WARNING
A user comments: I tried the previous commands under La Fonera firmware v24 RC4 and corrupted all my settings. I had to recover my unit with the procedures on La Fonera flashing page. I am not sure if this is a bug or these commands are not suited for La Fonera. Please try to use the web interface above. It works for me.
To unmount the JFFS:
nvram set sys_enable_jffs2=0 nvram set sys_clean_jffs2=0 nvram set jffs_mounted=0 nvram commit reboot
Afterwards you can delete these variables with "nvram unset <variable>".
Increasing JFFS Space: Options
Add a 1GB flash memory card
- Add the SD/MMC mod
- up to (at least) 1GB storage using common swappable SD memory cards (built-in support with DD-WRT v2.4 and above).
- Windows XP: WinSCP can be used to transfer files to and from the router, eliminating the need to pull the card out and put it in a card reader on a PC.
- Linux, Mac OS X: Other SCP transfer applications exist.
- Removed cards can be accessed natively in Linux or OS X, or on Windows with the Ext2FS driver [[1]].
- On older firmware (v2.3), the limited JFFS space can be used to hold the drivers to load support for the SD card.
Add USB Storage
- Routers with USB storage: A Linksys WRTSL54GS or ASUS WL-500g Premium device has USB capability (and more Flash and RAM).
- Some firmwares (older): Drivers and startup files are stored in a small amount of JFFS space
- Current firmware: USB support available within current v2.4 builds.
Using CIFS (Samba): Storing /jffs content remotely
One option is to create a share on the network and mount it on the router at /jffs using CIFS. Exact steps at CIFS
Overview:
- Create a share on a CIFS-capable server called jffs.
- Standard Microsoft Windows Shared Folder
- Other operating systems may refer to SMB or Samba
- In the Web GUI mount the CIFS share at /jffs.
- Folder /jffs appears locally, while
- Content actually saved remotely, on
- NAS (Network Attached Storage)
- Server (PC or some type of file server)
Costs:- Equipment: Requires existing NAS or PC Server
Setting up a NAS or Server only for router maybe not economical. - Electricity: if entire Server is only serving router
- Availability: CIFS share must be available
- 24/7, or whenever the DD-WRT Device is on.
- Storing /jffs on quality equipment is required (i.e. Raid, Power Backup)
Remote storage down means /jffs down, could mean DD-WRT Device down (increases the weak points).
- Security: CIFS is limited to Microsoft's SMB protocol, offering up to only 128-bit security.
- LAN Connection Required: NAS cannot be wirelessly attached to DD-WRT Device.
- Hassle: Using Microsoft Windows as the jffs Server
- Symbolic links in /jffs may not work.
- Rename (mv) commands on the /jffs mount may not work.
- Equipment: Requires existing NAS or PC Server
Most people only own an (inexpensive) Windows PC, and it is ill-advised to use a common Desktop PC as a 24/7 Server.
External Links:
See [http://wrt-wiki.bsr-clan.de/index.php?title=Jffs.
Linux Newbies: [http://wrt-wiki.bsr-clan.de/index.php?title=Jffs_sharing_in_a_Linux_server.
The following examples may be out of date:
(Depricated) Use a Startup Script: Samba Example 1
Read first, howto use Startup Scripts. Then place the following into your startup script to mount the JFFS partition:
umount /jffs smbmount //<server's IP>/jffs /jffs -o username=<your username>,password=<your password>
- NOTE: username is guest if hosted on Windows XP & 'Simple File Sharing' is enabled.
(Depricated) Use Samba Startup Scripts: Example 2
This method uses 2 scripts: The first will be started from /tmp/smbshare, mount the samba share under /jffs and start the other script. The second will be started from /jffs and unmount /tmp/sambashare.
Now here are instruction on how to do so:
1) disable JFFS in the web GUI if you had enabled it
2) enable samba (see also Jffs_sharing_in_a_Linux_server).
3) create a script called "startup.smb.sh" on the share:
#!/bin/sh #smb settings: same as the settings in the webgui # change these to mount a different share than the current at /jffs SMBSHARE=`nvram get samba_share` SMBUSER=`nvram get samba_user` SMBPASS=`nvram get samba_password` #script to start in /jffs once we're done mounting JFFS_SCRIPT=startup.jffs.sh #where to log what is happening export SMBLOG=/tmp/smblog ####### ok, here we go... ;) ####### echo "" > $SMBLOG cd / #make sure JFFS is unmounted. Its recommended to run without JFFS enabled though. echo "umounting /jffs if nescessary..." >> $SMBLOG umount /jffs >> $SMBLOG 2>&1 #mount our smbshare at /jffs echo "mounting $SMBSHARE at /jffs..." >> $SMBLOG smbmount $SMBSHARE /jffs -o username=$SMBUSER,password=$SMBPASS >> $SMBLOG 2>&1 #smbmount ist not working in v23 SP3, so i changed the line above: #mount.cifs $SMBSHARE /jffs -o username=$SMBUSER,password=$SMBPASS >> $SMBLOG 2>&1 #hand over startup to the JFFS part /jffs/$JFFS_SCRIPT & >> $SMBLOG 2>&1
4) create a script called "startup.jffs.sh" on the share:
#!/bin/sh #wait a sec, just to be sure the smb startup script has quit sleep 1 #unmount the smbshare, its identical to /jffs now anyway :) umount /tmp/smbshare #to enable ipkg, we fake JFFS enabled. #since theres no commit, this wont actually enable JFFS nvram set sys_enable_jffs2=1 #ready to do specific stuff, like starting services #or other commands from /jffs
5) in the webinterface, enable Samba with appropriate share/user/pass settings from step 2. Enter "startup.smb.sh" as the script
6) reboot
Now you should have the share configured in the web interface mounted at /jffs and should also be able to run 'ipkg' !
- NOTE: If you are a Linux newbie, and you have problems with file permissions, look at this
- BONUS NOTE OF HAPPINESS: You need to save the script files in UNIX format, not DOS. One text editor that can do this is UltraEdit. Or Crimson Editor, which is free :o)
(Depricated) Use Samba Startup Script: Example 3
This method requires 2 shares available for DD-WRT, but allows you to have 2 different areas of storage for the router. Some might find it useful. It is an amalgamation of the previous 2 methods.
Things you need:
- 2 writeable shares on another computer/server
Procedure:
- Enable JFFS
- Enable Samba
- Create a shell script in the Samba share, as follows:
#!/bin/sh umount /jffs smbmount //<server's IP>/<jffs share name> /jffs -o username=<your username>,password=<your password>
- Enter the name of the script in the Samba startup script box in the GUI
- Reboot
As an example, my DD-WRT has these shares:
- /tmp/smbshare located in a shared folder on my NAS called ddwrt, which contains scripts (including startup.sh containing the above commands), yet to be installed packages and other static data
- /jffs located in a shared folder called jffs, which contains program data for installed packages
Testing
Log in to the shell (Telnet or SSH) and run:
mkdir -p /jffs/tmp/ipkg ipkg update ipkg list