# SOME DESCRIPTIVE TITLE # Copyright (C) YEAR The FreeBSD Project # This file is distributed under the same license as the FreeBSD Documentation package. # FIRST AUTHOR , YEAR. # #, fuzzy msgid "" msgstr "" "Project-Id-Version: FreeBSD Documentation VERSION\n" "POT-Creation-Date: 2023-07-15 16:42-0300\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" #. type: YAML Front Matter: description #: documentation/content/en/articles/solid-state/_index.adoc:1 #, no-wrap msgid "The use of solid state disk devices in FreeBSD" msgstr "" #. type: Title = #: documentation/content/en/articles/solid-state/_index.adoc:1 #: documentation/content/en/articles/solid-state/_index.adoc:12 #, no-wrap msgid "FreeBSD and Solid State Devices" msgstr "" #. type: Plain text #: documentation/content/en/articles/solid-state/_index.adoc:45 msgid "Abstract" msgstr "" #. type: Plain text #: documentation/content/en/articles/solid-state/_index.adoc:47 msgid "" "This article covers the use of solid state disk devices in FreeBSD to create " "embedded systems." msgstr "" #. type: Plain text #: documentation/content/en/articles/solid-state/_index.adoc:50 msgid "" "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." msgstr "" #. type: Plain text #: documentation/content/en/articles/solid-state/_index.adoc:53 msgid "" "Specific topics to be covered include the types and attributes of solid " "state media suitable for disk use in FreeBSD, kernel options that are of " "interest in such an environment, the [.filename]#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 FreeBSD " "environments." msgstr "" #. type: Plain text #: documentation/content/en/articles/solid-state/_index.adoc:55 msgid "'''" msgstr "" #. type: Title == #: documentation/content/en/articles/solid-state/_index.adoc:59 #, no-wrap msgid "Solid State Disk Devices" msgstr "" #. type: Plain text #: documentation/content/en/articles/solid-state/_index.adoc:69 msgid "" "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." msgstr "" #. type: Plain text #: documentation/content/en/articles/solid-state/_index.adoc:74 msgid "" "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 " "FreeBSD see the device as a normal hard disk (albeit small)." msgstr "" #. type: Plain text #: documentation/content/en/articles/solid-state/_index.adoc:76 msgid "" "Other solid state disk solutions do exist, but their expense, obscurity, and " "relative unease of use places them beyond the scope of this article." msgstr "" #. type: Title == #: documentation/content/en/articles/solid-state/_index.adoc:78 #, no-wrap msgid "Kernel Options" msgstr "" #. type: Plain text #: documentation/content/en/articles/solid-state/_index.adoc:81 msgid "" "A few kernel options are of specific interest to those creating an embedded " "FreeBSD system." msgstr "" #. type: Plain text #: documentation/content/en/articles/solid-state/_index.adoc:86 msgid "" "All embedded FreeBSD systems that use flash memory as system disk will be " "interested in memory disks and memory filesystems. As a result 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 [.filename]#/tmp# and [.filename]#/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 FreeBSD implementation." msgstr "" #. type: Plain text #: documentation/content/en/articles/solid-state/_index.adoc:88 msgid "" "You should make sure the following lines exist in your kernel configuration " "file:" msgstr "" #. type: delimited block . 4 #: documentation/content/en/articles/solid-state/_index.adoc:92 #, no-wrap msgid "options MD_ROOT # md device usable as a potential root device\n" msgstr "" #. type: Title == #: documentation/content/en/articles/solid-state/_index.adoc:95 #, no-wrap msgid "The `rc` Subsystem and Read-Only Filesystems" msgstr "" #. type: Plain text #: documentation/content/en/articles/solid-state/_index.adoc:98 msgid "" "The post-boot initialization of an embedded FreeBSD system is controlled by " "[.filename]#/etc/rc.initdiskless#." msgstr "" #. type: Plain text #: documentation/content/en/articles/solid-state/_index.adoc:102 msgid "" "[.filename]#/etc/rc.d/var# mounts [.filename]#/var# as a memory filesystem, " "makes a configurable list of directories in [.filename]#/var# with the man:" "mkdir[1] command, and changes modes on some of those directories. In the " "execution of [.filename]#/etc/rc.d/var#, one other [.filename]#rc.conf# " "variable comes into play - `varsize`. A [.filename]#/var# partition is " "created by [.filename]#/etc/rc.d/var# based on the value of this variable in " "[.filename]#rc.conf#:" msgstr "" #. type: delimited block . 4 #: documentation/content/en/articles/solid-state/_index.adoc:106 #, no-wrap msgid "varsize=8192\n" msgstr "" #. type: Plain text #: documentation/content/en/articles/solid-state/_index.adoc:109 msgid "Remember that this value is in sectors by default." msgstr "" #. type: Plain text #: documentation/content/en/articles/solid-state/_index.adoc:116 msgid "" "The fact that [.filename]#/var# is a read-write filesystem is an important " "distinction, as the [.filename]#/# 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 [.filename]#/etc/fstab#, you should also change the " "Options field for each filesystem to `ro` as follows:" msgstr "" #. type: delimited block . 4 #: documentation/content/en/articles/solid-state/_index.adoc:121 #, no-wrap msgid "" "# Device Mountpoint FStype Options Dump Pass#\n" "/dev/ad0s1a / ufs ro 1 1\n" msgstr "" #. type: Plain text #: documentation/content/en/articles/solid-state/_index.adoc:126 msgid "" "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 [.filename]#/var# created by [.filename]#/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 [.filename]#/var# that [." "filename]#/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 <>." msgstr "" #. type: Plain text #: documentation/content/en/articles/solid-state/_index.adoc:128 msgid "" "An important thing to remember is that a filesystem that was mounted read-" "only with [.filename]#/etc/fstab# can be made read-write at any time by " "issuing the command:" msgstr "" #. type: delimited block . 4 #: documentation/content/en/articles/solid-state/_index.adoc:132 #, no-wrap msgid "# /sbin/mount -uw partition\n" msgstr "" #. type: Plain text #: documentation/content/en/articles/solid-state/_index.adoc:135 msgid "and can be toggled back to read-only with the command:" msgstr "" #. type: delimited block . 4 #: documentation/content/en/articles/solid-state/_index.adoc:139 #, no-wrap msgid "# /sbin/mount -ur partition\n" msgstr "" #. type: Title == #: documentation/content/en/articles/solid-state/_index.adoc:141 #, no-wrap msgid "Building a File System from Scratch" msgstr "" #. type: Plain text #: documentation/content/en/articles/solid-state/_index.adoc:144 msgid "" "Since ATA compatible compact-flash cards are seen by FreeBSD as normal IDE " "hard drives, you could theoretically install FreeBSD from the network using " "the kern and mfsroot floppies or from a CD." msgstr "" #. type: Plain text #: documentation/content/en/articles/solid-state/_index.adoc:147 msgid "" "However, even a small installation of FreeBSD using normal installation " "procedures can produce a system in size of greater than 200 megabytes. Most " "people will be using smaller flash memory devices (128 megabytes is " "considered fairly large - 32 or even 16 megabytes is common), so an " "installation using normal mechanisms is not possible-there is simply not " "enough disk space for even the smallest of conventional installations." msgstr "" #. type: Plain text #: documentation/content/en/articles/solid-state/_index.adoc:153 msgid "" "The easiest way to overcome this space limitation is to install FreeBSD " "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." msgstr "" #. type: delimited block = 4 #: documentation/content/en/articles/solid-state/_index.adoc:157 msgid "Partitioning Your Flash Media Device" msgstr "" #. type: delimited block = 4 #: documentation/content/en/articles/solid-state/_index.adoc:167 msgid "" "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 kbd:" "[d]. After deleting all existing partitions, create a partition using kbd:" "[c] 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 kbd:[w] (this is a hidden " "option on this screen). If you are using an ATA compatible compact flash " "card, you should choose the FreeBSD Boot Manager. Now press kbd:[q] to quit " "the partition menu. You will be shown the boot manager menu once more - " "repeat the choice you made earlier." msgstr "" #. type: delimited block = 4 #: documentation/content/en/articles/solid-state/_index.adoc:168 msgid "Creating Filesystems on Your Flash Memory Device" msgstr "" #. type: delimited block = 4 #: documentation/content/en/articles/solid-state/_index.adoc:171 msgid "" "Exit the custom installation menu, and from the main installation menu " "choose the `fixit` option. After entering the fixit environment, enter the " "following command:" msgstr "" #. type: delimited block . 4 #: documentation/content/en/articles/solid-state/_index.adoc:175 #, no-wrap msgid "# disklabel -e /dev/ad0c\n" msgstr "" #. type: Plain text #: documentation/content/en/articles/solid-state/_index.adoc:179 msgid "" "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:" msgstr "" #. type: delimited block . 4 #: documentation/content/en/articles/solid-state/_index.adoc:183 #, no-wrap msgid "a: 123456 0 4.2BSD 0 0\n" msgstr "" #. type: Plain text #: documentation/content/en/articles/solid-state/_index.adoc:188 msgid "" "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." msgstr "" #. type: delimited block . 4 #: documentation/content/en/articles/solid-state/_index.adoc:193 #, no-wrap msgid "" "# disklabel -B -r /dev/ad0c\n" "# newfs /dev/ad0a\n" msgstr "" #. type: Plain text #: documentation/content/en/articles/solid-state/_index.adoc:196 msgid "Placing Your Filesystem on the Flash Media" msgstr "" #. type: Plain text #: documentation/content/en/articles/solid-state/_index.adoc:198 msgid "Mount the newly prepared flash media:" msgstr "" #. type: delimited block . 4 #: documentation/content/en/articles/solid-state/_index.adoc:202 #, no-wrap msgid "# mount /dev/ad0a /flash\n" msgstr "" #. type: Plain text #: documentation/content/en/articles/solid-state/_index.adoc:206 msgid "" "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:" msgstr "" #. type: delimited block . 4 #: documentation/content/en/articles/solid-state/_index.adoc:211 #, no-wrap msgid "" "# ifconfig xl0 192.168.0.10 netmask 255.255.255.0\n" "# route add default 192.168.0.1\n" msgstr "" #. type: Plain text #: documentation/content/en/articles/solid-state/_index.adoc:217 msgid "" "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:" msgstr "" #. type: delimited block . 4 #: documentation/content/en/articles/solid-state/_index.adoc:221 #, no-wrap msgid "ftp> get tarfile.tar \"| tar xvf -\"\n" msgstr "" #. type: Plain text #: documentation/content/en/articles/solid-state/_index.adoc:224 msgid "If your tarfile is gzipped, you can accomplish this as well:" msgstr "" #. type: delimited block . 4 #: documentation/content/en/articles/solid-state/_index.adoc:228 #, no-wrap msgid "ftp> get tarfile.tar \"| zcat | tar xvf -\"\n" msgstr "" #. type: Plain text #: documentation/content/en/articles/solid-state/_index.adoc:231 msgid "" "After the contents of your tarred filesystem are on your flash memory " "filesystem, you can unmount the flash memory and reboot:" msgstr "" #. type: delimited block . 4 #: documentation/content/en/articles/solid-state/_index.adoc:237 #, no-wrap msgid "" "# cd /\n" "# umount /flash\n" "# exit\n" msgstr "" #. type: Plain text #: documentation/content/en/articles/solid-state/_index.adoc:240 msgid "" "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 FreeBSD embedded system." msgstr "" #. type: Title == #: documentation/content/en/articles/solid-state/_index.adoc:243 #, no-wrap msgid "System Strategies for Small and Read Only Environments" msgstr "" #. type: delimited block = 4 #: documentation/content/en/articles/solid-state/_index.adoc:247 msgid "" "In <>, it was pointed out that the [.filename]#/var# filesystem " "constructed by [.filename]#/etc/rc.d/var# and the presence of a read-only " "root filesystem causes problems with many common software packages used with " "FreeBSD. In this article, suggestions for successfully running cron, " "syslog, ports installations, and the Apache web server will be provided." msgstr "" #. type: Title === #: documentation/content/en/articles/solid-state/_index.adoc:248 #, no-wrap msgid "Cron" msgstr "" #. type: delimited block = 4 #: documentation/content/en/articles/solid-state/_index.adoc:251 msgid "" "Upon boot, [.filename]#/var# gets populated by [.filename]#/etc/rc.d/var# " "using the list from [.filename]#/etc/mtree/BSD.var.dist#, so the [." "filename]#cron#, [.filename]#cron/tabs#, [.filename]#at#, and a few other " "standard directories get created." msgstr "" #. type: delimited block = 4 #: documentation/content/en/articles/solid-state/_index.adoc:256 msgid "" "However, this does not solve the problem of maintaining cron tabs across " "reboots. When the system reboots, the [.filename]#/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 [.filename]#/# filesystem as read-write and " "copy those cron tabs to somewhere safe, like [.filename]#/etc/tabs#, then " "add a line to the end of [.filename]#/etc/rc.initdiskless# that copies those " "crontabs into [.filename]#/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 [.filename]#/etc/rc.initdiskless#." msgstr "" #. type: Title === #: documentation/content/en/articles/solid-state/_index.adoc:257 #, no-wrap msgid "Syslog" msgstr "" #. type: delimited block = 4 #: documentation/content/en/articles/solid-state/_index.adoc:262 msgid "" "[.filename]#syslog.conf# specifies the locations of certain log files that " "exist in [.filename]#/var/log#. These files are not created by [.filename]#/" "etc/rc.d/var# upon system initialization. Therefore, somewhere in [." "filename]#/etc/rc.d/var#, after the section that creates the directories in " "[.filename]#/var#, you will need to add something like this:" msgstr "" #. type: delimited block . 4 #: documentation/content/en/articles/solid-state/_index.adoc:267 #, no-wrap msgid "" "# touch /var/log/security /var/log/maillog /var/log/cron /var/log/messages\n" "# chmod 0644 /var/log/*\n" msgstr "" #. type: Title === #: documentation/content/en/articles/solid-state/_index.adoc:269 #, no-wrap msgid "Ports Installation" msgstr "" #. type: Plain text #: documentation/content/en/articles/solid-state/_index.adoc:274 msgid "" "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." msgstr "" #. type: Plain text #: documentation/content/en/articles/solid-state/_index.adoc:277 msgid "" "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. As 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." msgstr "" #. type: Plain text #: documentation/content/en/articles/solid-state/_index.adoc:280 msgid "" "First, create a package database directory. This is normally in [." "filename]#/var/db/pkg#, but we cannot place it there as it will disappear " "every time the system is booted." msgstr "" #. type: delimited block . 4 #: documentation/content/en/articles/solid-state/_index.adoc:284 #, no-wrap msgid "# mkdir /etc/pkg\n" msgstr "" #. type: Plain text #: documentation/content/en/articles/solid-state/_index.adoc:287 msgid "" "Now, add a line to [.filename]#/etc/rc.d/var# that links the [.filename]#/" "etc/pkg# directory to [.filename]#/var/db/pkg#. An example:" msgstr "" #. type: delimited block . 4 #: documentation/content/en/articles/solid-state/_index.adoc:291 #, no-wrap msgid "# ln -s /etc/pkg /var/db/pkg\n" msgstr "" #. type: Plain text #: documentation/content/en/articles/solid-state/_index.adoc:294 msgid "" "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 [.filename]#/etc/pkg# (because the filesystem will, " "at that time, be mounted read-write) which will always be available to the " "operating system as [.filename]#/var/db/pkg#." msgstr "" #. type: Title === #: documentation/content/en/articles/solid-state/_index.adoc:295 #, no-wrap msgid "Apache Web Server" msgstr "" #. type: delimited block = 4 #: documentation/content/en/articles/solid-state/_index.adoc:301 msgid "" "The steps in this section are only necessary if Apache is set up to write " "its pid or log information outside of [.filename]#/var#. By default, Apache " "keeps its pid file in [.filename]#/var/run/httpd.pid# and its log files in [." "filename]#/var/log#." msgstr "" #. type: Plain text #: documentation/content/en/articles/solid-state/_index.adoc:307 msgid "" "It is now assumed that Apache keeps its log files in a directory [." "filename]#apache_log_dir# outside of [.filename]#/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 list of directories in [.filename]#/etc/rc.d/var# to create " "in [.filename]#/var#, and to link [.filename]#apache_log_dir# to [." "filename]#/var/log/apache#. It is also necessary to set permissions and " "ownership on this new directory." msgstr "" #. type: Plain text #: documentation/content/en/articles/solid-state/_index.adoc:309 msgid "" "First, add the directory `log/apache` to the list of directories to be " "created in [.filename]#/etc/rc.d/var#." msgstr "" #. type: Plain text #: documentation/content/en/articles/solid-state/_index.adoc:311 msgid "" "Second, add these commands to [.filename]#/etc/rc.d/var# after the directory " "creation section:" msgstr "" #. type: delimited block . 4 #: documentation/content/en/articles/solid-state/_index.adoc:316 #, no-wrap msgid "" "# chmod 0774 /var/log/apache\n" "# chown nobody:nobody /var/log/apache\n" msgstr "" #. type: Plain text #: documentation/content/en/articles/solid-state/_index.adoc:319 msgid "" "Finally, remove the existing [.filename]#apache_log_dir# directory, and " "replace it with a link:" msgstr "" #. type: delimited block . 4 #: documentation/content/en/articles/solid-state/_index.adoc:324 #, no-wrap msgid "" "# rm -rf apache_log_dir\n" "# ln -s /var/log/apache apache_log_dir\n" msgstr ""