From 9d88ddc81d324013da237e207bc660fa16b84ee7 Mon Sep 17 00:00:00 2001 From: Benedict Reuschling Date: Sun, 6 Jan 2013 12:10:44 +0000 Subject: [PATCH] Silence some igor warnings by wrapping overlong lines. Also, add an extra space after a sentence stop in a few places. Some indentations in this file are still not perfect, but I focused on lines that were to long primarily to keep the diff small. No content changes. --- .../articles/solid-state/article.xml | 474 ++++++++++-------- 1 file changed, 251 insertions(+), 223 deletions(-) diff --git a/en_US.ISO8859-1/articles/solid-state/article.xml b/en_US.ISO8859-1/articles/solid-state/article.xml index 82046ccb98..800610ec93 100644 --- a/en_US.ISO8859-1/articles/solid-state/article.xml +++ b/en_US.ISO8859-1/articles/solid-state/article.xml @@ -70,79 +70,84 @@ $FreeBSD$ - This article covers the use of solid state disk devices in &os; - to create embedded systems. + This article covers the use of solid state disk devices in + &os; to create embedded systems. - Embedded systems have the advantage of increased stability due to - the lack of integral moving parts (hard drives). Account must be - taken, however, for the generally low disk space available in the - system and the durability of the storage medium. + Embedded systems have the advantage of increased stability + due to the lack of integral moving parts (hard drives). + Account must be taken, however, for the generally low disk + space available in the system and the durability of the + storage medium. - Specific topics to be covered include the types and attributes of - solid state media suitable for disk use in &os;, kernel options - that are of interest in such an environment, the - rc.initdiskless mechanisms that automate the - initialization of such systems and the need for read-only filesystems, - and building filesystems from scratch. The article will conclude - with some general strategies for small and read-only &os; - environments. + Specific topics to be covered include the types and + attributes of solid state media suitable for disk use in &os;, + kernel options that are of interest in such an environment, + the rc.initdiskless mechanisms that + automate the initialization of such systems and the need for + read-only filesystems, and building filesystems from scratch. + The article will conclude with some general strategies for + small and read-only &os; environments. Solid State Disk Devices - The scope of this article will be limited to solid state disk - devices made from flash memory. Flash memory is a solid state memory - (no moving parts) that is non-volatile (the memory maintains data even - after all power sources have been disconnected). Flash memory can - withstand tremendous physical shock and is reasonably fast (the flash - memory solutions covered in this article are slightly slower than a EIDE - hard disk for write operations, and much faster for read operations). - One very important aspect of flash memory, the ramifications of which - will be discussed later in this article, is that each sector has a - limited rewrite capacity. You can only write, erase, and write again to - a sector of flash memory a certain number of times before the sector - becomes permanently unusable. Although many flash memory products - automatically map bad blocks, and although some even distribute write - operations evenly throughout the unit, the fact remains that there - exists a limit to the amount of writing that can be done to the device. - Competitive units have between 1,000,000 and 10,000,000 writes per - sector in their specification. This figure varies due to the - temperature of the environment. + The scope of this article will be limited to solid state + disk devices made from flash memory. Flash memory is a solid + state memory (no moving parts) that is non-volatile (the memory + maintains data even after all power sources have been + disconnected). Flash memory can withstand tremendous physical + shock and is reasonably fast (the flash memory solutions covered + in this article are slightly slower than a EIDE hard disk for + write operations, and much faster for read operations). One + very important aspect of flash memory, the ramifications of + which will be discussed later in this article, is that each + sector has a limited rewrite capacity. You can only write, + erase, and write again to a sector of flash memory a certain + number of times before the sector becomes permanently unusable. + Although many flash memory products automatically map bad + blocks, and although some even distribute write operations + evenly throughout the unit, the fact remains that there exists a + limit to the amount of writing that can be done to the device. + Competitive units have between 1,000,000 and 10,000,000 writes + per sector in their specification. This figure varies due to + the temperature of the environment. - Specifically, we will be discussing ATA compatible compact-flash - units, which are quite popular as storage media for digital - cameras. Of particular interest is the fact that they pin out directly - to the IDE bus and are compatible with the ATA command set. Therefore, - with a very simple and low-cost adaptor, these devices can be attached - directly to an IDE bus in a computer. Once implemented in this manner, - operating systems such as &os; see the device as a normal hard disk - (albeit small). + Specifically, we will be discussing ATA compatible + compact-flash units, which are quite popular as storage media + for digital cameras. Of particular interest is the fact that + they pin out directly to the IDE bus and are compatible with the + ATA command set. Therefore, with a very simple and low-cost + adaptor, these devices can be attached directly to an IDE bus in + a computer. Once implemented in this manner, operating systems + such as &os; see the device as a normal hard disk (albeit + small). - Other solid state disk solutions do exist, but their expense, - obscurity, and relative unease of use places them beyond the scope of - this article. + Other solid state disk solutions do exist, but their + expense, obscurity, and relative unease of use places them + beyond the scope of this article. Kernel Options - A few kernel options are of specific interest to those creating - an embedded &os; system. + A few kernel options are of specific interest to those + creating an embedded &os; system. All embedded &os; systems that use flash memory as system - disk will be interested in memory disks and memory filesystems. Because - of the limited number of writes that can be done to flash memory, the - disk and the filesystems on the disk will most likely be mounted - read-only. In this environment, filesystems such as - /tmp and /var are mounted as - memory filesystems to allow the system to create logs and update - counters and temporary files. Memory filesystems are a critical - component to a successful solid state &os; implementation. + disk will be interested in memory disks and memory filesystems. + Because of the limited number of writes that can be done to + flash memory, the disk and the filesystems on the disk will most + likely be mounted read-only. In this environment, filesystems + such as /tmp and /var + are mounted as memory filesystems to allow the system to create + logs and update counters and temporary files. Memory + filesystems are a critical component to a successful solid state + &os; implementation. - You should make sure the following lines exist in your kernel - configuration file: + You should make sure the following lines exist in your + kernel configuration file: options MFS # Memory Filesystem options MD_ROOT # md device usable as a potential root device @@ -150,58 +155,63 @@ pseudo-device md # memory disk - The <literal>rc</literal> Subsystem and Read-Only Filesystems + The <literal>rc</literal> Subsystem and Read-Only + Filesystems The post-boot initialization of an embedded &os; system is controlled by /etc/rc.initdiskless. - /etc/rc.d/var mounts /var - as a memory filesystem, makes a configurable list of directories in - /var with the &man.mkdir.1; command, and - changes modes on some of those directories. In the execution of + /etc/rc.d/var mounts + /var as a memory filesystem, makes a + configurable list of directories in /var + with the &man.mkdir.1; command, and changes modes on some of + those directories. In the execution of /etc/rc.d/var, one other rc.conf variable comes into play – - varsize. The /etc/rc.d/var - file creates a /var partition based on the value of + varsize. The + /etc/rc.d/var file creates a + /var partition based on the value of this variable in rc.conf: varsize=8192 Remember that this value is in sectors by default. - The fact that /var - is a read-write filesystem is an important - distinction, as the / partition (and any other - partitions you may have on your flash media) should be mounted - read-only. Remember that in we detailed the - limitations of flash memory - specifically the limited write capability. - The importance of not mounting filesystems on flash media read-write, - and the importance of not using a swap file, cannot be overstated. A - swap file on a busy system can burn through a piece of flash media in - less than one year. Heavy logging or temporary file creation and - destruction can do the same. Therefore, in addition to removing the + The fact that /var is a read-write + filesystem is an important distinction, as the + / partition (and any other partitions you + may have on your flash media) should be mounted read-only. + Remember that in we detailed the + limitations of flash memory - specifically the limited write + capability. The importance of not mounting filesystems on flash + media read-write, and the importance of not using a swap file, + cannot be overstated. A swap file on a busy system can burn + through a piece of flash media in less than one year. Heavy + logging or temporary file creation and destruction can do the + same. Therefore, in addition to removing the swap entry from your - /etc/fstab file, you should also change the Options - field for each filesystem to ro as follows: + /etc/fstab file, you should also change the + Options field for each filesystem to ro as + follows: # Device Mountpoint FStype Options Dump Pass# /dev/ad0s1a / ufs ro 1 1 - A few applications in the average system will immediately begin to - fail as a result of this change. For instance, cron + A few applications in the average system will immediately + begin to fail as a result of this change. For instance, cron will not run properly as a result of missing cron tabs in the /var created by /etc/rc.d/var, and syslog and dhcp will - encounter problems as well as a result of the read-only filesystem and - missing items in the /var that - /etc/rc.d/var has created. These are only - temporary problems though, and are addressed, along with solutions to - the execution of other common software packages in + encounter problems as well as a result of the read-only + filesystem and missing items in the /var + that /etc/rc.d/var has created. These are + only temporary problems though, and are addressed, along with + solutions to the execution of other common software packages in . - An important thing to remember is that a filesystem that was mounted - read-only with /etc/fstab can be made read-write at - any time by issuing the command: + An important thing to remember is that a filesystem that was + mounted read-only with /etc/fstab can be + made read-write at any time by issuing the command: &prompt.root; /sbin/mount -uw partition @@ -213,73 +223,79 @@ pseudo-device md # memory disk Building a File System From Scratch - Because ATA compatible compact-flash cards are seen by &os; as - normal IDE hard drives, you could - theoretically install &os; from the network using the kern and - mfsroot floppies or from a CD. + Because ATA compatible compact-flash cards are seen by &os; + as normal IDE hard drives, you could theoretically install &os; + from the network using the kern and mfsroot floppies or from a + CD. However, even a small installation of &os; using normal - installation procedures can produce a system in size of greater than 200 - megabytes. Because most people will be using smaller flash memory - devices (128 megabytes is considered fairly large - 32 or even 16 - megabytes is common) an installation using normal mechanisms is not - possible—there is simply not enough disk space for even the - smallest of conventional installations. + installation procedures can produce a system in size of greater + than 200 megabytes. Because most people will be using smaller + flash memory devices (128 megabytes is considered fairly large - + 32 or even 16 megabytes is common) an installation using normal + mechanisms is not possible—there is simply not enough disk + space for even the smallest of conventional + installations. - The easiest way to overcome this space limitation is to install - &os; using conventional means to a normal hard disk. After the - installation is complete, pare down the operating system to a size that - will fit onto your flash media, then tar the entire filesystem. The - following steps will guide you through the process of preparing a piece - of flash memory for your tarred filesystem. Remember, because a normal - installation is not being performed, operations such as partitioning, - labeling, file-system creation, etc. need to be performed by hand. In - addition to the kern and mfsroot floppy disks, you will also need to use - the fixit floppy. + The easiest way to overcome this space limitation is to + install &os; using conventional means to a normal hard disk. + After the installation is complete, pare down the operating + system to a size that will fit onto your flash media, then tar + the entire filesystem. The following steps will guide you + through the process of preparing a piece of flash memory for + your tarred filesystem. Remember, because a normal installation + is not being performed, operations such as partitioning, + labeling, file-system creation, etc. need to be performed by + hand. In addition to the kern and mfsroot floppy disks, you + will also need to use the fixit floppy. Partitioning your flash media device After booting with the kern and mfsroot floppies, choose - custom from the installation menu. In the custom - installation menu, choose partition. In the - partition menu, you should delete all existing partitions using the - d key. After deleting all existing partitions, - create a partition using the c key and accept the - default value for the size of the partition. When asked for the - type of the partition, make sure the value is set to - 165. Now write this partition table to the disk - by pressing the w key (this is a hidden option on - this screen). If you are using an ATA compatible compact - flash card, you should choose the &os; Boot Manager. Now press - the q key to quit the partition menu. You will be - shown the boot manager menu once more - repeat the choice you made - earlier. + custom from the installation menu. In + the custom installation menu, choose + partition. In the partition menu, you + should delete all existing partitions using the + d key. After deleting all existing + partitions, create a partition using the c + key and accept the default value for the size of the + partition. When asked for the type of the partition, make + sure the value is set to 165. Now write + this partition table to the disk by pressing the + w key (this is a hidden option on this + screen). If you are using an ATA compatible compact flash + card, you should choose the &os; Boot Manager. Now press + the q key to quit the partition menu. You + will be shown the boot manager menu once more - repeat the + choice you made earlier. - Creating filesystems on your flash memory device + Creating filesystems on your flash memory + device Exit the custom installation menu, and from the main - installation menu choose the fixit option. After - entering the fixit environment, enter the following command: + installation menu choose the fixit + option. After entering the fixit environment, enter the + following command: &prompt.root; disklabel -e /dev/ad0c - At this point you will have entered the vi editor under the - auspices of the disklabel command. Next, you need to add - an a: line at the end of the file. This - a: line should look like: + At this point you will have entered the vi editor under + the auspices of the disklabel command. Next, you need to + add an a: line at the end of the file. + This a: line should look like: a: 123456 0 4.2BSD 0 0 - Where 123456 is a number that is - exactly the same as the number in the existing c: - entry for size. Basically you are duplicating the existing - c: line as an a: line, making - sure that fstype is 4.2BSD. Save the file and - exit. + Where 123456 is a number that + is exactly the same as the number in the existing + c: entry for size. Basically you are + duplicating the existing c: line as an + a: line, making sure that fstype is + 4.2BSD. Save the file and exit. &prompt.root; disklabel -B -r /dev/ad0c &prompt.root; newfs /dev/ad0a @@ -292,22 +308,24 @@ pseudo-device md # memory disk &prompt.root; mount /dev/ad0a /flash - Bring this machine up on the network so we may transfer our tar - file and explode it onto our flash media filesystem. One example of - how to do this is: + Bring this machine up on the network so we may transfer + our tar file and explode it onto our flash media filesystem. + One example of how to do this is: &prompt.root; ifconfig xl0 192.168.0.10 netmask 255.255.255.0 &prompt.root; route add default 192.168.0.1 - Now that the machine is on the network, transfer your tar file. - You may be faced with a bit of a dilemma at this point - if your - flash memory part is 128 megabytes, for instance, and your tar file - is larger than 64 megabytes, you cannot have your tar file on the - flash media at the same time as you explode it - you will run out of - space. One solution to this problem, if you are using FTP, is to - untar the file while it is transferred over FTP. If you perform - your transfer in this manner, you will never have the tar file and - the tar contents on your disk at the same time: + Now that the machine is on the network, transfer your + tar file. You may be faced with a bit of a dilemma at this + point - if your flash memory part is 128 megabytes, for + instance, and your tar file is larger than 64 megabytes, you + cannot have your tar file on the flash media at the same + time as you explode it - you will run out of + space. One solution to this problem, if you are using FTP, + is to untar the file while it is transferred over FTP. If + you perform your transfer in this manner, you will never + have the tar file and the tar contents on your disk at the + same time: ftp> get tarfile.tar "| tar xvf -" @@ -316,70 +334,74 @@ pseudo-device md # memory disk ftp> get tarfile.tar "| zcat | tar xvf -" - After the contents of your tarred filesystem are on your flash - memory filesystem, you can unmount the flash memory and - reboot: + After the contents of your tarred filesystem are on your + flash memory filesystem, you can unmount the flash memory + and reboot: &prompt.root; cd / &prompt.root; umount /flash &prompt.root; exit - Assuming that you configured your filesystem correctly when it - was built on the normal hard disk (with your filesystems mounted - read-only, and with the necessary options compiled into the kernel) - you should now be successfully booting your &os; embedded - system. + Assuming that you configured your filesystem correctly + when it was built on the normal hard disk (with your + filesystems mounted read-only, and with the necessary + options compiled into the kernel) you should now be + successfully booting your &os; embedded system. - System Strategies for Small and Read Only Environments + System Strategies for Small and Read Only + Environments In , it was pointed out that the /var filesystem constructed by - /etc/rc.d/var and the presence of a read-only - root filesystem causes problems with many common software packages used - with &os;. In this article, suggestions for successfully running - cron, syslog, ports installations, and the Apache web server will be - provided. + /etc/rc.d/var and the presence of a + read-only root filesystem causes problems with many common + software packages used with &os;. In this article, suggestions + for successfully running cron, syslog, ports installations, and + the Apache web server will be provided. cron - Upon boot, /var gets - populated by /etc/rc.d/var using the list from - /etc/mtree/BSD.var.dist, so the cron, cron/tabs, at, and a few other standard + Upon boot, /var + gets populated by /etc/rc.d/var using the + list from /etc/mtree/BSD.var.dist, so the + cron, cron/tabs, at, and a few other standard directories get created. - However, this does not solve the problem of maintaining cron - tabs across reboots. When the system reboots, the - /var filesystem that is in memory will disappear - and any cron tabs you may have had in it will also disappear. - Therefore, one solution would be to create cron tabs for the users - that need them, mount your / filesystem as - read-write and copy those cron tabs to somewhere safe, like + However, this does not solve the problem of maintaining + cron tabs across reboots. When the system reboots, the + /var filesystem that is in memory will + disappear and any cron tabs you may have had in it will also + disappear. Therefore, one solution would be to create cron + tabs for the users that need them, mount your + / filesystem as read-write and copy those + cron tabs to somewhere safe, like /etc/tabs, then add a line to the end of - /etc/rc.initdiskless that copies those crontabs into - /var/cron/tabs after that directory has been - created during system initialization. You may also need to add a line - that changes modes and permissions on the directories you create and - the files you copy with /etc/rc.initdiskless. + /etc/rc.initdiskless that copies those + crontabs into /var/cron/tabs after that + directory has been created during system initialization. You + may also need to add a line that changes modes and permissions + on the directories you create and the files you copy with + /etc/rc.initdiskless. syslog - syslog.conf specifies the locations of - certain log files that exist in /var/log. These - files are not created by /etc/rc.d/var upon - system initialization. Therefore, somewhere in - /etc/rc.d/var, after the section that creates - the directories in /var, you will need to add - something like this: + syslog.conf specifies the locations + of certain log files that exist in + /var/log. These files are not created by + /etc/rc.d/var upon system initialization. + Therefore, somewhere in /etc/rc.d/var, + after the section that creates the directories in + /var, you will need to add something like + this: &prompt.root; touch /var/log/security /var/log/maillog /var/log/cron /var/log/messages &prompt.root; chmod 0644 /var/log/* @@ -388,27 +410,30 @@ pseudo-device md # memory disk Ports Installation - Before discussing the changes necessary to successfully use the - ports tree, a reminder is necessary regarding the read-only nature of - your filesystems on the flash media. Since they are read-only, you - will need to temporarily mount them read-write using the mount syntax - shown in . You should always remount those + Before discussing the changes necessary to successfully + use the ports tree, a reminder is necessary regarding the + read-only nature of your filesystems on the flash media. + Since they are read-only, you will need to temporarily mount + them read-write using the mount syntax shown in . You should always remount those filesystems read-only when you are done with any maintenance - - unnecessary writes to the flash media could considerably shorten its - lifespan. + unnecessary writes to the flash media could considerably + shorten its lifespan. - To make it possible to enter a ports directory and successfully - run make install, - we must create a packages directory on - a non-memory filesystem that will keep track of our packages across - reboots. Because it is necessary to mount your filesystems as - read-write for the installation of a package anyway, it is sensible to - assume that an area on the flash media can also be used for package + To make it possible to enter a ports directory and + successfully run + make install, we + must create a packages directory on a non-memory filesystem + that will keep track of our packages across reboots. Because + it is necessary to mount your filesystems as read-write for + the installation of a package anyway, it is sensible to assume + that an area on the flash media can also be used for package information to be written to. - First, create a package database directory. This is normally in - /var/db/pkg, but we cannot place it there as it - will disappear every time the system is booted. + First, create a package database directory. This is + normally in /var/db/pkg, but we cannot + place it there as it will disappear every time the system is + booted. &prompt.root; mkdir /etc/pkg @@ -418,12 +443,13 @@ pseudo-device md # memory disk &prompt.root; ln -s /etc/pkg /var/db/pkg - Now, any time that you mount your filesystems as read-write and - install a package, the make install will work, - and package information - will be written successfully to /etc/pkg (because - the filesystem will, at that time, be mounted read-write) which will - always be available to the operating system as + Now, any time that you mount your filesystems as + read-write and install a package, the + make install will + work, and package information will be written successfully to + /etc/pkg (because the filesystem will, at + that time, be mounted read-write) which will always be + available to the operating system as /var/db/pkg. @@ -431,40 +457,42 @@ pseudo-device md # memory disk Apache Web Server - The steps in this section are only necessary if Apache is - set up to write its pid or log information outside of + The steps in this section are only necessary if Apache + is set up to write its pid or log information outside of /var. By default, Apache keeps its pid file in /var/run/httpd.pid and its log - files in /var/log. + class="directory">/var/run/httpd.pid and its + log files in /var/log. It is now assumed that Apache keeps its log files in a directory apache_log_dir + class="directory">apache_log_dir outside of /var. - When this directory lives on a read-only filesystem, Apache will - not be able to save any log files, and may have problems working. - If so, it is necessary to add a new directory to the + When this directory lives on a read-only filesystem, Apache + will not be able to save any log files, and may have problems + working. If so, it is necessary to add a new directory to the list of directories in /etc/rc.d/var to create in /var, and to link - apache_log_dir to - /var/log/apache. It is also necessary to set - permissions and ownership on this new directory. + apache_log_dir + to /var/log/apache. It is also necessary + to set permissions and ownership on this new directory. - First, add the directory log/apache to the list - of directories to be created in + First, add the directory log/apache to + the list of directories to be created in /etc/rc.d/var. Second, add these commands to - /etc/rc.d/var after the directory creation - section: + /etc/rc.d/var after the directory + creation section: &prompt.root; chmod 0774 /var/log/apache &prompt.root; chown nobody:nobody /var/log/apache - Finally, remove the existing - apache_log_dir + Finally, remove the existing apache_log_dir directory, and replace it with a link: &prompt.root; rm -rf apache_log_dir