# 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: 2026-02-22 15:58+0000\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: Title = #: documentation/content/en/articles/gjournal-desktop/_index.adoc:1 #: documentation/content/en/articles/gjournal-desktop/_index.adoc:13 #, no-wrap msgid "Implementing UFS Journaling on a Desktop PC" msgstr "" #. type: Plain text #: documentation/content/en/articles/gjournal-desktop/_index.adoc:46 msgid "Abstract" msgstr "" #. type: Plain text #: documentation/content/en/articles/gjournal-desktop/_index.adoc:52 msgid "" "A journaling file system uses a log to record file system updates and " "preserves consistency in the event of a system crash or power failure. " "Although unsaved changes to files may still be lost, journaling greatly " "reduces the risk of file system corruption caused by an unclean shutdown and " "significantly shortens recovery time. While the UFS file system employed by " "FreeBSD does not implement journaling as an inherent on-disk feature, " "FreeBSD provides journaling support through file system-level mechanisms " "(Soft Updates with journaling) as well as through the GEOM framework " "(`gjournal`). This article describes the available UFS journaling " "mechanisms and explains their appropriate use on modern FreeBSD systems. " "_The content has been reviewed and updated for FreeBSD versions 13 through " "15_." msgstr "" #. type: Plain text #: documentation/content/en/articles/gjournal-desktop/_index.adoc:54 msgid "'''" msgstr "" #. type: Title == #: documentation/content/en/articles/gjournal-desktop/_index.adoc:58 #, no-wrap msgid "Introduction" msgstr "" #. type: Plain text #: documentation/content/en/articles/gjournal-desktop/_index.adoc:63 msgid "" "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 " "and leave a file system in an inconsistent state. Traditionally, this " "required running `fsck`, which on large file systems could take a " "significant amount of time. On rare occasions, file system corruption " "reaches a point where user intervention is required and data may be lost." msgstr "" #. type: Plain text #: documentation/content/en/articles/gjournal-desktop/_index.adoc:65 msgid "" "FreeBSD provides two distinct journaling mechanisms for the UFS file system:" msgstr "" #. type: Table #: documentation/content/en/articles/gjournal-desktop/_index.adoc:67 #: documentation/content/en/articles/gjournal-desktop/_index.adoc:155 #: documentation/content/en/articles/gjournal-desktop/_index.adoc:158 #: documentation/content/en/articles/gjournal-desktop/_index.adoc:161 #, no-wrap msgid "Soft Updates with journaling" msgstr "" #. type: Plain text #: documentation/content/en/articles/gjournal-desktop/_index.adoc:68 msgid "GEOM journaling (`gjournal`)" msgstr "" #. type: Plain text #: documentation/content/en/articles/gjournal-desktop/_index.adoc:70 msgid "" "These mechanisms operate at different layers of the system and have " "different performance and semantic characteristics." msgstr "" #. type: delimited block = 4 #: documentation/content/en/articles/gjournal-desktop/_index.adoc:74 msgid "" "For most modern FreeBSD systems, including desktops and general-purpose " "servers, *Soft Updates with journaling* is the recommended solution." msgstr "" #. type: delimited block = 4 #: documentation/content/en/articles/gjournal-desktop/_index.adoc:76 msgid "" "GEOM journaling is a legacy and specialized mechanism and should only be " "used when its specific semantics are required." msgstr "" #. type: Plain text #: documentation/content/en/articles/gjournal-desktop/_index.adoc:79 msgid "" "This article explains both mechanisms, their differences, and correct modern " "usage." msgstr "" #. type: Plain text #: documentation/content/en/articles/gjournal-desktop/_index.adoc:81 msgid "Read this chapter to learn:" msgstr "" #. type: Plain text #: documentation/content/en/articles/gjournal-desktop/_index.adoc:83 msgid "" "The journaling mechanisms available for the UFS file system in FreeBSD and " "how they differ." msgstr "" #. type: Plain text #: documentation/content/en/articles/gjournal-desktop/_index.adoc:84 msgid "" "When to use file system-level Soft Updates journaling and when GEOM " "journaling may be appropriate." msgstr "" #. type: Plain text #: documentation/content/en/articles/gjournal-desktop/_index.adoc:85 msgid "" "How to enable or disable Soft Updates journaling on existing UFS file " "systems." msgstr "" #. type: Plain text #: documentation/content/en/articles/gjournal-desktop/_index.adoc:86 msgid "" "How to configure GEOM journaling on new or existing partitions, including " "required kernel support and journal sizing considerations." msgstr "" #. type: Plain text #: documentation/content/en/articles/gjournal-desktop/_index.adoc:87 msgid "" "What configuration changes are required to mount journaled file systems and " "how journaling affects system behavior." msgstr "" #. type: Plain text #: documentation/content/en/articles/gjournal-desktop/_index.adoc:88 msgid "How to diagnose and resolve common issues related to UFS journaling." msgstr "" #. type: Plain text #: documentation/content/en/articles/gjournal-desktop/_index.adoc:90 msgid "Before reading this article:" msgstr "" #. type: Plain text #: documentation/content/en/articles/gjournal-desktop/_index.adoc:92 msgid "Understand basic UNIX(R) and FreeBSD concepts." msgstr "" #. type: Plain text #: documentation/content/en/articles/gjournal-desktop/_index.adoc:93 msgid "Be familiar with the FreeBSD installation process using bsdinstall." msgstr "" #. type: Plain text #: documentation/content/en/articles/gjournal-desktop/_index.adoc:94 msgid "" "Have basic knowledge of disk partitioning and file systems, including tools " "such as gpart(8), newfs(8), and mount(8)." msgstr "" #. type: delimited block = 4 #: documentation/content/en/articles/gjournal-desktop/_index.adoc:99 msgid "" "Some of the procedures described in this article involve modifying file " "system or disk configuration and may require unmounting file systems or " "changing on-disk metadata. Before making such changes on a system in " "production, ensure that reliable _backups_ of all important data are " "available." msgstr "" #. type: delimited block = 4 #: documentation/content/en/articles/gjournal-desktop/_index.adoc:102 msgid "" "Enabling file system-level Soft Updates journaling is generally safe and " "does not require disk repartitioning. However, configuring GEOM journaling " "involves low-level disk operations and should be attempted only by " "experienced administrators who fully understand the implications." msgstr "" #. type: Title == #: documentation/content/en/articles/gjournal-desktop/_index.adoc:105 #, no-wrap msgid "Understanding Journaling in FreeBSD" msgstr "" #. type: Title === #: documentation/content/en/articles/gjournal-desktop/_index.adoc:107 #, no-wrap msgid "Soft Updates with Journaling (Recommended)" msgstr "" #. type: Plain text #: documentation/content/en/articles/gjournal-desktop/_index.adoc:109 msgid "" "Soft Updates is the default UFS consistency mechanism in FreeBSD. When " "combined with journaling, it provides *metadata journaling* within the file " "system itself." msgstr "" #. type: Plain text #: documentation/content/en/articles/gjournal-desktop/_index.adoc:111 msgid "Advantages of Soft Updates with journaling include:" msgstr "" #. type: Plain text #: documentation/content/en/articles/gjournal-desktop/_index.adoc:113 msgid "Very fast crash recovery (typically seconds)" msgstr "" #. type: Plain text #: documentation/content/en/articles/gjournal-desktop/_index.adoc:114 msgid "Normal `sync(2)` and `fsync(2)` semantics" msgstr "" #. type: Plain text #: documentation/content/en/articles/gjournal-desktop/_index.adoc:115 msgid "No additional partitions or GEOM layers" msgstr "" #. type: Plain text #: documentation/content/en/articles/gjournal-desktop/_index.adoc:116 msgid "Simple configuration and maintenance" msgstr "" #. type: Plain text #: documentation/content/en/articles/gjournal-desktop/_index.adoc:118 msgid "From `tunefs(8)`:" msgstr "" #. type: delimited block _ 4 #: documentation/content/en/articles/gjournal-desktop/_index.adoc:121 msgid "" "Enabling journaling reduces the time spent by fsck_ffs(8) cleaning up a file " "system after a crash to a few seconds from minutes to hours." msgstr "" #. type: Plain text #: documentation/content/en/articles/gjournal-desktop/_index.adoc:124 msgid "" "This mechanism is suitable for nearly all UFS-based systems and is the " "default recommendation." msgstr "" #. type: Title === #: documentation/content/en/articles/gjournal-desktop/_index.adoc:125 #, no-wrap msgid "GEOM Journaling (`gjournal`)" msgstr "" #. type: Plain text #: documentation/content/en/articles/gjournal-desktop/_index.adoc:128 msgid "" "GEOM journaling operates at the block level, below the file system. It " "journals all block writes, including *both metadata and file data*." msgstr "" #. type: Plain text #: documentation/content/en/articles/gjournal-desktop/_index.adoc:130 msgid "Key characteristics of GEOM journaling:" msgstr "" #. type: Plain text #: documentation/content/en/articles/gjournal-desktop/_index.adoc:132 msgid "Implemented as a GEOM class (`geom_journal`)" msgstr "" #. type: Plain text #: documentation/content/en/articles/gjournal-desktop/_index.adoc:133 msgid "Journals all block I/O, not just metadata" msgstr "" #. type: Plain text #: documentation/content/en/articles/gjournal-desktop/_index.adoc:134 msgid "Requires explicit cooperation from UFS using the `-J` flag" msgstr "" #. type: Plain text #: documentation/content/en/articles/gjournal-desktop/_index.adoc:135 msgid "Disables Soft Updates" msgstr "" #. type: Plain text #: documentation/content/en/articles/gjournal-desktop/_index.adoc:136 msgid "Alters the semantics of `sync(2)` and `fsync(2)`" msgstr "" #. type: delimited block = 4 #: documentation/content/en/articles/gjournal-desktop/_index.adoc:140 msgid "" "On GEOM-journaled file systems, `sync(2)` and `fsync(2)` do not guarantee " "that data has been committed to stable storage. To ensure persistence, " "`gjournal sync` must be used." msgstr "" #. type: Plain text #: documentation/content/en/articles/gjournal-desktop/_index.adoc:143 msgid "" "Because of these differences, GEOM journaling is not recommended for general-" "purpose desktop or server use." msgstr "" #. type: Title == #: documentation/content/en/articles/gjournal-desktop/_index.adoc:144 #, no-wrap msgid "Choosing the Appropriate Journaling Method" msgstr "" #. type: Plain text #: documentation/content/en/articles/gjournal-desktop/_index.adoc:147 msgid "The following table summarizes recommended usage:" msgstr "" #. type: Table #: documentation/content/en/articles/gjournal-desktop/_index.adoc:150 #, no-wrap msgid "Use case" msgstr "" #. type: Table #: documentation/content/en/articles/gjournal-desktop/_index.adoc:152 #, no-wrap msgid "Recommended mechanism" msgstr "" #. type: Table #: documentation/content/en/articles/gjournal-desktop/_index.adoc:153 #, no-wrap msgid "Desktop or laptop system" msgstr "" #. type: Table #: documentation/content/en/articles/gjournal-desktop/_index.adoc:156 #, no-wrap msgid "General-purpose server" msgstr "" #. type: Table #: documentation/content/en/articles/gjournal-desktop/_index.adoc:159 #, no-wrap msgid "Legacy UFS systems" msgstr "" #. type: Table #: documentation/content/en/articles/gjournal-desktop/_index.adoc:162 #, no-wrap msgid "File system-independent journaling requirements" msgstr "" #. type: Table #: documentation/content/en/articles/gjournal-desktop/_index.adoc:164 #: documentation/content/en/articles/gjournal-desktop/_index.adoc:166 #, no-wrap msgid "GEOM journaling" msgstr "" #. type: Table #: documentation/content/en/articles/gjournal-desktop/_index.adoc:165 #, no-wrap msgid "Specialized block-level logging needs" msgstr "" #. type: Title == #: documentation/content/en/articles/gjournal-desktop/_index.adoc:168 #, no-wrap msgid "Using Soft Updates with Journaling" msgstr "" #. type: Plain text #: documentation/content/en/articles/gjournal-desktop/_index.adoc:173 msgid "" "Soft Updates with journaling provide file system-level journaling for UFS. " "This mechanism preserves file system consistency while retaining the " "allocation and ordering optimizations of Soft Updates. Unlike GEOM " "journaling, no separate journal device or partition is required." msgstr "" #. type: Title === #: documentation/content/en/articles/gjournal-desktop/_index.adoc:174 #: documentation/content/en/articles/gjournal-desktop/_index.adoc:254 #, no-wrap msgid "Overview" msgstr "" #. type: Plain text #: documentation/content/en/articles/gjournal-desktop/_index.adoc:179 msgid "" "Soft Updates with journaling record file system metadata changes in a " "journal stored inside the file system itself, implemented as a hidden file " "named [.filename]#.sujournal# in the root of the file system. In the event " "of a crash or power failure, pending metadata operations are replayed from " "the journal, allowing the file system to be mounted quickly without a full " "consistency check." msgstr "" #. type: Plain text #: documentation/content/en/articles/gjournal-desktop/_index.adoc:182 msgid "" "This form of journaling applies to file system metadata only. File data " "integrity remains the responsibility of applications." msgstr "" #. type: Title === #: documentation/content/en/articles/gjournal-desktop/_index.adoc:183 #, no-wrap msgid "Enabling Journaling on an Existing File System" msgstr "" #. type: Plain text #: documentation/content/en/articles/gjournal-desktop/_index.adoc:186 msgid "" "The file system must be unmounted or mounted read-only before changing " "journaling settings." msgstr "" #. type: delimited block - 4 #: documentation/content/en/articles/gjournal-desktop/_index.adoc:192 #, no-wrap msgid "" "# umount /usr\n" "# tunefs -n enable -j enable /dev/ada0p2\n" "# mount /usr\n" msgstr "" #. type: Plain text #: documentation/content/en/articles/gjournal-desktop/_index.adoc:195 msgid "" "No additional configuration is required. Standard mount options may be used." msgstr "" #. type: Title === #: documentation/content/en/articles/gjournal-desktop/_index.adoc:196 #, no-wrap msgid "Journal Storage and Size" msgstr "" #. type: Plain text #: documentation/content/en/articles/gjournal-desktop/_index.adoc:200 msgid "" "A default journal size is selected automatically when journaling is " "enabled. In most cases, the default size is sufficient and does not require " "adjustment." msgstr "" #. type: Plain text #: documentation/content/en/articles/gjournal-desktop/_index.adoc:202 msgid "" "If necessary, the journal size in bytes can be specified explicitly using " "the `-S` option to `tunefs(8)`:" msgstr "" #. type: delimited block - 4 #: documentation/content/en/articles/gjournal-desktop/_index.adoc:206 #, no-wrap msgid "# tunefs -S 64000000 /dev/ada0p2\n" msgstr "" #. type: Plain text #: documentation/content/en/articles/gjournal-desktop/_index.adoc:209 msgid "" "Journal size tuning is rarely required and should be considered only for " "file systems with unusually high metadata update rates." msgstr "" #. type: Title === #: documentation/content/en/articles/gjournal-desktop/_index.adoc:210 #, no-wrap msgid "Checking Soft Updates with Journaling" msgstr "" #. type: Plain text #: documentation/content/en/articles/gjournal-desktop/_index.adoc:213 msgid "" "The journaling status of a UFS file system using Soft Updates can be " "verified with `tunefs(8)` or `dumpfs(8)`." msgstr "" #. type: Plain text #: documentation/content/en/articles/gjournal-desktop/_index.adoc:215 msgid "To display the current file system settings, run:" msgstr "" #. type: delimited block - 4 #: documentation/content/en/articles/gjournal-desktop/_index.adoc:221 #, no-wrap msgid "" "# tunefs -p /dev/ada0p2 | grep -i journal\n" "tunefs: soft updates journaling: (-j) enabled\n" "tunefs: gjournal: (-J) disabled\n" msgstr "" #. type: Plain text #: documentation/content/en/articles/gjournal-desktop/_index.adoc:224 msgid "Look for the following indicators in the output:" msgstr "" #. type: Plain text #: documentation/content/en/articles/gjournal-desktop/_index.adoc:226 msgid "Soft Updates enabled" msgstr "" #. type: Plain text #: documentation/content/en/articles/gjournal-desktop/_index.adoc:227 msgid "Soft Updates journaling enabled" msgstr "" #. type: Plain text #: documentation/content/en/articles/gjournal-desktop/_index.adoc:229 #: documentation/content/en/articles/gjournal-desktop/_index.adoc:644 msgid "" "Alternatively, `dumpfs(8)` can be used to inspect the file system superblock:" msgstr "" #. type: delimited block - 4 #: documentation/content/en/articles/gjournal-desktop/_index.adoc:234 #, no-wrap msgid "" "# dumpfs /dev/ada0p2 | grep -i journal\n" "flags soft-updates+journal\n" msgstr "" #. type: Plain text #: documentation/content/en/articles/gjournal-desktop/_index.adoc:237 msgid "These commands are read-only and do not modify file system state." msgstr "" #. type: Title === #: documentation/content/en/articles/gjournal-desktop/_index.adoc:238 #, no-wrap msgid "File System Checks and Maintenance" msgstr "" #. type: Plain text #: documentation/content/en/articles/gjournal-desktop/_index.adoc:241 msgid "" "Although journaling dramatically reduces recovery time after a crash, it " "does not eliminate the need for periodic full file system checks." msgstr "" #. type: Plain text #: documentation/content/en/articles/gjournal-desktop/_index.adoc:243 msgid "Journaling guarantees consistency, not correctness" msgstr "" #. type: Plain text #: documentation/content/en/articles/gjournal-desktop/_index.adoc:244 msgid "Media errors are not repaired by journaling" msgstr "" #. type: Plain text #: documentation/content/en/articles/gjournal-desktop/_index.adoc:245 msgid "Periodic `fsck` should still be scheduled" msgstr "" #. type: Plain text #: documentation/content/en/articles/gjournal-desktop/_index.adoc:246 msgid "Background `fsck` can be used on live file systems" msgstr "" #. type: Title == #: documentation/content/en/articles/gjournal-desktop/_index.adoc:247 #, no-wrap msgid "Using GEOM Journaling (Advanced)" msgstr "" #. type: delimited block = 4 #: documentation/content/en/articles/gjournal-desktop/_index.adoc:252 msgid "" "This section is intended for advanced users who understand the implications " "of block-level journaling and altered sync semantics." msgstr "" #. type: Plain text #: documentation/content/en/articles/gjournal-desktop/_index.adoc:259 msgid "" "This functionality is provided by loading the [.filename]#geom_journal.ko# " "module into the kernel (or building it into a custom kernel) and using the " "`gjournal` command to configure the file systems. In general, you would " "like to journal large file systems, like [.filename]#/usr#. You will need " "however (see the following section) to reserve some free disk space." msgstr "" #. type: Plain text #: documentation/content/en/articles/gjournal-desktop/_index.adoc:262 msgid "" "GEOM journaling is implemented by the `geom_journal` kernel module and is " "configured using the `gjournal(8)` utility. It provides block-level " "journaling below the file system layer and requires explicit cooperation " "from UFS." msgstr "" #. type: Plain text #: documentation/content/en/articles/gjournal-desktop/_index.adoc:265 msgid "" "When GEOM journaling is used, some disk space is needed to keep the journal " "itself. The provider that contains the file system data is referred to as " "the _data provider_, while the provider that stores the journal is referred " "to as the _journal provider_." msgstr "" #. type: Plain text #: documentation/content/en/articles/gjournal-desktop/_index.adoc:270 msgid "" "When journaling an existing (non-empty) file system, the data and journal " "providers must be separate. When journaling a new, empty file system, a " "single provider may be used to store both data and journal information. In " "both cases, `gjournal(8)` combines the data and journal providers to create " "a new journaled provider, which is then mounted by the file system. For " "example:" msgstr "" #. type: Plain text #: documentation/content/en/articles/gjournal-desktop/_index.adoc:272 msgid "" "The `/usr` file system resides on `/dev/ada0p2` and already contains data." msgstr "" #. type: Plain text #: documentation/content/en/articles/gjournal-desktop/_index.adoc:273 msgid "" "Free disk space has been allocated in a separate partition, `/dev/ada0p4`, " "to hold the journal." msgstr "" #. type: Plain text #: documentation/content/en/articles/gjournal-desktop/_index.adoc:275 msgid "" "After configuring GEOM journaling, a new provider `/dev/ada0p2.journal` is " "created. This journaled provider combines `/dev/ada0p2` as the data " "provider and `/dev/ada0p4` as the journal provider and is used for all " "subsequent file system operations." msgstr "" #. type: Plain text #: documentation/content/en/articles/gjournal-desktop/_index.adoc:278 msgid "" "The amount of disk space required for the journal depends primarily on the " "write workload of the file system rather than on the size of the data " "provider. Systems with sustained or bursty write activity require larger " "journals to avoid excessive journal switching or write throttling." msgstr "" #. type: Plain text #: documentation/content/en/articles/gjournal-desktop/_index.adoc:280 msgid "From the man page `gjournal(8)`:" msgstr "" #. type: Plain text #: documentation/content/en/articles/gjournal-desktop/_index.adoc:282 msgid "The default journal size is 1 GB." msgstr "" #. type: Plain text #: documentation/content/en/articles/gjournal-desktop/_index.adoc:283 msgid "" "The recommended minimum journal size is twice the amount of installed " "physical memory." msgstr "" #. type: Plain text #: documentation/content/en/articles/gjournal-desktop/_index.adoc:284 msgid "" "The journal size should be chosen based on expected write load, not file " "system size." msgstr "" #. type: Plain text #: documentation/content/en/articles/gjournal-desktop/_index.adoc:286 msgid "" "An undersized journal may result in degraded performance or forced journal " "switches under heavy write load." msgstr "" #. type: Plain text #: documentation/content/en/articles/gjournal-desktop/_index.adoc:288 msgid "" "For more information about journaling, please read the manual page of " "man:gjournal[8]." msgstr "" #. type: Title === #: documentation/content/en/articles/gjournal-desktop/_index.adoc:290 #, no-wrap msgid "Steps During the Installation of FreeBSD" msgstr "" #. type: Plain text #: documentation/content/en/articles/gjournal-desktop/_index.adoc:294 msgid "" "This section describes optional installation-time preparation for systems " "that are configured to use GEOM journaling. The goal is to reserve disk " "space for journal providers that will later be associated with the `/usr` " "and `/var` file systems." msgstr "" #. type: Title ==== #: documentation/content/en/articles/gjournal-desktop/_index.adoc:295 #, no-wrap msgid "Reserving Space for Journaling" msgstr "" #. type: Plain text #: documentation/content/en/articles/gjournal-desktop/_index.adoc:299 msgid "" "On a typical system with a single disk, the operating system, installed " "software, and user data all reside on the same device. The default " "automatic partitioning performed by the FreeBSD installer allocates most " "available space to `/usr`, with smaller partitions for `/var` and other " "mount points." msgstr "" #. type: Plain text #: documentation/content/en/articles/gjournal-desktop/_index.adoc:303 msgid "" "By default, the installer allocates all available disk space to file systems " "and does not leave unused space. When GEOM journaling is planned for " "existing (non-empty) file systems, additional disk space must be reserved to " "hold journal providers. Each file system that will be journaled requires " "its own journal provider." msgstr "" #. type: Plain text #: documentation/content/en/articles/gjournal-desktop/_index.adoc:305 msgid "" "Since `/usr` typically occupies the largest portion of the disk, it is " "usually the most practical partition to reduce slightly in order to make " "room for journal providers." msgstr "" #. type: Plain text #: documentation/content/en/articles/gjournal-desktop/_index.adoc:307 msgid "In our example GEOM journaling is planned for both `/usr` and `/var`." msgstr "" #. type: Title ==== #: documentation/content/en/articles/gjournal-desktop/_index.adoc:308 #, no-wrap msgid "Partitioning Strategy" msgstr "" #. type: Plain text #: documentation/content/en/articles/gjournal-desktop/_index.adoc:312 msgid "" "During installation, use the manual partitioning mode provided by the " "installer. Create any supported file system type for `/`, and create " "standard UFS partitions for `/usr` and `/var`, but reduce the size of `/usr` " "to leave sufficient unallocated space at the end of the disk." msgstr "" #. type: Plain text #: documentation/content/en/articles/gjournal-desktop/_index.adoc:314 msgid "" "From the remaining unallocated space, create two additional partitions that " "will be used exclusively as journal providers:" msgstr "" #. type: Plain text #: documentation/content/en/articles/gjournal-desktop/_index.adoc:316 msgid "One partition for the `/usr` journal" msgstr "" #. type: Plain text #: documentation/content/en/articles/gjournal-desktop/_index.adoc:317 msgid "One partition for the `/var` journal" msgstr "" #. type: Plain text #: documentation/content/en/articles/gjournal-desktop/_index.adoc:320 msgid "" "These partitions must not be assigned mount points and must not be used for " "swap. They will remain unused until they are explicitly associated with " "their corresponding data providers using `gjournal(8)` after installation." msgstr "" #. type: Plain text #: documentation/content/en/articles/gjournal-desktop/_index.adoc:322 msgid "A typical layout may look like the following:" msgstr "" #. type: Block title #: documentation/content/en/articles/gjournal-desktop/_index.adoc:323 #, no-wrap msgid "Partitions Reserved for GEOM Journaling" msgstr "" #. type: Table #: documentation/content/en/articles/gjournal-desktop/_index.adoc:327 #, no-wrap msgid "Provider" msgstr "" #. type: Table #: documentation/content/en/articles/gjournal-desktop/_index.adoc:328 #, no-wrap msgid "Intended Use" msgstr "" #. type: Table #: documentation/content/en/articles/gjournal-desktop/_index.adoc:330 #, no-wrap msgid "Notes" msgstr "" #. type: Table #: documentation/content/en/articles/gjournal-desktop/_index.adoc:331 #, no-wrap msgid "/dev/ada0p2" msgstr "" #. type: Table #: documentation/content/en/articles/gjournal-desktop/_index.adoc:332 #, no-wrap msgid "/var" msgstr "" #. type: Table #: documentation/content/en/articles/gjournal-desktop/_index.adoc:334 #: documentation/content/en/articles/gjournal-desktop/_index.adoc:338 #, no-wrap msgid "UFS file system (data provider)" msgstr "" #. type: Table #: documentation/content/en/articles/gjournal-desktop/_index.adoc:335 #, no-wrap msgid "/dev/ada0p3" msgstr "" #. type: Table #: documentation/content/en/articles/gjournal-desktop/_index.adoc:336 #, no-wrap msgid "/usr" msgstr "" #. type: Table #: documentation/content/en/articles/gjournal-desktop/_index.adoc:339 #, no-wrap msgid "/dev/ada0p4" msgstr "" #. type: Table #: documentation/content/en/articles/gjournal-desktop/_index.adoc:340 #, no-wrap msgid "Journal for /var" msgstr "" #. type: Table #: documentation/content/en/articles/gjournal-desktop/_index.adoc:342 #: documentation/content/en/articles/gjournal-desktop/_index.adoc:345 #, no-wrap msgid "Unformatted, unused partition" msgstr "" #. type: Table #: documentation/content/en/articles/gjournal-desktop/_index.adoc:343 #, no-wrap msgid "/dev/ada0p5" msgstr "" #. type: Table #: documentation/content/en/articles/gjournal-desktop/_index.adoc:344 #, no-wrap msgid "Journal for /usr" msgstr "" #. type: Plain text #: documentation/content/en/articles/gjournal-desktop/_index.adoc:349 msgid "" "The exact device names will vary depending on the disk layout and " "partitioning scheme. It is strongly recommended to record the provider " "names during installation, as they will be required during journal " "configuration." msgstr "" #. type: Title ==== #: documentation/content/en/articles/gjournal-desktop/_index.adoc:350 #, no-wrap msgid "Journal Size Considerations" msgstr "" #. type: Plain text #: documentation/content/en/articles/gjournal-desktop/_index.adoc:355 msgid "" "Journal size depends on the expected write workload rather than on the size " "of the file system. For general-purpose systems, journal sizes of 1–2 GB " "are commonly sufficient. Systems with sustained or bursty write activity " "may require larger journals." msgstr "" #. type: Plain text #: documentation/content/en/articles/gjournal-desktop/_index.adoc:357 msgid "" "Allocate journal space conservatively during installation, as resizing " "partitions later may require additional downtime." msgstr "" #. type: Title ==== #: documentation/content/en/articles/gjournal-desktop/_index.adoc:358 #, no-wrap msgid "Completing the Installation" msgstr "" #. type: Plain text #: documentation/content/en/articles/gjournal-desktop/_index.adoc:362 msgid "" "After reserving the required partitions, complete the FreeBSD installation " "normally. It is recommended to postpone the installation of third-party " "software and additional system configuration until GEOM journaling has been " "fully configured." msgstr "" #. type: Plain text #: documentation/content/en/articles/gjournal-desktop/_index.adoc:365 msgid "" "At this stage, the system will boot using the standard UFS file systems. " "The reserved journal partitions will remain unused until journaling is " "explicitly enabled." msgstr "" #. type: Title ==== #: documentation/content/en/articles/gjournal-desktop/_index.adoc:367 #, no-wrap msgid "First Boot After Installation" msgstr "" #. type: Plain text #: documentation/content/en/articles/gjournal-desktop/_index.adoc:371 msgid "" "After the first successful boot, no immediate configuration changes are " "required. The system should be verified to boot and operate normally before " "proceeding." msgstr "" #. type: Plain text #: documentation/content/en/articles/gjournal-desktop/_index.adoc:373 msgid "" "Once the base system is confirmed to be functional, the next steps involve:" msgstr "" #. type: Plain text #: documentation/content/en/articles/gjournal-desktop/_index.adoc:375 msgid "Loading or enabling GEOM journaling support" msgstr "" #. type: Plain text #: documentation/content/en/articles/gjournal-desktop/_index.adoc:376 msgid "Associating journal providers with their corresponding data providers" msgstr "" #. type: Plain text #: documentation/content/en/articles/gjournal-desktop/_index.adoc:377 msgid "Updating `/etc/fstab` to mount the journaled devices" msgstr "" #. type: Plain text #: documentation/content/en/articles/gjournal-desktop/_index.adoc:379 msgid "These steps are described in the following section." msgstr "" #. type: Title === #: documentation/content/en/articles/gjournal-desktop/_index.adoc:381 #, no-wrap msgid "Setting Up Journaling" msgstr "" #. type: Title ==== #: documentation/content/en/articles/gjournal-desktop/_index.adoc:384 #, no-wrap msgid "Enabling GEOM Journaling on Existing File Systems" msgstr "" #. type: Plain text #: documentation/content/en/articles/gjournal-desktop/_index.adoc:387 msgid "" "This section describes how to enable GEOM journaling on the `/usr` and `/" "var` file systems using the partitions prepared during installation." msgstr "" #. type: Plain text #: documentation/content/en/articles/gjournal-desktop/_index.adoc:390 msgid "" "Once the required journal providers have been reserved, GEOM journaling can " "be configured. Because the file systems to be journaled must not be " "mounted, the system must be switched to single-user mode." msgstr "" #. type: Plain text #: documentation/content/en/articles/gjournal-desktop/_index.adoc:392 msgid "Log in as `root` and enter:" msgstr "" #. type: delimited block . 4 #: documentation/content/en/articles/gjournal-desktop/_index.adoc:396 #: documentation/content/en/articles/gjournal-desktop/_index.adoc:719 #, no-wrap msgid "# shutdown now\n" msgstr "" #. type: Plain text #: documentation/content/en/articles/gjournal-desktop/_index.adoc:401 msgid "" "Press kbd:[Enter] to obtain a root shell. Unmount the file systems that " "will be journaled. In this example, `/usr` and `/var`:" msgstr "" #. type: delimited block . 4 #: documentation/content/en/articles/gjournal-desktop/_index.adoc:405 #: documentation/content/en/articles/gjournal-desktop/_index.adoc:726 #, no-wrap msgid "# umount /usr /var\n" msgstr "" #. type: Plain text #: documentation/content/en/articles/gjournal-desktop/_index.adoc:408 msgid "Load the GEOM journaling kernel module:" msgstr "" #. type: delimited block . 4 #: documentation/content/en/articles/gjournal-desktop/_index.adoc:412 #: documentation/content/en/articles/gjournal-desktop/_index.adoc:691 #, no-wrap msgid "# gjournal load\n" msgstr "" #. type: Plain text #: documentation/content/en/articles/gjournal-desktop/_index.adoc:416 msgid "" "Next, associate each data provider with its corresponding journal provider. " "Use your notes to determine which partition will be used for each journal." msgstr "" #. type: Plain text #: documentation/content/en/articles/gjournal-desktop/_index.adoc:418 msgid "In this example:" msgstr "" #. type: Plain text #: documentation/content/en/articles/gjournal-desktop/_index.adoc:420 msgid "" "`/usr` resides on `/dev/ada0p3` and its journal provider is `/dev/ada0p5`" msgstr "" #. type: Plain text #: documentation/content/en/articles/gjournal-desktop/_index.adoc:421 msgid "" "`/var` resides on `/dev/ada0p2` and its journal provider is `/dev/ada0p4`" msgstr "" #. type: Plain text #: documentation/content/en/articles/gjournal-desktop/_index.adoc:423 msgid "Create the journaled providers using `gjournal(8)`:" msgstr "" #. type: delimited block . 4 #: documentation/content/en/articles/gjournal-desktop/_index.adoc:430 #, no-wrap msgid "" "# gjournal label ada0p3 ada0p5\n" "GEOM_JOURNAL: Journal 2948326772: ada0p5 contains journal.\n" "GEOM_JOURNAL: Journal 2948326772: ada0p3 contains data.\n" "GEOM_JOURNAL: Journal ada0p3 clean.\n" msgstr "" #. type: delimited block . 4 #: documentation/content/en/articles/gjournal-desktop/_index.adoc:435 #, no-wrap msgid "" "# gjournal label ada0p2 ada0p4\n" "GEOM_JOURNAL: Journal 3193218002: ada0p4 contains journal.\n" "GEOM_JOURNAL: Journal 3193218002: ada0p2 contains data.\n" "GEOM_JOURNAL: Journal ada0p2 clean.\n" msgstr "" #. type: delimited block = 4 #: documentation/content/en/articles/gjournal-desktop/_index.adoc:442 msgid "" "If `gjournal` reports that the last sector of a provider is in use, the " "command will fail. On freshly created or unused partitions, it is safe to " "retry the operation with the `-f` flag to force initialization:" msgstr "" #. type: delimited block . 4 #: documentation/content/en/articles/gjournal-desktop/_index.adoc:446 #, no-wrap msgid "# gjournal label -f /dev/ada0p2 /dev/ada0p4\n" msgstr "" #. type: delimited block = 4 #: documentation/content/en/articles/gjournal-desktop/_index.adoc:450 msgid "After labeling, two new journaled providers are created:" msgstr "" #. type: delimited block = 4 #: documentation/content/en/articles/gjournal-desktop/_index.adoc:452 msgid "`/dev/ada0p3.journal` for `/usr`" msgstr "" #. type: delimited block = 4 #: documentation/content/en/articles/gjournal-desktop/_index.adoc:453 msgid "`/dev/ada0p2.journal` for `/var`" msgstr "" #. type: delimited block = 4 #: documentation/content/en/articles/gjournal-desktop/_index.adoc:455 msgid "" "These devices will replace the original data providers when mounting the " "file systems." msgstr "" #. type: delimited block = 4 #: documentation/content/en/articles/gjournal-desktop/_index.adoc:457 msgid "" "Before mounting, we must however set the journal flag on them and clear the " "Soft Updates flag:" msgstr "" #. type: delimited block . 4 #: documentation/content/en/articles/gjournal-desktop/_index.adoc:465 #, no-wrap msgid "" "# tunefs -J enable -n disable -j disable /dev/ada0p3.journal\n" "tunefs: soft updates journaling cleared but soft updates still set\n" "tunefs: remove .sujournal to reclaim space\n" "tunefs: gjournal set\n" "tunefs: soft updates cleared\n" msgstr "" #. type: delimited block . 4 #: documentation/content/en/articles/gjournal-desktop/_index.adoc:471 #, no-wrap msgid "" "# tunefs -J enable -n disable -j disable /dev/ada0p2.journal\n" "tunefs: soft updates journaling cleared but soft updates still set\n" "tunefs: remove .sujournal to reclaim space\n" "tunefs: gjournal set\n" "tunefs: soft updates cleared\n" msgstr "" #. type: Plain text #: documentation/content/en/articles/gjournal-desktop/_index.adoc:474 msgid "" "Now, mount the new devices manually at their respective places to verify " "correct operation (note that we can now use the `async` mount option) and " "remove [.filename]#.sujournal# to reclaim space:" msgstr "" #. type: delimited block . 4 #: documentation/content/en/articles/gjournal-desktop/_index.adoc:481 #, no-wrap msgid "" "# mount -o async /dev/ada0p2.journal /var\n" "# rm /var/.sujournal\n" "# mount -o async /dev/ada0p3.journal /usr\n" "# rm /usr/.sujournal\n" msgstr "" #. type: Plain text #: documentation/content/en/articles/gjournal-desktop/_index.adoc:484 msgid "" "Edit [.filename]#/etc/fstab# and update the entries for [.filename]#/usr# " "and [.filename]#/var#:" msgstr "" #. type: delimited block . 4 #: documentation/content/en/articles/gjournal-desktop/_index.adoc:489 #, no-wrap msgid "" "/dev/ada0p3.journal /usr ufs rw,async 2 2\n" "/dev/ada0p2.journal /var ufs rw,async 2 2\n" msgstr "" #. type: delimited block = 4 #: documentation/content/en/articles/gjournal-desktop/_index.adoc:494 msgid "" "Make sure the above entries are correct, or you will have trouble starting " "up normally after you reboot!" msgstr "" #. type: Plain text #: documentation/content/en/articles/gjournal-desktop/_index.adoc:497 msgid "" "Finally, edit [.filename]#/boot/loader.conf# and add the following line so " "the man:gjournal[8] module is loaded at every boot:" msgstr "" #. type: delimited block . 4 #: documentation/content/en/articles/gjournal-desktop/_index.adoc:501 #: documentation/content/en/articles/gjournal-desktop/_index.adoc:683 #: documentation/content/en/articles/gjournal-desktop/_index.adoc:817 #, no-wrap msgid "geom_journal_load=\"YES\"\n" msgstr "" #. type: Plain text #: documentation/content/en/articles/gjournal-desktop/_index.adoc:505 msgid "" "Congratulations! Your system is now set for journaling. You can either type " "`exit` to return to multi-user mode, or reboot to test your configuration " "(recommended)." msgstr "" #. type: delimited block . 4 #: documentation/content/en/articles/gjournal-desktop/_index.adoc:509 #: documentation/content/en/articles/gjournal-desktop/_index.adoc:763 #, no-wrap msgid "# shutdown -r now\n" msgstr "" #. type: Plain text #: documentation/content/en/articles/gjournal-desktop/_index.adoc:512 msgid "During the boot you will see messages like the following:" msgstr "" #. type: delimited block . 4 #: documentation/content/en/articles/gjournal-desktop/_index.adoc:522 #, no-wrap msgid "" "# dmesg | grep GEOM_JOURNAL\n" "GEOM_JOURNAL: Journal 2948326772: ada0p4 contains journal.\n" "GEOM_JOURNAL: Journal 3193218002: ada0p5 contains journal.\n" "GEOM_JOURNAL: Journal 2948326772: ada0p2 contains data.\n" "GEOM_JOURNAL: Journal ada0p2 clean.\n" "GEOM_JOURNAL: Journal 3193218002: ada0p3 contains data.\n" "GEOM_JOURNAL: Journal ada0p3 clean.\n" msgstr "" #. type: Plain text #: documentation/content/en/articles/gjournal-desktop/_index.adoc:525 msgid "After an unclean shutdown, the messages will vary slightly, i.e.:" msgstr "" #. type: delimited block . 4 #: documentation/content/en/articles/gjournal-desktop/_index.adoc:529 #, no-wrap msgid "GEOM_JOURNAL: Journal ada0p2 consistent.\n" msgstr "" #. type: Plain text #: documentation/content/en/articles/gjournal-desktop/_index.adoc:532 msgid "" "This usually means that man:gjournal[8] used the information in the journal " "provider to return the file system to a consistent state." msgstr "" #. type: Title ==== #: documentation/content/en/articles/gjournal-desktop/_index.adoc:534 #, no-wrap msgid "Enabling GEOM Journaling on Newly Created Partitions" msgstr "" #. type: Plain text #: documentation/content/en/articles/gjournal-desktop/_index.adoc:538 msgid "" "The procedure described earlier is required when enabling GEOM journaling on " "file systems that already contain data. When journaling a newly created, " "empty partition, the process is simpler because both the data and journal " "providers can reside within the same partition." msgstr "" #. type: Plain text #: documentation/content/en/articles/gjournal-desktop/_index.adoc:540 msgid "" "This approach is typically used for new disks or newly allocated partitions " "that have not yet been formatted with a file system." msgstr "" #. type: Plain text #: documentation/content/en/articles/gjournal-desktop/_index.adoc:545 msgid "" "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]#/dev/ada1p1# was created. Creating the journal would " "be as simple as:" msgstr "" #. type: delimited block . 4 #: documentation/content/en/articles/gjournal-desktop/_index.adoc:549 #, no-wrap msgid "# gjournal label /dev/ada1p1\n" msgstr "" #. type: Plain text #: documentation/content/en/articles/gjournal-desktop/_index.adoc:555 msgid "" "The journal size will be 1 GB by default. You may adjust it by using the `-" "s` option. The value can be given in bytes, or appended by `K`, `M` or `G` " "to denote Kilobytes, Megabytes or Gigabytes respectively. Note that " "`gjournal` will not allow you to create unsuitably small journal sizes." msgstr "" #. type: Plain text #: documentation/content/en/articles/gjournal-desktop/_index.adoc:557 msgid "" "For example, to create a 2 GB journal, you could use the following command:" msgstr "" #. type: delimited block . 4 #: documentation/content/en/articles/gjournal-desktop/_index.adoc:561 #, no-wrap msgid "# gjournal label -s 2G /dev/ada1p1\n" msgstr "" #. type: Plain text #: documentation/content/en/articles/gjournal-desktop/_index.adoc:564 msgid "" "You can then initialyze a UFS file system on your new partition, enable " "journaling using `newfs(8)` on the `.journal` device, and disable Soft " "Updates using `tunefs(8)`:" msgstr "" #. type: delimited block . 4 #: documentation/content/en/articles/gjournal-desktop/_index.adoc:569 #, no-wrap msgid "" "# newfs -J /dev/ada1p1.journal\n" "# tunefs -n disable -j disable /dev/ada1p1.journal\n" msgstr "" #. type: Plain text #: documentation/content/en/articles/gjournal-desktop/_index.adoc:573 msgid "" "After the file system has been created, it can be mounted normally. For " "example, to mount it at `/data`:" msgstr "" #. type: delimited block . 4 #: documentation/content/en/articles/gjournal-desktop/_index.adoc:577 #, no-wrap msgid "# mount /dev/ada1p1.journal /data\n" msgstr "" #. type: Plain text #: documentation/content/en/articles/gjournal-desktop/_index.adoc:580 msgid "" "To ensure the file system is mounted automatically at boot, add an entry to " "[.filename]#/etc/fstab#:" msgstr "" #. type: delimited block . 4 #: documentation/content/en/articles/gjournal-desktop/_index.adoc:584 #, no-wrap msgid "/dev/ada1p1.journal /data ufs rw,async 2 2\n" msgstr "" #. type: Title ===== #: documentation/content/en/articles/gjournal-desktop/_index.adoc:586 #, no-wrap msgid "Notes on Usage" msgstr "" #. type: Plain text #: documentation/content/en/articles/gjournal-desktop/_index.adoc:589 msgid "When using a single provider for both data and journal storage:" msgstr "" #. type: Plain text #: documentation/content/en/articles/gjournal-desktop/_index.adoc:591 msgid "The partition must be empty before labeling" msgstr "" #. type: Plain text #: documentation/content/en/articles/gjournal-desktop/_index.adoc:592 msgid "The journal space is allocated from within the partition" msgstr "" #. type: Plain text #: documentation/content/en/articles/gjournal-desktop/_index.adoc:593 msgid "The file system size will be reduced by the size of the journal" msgstr "" #. type: Title === #: documentation/content/en/articles/gjournal-desktop/_index.adoc:595 #, no-wrap msgid "Building Journaling into Your Custom Kernel" msgstr "" #. type: Plain text #: documentation/content/en/articles/gjournal-desktop/_index.adoc:599 msgid "" "If you do not wish to load `geom_journal` as a module, you can build its " "functions right into your kernel. Edit your custom kernel configuration " "file, and make sure it includes these two lines:" msgstr "" #. type: delimited block . 4 #: documentation/content/en/articles/gjournal-desktop/_index.adoc:603 #, no-wrap msgid "options UFS_GJOURNAL <1>\n" msgstr "" #. type: delimited block . 4 #: documentation/content/en/articles/gjournal-desktop/_index.adoc:605 #, no-wrap msgid "options GEOM_JOURNAL <2>\n" msgstr "" #. type: Plain text #: documentation/content/en/articles/gjournal-desktop/_index.adoc:608 msgid "Note: This is already in GENERIC" msgstr "" #. type: Plain text #: documentation/content/en/articles/gjournal-desktop/_index.adoc:609 msgid "You will have to add this one" msgstr "" #. type: Plain text #: documentation/content/en/articles/gjournal-desktop/_index.adoc:612 msgid "" "Rebuild and reinstall your kernel following the relevant extref:{handbook}" "kernelconfig[instructions in the FreeBSD Handbook., kernelconfig]" msgstr "" #. type: Plain text #: documentation/content/en/articles/gjournal-desktop/_index.adoc:614 msgid "" "Do not forget to remove the relevant \"load\" entry from [.filename]#/boot/" "loader.conf# if you have previously used it." msgstr "" #. type: Title === #: documentation/content/en/articles/gjournal-desktop/_index.adoc:615 #, no-wrap msgid "Checking GEOM Journaling" msgstr "" #. type: Plain text #: documentation/content/en/articles/gjournal-desktop/_index.adoc:618 msgid "" "GEOM journaling status can be verified by inspecting active GEOM providers." msgstr "" #. type: Plain text #: documentation/content/en/articles/gjournal-desktop/_index.adoc:620 msgid "To list all active GEOM journal devices, run:" msgstr "" #. type: delimited block - 4 #: documentation/content/en/articles/gjournal-desktop/_index.adoc:624 #, no-wrap msgid "# gjournal list\n" msgstr "" #. type: Plain text #: documentation/content/en/articles/gjournal-desktop/_index.adoc:627 msgid "Or to view a summary of journal status:" msgstr "" #. type: delimited block - 4 #: documentation/content/en/articles/gjournal-desktop/_index.adoc:631 #, no-wrap msgid "# gjournal status\n" msgstr "" #. type: Plain text #: documentation/content/en/articles/gjournal-desktop/_index.adoc:635 msgid "" "Journaled file systems are identified by device names ending in `.journal`. " "The presence of these providers indicates that GEOM journaling is active." msgstr "" #. type: Plain text #: documentation/content/en/articles/gjournal-desktop/_index.adoc:637 msgid "Additional information about GEOM device stacking can be obtained with:" msgstr "" #. type: delimited block - 4 #: documentation/content/en/articles/gjournal-desktop/_index.adoc:641 #, no-wrap msgid "# geom -t\n" msgstr "" #. type: delimited block - 4 #: documentation/content/en/articles/gjournal-desktop/_index.adoc:649 #, no-wrap msgid "" "# dumpfs /dev/ada0p2.journal | grep -i journal\n" "flags gjournal\n" msgstr "" #. type: Title == #: documentation/content/en/articles/gjournal-desktop/_index.adoc:653 #, no-wrap msgid "Troubleshooting Journaling" msgstr "" #. type: Plain text #: documentation/content/en/articles/gjournal-desktop/_index.adoc:656 msgid "" "The following section covers frequently asked questions regarding problems " "related to journaling." msgstr "" #. type: Title === #: documentation/content/en/articles/gjournal-desktop/_index.adoc:657 #, no-wrap msgid "I am experiencing kernel panics during periods of high disk activity. Is this related to GEOM journaling?" msgstr "" #. type: Plain text #: documentation/content/en/articles/gjournal-desktop/_index.adoc:660 msgid "" "On modern FreeBSD systems, kernel panics caused solely by an undersized GEOM " "journal are rare." msgstr "" #. type: Plain text #: documentation/content/en/articles/gjournal-desktop/_index.adoc:663 msgid "" "Under sustained or burst-heavy write workloads, an undersized journal " "typically results in write throttling or temporary I/O stalls while the " "journal is flushed to the data provider. A kernel panic may occur only in " "exceptional cases, usually in combination with additional problems such as I/" "O errors or resource exhaustion, where continuing operation could risk file " "system integrity." msgstr "" #. type: Plain text #: documentation/content/en/articles/gjournal-desktop/_index.adoc:665 msgid "" "If panics are observed during heavy write activity, increasing the size of " "the journal provider for the affected file system is recommended." msgstr "" #. type: Title === #: documentation/content/en/articles/gjournal-desktop/_index.adoc:666 #, no-wrap msgid "I made some mistake during configuration, and I cannot boot normally now. Can this be fixed some way?" msgstr "" #. type: Plain text #: documentation/content/en/articles/gjournal-desktop/_index.adoc:672 msgid "" "You either forgot (or misspelled) the entry in [.filename]#/boot/" "loader.conf#, or there are errors in your [.filename]#/etc/fstab# file. " "These are usually easy to fix. During system startup, when the boot process " "stops and prompts for single-user mode (for example after a failed mount or " "`fsck` error), press kbd:[Enter] to get to the default single user shell. " "Then locate the root of the problem:" msgstr "" #. type: delimited block . 4 #: documentation/content/en/articles/gjournal-desktop/_index.adoc:676 #, no-wrap msgid "# cat /boot/loader.conf\n" msgstr "" #. type: Plain text #: documentation/content/en/articles/gjournal-desktop/_index.adoc:679 msgid "Ensure that the following line exists and is spelled correctly:" msgstr "" #. type: Plain text #: documentation/content/en/articles/gjournal-desktop/_index.adoc:687 msgid "" "If the `geom_journal_load` entry is missing or misspelled, the journaled " "devices are never created. Load the module manually, mount all partitions, " "and continue with multi-user boot:" msgstr "" #. type: delimited block . 4 #: documentation/content/en/articles/gjournal-desktop/_index.adoc:698 #, no-wrap msgid "" "GEOM_JOURNAL: Journal 2948326772: ada0p4 contains journal.\n" "GEOM_JOURNAL: Journal 3193218002: ada0p5 contains journal.\n" "GEOM_JOURNAL: Journal 2948326772: ada0p2 contains data.\n" "GEOM_JOURNAL: Journal ada0p2 clean.\n" "GEOM_JOURNAL: Journal 3193218002: ada0p3 contains data.\n" "GEOM_JOURNAL: Journal ada0p3 clean.\n" msgstr "" #. type: delimited block . 4 #: documentation/content/en/articles/gjournal-desktop/_index.adoc:702 #, no-wrap msgid "" "# mount -a\n" "# exit\n" "(boot continues)\n" msgstr "" #. type: Plain text #: documentation/content/en/articles/gjournal-desktop/_index.adoc:707 msgid "" "If, on the other hand, this entry is correct, have a look at [.filename]#/" "etc/fstab#. You will probably find a misspelled or missing entry. In this " "case, mount all remaining partitions by hand and continue with the multi-" "user boot." msgstr "" #. type: Title === #: documentation/content/en/articles/gjournal-desktop/_index.adoc:708 #, no-wrap msgid "Can I remove journaling and return to my standard file system with Soft Updates?" msgstr "" #. type: Plain text #: documentation/content/en/articles/gjournal-desktop/_index.adoc:713 msgid "" "Sure. Use the following procedure, which reverses the changes. The " "partitions you created for the journal providers can then be used for other " "purposes, if you so wish." msgstr "" #. type: Plain text #: documentation/content/en/articles/gjournal-desktop/_index.adoc:715 msgid "Login as `root` and switch to single user mode:" msgstr "" #. type: Plain text #: documentation/content/en/articles/gjournal-desktop/_index.adoc:722 msgid "Unmount the journaled partitions:" msgstr "" #. type: Plain text #: documentation/content/en/articles/gjournal-desktop/_index.adoc:729 msgid "Synchronize the journals:" msgstr "" #. type: delimited block . 4 #: documentation/content/en/articles/gjournal-desktop/_index.adoc:733 #, no-wrap msgid "# gjournal sync\n" msgstr "" #. type: Plain text #: documentation/content/en/articles/gjournal-desktop/_index.adoc:736 msgid "Stop the journaling providers:" msgstr "" #. type: delimited block . 4 #: documentation/content/en/articles/gjournal-desktop/_index.adoc:741 #, no-wrap msgid "" "# gjournal stop ada0p2.journal\n" "# gjournal stop ada0p3.journal\n" msgstr "" #. type: Plain text #: documentation/content/en/articles/gjournal-desktop/_index.adoc:745 msgid "" "Next step should be done with unloaded gjournal kernel module. If the " "following command fails:" msgstr "" #. type: Plain text #: documentation/content/en/articles/gjournal-desktop/_index.adoc:750 msgid "... # gjournal unload ..." msgstr "" #. type: Plain text #: documentation/content/en/articles/gjournal-desktop/_index.adoc:752 msgid "" "ensure that the following line exists in [.filename]#/boot/loader.conf# and " "is spelled correctly:" msgstr "" #. type: delimited block . 4 #: documentation/content/en/articles/gjournal-desktop/_index.adoc:756 #, no-wrap msgid "geom_journal_load=\"NO\"\n" msgstr "" #. type: Plain text #: documentation/content/en/articles/gjournal-desktop/_index.adoc:759 msgid "Reboot your desktop without gjournal kernel module:" msgstr "" #. type: Plain text #: documentation/content/en/articles/gjournal-desktop/_index.adoc:766 msgid "" "Boot into single-user mode again. Clear the journaling metadata from all the " "devices used:" msgstr "" #. type: delimited block . 4 #: documentation/content/en/articles/gjournal-desktop/_index.adoc:773 #, no-wrap msgid "" "# gjournal clear ada0p2\n" "# gjournal clear ada0p3\n" "# gjournal clear ada0p4\n" "# gjournal clear ada0p5\n" msgstr "" #. type: Plain text #: documentation/content/en/articles/gjournal-desktop/_index.adoc:776 msgid "" "Clear the file system journaling flag, and restore the Soft Updates flags:" msgstr "" #. type: delimited block . 4 #: documentation/content/en/articles/gjournal-desktop/_index.adoc:783 #, no-wrap msgid "" "# tunefs -J disable -n enable -j enable ada0p2\n" "tunefs: soft updates journaling set\n" "tunefs: gjournal cleared\n" "tunefs: soft updates set\n" msgstr "" #. type: delimited block . 4 #: documentation/content/en/articles/gjournal-desktop/_index.adoc:788 #, no-wrap msgid "" "# tunefs -J disable -n enable -j enable ada0p3\n" "tunefs: soft updates journaling set\n" "tunefs: gjournal cleared\n" "tunefs: soft updates set\n" msgstr "" #. type: Plain text #: documentation/content/en/articles/gjournal-desktop/_index.adoc:791 msgid "Remount the old devices by hand:" msgstr "" #. type: delimited block . 4 #: documentation/content/en/articles/gjournal-desktop/_index.adoc:796 #, no-wrap msgid "" "# mount -o rw /dev/ada0p2 /var\n" "# mount -o rw /dev/ada0p3 /usr\n" msgstr "" #. type: Plain text #: documentation/content/en/articles/gjournal-desktop/_index.adoc:799 msgid "Edit [.filename]#/etc/fstab# and restore it to its original state:" msgstr "" #. type: delimited block . 4 #: documentation/content/en/articles/gjournal-desktop/_index.adoc:804 #, no-wrap msgid "" "/dev/ada0p2 /usr ufs rw 2 2\n" "/dev/ada0p3 /var ufs rw 2 2\n" msgstr "" #. type: Plain text #: documentation/content/en/articles/gjournal-desktop/_index.adoc:807 msgid "" "Finally, edit [.filename]#/boot/loader.conf#, remove the entry that loads " "the `geom_journal` module (or re-enable it if gjournal is still required for " "other partitions), and reboot." msgstr "" #. type: Title === #: documentation/content/en/articles/gjournal-desktop/_index.adoc:808 #, no-wrap msgid "How do I temporarily boot without GEOM journaling?" msgstr "" #. type: Plain text #: documentation/content/en/articles/gjournal-desktop/_index.adoc:811 msgid "" "To boot the system without GEOM journaling, prevent the journal module from " "loading during startup." msgstr "" #. type: Plain text #: documentation/content/en/articles/gjournal-desktop/_index.adoc:813 msgid "" "Comment out or remove the following line from [.filename]#/boot/loader.conf# " "and reboot:" msgstr "" #. type: Plain text #: documentation/content/en/articles/gjournal-desktop/_index.adoc:821 msgid "" "After booting without GEOM journaling, journaled devices (`*.journal`) will " "not be created. File Systems must be mounted using their original (non-" "journaled) providers, or mounted manually as needed for recovery or " "maintenance." msgstr "" #. type: Plain text #: documentation/content/en/articles/gjournal-desktop/_index.adoc:823 msgid "" "This method does not modify on-disk journal metadata and can be safely used " "for troubleshooting." msgstr "" #. type: Title === #: documentation/content/en/articles/gjournal-desktop/_index.adoc:824 #, no-wrap msgid "Can I resize a GEOM journal after it has been created?" msgstr "" #. type: Plain text #: documentation/content/en/articles/gjournal-desktop/_index.adoc:827 msgid "" "No. A GEOM journal cannot be resized in place after it has been created." msgstr "" #. type: Plain text #: documentation/content/en/articles/gjournal-desktop/_index.adoc:831 msgid "" "The journal size is fixed at the time the journal is labeled. To change the " "journal size, GEOM journaling must be removed and reconfigured with a new " "journal provider of the desired size. For file systems containing data, " "this requires unmounting the file system and recreating the journal using " "appropriately sized providers, as described earlier in this article." msgstr "" #. type: Plain text #: documentation/content/en/articles/gjournal-desktop/_index.adoc:833 msgid "" "Plan journal sizes conservatively to accommodate peak write activity, as " "resizing requires reinitialization of the journal configuration." msgstr "" #. type: Title === #: documentation/content/en/articles/gjournal-desktop/_index.adoc:834 #, no-wrap msgid "What happens after an unclean shutdown or power failure?" msgstr "" #. type: Plain text #: documentation/content/en/articles/gjournal-desktop/_index.adoc:837 msgid "" "After an unclean shutdown or power failure, GEOM journaling and Soft Updates " "with journaling replay the pending journal records during the next boot to " "return the file system to a consistent state." msgstr "" #. type: Plain text #: documentation/content/en/articles/gjournal-desktop/_index.adoc:840 msgid "" "If the journal replay completes successfully, the file system is mounted " "normally and no full file system check is required. Journal replay " "typically takes only a few seconds and depends on the amount of recent write " "activity rather than the size of the file system." msgstr "" #. type: Plain text #: documentation/content/en/articles/gjournal-desktop/_index.adoc:842 msgid "" "A full file system check may still be required in rare cases, such as when " "underlying storage errors are detected or the journal itself is inconsistent." msgstr "" #. type: Title === #: documentation/content/en/articles/gjournal-desktop/_index.adoc:843 #, no-wrap msgid "How does GEOM journaling interact with fsck?" msgstr "" #. type: Plain text #: documentation/content/en/articles/gjournal-desktop/_index.adoc:846 msgid "" "GEOM journaling and Soft Updates with journaling interact with `fsck_ffs(8)` " "in different ways, reflecting their different integration levels in the " "FreeBSD storage stack." msgstr "" #. type: Plain text #: documentation/content/en/articles/gjournal-desktop/_index.adoc:851 msgid "" "For GEOM journaling, crash recovery is performed by the GEOM framework " "itself. During system startup, the `geom_journal` class detects journal " "metadata and replays any pending journal records while the provider is being " "tasted by GEOM, before the journaled device becomes visible to higher layers " "of the system. If journal replay completes successfully, the file system is " "returned to a consistent state and the UFS superblock is updated to indicate " "that no file system check is required. When `fsck_ffs(8)` is later invoked " "during boot, it reads this state from the superblock and skips the file " "system check." msgstr "" #. type: Plain text #: documentation/content/en/articles/gjournal-desktop/_index.adoc:856 msgid "" "For Soft Updates with journaling, recovery is initiated by `fsck_ffs(8)` " "itself. During the file system check phase at boot time, `fsck_ffs(8)` " "detects that the files ystem supports Soft Updates with journaling and " "invokes the journal replay logic. If journal replay reports that the file " "system is consistent, `fsck_ffs(8)` terminates early without performing a " "full check. If journal replay cannot complete successfully, a traditional " "file system check is performed." msgstr "" #. type: Plain text #: documentation/content/en/articles/gjournal-desktop/_index.adoc:858 msgid "" "As a result, the recovery path during system startup depends on the " "journaling mechanism in use, as illustrated by the following boot sequence:" msgstr "" #. type: delimited block - 4 #: documentation/content/en/articles/gjournal-desktop/_index.adoc:885 #, no-wrap msgid "" "Firmware / Boot Loader\n" " |\n" " v\n" "Kernel initialization\n" " |\n" " v\n" "GEOM framework (provider tasting)\n" " |\n" " +--> GEOM journaling (gjournal)\n" " | - Journal replay occurs here\n" " | - Filesystem consistency is restored\n" " | - Superblock is updated\n" " |\n" " v\n" "Filesystem check phase (fsck_ffs)\n" " |\n" " +--> Soft Updates with journaling\n" " | - Journal replay initiated by fsck\n" " | - fsck exits early if consistent\n" " |\n" " v\n" "Filesystem mount\n" " |\n" " v\n" "Normal system operation\n" msgstr "" #. type: Plain text #: documentation/content/en/articles/gjournal-desktop/_index.adoc:889 msgid "" "`fsck_ffs(8)` is still used when journal replay cannot be completed, when " "underlying storage errors are detected, or during periodic manual or " "scheduled file system checks. GEOM journaling reduces recovery time after " "crashes but does not replace `fsck_ffs(8)` entirely." msgstr "" #. type: Title === #: documentation/content/en/articles/gjournal-desktop/_index.adoc:890 #, no-wrap msgid "Why does `gjournal clear` report \"Operation not permitted\" even in single-user mode?" msgstr "" #. type: Plain text #: documentation/content/en/articles/gjournal-desktop/_index.adoc:895 msgid "" "In GEOM, the same underlying storage can be exposed through multiple " "provider names at the same time. For example, a partition may be visible " "both under its disk-based name (e.g. `vtbd0p7`) and under a GPT label (e.g. " "`/dev/gpt/labelname`). These are different GEOM providers referring to the " "same physical storage." msgstr "" #. type: Plain text #: documentation/content/en/articles/gjournal-desktop/_index.adoc:898 msgid "" "When `gjournal stop` or `gjournal clear` is executed on one provider name, " "the GEOM framework may immediately detect the journal metadata again through " "another provider name during the tasting process. As a result, the journal " "is re-attached automatically, and attempts to clear its metadata fail with " "an \"Operation not permitted\" error." msgstr "" #. type: Plain text #: documentation/content/en/articles/gjournal-desktop/_index.adoc:901 msgid "" "It is technically possible to suppress this behavior by disabling GEOM " "tasting or by preventing the creation of alternative provider names, but " "doing so is strongly discouraged. Such changes may negatively affect other " "GEOM classes and system components that rely on normal provider discovery." msgstr "" #. type: Plain text #: documentation/content/en/articles/gjournal-desktop/_index.adoc:904 msgid "" "For this reason, the recommended and safe procedure is to unload the " "`geom_journal` module entirely before removing journal metadata, as " "described earlier in this article. With the module unloaded, no tasting " "occurs and the journal cannot be re-attached, allowing `gjournal clear` to " "complete successfully." msgstr "" #. type: Title === #: documentation/content/en/articles/gjournal-desktop/_index.adoc:905 #, no-wrap msgid "Can GEOM journaling be used on the root file system?" msgstr "" #. type: Plain text #: documentation/content/en/articles/gjournal-desktop/_index.adoc:908 msgid "" "Yes. GEOM journaling can be used on the root file system, but it requires " "additional care during system configuration." msgstr "" #. type: Plain text #: documentation/content/en/articles/gjournal-desktop/_index.adoc:911 msgid "" "The GEOM journal module must be loaded early during the boot process so that " "the journaled root device is available before the root file system is " "mounted. Misconfiguration may prevent the system from booting normally, so " "this setup is generally recommended only for experienced users who fully " "understand the boot sequence and recovery procedures." msgstr "" #. type: Plain text #: documentation/content/en/articles/gjournal-desktop/_index.adoc:913 msgid "" "For these reasons, GEOM journaling is more commonly applied to non-root file " "systems such as `/usr` and `/var`." msgstr "" #. type: Title === #: documentation/content/en/articles/gjournal-desktop/_index.adoc:914 #, no-wrap msgid "What are the performance implications of using GEOM journaling?" msgstr "" #. type: Plain text #: documentation/content/en/articles/gjournal-desktop/_index.adoc:918 msgid "" "GEOM journaling introduces additional write I/O because all write operations " "are first recorded in the journal before being committed to the data " "provider. This results in increased write latency and higher overall write " "amplification compared to non-journaled file systems." msgstr "" #. type: Plain text #: documentation/content/en/articles/gjournal-desktop/_index.adoc:922 msgid "" "Read performance is typically unaffected. The performance impact is most " "noticeable on write-heavy workloads and depends on journal size, placement, " "and the speed of the underlying storage. Using a sufficiently sized journal " "and fast storage for the journal provider minimizes performance penalties." msgstr "" #. type: Title === #: documentation/content/en/articles/gjournal-desktop/_index.adoc:923 #, no-wrap msgid "Can GEOM journaling be used together with other GEOM classes?" msgstr "" #. type: Plain text #: documentation/content/en/articles/gjournal-desktop/_index.adoc:926 msgid "Yes. GEOM journaling can be stacked with other GEOM classes." msgstr "" #. type: Plain text #: documentation/content/en/articles/gjournal-desktop/_index.adoc:929 msgid "" "When used together, GEOM journaling typically operates on top of providers " "created by other GEOM classes such as `gmirror(8)` or `graid3(8)`. The " "order of stacking is important and should follow the documented layering " "requirements of the involved GEOM classes." msgstr "" #. type: Plain text #: documentation/content/en/articles/gjournal-desktop/_index.adoc:931 msgid "" "GEOM journaling maintains file system consistency across the stacked " "providers, but it does not replace redundancy or error detection provided by " "other GEOM classes." msgstr "" #. type: Title === #: documentation/content/en/articles/gjournal-desktop/_index.adoc:932 #, no-wrap msgid "Can GEOM journaling and Soft Updates be enabled at the same time?" msgstr "" #. type: Plain text #: documentation/content/en/articles/gjournal-desktop/_index.adoc:935 msgid "" "No. GEOM journaling and Soft Updates must not be enabled at the same time on " "the same file system." msgstr "" #. type: Plain text #: documentation/content/en/articles/gjournal-desktop/_index.adoc:938 msgid "" "GEOM journaling requires exclusive control over write ordering and " "consistency guarantees. If Soft Updates are enabled together with GEOM " "journaling, the file system may behave unpredictably and data integrity " "cannot be guaranteed." msgstr "" #. type: Plain text #: documentation/content/en/articles/gjournal-desktop/_index.adoc:940 msgid "" "When using GEOM journaling, Soft Updates must be disabled on the affected " "file system, as described earlier in this article." msgstr "" #. type: Title === #: documentation/content/en/articles/gjournal-desktop/_index.adoc:942 #, no-wrap msgid "What is the difference between Soft Updates and Soft Updates with Journaling?" msgstr "" #. type: Plain text #: documentation/content/en/articles/gjournal-desktop/_index.adoc:945 msgid "" "Both Soft Updates and Soft Updates with Journaling are designed to maintain " "file system consistency, but they use different mechanisms and behave " "differently after a system crash." msgstr "" #. type: Plain text #: documentation/content/en/articles/gjournal-desktop/_index.adoc:949 msgid "" "_Soft Updates_ ensure consistency by carefully ordering metadata writes in " "memory so that only safe states are written to disk. If a crash occurs, any " "metadata updates that have not yet been written are simply lost, leaving the " "file system in a consistent but possibly older state. However, resource " "accounting may be temporarily inaccurate, and a full `fsck_ffs(8)` run is " "required to reclaim unused blocks and inodes." msgstr "" #. type: Plain text #: documentation/content/en/articles/gjournal-desktop/_index.adoc:953 msgid "" "_Soft Updates with Journaling_ build on top of _Soft Updates_ by adding a " "metadata journal stored within the file system. Metadata changes are first " "recorded in the journal and are replayed automatically during the next boot " "after an unclean shutdown. This allows the file system to be restored to a " "consistent state quickly, usually without requiring a full `fsck_ffs(8)` run." msgstr "" #. type: Plain text #: documentation/content/en/articles/gjournal-desktop/_index.adoc:955 msgid "" "In short, _Soft Updates_ provide consistency without a journal, while _Soft " "Updates with Journaling_ add fast and automatic recovery after crashes at " "the cost of additional disk space and minor performance overhead." msgstr "" #. type: Title == #: documentation/content/en/articles/gjournal-desktop/_index.adoc:958 #, no-wrap msgid "Further Reading" msgstr "" #. type: Plain text #: documentation/content/en/articles/gjournal-desktop/_index.adoc:962 msgid "" "Journaling is a fairly new feature of FreeBSD, and as such, it is not very " "well documented yet. You may however find the following additional " "references useful:" msgstr "" #. type: Plain text #: documentation/content/en/articles/gjournal-desktop/_index.adoc:964 msgid "" "A extref:{handbook}geom[section on journaling, geom-gjournal] is now part of " "the FreeBSD Handbook." msgstr "" #. type: Plain text #: documentation/content/en/articles/gjournal-desktop/_index.adoc:965 msgid "" "https://lists.freebsd.org/pipermail/freebsd-current/2006-June/" "064043.html[This post] in {freebsd-current} by man:gjournal[8]'s developer, " "`{pjd}`." msgstr "" #. type: Plain text #: documentation/content/en/articles/gjournal-desktop/_index.adoc:966 msgid "" "https://lists.freebsd.org/pipermail/freebsd-questions/2008-April/" "173501.html[This post] in {freebsd-questions} by `{ivoras}`." msgstr "" #. type: Plain text #: documentation/content/en/articles/gjournal-desktop/_index.adoc:967 msgid "" "https://www.youtube.com/watch?v=_NuhRkiInvA[Journaled Soft-Updates, Dr. Kirk " "McKusick, BSDCan 2010] on YouTube" msgstr "" #. type: Plain text #: documentation/content/en/articles/gjournal-desktop/_index.adoc:968 msgid "" "https://www.youtube.com/watch?v=xMpmOezBJZo[GEOM - in Infrastructure We " "Trust, Pawel Jakub Dawidek, AsiaBSDCon 2008] on YouTube" msgstr "" #. type: Plain text #: documentation/content/en/articles/gjournal-desktop/_index.adoc:968 msgid "The manual pages of man:gjournal[8], man:geom[8], and man:tunefs[8]." msgstr ""