Update articles/gjournal-desktop to fix a few minor issues I found

during its translation recently:

- Fix capitalization issues in titles according to the Chicago Manual of Style
- Update Manolis' e-mail address to his FreeBSD.org one
- Correct some misspelled words, like "filesystem" or "soft updates" according
  to the word list in FDP Primer [1]
- Add <replaceable> elements to minor versions in "FreeBSD 7.X"
- Replace bogus <filename role="device"> markups with <filename
  class="devicefile"> elements
- Rewrite "NGb" constructs to "N&nbsp;GB"
- Rename sysinstall's disk label editor to <application>Disklabel</application>
  partition editor, in reflect of the corresponding sections of the FreeBSD
  Handbook [2]
- Replace <keycap>up</keycap> and <keycap>down</keycap> markups with a more
  general form, similar to the Handbook [2]
- Mark up user commands with <userinput> inside <screen> elements
- Use <filename> and <devicename> where applicable
- Fix typos (like "ads1s1d")
- Mark up Enter key with <keycap>Enter</keycap>
- Mark up Ivan Voras (ivoras@) with his now-official Handbook entity
- Mark up usernames with <username>

[1] http://www.freebsd.org/doc/en/books/fdp-primer/writing-style-word-list.html
[2] http://www.freebsd.org/doc/en/books/handbook/install-steps.html

Reviewed by:	manolis, keramida
Approved by:	gabor (mentor)
This commit is contained in:
Gabor Pali 2008-09-26 11:44:17 +00:00
parent 81fdafe181
commit 6f7df44f49
Notes: svn2git 2020-12-08 03:00:23 +00:00
svn path=/head/; revision=32960

View file

@ -13,19 +13,19 @@
<article lang="en">
<articleinfo>
<title>Implementing UFS journaling on a desktop PC</title>
<title>Implementing UFS Journaling on a Desktop PC</title>
<author>
<firstname>Manolis</firstname>
<surname>Kiagias</surname>
<affiliation>
<address><email>sonicy@otenet.gr</email></address>
<address><email>manolis@FreeBSD.org</email></address>
</affiliation>
</author>
<copyright>
<year>2008</year>
<holder role="mailto:sonicy@otenet.gr">Manolis Kiagias</holder>
<holder role="mailto:manolis@FreeBSD.org">Manolis Kiagias</holder>
</copyright>
<releaseinfo>$FreeBSD$</releaseinfo>
@ -36,16 +36,16 @@
</legalnotice>
<abstract>
<para>A journaling filesystem uses a log to record all transactions
that take place in the filesystem, and preserves its integrity in the
<para>A journaling file system uses a log to record all transactions
that take place in the file system, and preserves its integrity in the
event of a system crash or power failure. Although it is still
possible to lose unsaved changes to files, journaling almost
completely eliminates the possibility of filesystem corruption caused
completely eliminates the possibility of file system corruption caused
by an unclean shutdown. It also shortens to a minimum the time
required for after-failure filesystem checking. Although the UFS
filesystem employed by &os; does not implement journaling itself,
the new journal class of the GEOM framework in &os;&nbsp;7.X can be
used to provide filesystem independent journaling. This article
required for after-failure file system checking. Although the UFS
file system employed by &os; does not implement journaling itself,
the new journal class of the GEOM framework in &os;&nbsp;7.<replaceable>X</replaceable> can be
used to provide file system independent journaling. This article
explains how to implement UFS journaling on a typical desktop PC
scenario.</para>
</abstract>
@ -57,15 +57,15 @@
<para>While professional servers are usually well protected from
unforeseen shutdowns, the typical desktop is at the mercy of power
failures, accidental resets, and other user related incidents that can
lead to unclean shutdowns. Soft updates usually protect the filesystem
lead to unclean shutdowns. Soft Updates usually protect the file system
efficiently in such cases, although most of the times a lengthy
background check is required. On rare occasions, filesystem corruption
background check is required. On rare occasions, file system corruption
reaches a point where user intervention is required and data may be
lost.</para>
<para>The new journaling capability provided by GEOM can greatly assist
in such scenarios, by virtually eliminating the time required for
filesystem checking, and ensuring that the filesystem is quickly
file system checking, and ensuring that the file system is quickly
restored to a consistent state.</para>
<para>This article describes a procedure for implementing UFS journaling
@ -88,7 +88,7 @@
</listitem>
<listitem>
<para>How to convert your existing filesystems to utilize journaling,
<para>How to convert your existing file systems to utilize journaling,
and what options to use in <filename>/etc/fstab</filename> to mount
them.</para>
</listitem>
@ -128,59 +128,59 @@
</sect1>
<sect1 id="understanding-journaling">
<title>Understanding journaling in &os;</title>
<title>Understanding Journaling in &os;</title>
<para>The journaling provided by GEOM in &os;&nbsp;7.X is not filesystem
specific (unlike for example the ext3 filesystem in &linux;) but is
<para>The journaling provided by GEOM in &os;&nbsp;7.<replaceable>X</replaceable> is not file system
specific (unlike for example the ext3 file system in &linux;) but is
functioning at the block level. Though this means it can be applied
to different filesystems, for &os;&nbsp;7.0-RELEASE, it can only be used
to different file systems, for &os;&nbsp;7.0-RELEASE, it can only be used
on UFS2.</para>
<para>This functionality is provided by loading the
<filename>geom_journal.ko</filename> module into the kernel (or
building it into a custom kernel) and using the
<command>gjournal</command> command to configure the filesystems.
In general, you would like to journal large filesystems, like
<command>gjournal</command> command to configure the file systems.
In general, you would like to journal large file systems, like
<filename>/usr</filename>. You will need however (see the following
section) to reserve some free disk space.</para>
<para>When a filesystem is journaled, some disk space is needed to keep
<para>When a file system is journaled, some disk space is needed to keep
the journal itself. The disk space that holds the actual data is
referred to as the <emphasis>data provider</emphasis>, while the one
that holds the journal is referred to as the
<emphasis>journal provider</emphasis>. The data and journal providers
need to be on different partitions when journaling an existing
(non empty) partition. When journaling a new partition, you have the
(non-empty) partition. When journaling a new partition, you have the
option to use a single provider for both data and journal. In any case,
the <command>gjournal</command> command combines both providers to
create the final journaled filesystem. For example:</para>
create the final journaled file system. For example:</para>
<itemizedlist>
<listitem>
<para>You wish to journal your <filename>/usr</filename> filesystem,
stored in <filename role="device">/dev/ad0s1f</filename> (which
<para>You wish to journal your <filename>/usr</filename> file system,
stored in <filename class="devicefile">/dev/ad0s1f</filename> (which
already contains data).</para>
</listitem>
<listitem>
<para>You reserved some free disk space in a partition in
<filename role="device">/dev/ad0s1g</filename>.</para>
<filename class="devicefile">/dev/ad0s1g</filename>.</para>
</listitem>
<listitem>
<para>Using <command>gjournal</command>, a new <filename
role="device">/dev/ad0s1f.journal</filename> device is created
where <filename role="device">/dev/ad0s1f</filename> is the data
provider, and <filename role="device">/dev/ad0s1g</filename> is
class="devicefile">/dev/ad0s1f.journal</filename> device is created
where <filename class="devicefile">/dev/ad0s1f</filename> is the data
provider, and <filename class="devicefile">/dev/ad0s1g</filename> is
the journal provider. This new device is then used for all
subsequent file operations.</para>
</listitem>
</itemizedlist>
<para>The amount of disk space you need to reserve for the journal
provider depends on the usage load of the filesystem and not on the
provider depends on the usage load of the file system and not on the
size of the data provider. For example on a typical office desktop,
a 1Gb journal provider for the <filename>/usr</filename> filesystem
a 1&nbsp;GB journal provider for the <filename>/usr</filename> file system
will suffice, while a machine that deals with heavy disk I/O (i.e.
video editing) may need more. A kernel panic will occur if the
journal space is exhausted before it has a chance to be
@ -191,10 +191,10 @@
</sect1>
<sect1 id="reserve-space">
<title>Steps during the installation of &os;</title>
<title>Steps During the Installation of &os;</title>
<sect2>
<title>Reserving space for journaling</title>
<title>Reserving Space for Journaling</title>
<para>A typical desktop machine usually has one hard disk that stores
both the OS and user data. Arguably, the default partitioning scheme
@ -202,17 +202,17 @@
suitable: A desktop machine does not need a large
<filename>/var</filename> partition, while <filename>/usr</filename>
is allocated the bulk of the disk space, since user data and a lot of
packages are installed into its sub-directories.</para>
packages are installed into its subdirectories.</para>
<para>The default partitioning (the one obtained by pressing
<keycap>A</keycap> at the disklabel editor) does not leave any
<keycap>A</keycap> at the &os; partition editor, called <application>Disklabel</application>) does not leave any
unallocated space. Each partition that will be journaled, requires
another partition for the journal. Since the <filename>/usr</filename>
partition is the largest, it makes sense to shrink this partition
slightly, to obtain the space required for journaling.</para>
<para>In our example, an 80Gb disk is used. The following screenshot
shows the default partitions created by the disklabel editor during
<para>In our example, an 80&nbsp;GB disk is used. The following screenshot
shows the default partitions created by <application>Disklabel</application> during
installation:</para>
<mediaobject>
@ -222,25 +222,25 @@
</mediaobject>
<para>If this is more or less what you need, it is very easy to adjust
for journaling. Simply use the <keycap>up</keycap> and
<keycap>down</keycap> arrow keys to move the highlight to the
for journaling. Simply use the
arrow keys to move the highlight to the
<filename>/usr</filename> partition and press <keycap>D</keycap> to
delete it.</para>
<para>Now, move the highlight to the disk name at the top of the screen
and press <keycap>C</keycap> to create a new partition for
<filename>/usr</filename>. This new partition should be smaller by
1Gb (if you intend to journal <filename>/usr</filename> only), or
2Gb (if you intend to journal both <filename>/usr</filename> and
1&nbsp;GB (if you intend to journal <filename>/usr</filename> only), or
2&nbsp;GB (if you intend to journal both <filename>/usr</filename> and
<filename>/var</filename>). From the pop-up that appears, opt to
create a filesystem, and type <filename>/usr</filename> as the mount
create a file system, and type <filename>/usr</filename> as the mount
point.</para>
<note>
<para>Should you journal the <filename>/var</filename> partition?
Normally, journaling makes sense on quite large partitions. You may
decide not to journal <filename>/var</filename>, although doing so
on a typical desktop will cause no harm. If the filesystem is
on a typical desktop will cause no harm. If the file system is
lightly used (quite probable for a desktop) you may wish to
allocate less disk space for its journal.</para>
@ -266,9 +266,9 @@
<filename>/etc/fstab</filename> will have to be edited, and the extra
swap space entries removed.</para>
<para>To create the swap, again use the <keycap>up</keycap> and
<keycap>down</keycap> arrow keys to move the highlight to the top of
the disklabel editor screen, so that the disk name itself is
<para>To create the swap, again use the
arrow keys to move the highlight to the top of
<application>Disklabel</application> screen, so that the disk name itself is
highlighted. Then press <keycap>N</keycap>, enter the desired size
(<replaceable>1024M</replaceable>), and select
<quote>swap space</quote> from the pop-up menu that appears. Repeat
@ -290,12 +290,12 @@
following table shows our notes for the sample configuration:</para>
<table pgwide="1">
<title>Partitions and journals</title>
<title>Partitions and Journals</title>
<tgroup cols="3">
<thead>
<row>
<entry>Partition</entry>
<entry>Mount point</entry>
<entry>Mount Point</entry>
<entry>Journal</entry>
</row>
</thead>
@ -316,7 +316,7 @@
</table>
<para>Continue the installation as you would normally do. We would
however suggest you postpone installation of add-on software
however suggest you postpone installation of third party software
(packages) until you have completely setup journaling.</para>
</sect2>
@ -335,42 +335,42 @@
</sect2>
<sect1 id="configure-journal">
<title>Setting up journaling</title>
<title>Setting Up Journaling</title>
<sect2 id="running-gjournal">
<title>Executing gjournal</title>
<title>Executing <command>gjournal</command></title>
<para>Having prepared all the required partitions, it is quite easy
to configure journaling. We will need to switch to single user
mode, so login as root and type:</para>
mode, so login as <username>root</username> and type:</para>
<screen>&prompt.root; shutdown now</screen>
<screen>&prompt.root; <userinput>shutdown now</userinput></screen>
<para>Press enter to get the default shell. We will need to unmount
<para>Press <keycap>Enter</keycap> to get the default shell. We will need to unmount
the partitions that will be journaled, in our example
<filename>/usr </filename> and <filename>/var</filename>:</para>
<filename>/usr</filename> and <filename>/var</filename>:</para>
<screen>&prompt.root; umount /usr /var</screen>
<screen>&prompt.root; <userinput>umount /usr /var</userinput></screen>
<para>Load the module required for journaling:</para>
<screen>&prompt.root; gjournal load</screen>
<screen>&prompt.root; <userinput>gjournal load</userinput></screen>
<para>Now, use your notes to determine which partition will be used
for each journal. In our example, <filename>/usr</filename> is
<filename role="device">ad0s1f</filename> and its journal will be
<filename role="device">ad0s1g</filename>, while
<filename class="devicefile">ad0s1f</filename> and its journal will be
<filename class="devicefile">ad0s1g</filename>, while
<filename>/var</filename> is <filename
role="device">ad0s1d</filename> and will
be journaled to <filename role="device">ad0s1h</filename>.
class="devicefile">ad0s1d</filename> and will
be journaled to <filename class="devicefile">ad0s1h</filename>.
The following commands are required:</para>
<screen>&prompt.root; gjournal label ad0s1f ad0s1g
<screen>&prompt.root; <userinput>gjournal label ad0s1f ad0s1g</userinput>
GEOM_JOURNAL: Journal 2948326772: ad0s1f contains data.
GEOM_JOURNAL: Journal 2948326772: ad0s1g contains journal.
&prompt.root; gjournal label ad0s1d ad0s1h
&prompt.root; <userinput>gjournal label ad0s1d ad0s1h</userinput>
GEOM_JOURNAL: Journal 3193218002: ad0s1d contains data.
GEOM_JOURNAL: Journal 3193218002: ad0s1h contains journal.</screen>
@ -381,34 +381,34 @@ GEOM_JOURNAL: Journal 3193218002: ad0s1h contains journal.</screen>
to run the command using the <option>-f</option> flag to force an
overwrite, i.e.:</para>
<screen>&prompt.root; gjournal label -f ad0s1d ad0s1h</screen>
<screen>&prompt.root; <userinput>gjournal label -f ad0s1d ad0s1h</userinput></screen>
<para>Since this is a new installation, it is highly unlikely that
anything will be actually overwritten.</para></note>
<para>At this point, two new devices are created, namely
<filename role="device">ad0s1d.journal</filename> and
<filename role="device">ad0s1f.journal</filename>. These represent
<filename class="devicefile">ad0s1d.journal</filename> and
<filename class="devicefile">ad0s1f.journal</filename>. These represent
the <filename>/var</filename> and <filename>/usr</filename>
partitions we have to mount. Before mounting, we must however set
the journal flag on them and clear the soft updates flag:</para>
the journal flag on them and clear the Soft Updates flag:</para>
<screen>&prompt.root; tunefs -J enable -n disable ad0s1d.journal
<screen>&prompt.root; <userinput>tunefs -J enable -n disable ad0s1d.journal</userinput>
tunefs: gjournal set
tunefs: soft updates cleared
&prompt.root; tunefs -J enable -n disable ad0s1f.journal
&prompt.root; <userinput>tunefs -J enable -n disable ad0s1f.journal</userinput>
tunefs: gjournal set
tunefs: soft updates cleared</screen>
<para>Now, mount the new devices manually at their respective places
(note that we can now use the <quote>async</quote> mount
(note that we can now use the <option>async</option> mount
option):</para>
<screen>&prompt.root; mount -o async /dev/ad0s1d.journal /var
&prompt.root; mount -o async /dev/ad0s1f.journal /usr</screen>
<screen>&prompt.root; <userinput>mount -o async /dev/ad0s1d.journal /var</userinput>
&prompt.root; <userinput>mount -o async /dev/ad0s1f.journal /usr</userinput></screen>
<para>Edit <filename>/etc/fstab</filename> and update the entries for
<filename>/usr</filename> and <filename>/var</filename>:</para>
@ -428,7 +428,7 @@ tunefs: soft updates cleared</screen>
<programlisting>geom_journal_load="YES"</programlisting>
<para>Congratulations! Your system is now set for journaling. You can
either type <quote>exit</quote> to return to multi-user mode, or
either type <userinput>exit</userinput> to return to multi-user mode, or
reboot to test your configuration (recommended). During the boot you
will see messages like the following:</para>
@ -446,42 +446,42 @@ GEOM_JOURNAL: Journal ad0s1f clean.</screen>
<screen>GEOM_JOURNAL: Journal ad0s1d consistent.</screen>
<para>This usually means that &man.gjournal.8; used the information in
the journal provider to return the filesystem to a consistent
the journal provider to return the file system to a consistent
state.</para>
</sect2>
<sect2 id="gjournal-new">
<title>Journaling newly created partitions</title>
<title>Journaling Newly Created Partitions</title>
<para>While the above procedure is necessary for journaling partitions
that already contain data, journaling an empty partition is somewhat
easier, since both the data and the journal provider can be stored
in the same partition. For example, assume a new disk was installed,
and a new partition <filename role="device">/dev/ads1s1d</filename>
and a new partition <filename class="devicefile">/dev/ad1s1d</filename>
was created. Creating the journal would be as simple as:</para>
<screen>&prompt.root; gjournal label ad1s1d</screen>
<screen>&prompt.root; <userinput>gjournal label ad1s1d</userinput></screen>
<para>The journal size will be 1GB by default. You may adjust it by
<para>The journal size will be 1&nbsp;GB by default. You may adjust it by
using the <option>-s</option> option. The value can be given in
bytes, or appended by <literal>K</literal>, <literal>M</literal> or
<literal>G</literal> to denote Kilobytes, Megabytes or Gigabytes
respectively. Note that <command>gjournal</command> will not allow
you to create unsuitably small journal sizes.</para>
<para>For example, to create a 2GB journal, you could use the following
<para>For example, to create a 2&nbsp;GB journal, you could use the following
command:</para>
<screen>&prompt.root; gjournal label -s 2G ad1s1d</screen>
<screen>&prompt.root; <userinput>gjournal label -s 2G ad1s1d</userinput></screen>
<para>You can then create a filesystem on your new partition, and
<para>You can then create a file system on your new partition, and
enable journaling using the <option>-J</option> option:</para>
<screen>&prompt.root; newfs -J /dev/ad1s1d.journal</screen>
<screen>&prompt.root; <userinput>newfs -J /dev/ad1s1d.journal</userinput></screen>
</sect2>
<sect2 id="configure-kernel">
<title>Building journaling into your custom kernel</title>
<title>Building Journaling into Your Custom Kernel</title>
<para>If you do not wish to load <literal>geom_journal</literal> as a
module, you can build its functions right into your kernel. Edit your
@ -503,7 +503,7 @@ options GEOM_JOURNAL # You will have to add this one</programlisting>
</sect1>
<sect1 id="troubleshooting-gjournal">
<title>Troubleshooting journaling</title>
<title>Troubleshooting Journaling</title>
<para>The following section covers frequently asked questions regarding
problems related to journaling.</para>
@ -534,17 +534,17 @@ options GEOM_JOURNAL # You will have to add this one</programlisting>
<para>You either forgot (or misspelled) the entry in
<filename>/boot/loader.conf</filename>, or there are errors in
your <filename>/etc/fstab</filename> file. These are usually easy
to fix. Press enter to get to the default single user shell. Then
to fix. Press <keycap>Enter</keycap> to get to the default single user shell. Then
locate the root of the problem:</para>
<screen>&prompt.root; cat /boot/loader.conf</screen>
<screen>&prompt.root; <userinput>cat /boot/loader.conf</userinput></screen>
<para>If the <literal>geom_journal_load</literal> entry is missing
or misspelled, the journaled devices are never created. Load the
module manually, mount all partitions, and continue with
multi-user boot:</para>
<screen>&prompt.root; gjournal load
<screen>&prompt.root; <userinput>gjournal load</userinput>
GEOM_JOURNAL: Journal 2948326772: ad0s1g contains journal.
GEOM_JOURNAL: Journal 3193218002: ad0s1h contains journal.
@ -553,9 +553,9 @@ GEOM_JOURNAL: Journal ad0s1d clean.
GEOM_JOURNAL: Journal 2948326772: ad0s1f contains data.
GEOM_JOURNAL: Journal ad0s1f clean.
&prompt.root; mount -a
&prompt.root; exit
(boot continues)</screen>
&prompt.root; <userinput>mount -a</userinput>
&prompt.root; <userinput>exit</userinput>
<emphasis>(boot continues)</emphasis></screen>
<para>If, on the other hand, this entry is correct, have a look at
<filename>/etc/fstab</filename>. You will probably find a
@ -566,8 +566,8 @@ GEOM_JOURNAL: Journal ad0s1f clean.
<qandaentry>
<question id="remove-journaling">
<para>Can I remove journaling and return to my standard filesystem
with soft updates?</para>
<para>Can I remove journaling and return to my standard file system
with Soft Updates?</para>
</question>
<answer>
@ -575,47 +575,47 @@ GEOM_JOURNAL: Journal ad0s1f clean.
changes. The partitions you created for the journal providers
can then be used for other purposes, if you so wish.<para>
<para>Login as root and switch to single user mode:</para>
<para>Login as <username>root</username> and switch to single user mode:</para>
<screen>&prompt.root; shutdown now</screen>
<screen>&prompt.root; <userinput>shutdown now</userinput></screen>
<para>Synchronize the journals:</para>
<screen>&prompt.root; gjournal sync</screen>
<screen>&prompt.root; <userinput>gjournal sync</userinput></screen>
<para>Unmount the journaled partitions:</para>
<screen>&prompt.root; umount /usr /var</screen>
<screen>&prompt.root; <userinput>umount /usr /var</userinput></screen>
<para>Stop the journaling providers:</para>
<screen>&prompt.root; gjournal stop ad0s1d.journal
&prompt.root; gjournal stop ad0s1f.journal</screen>
<screen>&prompt.root; <userinput>gjournal stop ad0s1d.journal</userinput>
&prompt.root; <userinput>gjournal stop ad0s1f.journal</userinput></screen>
<para>Clear journaling metadata from all the devices used:</para>
<screen>&prompt.root; gjournal clear ad0s1d
&prompt.root; gjournal clear ad0s1f
&prompt.root; gjournal clear ad0s1g
&prompt.root; gjournal clear ad0s1h</screen>
<screen>&prompt.root; <userinput>gjournal clear ad0s1d</userinput>
&prompt.root; <userinput>gjournal clear ad0s1f</userinput>
&prompt.root; <userinput>gjournal clear ad0s1g</userinput>
&prompt.root; <userinput>gjournal clear ad0s1h</userinput></screen>
<para>Clear the filesystem journaling flag, and restore the soft
updates flag:</para>
<para>Clear the file system journaling flag, and restore the Soft
Updates flag:</para>
<screen>&prompt.root; tunefs -J disable -n enable ad0s1d
<screen>&prompt.root; <userinput>tunefs -J disable -n enable ad0s1d</userinput>
tunefs: gjournal cleared
tunefs: soft updates set
&prompt.root; tunefs-J disable -n enable ad0s1f
&prompt.root; <userinput>tunefs -J disable -n enable ad0s1f</userinput>
tunefs: gjournal cleared
tunefs: soft updates set</screen>
<para>Remount the old devices by hand:</para>
<screen>&prompt.root; mount -o rw /dev/ad0s1d /var
&prompt.root; mount -o rw /dev/ad0s1f /usr</screen>
<screen>&prompt.root; <userinput>mount -o rw /dev/ad0s1d /var</userinput>
&prompt.root; <userinput>mount -o rw /dev/ad0s1f /usr</userinput></screen>
<para>Edit <filename>/etc/fstab</filename> and restore it to its
original state:</para>
@ -633,7 +633,7 @@ tunefs: soft updates set</screen>
</sect1>
<sect1 id="further-reading">
<title>Further reading</title>
<title>Further Reading</title>
<para>Journaling is a fairly new feature of &os;, and as such, it is
not very well documented yet. You may however find the following
@ -652,7 +652,7 @@ tunefs: soft updates set</screen>
<listitem>
<para><ulink url="http://lists.freebsd.org/pipermail/freebsd-questions/2008-April/173501.html">This post</ulink>
in &a.questions.name; by Ivan Voras.</para>
in &a.questions.name; by &a.ivoras;.</para>
</listitem>
<listitem>