# SOME DESCRIPTIVE TITLE # Copyright (C) YEAR The FreeBSD Project # This file is distributed under the same license as the FreeBSD Documentation package. # FIRST AUTHOR , YEAR. # #, fuzzy msgid "" msgstr "" "Project-Id-Version: FreeBSD Documentation VERSION\n" "POT-Creation-Date: 2023-05-21 14:43-0300\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" #. type: YAML Front Matter: description #: documentation/content/en/articles/vinum/_index.adoc:1 #, no-wrap msgid "The vinum Volume Manager in FreeBSD" msgstr "" #. The Vinum Volume Manager #. By Greg Lehey (grog at lemis dot com) #. Added to the Handbook by Hiten Pandya #. and Tom Rhodes #. For the FreeBSD Documentation Project #. type: Title = #: documentation/content/en/articles/vinum/_index.adoc:1 #: documentation/content/en/articles/vinum/_index.adoc:19 #, no-wrap msgid "The vinum Volume Manager" msgstr "" #. type: Plain text #: documentation/content/en/articles/vinum/_index.adoc:51 msgid "'''" msgstr "" #. type: Title == #: documentation/content/en/articles/vinum/_index.adoc:55 #, no-wrap msgid "Synopsis" msgstr "" #. type: Plain text #: documentation/content/en/articles/vinum/_index.adoc:62 msgid "" "No matter the type of disks, there are always potential problems. The disks " "can be too small, too slow, or too unreliable to meet the system's " "requirements. While disks are getting bigger, so are data storage " "requirements. Often a file system is needed that is bigger than a disk's " "capacity. Various solutions to these problems have been proposed and " "implemented." msgstr "" #. type: Plain text #: documentation/content/en/articles/vinum/_index.adoc:66 msgid "" "One method is through the use of multiple, and sometimes redundant, disks. " "In addition to supporting various cards and controllers for hardware " "Redundant Array of Independent Disks RAID systems, the base FreeBSD system " "includes the [.filename]#vinum# volume manager, a block device driver that " "implements virtual disk drives and addresses these three problems. [." "filename]#vinum# provides more flexibility, performance, and reliability " "than traditional disk storage and implements `RAID`-0, `RAID`-1, and " "`RAID`-5 models, both individually and in combination." msgstr "" #. type: Plain text #: documentation/content/en/articles/vinum/_index.adoc:68 msgid "" "This chapter provides an overview of potential problems with traditional " "disk storage, and an introduction to the [.filename]#vinum# volume manager." msgstr "" #. type: delimited block = 4 #: documentation/content/en/articles/vinum/_index.adoc:76 msgid "" "Starting with FreeBSD 5, [.filename]#vinum# has been rewritten to fit into " "the extref:{handbook}[GEOM architecture, geom], while retaining the original " "ideas, terminology, and on-disk metadata. This rewrite is called _gvinum_ " "(for _GEOM vinum_). While this chapter uses the term [.filename]#vinum#, " "any command invocations should be performed with `gvinum`. The name of the " "kernel module has changed from the original [.filename]#vinum.ko# to [." "filename]#geom_vinum.ko#, and all device nodes reside under [.filename]#/dev/" "gvinum# instead of [.filename]#/dev/vinum#. As of FreeBSD 6, the original [." "filename]#vinum# implementation is no longer available in the code base." msgstr "" #. type: Title == #: documentation/content/en/articles/vinum/_index.adoc:79 #, no-wrap msgid "Access Bottlenecks" msgstr "" #. type: Plain text #: documentation/content/en/articles/vinum/_index.adoc:83 msgid "" "Modern systems frequently need to access data in a highly concurrent " "manner. For example, large FTP or HTTP servers can maintain thousands of " "concurrent sessions and have multiple 100 Mbit/s connections to the outside " "world, well beyond the sustained transfer rate of most disks." msgstr "" #. type: Plain text #: documentation/content/en/articles/vinum/_index.adoc:87 msgid "" "Current disk drives can transfer data sequentially at up to 70 MB/s, but " "this value is of little importance in an environment where many independent " "processes access a drive, and where they may achieve only a fraction of " "these values. In such cases, it is more interesting to view the problem " "from the viewpoint of the disk subsystem. The important parameter is the " "load that a transfer places on the subsystem, or the time for which a " "transfer occupies the drives involved in the transfer." msgstr "" #. type: Plain text #: documentation/content/en/articles/vinum/_index.adoc:90 msgid "" "In any disk transfer, the drive must first position the heads, wait for the " "first sector to pass under the read head, and then perform the transfer. " "These actions can be considered to be atomic as it does not make any sense " "to interrupt them." msgstr "" #. type: Plain text #: documentation/content/en/articles/vinum/_index.adoc:95 msgid "" "[[vinum-latency]] Consider a typical transfer of about 10 kB: the current " "generation of high-performance disks can position the heads in an average of " "3.5 ms. The fastest drives spin at 15,000 rpm, so the average rotational " "latency (half a revolution) is 2 ms. At 70 MB/s, the transfer itself takes " "about 150 μs, almost nothing compared to the positioning time. In such a " "case, the effective transfer rate drops to a little over 1 MB/s and is " "clearly highly dependent on the transfer size." msgstr "" #. type: Plain text #: documentation/content/en/articles/vinum/_index.adoc:98 msgid "" "The traditional and obvious solution to this bottleneck is \"more " "spindles\": rather than using one large disk, use several smaller disks with " "the same aggregate storage space. Each disk is capable of positioning and " "transferring independently, so the effective throughput increases by a " "factor close to the number of disks used." msgstr "" #. type: Plain text #: documentation/content/en/articles/vinum/_index.adoc:102 msgid "" "The actual throughput improvement is smaller than the number of disks " "involved. Although each drive is capable of transferring in parallel, there " "is no way to ensure that the requests are evenly distributed across the " "drives. Inevitably the load on one drive will be higher than on another." msgstr "" #. type: Plain text #: documentation/content/en/articles/vinum/_index.adoc:110 msgid "" "The evenness of the load on the disks is strongly dependent on the way the " "data is shared across the drives. In the following discussion, it is " "convenient to think of the disk storage as a large number of data sectors " "which are addressable by number, rather like the pages in a book. The most " "obvious method is to divide the virtual disk into groups of consecutive " "sectors the size of the individual physical disks and store them in this " "manner, rather like taking a large book and tearing it into smaller " "sections. This method is called _concatenation_ and has the advantage that " "the disks are not required to have any specific size relationships. It " "works well when the access to the virtual disk is spread evenly about its " "address space. When access is concentrated on a smaller area, the " "improvement is less marked. <> " "illustrates the sequence in which storage units are allocated in a " "concatenated organization." msgstr "" #. type: Block title #: documentation/content/en/articles/vinum/_index.adoc:112 #, no-wrap msgid "Concatenated Organization" msgstr "" #. type: Target for macro image #: documentation/content/en/articles/vinum/_index.adoc:113 #, no-wrap msgid "vinum-concat.png" msgstr "" #. type: Plain text #: documentation/content/en/articles/vinum/_index.adoc:119 msgid "" "An alternative mapping is to divide the address space into smaller, equal-" "sized components and store them sequentially on different devices. For " "example, the first 256 sectors may be stored on the first disk, the next 256 " "sectors on the next disk and so on. After filling the last disk, the " "process repeats until the disks are full. This mapping is called _striping_ " "or RAID-0." msgstr "" #. type: Plain text #: documentation/content/en/articles/vinum/_index.adoc:123 msgid "" "`RAID` offers various forms of fault tolerance, though RAID-0 is somewhat " "misleading as it provides no redundancy. Striping requires somewhat more " "effort to locate the data, and it can cause additional I/O load where a " "transfer is spread over multiple disks, but it can also provide a more " "constant load across the disks. <> " "illustrates the sequence in which storage units are allocated in a striped " "organization." msgstr "" #. type: Block title #: documentation/content/en/articles/vinum/_index.adoc:125 #, no-wrap msgid "Striped Organization" msgstr "" #. type: Target for macro image #: documentation/content/en/articles/vinum/_index.adoc:126 #, no-wrap msgid "vinum-striped.png" msgstr "" #. type: Title == #: documentation/content/en/articles/vinum/_index.adoc:129 #, no-wrap msgid "Data Integrity" msgstr "" #. type: Plain text #: documentation/content/en/articles/vinum/_index.adoc:134 msgid "" "The final problem with disks is that they are unreliable. Although " "reliability has increased tremendously over the last few years, disk drives " "are still the most likely core component of a server to fail. When they do, " "the results can be catastrophic and replacing a failed disk drive and " "restoring data can result in server downtime." msgstr "" #. type: Plain text #: documentation/content/en/articles/vinum/_index.adoc:137 msgid "" "One approach to this problem is _mirroring_, or `RAID-1`, which keeps two " "copies of the data on different physical hardware. Any write to the volume " "writes to both disks; a read can be satisfied from either, so if one drive " "fails, the data is still available on the other drive." msgstr "" #. type: Plain text #: documentation/content/en/articles/vinum/_index.adoc:139 msgid "Mirroring has two problems:" msgstr "" #. type: Plain text #: documentation/content/en/articles/vinum/_index.adoc:141 msgid "It requires twice as much disk storage as a non-redundant solution." msgstr "" #. type: Plain text #: documentation/content/en/articles/vinum/_index.adoc:142 msgid "" "Writes must be performed to both drives, so they take up twice the bandwidth " "of a non-mirrored volume. Reads do not suffer from a performance penalty and " "can even be faster." msgstr "" #. type: Plain text #: documentation/content/en/articles/vinum/_index.adoc:149 msgid "" "An alternative solution is _parity_, implemented in `RAID` levels 2, 3, 4 " "and 5. Of these, `RAID-5` is the most interesting. As implemented in [." "filename]#vinum#, it is a variant on a striped organization which dedicates " "one block of each stripe to parity one of the other blocks. As implemented " "by [.filename]#vinum#, a `RAID-5` plex is similar to a striped plex, except " "that it implements `RAID-5` by including a parity block in each stripe. As " "required by `RAID-5`, the location of this parity block changes from one " "stripe to the next. The numbers in the data blocks indicate the relative " "block numbers." msgstr "" #. type: Block title #: documentation/content/en/articles/vinum/_index.adoc:151 #, no-wrap msgid "`RAID`-5 Organization" msgstr "" #. type: Target for macro image #: documentation/content/en/articles/vinum/_index.adoc:152 #, no-wrap msgid "vinum-raid5-org.png" msgstr "" #. type: Plain text #: documentation/content/en/articles/vinum/_index.adoc:157 msgid "" "Compared to mirroring, `RAID-5` has the advantage of requiring significantly " "less storage space. Read access is similar to that of striped " "organizations, but write access is significantly slower, approximately 25% " "of the read performance. If one drive fails, the array can continue to " "operate in degraded mode where a read from one of the remaining accessible " "drives continues normally, but a read from the failed drive is recalculated " "from the corresponding block from all the remaining drives." msgstr "" #. type: Title == #: documentation/content/en/articles/vinum/_index.adoc:159 #, no-wrap msgid "[.filename]#vinum# Objects" msgstr "" #. type: Plain text #: documentation/content/en/articles/vinum/_index.adoc:162 msgid "" "To address these problems, [.filename]#vinum# implements a four-level " "hierarchy of objects:" msgstr "" #. type: Plain text #: documentation/content/en/articles/vinum/_index.adoc:164 msgid "" "The most visible object is the virtual disk, called a _volume_. Volumes have " "essentially the same properties as a UNIX(R) disk drive, though there are " "some minor differences. For one, they have no size limitations." msgstr "" #. type: Plain text #: documentation/content/en/articles/vinum/_index.adoc:165 msgid "" "Volumes are composed of _plexes_, each of which represent the total address " "space of a volume. This level in the hierarchy provides redundancy. Think of " "plexes as individual disks in a mirrored array, each containing the same " "data." msgstr "" #. type: Plain text #: documentation/content/en/articles/vinum/_index.adoc:166 msgid "" "Since [.filename]#vinum# exists within the UNIX(R) disk storage framework, " "it would be possible to use UNIX(R) partitions as the building block for " "multi-disk plexes. In fact, this turns out to be too inflexible as UNIX(R) " "disks can have only a limited number of partitions. Instead, [." "filename]#vinum# subdivides a single UNIX(R) partition, the _drive_, into " "contiguous areas called _subdisks_, which are used as building blocks for " "plexes." msgstr "" #. type: Plain text #: documentation/content/en/articles/vinum/_index.adoc:167 msgid "" "Subdisks reside on [.filename]#vinum#_drives_, currently UNIX(R) partitions. " "[.filename]#vinum# drives can contain any number of subdisks. With the " "exception of a small area at the beginning of the drive, which is used for " "storing configuration and state information, the entire drive is available " "for data storage." msgstr "" #. type: Plain text #: documentation/content/en/articles/vinum/_index.adoc:169 msgid "" "The following sections describe the way these objects provide the " "functionality required of [.filename]#vinum#." msgstr "" #. type: Title === #: documentation/content/en/articles/vinum/_index.adoc:170 #, no-wrap msgid "Volume Size Considerations" msgstr "" #. type: Plain text #: documentation/content/en/articles/vinum/_index.adoc:174 msgid "" "Plexes can include multiple subdisks spread over all drives in the [." "filename]#vinum# configuration. As a result, the size of an individual " "drive does not limit the size of a plex or a volume." msgstr "" #. type: Title === #: documentation/content/en/articles/vinum/_index.adoc:175 #, no-wrap msgid "Redundant Data Storage" msgstr "" #. type: Plain text #: documentation/content/en/articles/vinum/_index.adoc:180 msgid "" "[.filename]#vinum# implements mirroring by attaching multiple plexes to a " "volume. Each plex is a representation of the data in a volume. A volume " "may contain between one and eight plexes." msgstr "" #. type: Plain text #: documentation/content/en/articles/vinum/_index.adoc:183 msgid "" "Although a plex represents the complete data of a volume, it is possible for " "parts of the representation to be physically missing, either by design (by " "not defining a subdisk for parts of the plex) or by accident (as a result of " "the failure of a drive). As long as at least one plex can provide the data " "for the complete address range of the volume, the volume is fully functional." msgstr "" #. type: Title === #: documentation/content/en/articles/vinum/_index.adoc:184 #, no-wrap msgid "Which Plex Organization?" msgstr "" #. type: Plain text #: documentation/content/en/articles/vinum/_index.adoc:187 msgid "" "[.filename]#vinum# implements both concatenation and striping at the plex " "level:" msgstr "" #. type: Plain text #: documentation/content/en/articles/vinum/_index.adoc:189 msgid "" "A _concatenated plex_ uses the address space of each subdisk in turn. " "Concatenated plexes are the most flexible as they can contain any number of " "subdisks, and the subdisks may be of different length. The plex may be " "extended by adding additional subdisks. They require less CPU time than " "striped plexes, though the difference in CPU overhead is not measurable. On " "the other hand, they are most susceptible to hot spots, where one disk is " "very active and others are idle." msgstr "" #. type: Plain text #: documentation/content/en/articles/vinum/_index.adoc:190 msgid "" "A _striped plex_ stripes the data across each subdisk. The subdisks must all " "be the same size and there must be at least two subdisks to distinguish it " "from a concatenated plex. The greatest advantage of striped plexes is that " "they reduce hot spots. By choosing an optimum sized stripe, about 256 kB, " "the load can be evened out on the component drives. Extending a plex by " "adding new subdisks is so complicated that [.filename]#vinum# does not " "implement it." msgstr "" #. type: Plain text #: documentation/content/en/articles/vinum/_index.adoc:192 msgid "" "<> summarizes the " "advantages and disadvantages of each plex organization." msgstr "" #. type: Block title #: documentation/content/en/articles/vinum/_index.adoc:194 #, no-wrap msgid "[.filename]#vinum# Plex Organizations" msgstr "" #. type: Table #: documentation/content/en/articles/vinum/_index.adoc:198 #, no-wrap msgid "Plex type" msgstr "" #. type: Table #: documentation/content/en/articles/vinum/_index.adoc:199 #, no-wrap msgid "Minimum subdisks" msgstr "" #. type: Table #: documentation/content/en/articles/vinum/_index.adoc:200 #, no-wrap msgid "Can add subdisks" msgstr "" #. type: Table #: documentation/content/en/articles/vinum/_index.adoc:201 #, no-wrap msgid "Must be equal size" msgstr "" #. type: Table #: documentation/content/en/articles/vinum/_index.adoc:203 #, no-wrap msgid "Application" msgstr "" #. type: Table #: documentation/content/en/articles/vinum/_index.adoc:204 #, no-wrap msgid "concatenated" msgstr "" #. type: Table #: documentation/content/en/articles/vinum/_index.adoc:205 #, no-wrap msgid "1" msgstr "" #. type: Table #: documentation/content/en/articles/vinum/_index.adoc:206 #: documentation/content/en/articles/vinum/_index.adoc:213 #, no-wrap msgid "yes" msgstr "" #. type: Table #: documentation/content/en/articles/vinum/_index.adoc:207 #: documentation/content/en/articles/vinum/_index.adoc:212 #, no-wrap msgid "no" msgstr "" #. type: Table #: documentation/content/en/articles/vinum/_index.adoc:209 #, no-wrap msgid "Large data storage with maximum placement flexibility and moderate performance" msgstr "" #. type: Table #: documentation/content/en/articles/vinum/_index.adoc:210 #, no-wrap msgid "striped" msgstr "" #. type: Table #: documentation/content/en/articles/vinum/_index.adoc:211 #, no-wrap msgid "2" msgstr "" #. type: Table #: documentation/content/en/articles/vinum/_index.adoc:214 #, no-wrap msgid "High performance in combination with highly concurrent access" msgstr "" #. type: Title == #: documentation/content/en/articles/vinum/_index.adoc:217 #, no-wrap msgid "Some Examples" msgstr "" #. type: Plain text #: documentation/content/en/articles/vinum/_index.adoc:223 msgid "" "[.filename]#vinum# maintains a _configuration database_ which describes the " "objects known to an individual system. Initially, the user creates the " "configuration database from one or more configuration files using man:" "gvinum[8]. [.filename]#vinum# stores a copy of its configuration database " "on each disk _device_ under its control. This database is updated on each " "state change, so that a restart accurately restores the state of each [." "filename]#vinum# object." msgstr "" #. type: Title === #: documentation/content/en/articles/vinum/_index.adoc:224 #, no-wrap msgid "The Configuration File" msgstr "" #. type: Plain text #: documentation/content/en/articles/vinum/_index.adoc:228 msgid "" "The configuration file describes individual [.filename]#vinum# objects. The " "definition of a simple volume might be:" msgstr "" #. type: delimited block . 4 #: documentation/content/en/articles/vinum/_index.adoc:235 #, no-wrap msgid "" " drive a device /dev/da3h\n" " volume myvol\n" " plex org concat\n" " sd length 512m drive a\n" msgstr "" #. type: Plain text #: documentation/content/en/articles/vinum/_index.adoc:238 msgid "This file describes four [.filename]#vinum# objects:" msgstr "" #. type: Plain text #: documentation/content/en/articles/vinum/_index.adoc:240 msgid "" "The _drive_ line describes a disk partition (_drive_) and its location " "relative to the underlying hardware. It is given the symbolic name _a_. This " "separation of symbolic names from device names allows disks to be moved from " "one location to another without confusion." msgstr "" #. type: Plain text #: documentation/content/en/articles/vinum/_index.adoc:241 msgid "" "The _volume_ line describes a volume. The only required attribute is the " "name, in this case _myvol_." msgstr "" #. type: Plain text #: documentation/content/en/articles/vinum/_index.adoc:242 msgid "" "The _plex_ line defines a plex. The only required parameter is the " "organization, in this case _concat_. No name is necessary as the system " "automatically generates a name from the volume name by adding the suffix _." "px_, where _x_ is the number of the plex in the volume. Thus this plex will " "be called _myvol.p0_." msgstr "" #. type: Plain text #: documentation/content/en/articles/vinum/_index.adoc:243 msgid "" "The _sd_ line describes a subdisk. The minimum specifications are the name " "of a drive on which to store it, and the length of the subdisk. No name is " "necessary as the system automatically assigns names derived from the plex " "name by adding the suffix _.sx_, where _x_ is the number of the subdisk in " "the plex. Thus [.filename]#vinum# gives this subdisk the name _myvol.p0.s0_." msgstr "" #. type: Plain text #: documentation/content/en/articles/vinum/_index.adoc:245 msgid "" "After processing this file, man:gvinum[8] produces the following output:" msgstr "" #. type: delimited block . 4 #: documentation/content/en/articles/vinum/_index.adoc:255 #, no-wrap msgid "" "# gvinum -> create config1\n" "Configuration summary\n" "Drives: 1 (4 configured)\n" "Volumes: 1 (4 configured)\n" "Plexes: 1 (8 configured)\n" "Subdisks: 1 (16 configured)\n" msgstr "" #. type: delimited block . 4 #: documentation/content/en/articles/vinum/_index.adoc:257 #, no-wrap msgid " D a State: up Device /dev/da3h Avail: 2061/2573 MB (80%)\n" msgstr "" #. type: delimited block . 4 #: documentation/content/en/articles/vinum/_index.adoc:259 #, no-wrap msgid " V myvol State: up Plexes: 1 Size: 512 MB\n" msgstr "" #. type: delimited block . 4 #: documentation/content/en/articles/vinum/_index.adoc:261 #, no-wrap msgid " P myvol.p0 C State: up Subdisks: 1 Size: 512 MB\n" msgstr "" #. type: delimited block . 4 #: documentation/content/en/articles/vinum/_index.adoc:263 #, no-wrap msgid " S myvol.p0.s0 State: up PO: 0 B Size: 512 MB\n" msgstr "" #. type: Plain text #: documentation/content/en/articles/vinum/_index.adoc:267 msgid "" "This output shows the brief listing format of man:gvinum[8]. It is " "represented graphically in <>." msgstr "" #. type: Block title #: documentation/content/en/articles/vinum/_index.adoc:269 #, no-wrap msgid "A Simple [.filename]#vinum# Volume" msgstr "" #. type: Target for macro image #: documentation/content/en/articles/vinum/_index.adoc:270 #, no-wrap msgid "vinum-simple-vol.png" msgstr "" #. type: Plain text #: documentation/content/en/articles/vinum/_index.adoc:274 msgid "" "This figure, and the ones which follow, represent a volume, which contains " "the plexes, which in turn contains the subdisks. In this example, the " "volume contains one plex, and the plex contains one subdisk." msgstr "" #. type: Plain text #: documentation/content/en/articles/vinum/_index.adoc:279 msgid "" "This particular volume has no specific advantage over a conventional disk " "partition. It contains a single plex, so it is not redundant. The plex " "contains a single subdisk, so there is no difference in storage allocation " "from a conventional disk partition. The following sections illustrate " "various more interesting configuration methods." msgstr "" #. type: Title === #: documentation/content/en/articles/vinum/_index.adoc:280 #, no-wrap msgid "Increased Resilience: Mirroring" msgstr "" #. type: Plain text #: documentation/content/en/articles/vinum/_index.adoc:285 msgid "" "The resilience of a volume can be increased by mirroring. When laying out a " "mirrored volume, it is important to ensure that the subdisks of each plex " "are on different drives, so that a drive failure will not take down both " "plexes. The following configuration mirrors a volume:" msgstr "" #. type: delimited block . 4 #: documentation/content/en/articles/vinum/_index.adoc:294 #, no-wrap msgid "" "\tdrive b device /dev/da4h\n" "\tvolume mirror\n" " plex org concat\n" " sd length 512m drive a\n" "\t plex org concat\n" "\t sd length 512m drive b\n" msgstr "" #. type: Plain text #: documentation/content/en/articles/vinum/_index.adoc:298 msgid "" "In this example, it was not necessary to specify a definition of drive _a_ " "again, since [.filename]#vinum# keeps track of all objects in its " "configuration database. After processing this definition, the configuration " "looks like:" msgstr "" #. type: delimited block . 4 #: documentation/content/en/articles/vinum/_index.adoc:306 #, no-wrap msgid "" "\tDrives: 2 (4 configured)\n" "\tVolumes: 2 (4 configured)\n" "\tPlexes: 3 (8 configured)\n" "\tSubdisks: 3 (16 configured)\n" msgstr "" #. type: delimited block . 4 #: documentation/content/en/articles/vinum/_index.adoc:309 #, no-wrap msgid "" "\tD a State: up Device /dev/da3h Avail: 1549/2573 MB (60%)\n" "\tD b State: up Device /dev/da4h Avail: 2061/2573 MB (80%)\n" msgstr "" #. type: delimited block . 4 #: documentation/content/en/articles/vinum/_index.adoc:312 #, no-wrap msgid "" " V myvol State: up Plexes: 1 Size: 512 MB\n" " V mirror State: up Plexes: 2 Size: 512 MB\n" msgstr "" #. type: delimited block . 4 #: documentation/content/en/articles/vinum/_index.adoc:316 #, no-wrap msgid "" " P myvol.p0 C State: up Subdisks: 1 Size: 512 MB\n" " P mirror.p0 C State: up Subdisks: 1 Size: 512 MB\n" " P mirror.p1 C State: initializing Subdisks: 1 Size: 512 MB\n" msgstr "" #. type: delimited block . 4 #: documentation/content/en/articles/vinum/_index.adoc:320 #, no-wrap msgid "" " S myvol.p0.s0 State: up PO: 0 B Size: 512 MB\n" "\tS mirror.p0.s0 State: up PO: 0 B Size: 512 MB\n" "\tS mirror.p1.s0 State: empty PO: 0 B Size: 512 MB\n" msgstr "" #. type: Plain text #: documentation/content/en/articles/vinum/_index.adoc:323 msgid "" "<> shows the " "structure graphically." msgstr "" #. type: Block title #: documentation/content/en/articles/vinum/_index.adoc:325 #, no-wrap msgid "A Mirrored [.filename]#vinum# Volume" msgstr "" #. type: Target for macro image #: documentation/content/en/articles/vinum/_index.adoc:326 #, no-wrap msgid "vinum-mirrored-vol.png" msgstr "" #. type: Plain text #: documentation/content/en/articles/vinum/_index.adoc:330 msgid "" "In this example, each plex contains the full 512 MB of address space. As in " "the previous example, each plex contains only a single subdisk." msgstr "" #. type: Title === #: documentation/content/en/articles/vinum/_index.adoc:331 #, no-wrap msgid "Optimizing Performance" msgstr "" #. type: Plain text #: documentation/content/en/articles/vinum/_index.adoc:336 msgid "" "The mirrored volume in the previous example is more resistant to failure " "than an unmirrored volume, but its performance is less as each write to the " "volume requires a write to both drives, using up a greater proportion of the " "total disk bandwidth. Performance considerations demand a different " "approach: instead of mirroring, the data is striped across as many disk " "drives as possible. The following configuration shows a volume with a plex " "striped across four disk drives:" msgstr "" #. type: delimited block . 4 #: documentation/content/en/articles/vinum/_index.adoc:347 #, no-wrap msgid "" " drive c device /dev/da5h\n" "\tdrive d device /dev/da6h\n" "\tvolume stripe\n" "\tplex org striped 512k\n" "\t sd length 128m drive a\n" "\t sd length 128m drive b\n" "\t sd length 128m drive c\n" "\t sd length 128m drive d\n" msgstr "" #. type: Plain text #: documentation/content/en/articles/vinum/_index.adoc:351 msgid "" "As before, it is not necessary to define the drives which are already known " "to [.filename]#vinum#. After processing this definition, the configuration " "looks like:" msgstr "" #. type: delimited block . 4 #: documentation/content/en/articles/vinum/_index.adoc:359 #, no-wrap msgid "" "\tDrives: 4 (4 configured)\n" "\tVolumes: 3 (4 configured)\n" "\tPlexes: 4 (8 configured)\n" "\tSubdisks: 7 (16 configured)\n" msgstr "" #. type: delimited block . 4 #: documentation/content/en/articles/vinum/_index.adoc:364 #, no-wrap msgid "" " D a State: up Device /dev/da3h Avail: 1421/2573 MB (55%)\n" " D b State: up Device /dev/da4h Avail: 1933/2573 MB (75%)\n" " D c State: up Device /dev/da5h Avail: 2445/2573 MB (95%)\n" " D d State: up Device /dev/da6h Avail: 2445/2573 MB (95%)\n" msgstr "" #. type: delimited block . 4 #: documentation/content/en/articles/vinum/_index.adoc:368 #, no-wrap msgid "" " V myvol State: up Plexes: 1 Size: 512 MB\n" " V mirror State: up Plexes: 2 Size: 512 MB\n" " V striped State: up Plexes: 1 Size: 512 MB\n" msgstr "" #. type: delimited block . 4 #: documentation/content/en/articles/vinum/_index.adoc:373 #, no-wrap msgid "" " P myvol.p0 C State: up Subdisks: 1 Size: 512 MB\n" " P mirror.p0 C State: up Subdisks: 1 Size: 512 MB\n" " P mirror.p1 C State: initializing Subdisks: 1 Size: 512 MB\n" " P striped.p1 State: up Subdisks: 1 Size: 512 MB\n" msgstr "" #. type: delimited block . 4 #: documentation/content/en/articles/vinum/_index.adoc:381 #, no-wrap msgid "" " S myvol.p0.s0 State: up PO: 0 B Size: 512 MB\n" " S mirror.p0.s0 State: up PO: 0 B Size: 512 MB\n" " S mirror.p1.s0 State: empty PO: 0 B Size: 512 MB\n" " S striped.p0.s0 State: up PO: 0 B Size: 128 MB\n" " S striped.p0.s1 State: up PO: 512 kB Size: 128 MB\n" " S striped.p0.s2 State: up PO: 1024 kB Size: 128 MB\n" " S striped.p0.s3 State: up PO: 1536 kB Size: 128 MB\n" msgstr "" #. type: Block title #: documentation/content/en/articles/vinum/_index.adoc:384 #, no-wrap msgid "A Striped [.filename]#vinum# Volume" msgstr "" #. type: Target for macro image #: documentation/content/en/articles/vinum/_index.adoc:385 #, no-wrap msgid "vinum-striped-vol.png" msgstr "" #. type: Plain text #: documentation/content/en/articles/vinum/_index.adoc:389 msgid "" "This volume is represented in <>. The darkness of the stripes indicates the " "position within the plex address space, where the lightest stripes come " "first and the darkest last." msgstr "" #. type: Title === #: documentation/content/en/articles/vinum/_index.adoc:390 #, no-wrap msgid "Resilience and Performance" msgstr "" #. type: Plain text #: documentation/content/en/articles/vinum/_index.adoc:394 msgid "" "[[vinum-resilience]]With sufficient hardware, it is possible to build " "volumes which show both increased resilience and increased performance " "compared to standard UNIX(R) partitions. A typical configuration file might " "be:" msgstr "" #. type: delimited block . 4 #: documentation/content/en/articles/vinum/_index.adoc:410 #, no-wrap msgid "" "\tvolume raid10\n" " plex org striped 512k\n" " sd length 102480k drive a\n" " sd length 102480k drive b\n" " sd length 102480k drive c\n" " sd length 102480k drive d\n" " sd length 102480k drive e\n" " plex org striped 512k\n" " sd length 102480k drive c\n" " sd length 102480k drive d\n" " sd length 102480k drive e\n" " sd length 102480k drive a\n" " sd length 102480k drive b\n" msgstr "" #. type: Plain text #: documentation/content/en/articles/vinum/_index.adoc:414 msgid "" "The subdisks of the second plex are offset by two drives from those of the " "first plex. This helps to ensure that writes do not go to the same subdisks " "even if a transfer goes over two drives." msgstr "" #. type: Plain text #: documentation/content/en/articles/vinum/_index.adoc:416 msgid "" "<> " "represents the structure of this volume." msgstr "" #. type: Block title #: documentation/content/en/articles/vinum/_index.adoc:418 #, no-wrap msgid "A Mirrored, Striped [.filename]#vinum# Volume" msgstr "" #. type: Target for macro image #: documentation/content/en/articles/vinum/_index.adoc:419 #, no-wrap msgid "vinum-raid10-vol.png" msgstr "" #. type: Title == #: documentation/content/en/articles/vinum/_index.adoc:422 #, no-wrap msgid "Object Naming" msgstr "" #. type: Plain text #: documentation/content/en/articles/vinum/_index.adoc:426 msgid "" "[.filename]#vinum# assigns default names to plexes and subdisks, although " "they may be overridden. Overriding the default names is not recommended as " "it does not bring a significant advantage and it can cause confusion." msgstr "" #. type: Plain text #: documentation/content/en/articles/vinum/_index.adoc:429 msgid "" "Names may contain any non-blank character, but it is recommended to restrict " "them to letters, digits and the underscore characters. The names of " "volumes, plexes, and subdisks may be up to 64 characters long, and the names " "of drives may be up to 32 characters long." msgstr "" #. type: Plain text #: documentation/content/en/articles/vinum/_index.adoc:432 msgid "" "[.filename]#vinum# objects are assigned device nodes in the hierarchy [." "filename]#/dev/gvinum#. The configuration shown above would cause [." "filename]#vinum# to create the following device nodes:" msgstr "" #. type: Plain text #: documentation/content/en/articles/vinum/_index.adoc:434 msgid "" "Device entries for each volume. These are the main devices used by [." "filename]#vinum#. The configuration above would include the devices [." "filename]#/dev/gvinum/myvol#, [.filename]#/dev/gvinum/mirror#, [.filename]#/" "dev/gvinum/striped#, [.filename]#/dev/gvinum/raid5# and [.filename]#/dev/" "gvinum/raid10#." msgstr "" #. type: Plain text #: documentation/content/en/articles/vinum/_index.adoc:435 msgid "All volumes get direct entries under [.filename]#/dev/gvinum/#." msgstr "" #. type: Plain text #: documentation/content/en/articles/vinum/_index.adoc:436 msgid "" "The directories [.filename]#/dev/gvinum/plex#, and [.filename]#/dev/gvinum/" "sd#, which contain device nodes for each plex and for each subdisk, " "respectively." msgstr "" #. type: Plain text #: documentation/content/en/articles/vinum/_index.adoc:438 msgid "For example, consider the following configuration file:" msgstr "" #. type: delimited block . 4 #: documentation/content/en/articles/vinum/_index.adoc:451 #, no-wrap msgid "" "\tdrive drive1 device /dev/sd1h\n" "\tdrive drive2 device /dev/sd2h\n" "\tdrive drive3 device /dev/sd3h\n" "\tdrive drive4 device /dev/sd4h\n" " volume s64 setupstate\n" " plex org striped 64k\n" " sd length 100m drive drive1\n" " sd length 100m drive drive2\n" " sd length 100m drive drive3\n" " sd length 100m drive drive4\n" msgstr "" #. type: Plain text #: documentation/content/en/articles/vinum/_index.adoc:454 msgid "" "After processing this file, man:gvinum[8] creates the following structure in " "[.filename]#/dev/gvinum#:" msgstr "" #. type: delimited block . 4 #: documentation/content/en/articles/vinum/_index.adoc:461 #, no-wrap msgid "" "\tdrwxr-xr-x 2 root wheel 512 Apr 13\n" "16:46 plex\n" "\tcrwxr-xr-- 1 root wheel 91, 2 Apr 13 16:46 s64\n" "\tdrwxr-xr-x 2 root wheel 512 Apr 13 16:46 sd\n" msgstr "" #. type: delimited block . 4 #: documentation/content/en/articles/vinum/_index.adoc:465 #, no-wrap msgid "" " /dev/vinum/plex:\n" " total 0\n" " crwxr-xr-- 1 root wheel 25, 0x10000002 Apr 13 16:46 s64.p0\n" msgstr "" #. type: delimited block . 4 #: documentation/content/en/articles/vinum/_index.adoc:472 #, no-wrap msgid "" " /dev/vinum/sd:\n" " total 0\n" " crwxr-xr-- 1 root wheel 91, 0x20000002 Apr 13 16:46 s64.p0.s0\n" " crwxr-xr-- 1 root wheel 91, 0x20100002 Apr 13 16:46 s64.p0.s1\n" " crwxr-xr-- 1 root wheel 91, 0x20200002 Apr 13 16:46 s64.p0.s2\n" " crwxr-xr-- 1 root wheel 91, 0x20300002 Apr 13 16:46 s64.p0.s3\n" msgstr "" #. type: Plain text #: documentation/content/en/articles/vinum/_index.adoc:477 msgid "" "Although it is recommended that plexes and subdisks should not be allocated " "specific names, [.filename]#vinum# drives must be named. This makes it " "possible to move a drive to a different location and still recognize it " "automatically. Drive names may be up to 32 characters long." msgstr "" #. type: Title === #: documentation/content/en/articles/vinum/_index.adoc:478 #, no-wrap msgid "Creating File Systems" msgstr "" #. type: Plain text #: documentation/content/en/articles/vinum/_index.adoc:486 msgid "" "Volumes appear to the system to be identical to disks, with one exception. " "Unlike UNIX(R) drives, [.filename]#vinum# does not partition volumes, which " "thus do not contain a partition table. This has required modification to " "some disk utilities, notably man:newfs[8], so that it does not try to " "interpret the last letter of a [.filename]#vinum# volume name as a partition " "identifier. For example, a disk drive may have a name like [.filename]#/dev/" "ad0a# or [.filename]#/dev/da2h#. These names represent the first partition " "([.filename]#a#) on the first (0) IDE disk ([.filename]#ad#) and the eighth " "partition ([.filename]#h#) on the third (2) SCSI disk ([.filename]#da#) " "respectively. By contrast, a [.filename]#vinum# volume might be called [." "filename]#/dev/gvinum/concat#, which has no relationship with a partition " "name." msgstr "" #. type: Plain text #: documentation/content/en/articles/vinum/_index.adoc:488 msgid "To create a file system on this volume, use man:newfs[8]:" msgstr "" #. type: delimited block . 4 #: documentation/content/en/articles/vinum/_index.adoc:492 #, no-wrap msgid "# newfs /dev/gvinum/concat\n" msgstr "" #. type: Title == #: documentation/content/en/articles/vinum/_index.adoc:495 #, no-wrap msgid "Configuring [.filename]#vinum#" msgstr "" #. type: Plain text #: documentation/content/en/articles/vinum/_index.adoc:501 msgid "" "The [.filename]#GENERIC# kernel does not contain [.filename]#vinum#. It is " "possible to build a custom kernel which includes [.filename]#vinum#, but " "this is not recommended. The standard way to start [.filename]#vinum# is as " "a kernel module. man:kldload[8] is not needed because when man:gvinum[8] " "starts, it checks whether the module has been loaded, and if it is not, it " "loads it automatically." msgstr "" #. type: Title === #: documentation/content/en/articles/vinum/_index.adoc:502 #, no-wrap msgid "Startup" msgstr "" #. type: Plain text #: documentation/content/en/articles/vinum/_index.adoc:507 msgid "" "[.filename]#vinum# stores configuration information on the disk slices in " "essentially the same form as in the configuration files. When reading from " "the configuration database, [.filename]#vinum# recognizes a number of " "keywords which are not allowed in the configuration files. For example, a " "disk configuration might contain the following text:" msgstr "" #. type: delimited block . 4 #: documentation/content/en/articles/vinum/_index.adoc:529 #, no-wrap msgid "" "volume myvol state up\n" "volume bigraid state down\n" "plex name myvol.p0 state up org concat vol myvol\n" "plex name myvol.p1 state up org concat vol myvol\n" "plex name myvol.p2 state init org striped 512b vol myvol\n" "plex name bigraid.p0 state initializing org raid5 512b vol bigraid\n" "sd name myvol.p0.s0 drive a plex myvol.p0 state up len 1048576b driveoffset 265b plexoffset 0b\n" "sd name myvol.p0.s1 drive b plex myvol.p0 state up len 1048576b driveoffset 265b plexoffset 1048576b\n" "sd name myvol.p1.s0 drive c plex myvol.p1 state up len 1048576b driveoffset 265b plexoffset 0b\n" "sd name myvol.p1.s1 drive d plex myvol.p1 state up len 1048576b driveoffset 265b plexoffset 1048576b\n" "sd name myvol.p2.s0 drive a plex myvol.p2 state init len 524288b driveoffset 1048841b plexoffset 0b\n" "sd name myvol.p2.s1 drive b plex myvol.p2 state init len 524288b driveoffset 1048841b plexoffset 524288b\n" "sd name myvol.p2.s2 drive c plex myvol.p2 state init len 524288b driveoffset 1048841b plexoffset 1048576b\n" "sd name myvol.p2.s3 drive d plex myvol.p2 state init len 524288b driveoffset 1048841b plexoffset 1572864b\n" "sd name bigraid.p0.s0 drive a plex bigraid.p0 state initializing len 4194304b driveoff set 1573129b plexoffset 0b\n" "sd name bigraid.p0.s1 drive b plex bigraid.p0 state initializing len 4194304b driveoff set 1573129b plexoffset 4194304b\n" "sd name bigraid.p0.s2 drive c plex bigraid.p0 state initializing len 4194304b driveoff set 1573129b plexoffset 8388608b\n" "sd name bigraid.p0.s3 drive d plex bigraid.p0 state initializing len 4194304b driveoff set 1573129b plexoffset 12582912b\n" "sd name bigraid.p0.s4 drive e plex bigraid.p0 state initializing len 4194304b driveoff set 1573129b plexoffset 16777216b\n" msgstr "" #. type: Plain text #: documentation/content/en/articles/vinum/_index.adoc:535 msgid "" "The obvious differences here are the presence of explicit location " "information and naming, both of which are allowed but discouraged, and the " "information on the states. [.filename]#vinum# does not store information " "about drives in the configuration information. It finds the drives by " "scanning the configured disk drives for partitions with a [.filename]#vinum# " "label. This enables [.filename]#vinum# to identify drives correctly even if " "they have been assigned different UNIX(R) drive IDs." msgstr "" #. type: Title ==== #: documentation/content/en/articles/vinum/_index.adoc:537 #, no-wrap msgid "Automatic Startup" msgstr "" #. type: Plain text #: documentation/content/en/articles/vinum/_index.adoc:541 msgid "" "_Gvinum_ always features an automatic startup once the kernel module is " "loaded, via man:loader.conf[5]. To load the _Gvinum_ module at boot time, " "add `geom_vinum_load=\"YES\"` to [.filename]#/boot/loader.conf#." msgstr "" #. type: Plain text #: documentation/content/en/articles/vinum/_index.adoc:546 msgid "" "When [.filename]#vinum# is started with `gvinum start`, [.filename]#vinum# " "reads the configuration database from one of the [.filename]#vinum# drives. " "Under normal circumstances, each drive contains an identical copy of the " "configuration database, so it does not matter which drive is read. After a " "crash, however, [.filename]#vinum# must determine which drive was updated " "most recently and read the configuration from this drive. It then updates " "the configuration, if necessary, from progressively older drives." msgstr "" #. type: Title == #: documentation/content/en/articles/vinum/_index.adoc:548 #, no-wrap msgid "Using [.filename]#vinum# for the Root File System" msgstr "" #. type: Plain text #: documentation/content/en/articles/vinum/_index.adoc:552 msgid "" "For a machine that has fully-mirrored file systems using [.filename]#vinum#, " "it is desirable to also mirror the root file system. Setting up such a " "configuration is less trivial than mirroring an arbitrary file system " "because:" msgstr "" #. type: Plain text #: documentation/content/en/articles/vinum/_index.adoc:554 msgid "" "The root file system must be available very early during the boot process, " "so the [.filename]#vinum# infrastructure must already be available at this " "time." msgstr "" #. type: Plain text #: documentation/content/en/articles/vinum/_index.adoc:555 msgid "" "The volume containing the root file system also contains the system " "bootstrap and the kernel. These must be read using the host system's native " "utilities, such as the BIOS, which often cannot be taught about the details " "of [.filename]#vinum#." msgstr "" #. type: Plain text #: documentation/content/en/articles/vinum/_index.adoc:557 msgid "" "In the following sections, the term \"root volume\" is generally used to " "describe the [.filename]#vinum# volume that contains the root file system." msgstr "" #. type: Title === #: documentation/content/en/articles/vinum/_index.adoc:558 #, no-wrap msgid "Starting up [.filename]#vinum# Early Enough for the Root File System" msgstr "" #. type: Plain text #: documentation/content/en/articles/vinum/_index.adoc:562 msgid "" "[.filename]#vinum# must be available early in the system boot as man:" "loader[8] must be able to load the vinum kernel module before starting the " "kernel. This can be accomplished by putting this line in [.filename]#/boot/" "loader.conf#:" msgstr "" #. type: delimited block . 4 #: documentation/content/en/articles/vinum/_index.adoc:566 #, no-wrap msgid "geom_vinum_load=\"YES\"\n" msgstr "" #. type: Title === #: documentation/content/en/articles/vinum/_index.adoc:568 #, no-wrap msgid "Making a [.filename]#vinum#-based Root Volume Accessible to the Bootstrap" msgstr "" #. type: Plain text #: documentation/content/en/articles/vinum/_index.adoc:573 msgid "" "The current FreeBSD bootstrap is only 7.5 KB of code and does not understand " "the internal [.filename]#vinum# structures. This means that it cannot parse " "the [.filename]#vinum# configuration data or figure out the elements of a " "boot volume. Thus, some workarounds are necessary to provide the bootstrap " "code with the illusion of a standard `a` partition that contains the root " "file system." msgstr "" #. type: Plain text #: documentation/content/en/articles/vinum/_index.adoc:575 msgid "" "For this to be possible, the following requirements must be met for the root " "volume:" msgstr "" #. type: Plain text #: documentation/content/en/articles/vinum/_index.adoc:577 msgid "The root volume must not be a stripe or `RAID`-5." msgstr "" #. type: Plain text #: documentation/content/en/articles/vinum/_index.adoc:578 msgid "" "The root volume must not contain more than one concatenated subdisk per plex." msgstr "" #. type: Plain text #: documentation/content/en/articles/vinum/_index.adoc:584 msgid "" "Note that it is desirable and possible to use multiple plexes, each " "containing one replica of the root file system. The bootstrap process will " "only use one replica for finding the bootstrap and all boot files, until the " "kernel mounts the root file system. Each single subdisk within these plexes " "needs its own `a` partition illusion, for the respective device to be " "bootable. It is not strictly needed that each of these faked `a` partitions " "is located at the same offset within its device, compared with other devices " "containing plexes of the root volume. However, it is probably a good idea " "to create the [.filename]#vinum# volumes that way so the resulting mirrored " "devices are symmetric, to avoid confusion." msgstr "" #. type: Plain text #: documentation/content/en/articles/vinum/_index.adoc:586 msgid "" "To set up these `a` partitions for each device containing part of the root " "volume, the following is required:" msgstr "" #. type: delimited block = 4 #: documentation/content/en/articles/vinum/_index.adoc:590 msgid "" "The location, offset from the beginning of the device, and size of this " "device's subdisk that is part of the root volume needs to be examined, using " "the command:" msgstr "" #. type: delimited block . 4 #: documentation/content/en/articles/vinum/_index.adoc:594 #, no-wrap msgid "# gvinum l -rv root\n" msgstr "" #. type: Plain text #: documentation/content/en/articles/vinum/_index.adoc:598 msgid "" "[.filename]#vinum# offsets and sizes are measured in bytes. They must be " "divided by 512 to obtain the block numbers that are to be used by `bsdlabel`." msgstr "" #. type: Plain text #: documentation/content/en/articles/vinum/_index.adoc:599 msgid "Run this command for each device that participates in the root volume:" msgstr "" #. type: delimited block . 4 #: documentation/content/en/articles/vinum/_index.adoc:603 #, no-wrap msgid "# bsdlabel -e devname\n" msgstr "" #. type: Plain text #: documentation/content/en/articles/vinum/_index.adoc:606 msgid "" "_devname_ must be either the name of the disk, like [.filename]#da0# for " "disks without a slice table, or the name of the slice, like [." "filename]#ad0s1#." msgstr "" #. type: Plain text #: documentation/content/en/articles/vinum/_index.adoc:609 msgid "" "If there is already an `a` partition on the device from a pre-[." "filename]#vinum# root file system, it should be renamed to something else so " "that it remains accessible (just in case), but will no longer be used by " "default to bootstrap the system. A currently mounted root file system " "cannot be renamed, so this must be executed either when being booted from a " "\"Fixit\" media, or in a two-step process where, in a mirror, the disk that " "is not been currently booted is manipulated first." msgstr "" #. type: Plain text #: documentation/content/en/articles/vinum/_index.adoc:615 msgid "" "The offset of the [.filename]#vinum# partition on this device (if any) must " "be added to the offset of the respective root volume subdisk on this " "device. The resulting value will become the `offset` value for the new `a` " "partition. The `size` value for this partition can be taken verbatim from " "the calculation above. The `fstype` should be `4.2BSD`. The `fsize`, " "`bsize`, and `cpg` values should be chosen to match the actual file system, " "though they are fairly unimportant within this context." msgstr "" #. type: Plain text #: documentation/content/en/articles/vinum/_index.adoc:618 msgid "" "That way, a new `a` partition will be established that overlaps the [." "filename]#vinum# partition on this device. `bsdlabel` will only allow for " "this overlap if the [.filename]#vinum# partition has properly been marked " "using the `vinum` fstype." msgstr "" #. type: Plain text #: documentation/content/en/articles/vinum/_index.adoc:619 msgid "" "A faked `a` partition now exists on each device that has one replica of the " "root volume. It is highly recommendable to verify the result using a command " "like:" msgstr "" #. type: delimited block . 4 #: documentation/content/en/articles/vinum/_index.adoc:623 #, no-wrap msgid "# fsck -n /dev/devnamea\n" msgstr "" #. type: delimited block = 4 #: documentation/content/en/articles/vinum/_index.adoc:628 msgid "" "It should be remembered that all files containing control information must " "be relative to the root file system in the [.filename]#vinum# volume which, " "when setting up a new [.filename]#vinum# root volume, might not match the " "root file system that is currently active. So in particular, [.filename]#/" "etc/fstab# and [.filename]#/boot/loader.conf# need to be taken care of." msgstr "" #. type: delimited block = 4 #: documentation/content/en/articles/vinum/_index.adoc:631 msgid "" "At next reboot, the bootstrap should figure out the appropriate control " "information from the new [.filename]#vinum#-based root file system, and act " "accordingly. At the end of the kernel initialization process, after all " "devices have been announced, the prominent notice that shows the success of " "this setup is a message like:" msgstr "" #. type: delimited block . 4 #: documentation/content/en/articles/vinum/_index.adoc:635 #, no-wrap msgid "Mounting root from ufs:/dev/gvinum/root\n" msgstr "" #. type: Title === #: documentation/content/en/articles/vinum/_index.adoc:637 #, no-wrap msgid "Example of a [.filename]#vinum#-based Root Setup" msgstr "" #. type: Plain text #: documentation/content/en/articles/vinum/_index.adoc:640 msgid "" "After the [.filename]#vinum# root volume has been set up, the output of " "`gvinum l -rv root` could look like:" msgstr "" #. type: delimited block . 4 #: documentation/content/en/articles/vinum/_index.adoc:649 #, no-wrap msgid "" "...\n" "Subdisk root.p0.s0:\n" "\t\tSize: 125829120 bytes (120 MB)\n" "\t\tState: up\n" "\t\tPlex root.p0 at offset 0 (0 B)\n" "\t\tDrive disk0 (/dev/da0h) at offset 135680 (132 kB)\n" msgstr "" #. type: delimited block . 4 #: documentation/content/en/articles/vinum/_index.adoc:655 #, no-wrap msgid "" "Subdisk root.p1.s0:\n" "\t\tSize: 125829120 bytes (120 MB)\n" "\t\tState: up\n" "\t\tPlex root.p1 at offset 0 (0 B)\n" "\t\tDrive disk1 (/dev/da1h) at offset 135680 (132 kB)\n" msgstr "" #. type: Plain text #: documentation/content/en/articles/vinum/_index.adoc:661 msgid "" "The values to note are `135680` for the offset, relative to partition [." "filename]#/dev/da0h#. This translates to 265 512-byte disk blocks in " "`bsdlabel`'s terms. Likewise, the size of this root volume is 245760 512-" "byte blocks. [.filename]#/dev/da1h#, containing the second replica of this " "root volume, has a symmetric setup." msgstr "" #. type: Plain text #: documentation/content/en/articles/vinum/_index.adoc:663 msgid "The bsdlabel for these devices might look like:" msgstr "" #. type: delimited block . 4 #: documentation/content/en/articles/vinum/_index.adoc:672 #, no-wrap msgid "" "...\n" "8 partitions:\n" "# size offset fstype [fsize bsize bps/cpg]\n" " a: 245760 281 4.2BSD 2048 16384 0 # (Cyl. 0*- 15*)\n" " c: 71771688 0 unused 0 0 # (Cyl. 0 - 4467*)\n" " h: 71771672 16 vinum # (Cyl. 0*- 4467*)\n" msgstr "" #. type: Plain text #: documentation/content/en/articles/vinum/_index.adoc:677 msgid "" "It can be observed that the `size` parameter for the faked `a` partition " "matches the value outlined above, while the `offset` parameter is the sum of " "the offset within the [.filename]#vinum# partition `h`, and the offset of " "this partition within the device or slice. This is a typical setup that is " "necessary to avoid the problem described in <>. The entire `a` partition is completely " "within the `h` partition containing all the [.filename]#vinum# data for this " "device." msgstr "" #. type: Plain text #: documentation/content/en/articles/vinum/_index.adoc:679 msgid "" "In the above example, the entire device is dedicated to [.filename]#vinum# " "and there is no leftover pre-[.filename]#vinum# root partition." msgstr "" #. type: Title === #: documentation/content/en/articles/vinum/_index.adoc:680 #, no-wrap msgid "Troubleshooting" msgstr "" #. type: Plain text #: documentation/content/en/articles/vinum/_index.adoc:683 msgid "The following list contains a few known pitfalls and solutions." msgstr "" #. type: Title ==== #: documentation/content/en/articles/vinum/_index.adoc:684 #, no-wrap msgid "System Bootstrap Loads, but System Does Not Boot" msgstr "" #. type: Plain text #: documentation/content/en/articles/vinum/_index.adoc:688 msgid "" "If for any reason the system does not continue to boot, the bootstrap can be " "interrupted by pressing kbd:[space] at the 10-seconds warning. The loader " "variable `vinum.autostart` can be examined by typing `show` and manipulated " "using `set` or `unset`." msgstr "" #. type: Plain text #: documentation/content/en/articles/vinum/_index.adoc:690 msgid "" "If the [.filename]#vinum# kernel module was not yet in the list of modules " "to load automatically, type `load geom_vinum`." msgstr "" #. type: Plain text #: documentation/content/en/articles/vinum/_index.adoc:693 msgid "" "When ready, the boot process can be continued by typing `boot -as` which `-" "as` requests the kernel to ask for the root file system to mount (`-a`) and " "make the boot process stop in single-user mode (`-s`), where the root file " "system is mounted read-only. That way, even if only one plex of a multi-" "plex volume has been mounted, no data inconsistency between plexes is being " "risked." msgstr "" #. type: Plain text #: documentation/content/en/articles/vinum/_index.adoc:699 msgid "" "At the prompt asking for a root file system to mount, any device that " "contains a valid root file system can be entered. If [.filename]#/etc/" "fstab# is set up correctly, the default should be something like `ufs:/dev/" "gvinum/root`. A typical alternate choice would be something like `ufs:da0d` " "which could be a hypothetical partition containing the pre-[." "filename]#vinum# root file system. Care should be taken if one of the alias " "`a` partitions is entered here, that it actually references the subdisks of " "the [.filename]#vinum# root device, because in a mirrored setup, this would " "only mount one piece of a mirrored root device. If this file system is to " "be mounted read-write later on, it is necessary to remove the other plex(es) " "of the [.filename]#vinum# root volume since these plexes would otherwise " "carry inconsistent data." msgstr "" #. type: Title ==== #: documentation/content/en/articles/vinum/_index.adoc:700 #, no-wrap msgid "Only Primary Bootstrap Loads" msgstr "" #. type: Plain text #: documentation/content/en/articles/vinum/_index.adoc:705 msgid "" "If [.filename]#/boot/loader# fails to load, but the primary bootstrap still " "loads (visible by a single dash in the left column of the screen right after " "the boot process starts), an attempt can be made to interrupt the primary " "bootstrap by pressing kbd:[space]. This will make the bootstrap stop in " "extref:{handbook}[stage two, boot-boot1]. An attempt can be made here to " "boot off an alternate partition, like the partition containing the previous " "root file system that has been moved away from `a`." msgstr "" #. type: Title ==== #: documentation/content/en/articles/vinum/_index.adoc:707 #, no-wrap msgid "Nothing Boots, the Bootstrap Panics" msgstr "" #. type: Plain text #: documentation/content/en/articles/vinum/_index.adoc:713 msgid "" "This situation will happen if the bootstrap had been destroyed by the [." "filename]#vinum# installation. Unfortunately, [.filename]#vinum# " "accidentally leaves only 4 KB at the beginning of its partition free before " "starting to write its [.filename]#vinum# header information. However, the " "stage one and two bootstraps plus the bsdlabel require 8 KB. So if a [." "filename]#vinum# partition was started at offset 0 within a slice or disk " "that was meant to be bootable, the [.filename]#vinum# setup will trash the " "bootstrap." msgstr "" #. type: Plain text #: documentation/content/en/articles/vinum/_index.adoc:716 msgid "" "Similarly, if the above situation has been recovered, by booting from a " "\"Fixit\" media, and the bootstrap has been re-installed using `bsdlabel -B` " "as described in extref:{handbook}[stage two, boot-boot1], the bootstrap will " "trash the [.filename]#vinum# header, and [.filename]#vinum# will no longer " "find its disk(s). Though no actual [.filename]#vinum# configuration data or " "data in [.filename]#vinum# volumes will be trashed, and it would be possible " "to recover all the data by entering exactly the same [.filename]#vinum# " "configuration data again, the situation is hard to fix. It is necessary to " "move the entire [.filename]#vinum# partition by at least 4 KB, to have the [." "filename]#vinum# header and the system bootstrap no longer collide." msgstr ""