# 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: 2024-01-17 20:35-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/books/handbook/disks/_index.adoc:1 #, no-wrap msgid "This chapter covers the use of disks and storage media in FreeBSD. This includes SCSI and IDE disks, CD and DVD media, memory-backed disks, and USB storage devices." msgstr "" #. type: YAML Front Matter: part #: documentation/content/en/books/handbook/disks/_index.adoc:1 #, no-wrap msgid "Part III. System Administration" msgstr "" #. type: YAML Front Matter: title #: documentation/content/en/books/handbook/disks/_index.adoc:1 #, no-wrap msgid "Chapter 20. Storage" msgstr "" #. type: Title = #: documentation/content/en/books/handbook/disks/_index.adoc:14 #, no-wrap msgid "Storage" msgstr "" #. type: Title == #: documentation/content/en/books/handbook/disks/_index.adoc:52 #, no-wrap msgid "Synopsis" msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:56 msgid "" "This chapter covers the use of disks and storage media in FreeBSD. This " "includes SCSI and IDE disks, CD and DVD media, memory-backed disks, and USB " "storage devices." msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:58 msgid "After reading this chapter, you will know:" msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:60 msgid "How to add additional hard disks to a FreeBSD system." msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:61 msgid "How to grow the size of a disk's partition on FreeBSD." msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:62 msgid "How to configure FreeBSD to use USB storage devices." msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:63 msgid "How to use CD and DVD media on a FreeBSD system." msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:64 msgid "How to use the backup programs available under FreeBSD." msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:65 msgid "How to set up memory disks." msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:66 msgid "What file system snapshots are and how to use them efficiently." msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:67 msgid "How to use quotas to limit disk space usage." msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:68 msgid "How to encrypt disks and swap to secure them against attackers." msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:69 msgid "How to configure a highly available storage network." msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:71 msgid "Before reading this chapter, you should:" msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:73 msgid "" "Know how to crossref:kernelconfig[kernelconfig,configure and install a new " "FreeBSD kernel]." msgstr "" #. type: Title == #: documentation/content/en/books/handbook/disks/_index.adoc:75 #, no-wrap msgid "Adding Disks" msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:80 msgid "" "This section describes how to add a new SATA disk to a machine that " "currently only has a single drive. First, turn off the computer and install " "the drive in the computer following the instructions of the computer, " "controller, and drive manufacturers. Reboot the system and become `root`." msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:83 msgid "" "Inspect [.filename]#/var/run/dmesg.boot# to ensure the new disk was found. " "In this example, the newly added SATA drive will appear as [.filename]#ada1#." msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:86 msgid "" "For this example, a single large partition will be created on the new disk. " "The http://en.wikipedia.org/wiki/GUID_Partition_Table[GPT] partitioning " "scheme will be used in preference to the older and less versatile MBR scheme." msgstr "" #. type: delimited block = 4 #: documentation/content/en/books/handbook/disks/_index.adoc:91 msgid "" "If the disk to be added is not blank, old partition information can be " "removed with `gpart delete`. See man:gpart[8] for details." msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:95 msgid "" "The partition scheme is created, and then a single partition is added. To " "improve performance on newer disks with larger hardware block sizes, the " "partition is aligned to one megabyte boundaries:" msgstr "" #. type: delimited block . 4 #: documentation/content/en/books/handbook/disks/_index.adoc:100 #, no-wrap msgid "" "# gpart create -s GPT ada1\n" "# gpart add -t freebsd-ufs -a 1M ada1\n" msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:104 msgid "" "Depending on use, several smaller partitions may be desired. See man:" "gpart[8] for options to create partitions smaller than a whole disk." msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:106 msgid "The disk partition information can be viewed with `gpart show`:" msgstr "" #. type: delimited block . 4 #: documentation/content/en/books/handbook/disks/_index.adoc:114 #, no-wrap msgid "" "% gpart show ada1\n" "=> 34 1465146988 ada1 GPT (699G)\n" " 34 2014 - free - (1.0M)\n" " 2048 1465143296 1 freebsd-ufs (699G)\n" " 1465145344 1678 - free - (839K)\n" msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:117 msgid "A file system is created in the new partition on the new disk:" msgstr "" #. type: delimited block . 4 #: documentation/content/en/books/handbook/disks/_index.adoc:121 #, no-wrap msgid "# newfs -U /dev/ada1p1\n" msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:124 msgid "" "An empty directory is created as a _mountpoint_, a location for mounting the " "new disk in the original disk's file system:" msgstr "" #. type: delimited block . 4 #: documentation/content/en/books/handbook/disks/_index.adoc:128 #, no-wrap msgid "# mkdir /newdisk\n" msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:131 msgid "" "Finally, an entry is added to [.filename]#/etc/fstab# so the new disk will " "be mounted automatically at startup:" msgstr "" #. type: delimited block . 4 #: documentation/content/en/books/handbook/disks/_index.adoc:135 #, no-wrap msgid "/dev/ada1p1\t/newdisk\tufs\trw\t2\t2\n" msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:138 msgid "The new disk can be mounted manually, without restarting the system:" msgstr "" #. type: delimited block . 4 #: documentation/content/en/books/handbook/disks/_index.adoc:142 #, no-wrap msgid "# mount /newdisk\n" msgstr "" #. type: Title == #: documentation/content/en/books/handbook/disks/_index.adoc:145 #, no-wrap msgid "Resizing and Growing Disks" msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:151 msgid "" "A disk's capacity can increase without any changes to the data already " "present. This happens commonly with virtual machines, when the virtual disk " "turns out to be too small and is enlarged. Sometimes a disk image is " "written to a USB memory stick, but does not use the full capacity. Here we " "describe how to resize or _grow_ disk contents to take advantage of " "increased capacity." msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:154 msgid "" "Determine the device name of the disk to be resized by inspecting [." "filename]#/var/run/dmesg.boot#. In this example, there is only one SATA " "disk in the system, so the drive will appear as [.filename]#ada0#." msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:156 msgid "List the partitions on the disk to see the current configuration:" msgstr "" #. type: delimited block . 4 #: documentation/content/en/books/handbook/disks/_index.adoc:165 #, no-wrap msgid "" "# gpart show ada0\n" "=> 34 83886013 ada0 GPT (48G) [CORRUPT]\n" " 34 128 1 freebsd-boot (64k)\n" " 162 79691648 2 freebsd-ufs (38G)\n" " 79691810 4194236 3 freebsd-swap (2G)\n" " 83886046 1 - free - (512B)\n" msgstr "" #. type: delimited block = 4 #: documentation/content/en/books/handbook/disks/_index.adoc:171 msgid "" "If the disk was formatted with the http://en.wikipedia.org/wiki/" "GUID_Partition_Table[GPT] partitioning scheme, it may show as \"corrupted\" " "because the GPT backup partition table is no longer at the end of the " "drive. Fix the backup partition table with `gpart`:" msgstr "" #. type: delimited block . 4 #: documentation/content/en/books/handbook/disks/_index.adoc:176 #, no-wrap msgid "" "# gpart recover ada0\n" "ada0 recovered\n" msgstr "" #. type: delimited block = 4 #: documentation/content/en/books/handbook/disks/_index.adoc:181 msgid "" "Now the additional space on the disk is available for use by a new " "partition, or an existing partition can be expanded:" msgstr "" #. type: delimited block . 4 #: documentation/content/en/books/handbook/disks/_index.adoc:190 #, no-wrap msgid "" "# gpart show ada0\n" "=> 34 102399933 ada0 GPT (48G)\n" " 34 128 1 freebsd-boot (64k)\n" " 162 79691648 2 freebsd-ufs (38G)\n" " 79691810 4194236 3 freebsd-swap (2G)\n" " 83886046 18513921 - free - (8.8G)\n" msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:195 msgid "" "Partitions can only be resized into contiguous free space. Here, the last " "partition on the disk is the swap partition, but the second partition is the " "one that needs to be resized. Swap partitions only contain temporary data, " "so it can safely be unmounted, deleted, and then recreate the third " "partition after resizing the second partition." msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:197 msgid "Disable the swap partition:" msgstr "" #. type: delimited block . 4 #: documentation/content/en/books/handbook/disks/_index.adoc:201 #, no-wrap msgid "# swapoff /dev/ada0p3\n" msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:204 msgid "" "Delete the third partition, specified by the `-i` flag, from the disk _ada0_." msgstr "" #. type: delimited block . 4 #: documentation/content/en/books/handbook/disks/_index.adoc:214 #, no-wrap msgid "" "# gpart delete -i 3 ada0\n" "ada0p3 deleted\n" "# gpart show ada0\n" "=> 34 102399933 ada0 GPT (48G)\n" " 34 128 1 freebsd-boot (64k)\n" " 162 79691648 2 freebsd-ufs (38G)\n" " 79691810 22708157 - free - (10G)\n" msgstr "" #. type: delimited block = 4 #: documentation/content/en/books/handbook/disks/_index.adoc:222 msgid "" "There is risk of data loss when modifying the partition table of a mounted " "file system. It is best to perform the following steps on an unmounted file " "system while running from a live CD-ROM or USB device. However, if " "absolutely necessary, a mounted file system can be resized after disabling " "GEOM safety features:" msgstr "" #. type: delimited block . 4 #: documentation/content/en/books/handbook/disks/_index.adoc:226 #, no-wrap msgid "# sysctl kern.geom.debugflags=16\n" msgstr "" #. type: delimited block = 4 #: documentation/content/en/books/handbook/disks/_index.adoc:235 msgid "" "Resize the partition, leaving room to recreate a swap partition of the " "desired size. The partition to resize is specified with `-i`, and the new " "desired size with `-s`. Optionally, alignment of the partition is " "controlled with `-a`. This only modifies the size of the partition. The " "file system in the partition will be expanded in a separate step." msgstr "" #. type: delimited block . 4 #: documentation/content/en/books/handbook/disks/_index.adoc:245 #, no-wrap msgid "" "# gpart resize -i 2 -s 47G -a 4k ada0\n" "ada0p2 resized\n" "# gpart show ada0\n" "=> 34 102399933 ada0 GPT (48G)\n" " 34 128 1 freebsd-boot (64k)\n" " 162 98566144 2 freebsd-ufs (47G)\n" " 98566306 3833661 - free - (1.8G)\n" msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:249 msgid "" "Recreate the swap partition and activate it. If no size is specified with `-" "s`, all remaining space is used:" msgstr "" #. type: delimited block . 4 #: documentation/content/en/books/handbook/disks/_index.adoc:260 #, no-wrap msgid "" "# gpart add -t freebsd-swap -a 4k ada0\n" "ada0p3 added\n" "# gpart show ada0\n" "=> 34 102399933 ada0 GPT (48G)\n" " 34 128 1 freebsd-boot (64k)\n" " 162 98566144 2 freebsd-ufs (47G)\n" " 98566306 3833661 3 freebsd-swap (1.8G)\n" "# swapon /dev/ada0p3\n" msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:263 msgid "" "Grow the UFS file system to use the new capacity of the resized partition:" msgstr "" #. type: delimited block . 4 #: documentation/content/en/books/handbook/disks/_index.adoc:273 #, no-wrap msgid "" "# growfs /dev/ada0p2\n" "Device is mounted read-write; resizing will result in temporary write suspension for /.\n" "It's strongly recommended to make a backup before growing the file system.\n" "OK to grow file system on /dev/ada0p2, mounted on /, from 38GB to 47GB? [Yes/No] Yes\n" "super-block backups (for fsck -b #) at:\n" " 80781312, 82063552, 83345792, 84628032, 85910272, 87192512, 88474752,\n" " 89756992, 91039232, 92321472, 93603712, 94885952, 96168192, 97450432\n" msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:276 msgid "" "If the file system is ZFS, the resize is triggered by running the `online` " "subcommand with `-e`:" msgstr "" #. type: delimited block . 4 #: documentation/content/en/books/handbook/disks/_index.adoc:280 #, no-wrap msgid "# zpool online -e zroot /dev/ada0p2\n" msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:283 msgid "" "Both the partition and the file system on it have now been resized to use " "the newly-available disk space." msgstr "" #. type: Title == #: documentation/content/en/books/handbook/disks/_index.adoc:285 #, no-wrap msgid "USB Storage Devices" msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:289 msgid "" "Many external storage solutions, such as hard drives, USB thumbdrives, and " "CD and DVD burners, use the Universal Serial Bus (USB). FreeBSD provides " "support for USB 1.x, 2.0, and 3.0 devices." msgstr "" #. type: delimited block = 4 #: documentation/content/en/books/handbook/disks/_index.adoc:294 msgid "" "USB 3.0 support is not compatible with some hardware, including Haswell " "(Lynx point) chipsets. If FreeBSD boots with a `failed with error 19` " "message, disable xHCI/USB3 in the system BIOS." msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:298 msgid "" "Support for USB storage devices is built into the [.filename]#GENERIC# " "kernel. For a custom kernel, be sure that the following lines are present " "in the kernel configuration file:" msgstr "" #. type: delimited block . 4 #: documentation/content/en/books/handbook/disks/_index.adoc:311 #, no-wrap msgid "" "device scbus\t# SCSI bus (required for ATA/SCSI)\n" "device da\t# Direct Access (disks)\n" "device pass\t# Passthrough device (direct ATA/SCSI access)\n" "device uhci\t# provides USB 1.x support\n" "device ohci\t# provides USB 1.x support\n" "device ehci\t# provides USB 2.0 support\n" "device xhci\t# provides USB 3.0 support\n" "device usb\t# USB Bus (required)\n" "device umass\t# Disks/Mass storage - Requires scbus and da\n" "device cd\t# needed for CD and DVD burners\n" msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:315 msgid "" "FreeBSD uses the man:umass[4] driver which uses the SCSI subsystem to access " "USB storage devices. Since any USB device will be seen as a SCSI device by " "the system, if the USB device is a CD or DVD burner, do _not_ include " "`device atapicam` in a custom kernel configuration file." msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:317 msgid "" "The rest of this section demonstrates how to verify that a USB storage " "device is recognized by FreeBSD and how to configure the device so that it " "can be used." msgstr "" #. type: Title === #: documentation/content/en/books/handbook/disks/_index.adoc:318 #, no-wrap msgid "Device Configuration" msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:323 msgid "" "To test the USB configuration, plug in the USB device. Use `dmesg` to " "confirm that the drive appears in the system message buffer. It should look " "something like this:" msgstr "" #. type: delimited block . 4 #: documentation/content/en/books/handbook/disks/_index.adoc:335 #, no-wrap msgid "" "umass0: on usbus0\n" "umass0: SCSI over Bulk-Only; quirks = 0x0100\n" "umass0:4:0:-1: Attached to scbus4\n" "da0 at umass-sim0 bus 0 scbus4 target 0 lun 0\n" "da0: Fixed Direct Access SCSI-4 device\n" "da0: Serial Number WD-WXE508CAN263\n" "da0: 40.000MB/s transfers\n" "da0: 152627MB (312581808 512 byte sectors: 255H 63S/T 19457C)\n" "da0: quirks=0x2\n" msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:338 msgid "" "The brand, device node ([.filename]#da0#), speed, and size will differ " "according to the device." msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:340 msgid "" "Since the USB device is seen as a SCSI one, `camcontrol` can be used to list " "the USB storage devices attached to the system:" msgstr "" #. type: delimited block . 4 #: documentation/content/en/books/handbook/disks/_index.adoc:345 #, no-wrap msgid "" "# camcontrol devlist\n" " at scbus4 target 0 lun 0 (pass3,da0)\n" msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:349 msgid "" "Alternately, `usbconfig` can be used to list the device. Refer to man:" "usbconfig[8] for more information about this command." msgstr "" #. type: delimited block . 4 #: documentation/content/en/books/handbook/disks/_index.adoc:354 #, no-wrap msgid "" "# usbconfig\n" "ugen0.3: at usbus0, cfg=0 md=HOST spd=HIGH (480Mbps) pwr=ON (2mA)\n" msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:358 msgid "" "If the device has not been formatted, refer to <> for " "instructions on how to format and create partitions on the USB drive. If " "the drive comes with a file system, it can be mounted by `root` using the " "instructions in crossref:basics[mount-unmount,“Mounting and Unmounting File " "Systems”]." msgstr "" #. type: delimited block = 4 #: documentation/content/en/books/handbook/disks/_index.adoc:363 msgid "" "Allowing untrusted users to mount arbitrary media, by enabling `vfs." "usermount` as described below, should not be considered safe from a security " "point of view. Most file systems were not built to safeguard against " "malicious devices." msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:367 msgid "" "To make the device mountable as a normal user, one solution is to make all " "users of the device a member of the `operator` group using man:pw[8]. Next, " "ensure that `operator` is able to read and write the device by adding these " "lines to [.filename]#/etc/devfs.rules#:" msgstr "" #. type: delimited block . 4 #: documentation/content/en/books/handbook/disks/_index.adoc:372 #, no-wrap msgid "" "[localrules=5]\n" "add path 'da*' mode 0660 group operator\n" msgstr "" #. type: delimited block = 4 #: documentation/content/en/books/handbook/disks/_index.adoc:377 msgid "" "If internal SCSI disks are also installed in the system, change the second " "line as follows:" msgstr "" #. type: delimited block . 4 #: documentation/content/en/books/handbook/disks/_index.adoc:381 #, no-wrap msgid "add path 'da[3-9]*' mode 0660 group operator\n" msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:386 msgid "" "This will exclude the first three SCSI disks ([.filename]#da0# to [." "filename]#da2#) from belonging to the `operator` group. Replace _3_ with " "the number of internal SCSI disks. Refer to man:devfs.rules[5] for more " "information about this file." msgstr "" #. type: delimited block = 4 #: documentation/content/en/books/handbook/disks/_index.adoc:389 msgid "Next, enable the ruleset in [.filename]#/etc/rc.conf#:" msgstr "" #. type: delimited block . 4 #: documentation/content/en/books/handbook/disks/_index.adoc:393 #, no-wrap msgid "devfs_system_ruleset=\"localrules\"\n" msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:396 msgid "" "Then, instruct the system to allow regular users to mount file systems by " "adding the following line to [.filename]#/etc/sysctl.conf#:" msgstr "" #. type: delimited block . 4 #: documentation/content/en/books/handbook/disks/_index.adoc:400 #, no-wrap msgid "vfs.usermount=1\n" msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:403 msgid "" "Since this only takes effect after the next reboot, use `sysctl` to set this " "variable now:" msgstr "" #. type: delimited block . 4 #: documentation/content/en/books/handbook/disks/_index.adoc:408 #, no-wrap msgid "" "# sysctl vfs.usermount=1\n" "vfs.usermount: 0 -> 1\n" msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:414 msgid "" "The final step is to create a directory where the file system is to be " "mounted. This directory needs to be owned by the user that is to mount the " "file system. One way to do that is for `root` to create a subdirectory " "owned by that user as [.filename]#/mnt/username#. In the following example, " "replace _username_ with the login name of the user and _usergroup_ with the " "user's primary group:" msgstr "" #. type: delimited block . 4 #: documentation/content/en/books/handbook/disks/_index.adoc:419 #, no-wrap msgid "" "# mkdir /mnt/username\n" "# chown username:usergroup /mnt/username\n" msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:423 msgid "" "Suppose a USB thumbdrive is plugged in, and a device [.filename]#/dev/da0s1# " "appears. If the device is formatted with a FAT file system, the user can " "mount it using:" msgstr "" #. type: delimited block . 4 #: documentation/content/en/books/handbook/disks/_index.adoc:427 #, no-wrap msgid "% mount -t msdosfs -o -m=644,-M=755 /dev/da0s1 /mnt/username\n" msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:430 msgid "Before the device can be unplugged, it _must_ be unmounted first:" msgstr "" #. type: delimited block . 4 #: documentation/content/en/books/handbook/disks/_index.adoc:434 #, no-wrap msgid "% umount /mnt/username\n" msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:437 msgid "" "After device removal, the system message buffer will show messages similar " "to the following:" msgstr "" #. type: delimited block . 4 #: documentation/content/en/books/handbook/disks/_index.adoc:444 #, no-wrap msgid "" "umass0: at uhub3, port 2, addr 3 (disconnected)\n" "da0 at umass-sim0 bus 0 scbus4 target 0 lun 0\n" "da0: s/n WD-WXE508CAN263 detached\n" "(da0:umass-sim0:0:0:0): Periph destroyed\n" msgstr "" #. type: Title === #: documentation/content/en/books/handbook/disks/_index.adoc:446 #, no-wrap msgid "Automounting Removable Media" msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:449 msgid "" "USB devices can be automatically mounted by uncommenting this line in [." "filename]#/etc/auto_master#:" msgstr "" #. type: delimited block . 4 #: documentation/content/en/books/handbook/disks/_index.adoc:453 #, no-wrap msgid "/media\t\t-media\t\t-nosuid\n" msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:456 msgid "Then add these lines to [.filename]#/etc/devd.conf#:" msgstr "" #. type: delimited block . 4 #: documentation/content/en/books/handbook/disks/_index.adoc:464 #, no-wrap msgid "" "notify 100 {\n" "\tmatch \"system\" \"GEOM\";\n" "\tmatch \"subsystem\" \"DEV\";\n" "\taction \"/usr/sbin/automount -c\";\n" "};\n" msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:467 msgid "" "Reload the configuration if man:autofs[5] and man:devd[8] are already " "running:" msgstr "" #. type: delimited block . 4 #: documentation/content/en/books/handbook/disks/_index.adoc:472 #, no-wrap msgid "" "# service automount restart\n" "# service devd restart\n" msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:475 msgid "" "man:autofs[5] can be set to start at boot by adding this line to [." "filename]#/etc/rc.conf#:" msgstr "" #. type: delimited block . 4 #: documentation/content/en/books/handbook/disks/_index.adoc:479 #, no-wrap msgid "autofs_enable=\"YES\"\n" msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:482 msgid "man:autofs[5] requires man:devd[8] to be enabled, as it is by default." msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:484 msgid "Start the services immediately with:" msgstr "" #. type: delimited block . 4 #: documentation/content/en/books/handbook/disks/_index.adoc:491 #, no-wrap msgid "" "# service automount start\n" "# service automountd start\n" "# service autounmountd start\n" "# service devd start\n" msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:496 msgid "" "Each file system that can be automatically mounted appears as a directory in " "[.filename]#/media/#. The directory is named after the file system label. " "If the label is missing, the directory is named after the device node." msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:499 msgid "" "The file system is transparently mounted on the first access, and unmounted " "after a period of inactivity. Automounted drives can also be unmounted " "manually:" msgstr "" #. type: delimited block . 4 #: documentation/content/en/books/handbook/disks/_index.adoc:503 #, no-wrap msgid "# automount -fu\n" msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:507 msgid "" "This mechanism is typically used for memory cards and USB memory sticks. It " "can be used with any block device, including optical drives or iSCSILUNs." msgstr "" #. type: Title == #: documentation/content/en/books/handbook/disks/_index.adoc:509 #, no-wrap msgid "Creating and Using CD Media" msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:515 msgid "" "Compact Disc (CD) media provide a number of features that differentiate them " "from conventional disks. They are designed so that they can be read " "continuously without delays to move the head between tracks. While CD media " "do have tracks, these refer to a section of data to be read continuously, " "and not a physical property of the disk. The ISO 9660 file system was " "designed to deal with these differences." msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:519 msgid "" "The FreeBSD Ports Collection provides several utilities for burning and " "duplicating audio and data CDs. This chapter demonstrates the use of " "several command line utilities. For CD burning software with a graphical " "utility, consider installing the package:sysutils/xcdroast[] or package:" "sysutils/k3b[] packages or ports." msgstr "" #. type: Title === #: documentation/content/en/books/handbook/disks/_index.adoc:521 #, no-wrap msgid "Supported Devices" msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:525 msgid "" "The [.filename]#GENERIC# kernel provides support for SCSI, USB, and ATAPICD " "readers and burners. If a custom kernel is used, the options that need to " "be present in the kernel configuration file vary by the type of device." msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:527 msgid "For a SCSI burner, make sure these options are present:" msgstr "" #. type: delimited block . 4 #: documentation/content/en/books/handbook/disks/_index.adoc:534 #, no-wrap msgid "" "device scbus\t# SCSI bus (required for ATA/SCSI)\n" "device da\t# Direct Access (disks)\n" "device pass\t# Passthrough device (direct ATA/SCSI access)\n" "device cd\t# needed for CD and DVD burners\n" msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:537 msgid "For a USB burner, make sure these options are present:" msgstr "" #. type: delimited block . 4 #: documentation/content/en/books/handbook/disks/_index.adoc:550 #, no-wrap msgid "" "device scbus\t# SCSI bus (required for ATA/SCSI)\n" "device da\t# Direct Access (disks)\n" "device pass\t# Passthrough device (direct ATA/SCSI access)\n" "device cd\t# needed for CD and DVD burners\n" "device uhci\t# provides USB 1.x support\n" "device ohci\t# provides USB 1.x support\n" "device ehci\t# provides USB 2.0 support\n" "device xhci\t# provides USB 3.0 support\n" "device usb\t# USB Bus (required)\n" "device umass\t# Disks/Mass storage - Requires scbus and da\n" msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:553 msgid "For an ATAPI burner, make sure these options are present:" msgstr "" #. type: delimited block . 4 #: documentation/content/en/books/handbook/disks/_index.adoc:560 #, no-wrap msgid "" "device ata\t# Legacy ATA/SATA controllers\n" "device scbus\t# SCSI bus (required for ATA/SCSI)\n" "device pass\t# Passthrough device (direct ATA/SCSI access)\n" "device cd\t# needed for CD and DVD burners\n" msgstr "" #. type: delimited block = 4 #: documentation/content/en/books/handbook/disks/_index.adoc:565 msgid "" "On FreeBSD versions prior to 10.x, this line is also needed in the kernel " "configuration file if the burner is an ATAPI device:" msgstr "" #. type: delimited block . 4 #: documentation/content/en/books/handbook/disks/_index.adoc:569 #, no-wrap msgid "device atapicam\n" msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:572 msgid "" "Alternately, this driver can be loaded at boot time by adding the following " "line to [.filename]#/boot/loader.conf#:" msgstr "" #. type: delimited block . 4 #: documentation/content/en/books/handbook/disks/_index.adoc:576 #, no-wrap msgid "atapicam_load=\"YES\"\n" msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:579 msgid "" "This will require a reboot of the system as this driver can only be loaded " "at boot time." msgstr "" #. type: delimited block = 4 #: documentation/content/en/books/handbook/disks/_index.adoc:583 msgid "" "To verify that FreeBSD recognizes the device, run `dmesg` and look for an " "entry for the device. On systems prior to 10.x, the device name in the " "first line of the output will be [.filename]#acd0# instead of [." "filename]#cd0#." msgstr "" #. type: delimited block . 4 #: documentation/content/en/books/handbook/disks/_index.adoc:592 #, no-wrap msgid "" "% dmesg | grep cd\n" "cd0 at ahcich1 bus 0 scbus1 target 0 lun 0\n" "cd0: Removable CD-ROM SCSI-0 device\n" "cd0: Serial Number M3OD3S34152\n" "cd0: 150.000MB/s transfers (SATA 1.x, UDMA6, ATAPI 12bytes, PIO 8192bytes)\n" "cd0: Attempt to query device size failed: NOT READY, Medium not present - tray closed\n" msgstr "" #. type: Title === #: documentation/content/en/books/handbook/disks/_index.adoc:595 #, no-wrap msgid "Burning a CD" msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:599 msgid "" "In FreeBSD, `cdrecord` can be used to burn CDs. This command is installed " "with the package:sysutils/cdrtools[] package or port." msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:602 msgid "" "While `cdrecord` has many options, basic usage is simple. Specify the name " "of the ISO file to burn and, if the system has multiple burner devices, " "specify the name of the device to use:" msgstr "" #. type: delimited block . 4 #: documentation/content/en/books/handbook/disks/_index.adoc:606 #, no-wrap msgid "# cdrecord dev=device imagefile.iso\n" msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:609 msgid "" "To determine the device name of the burner, use `-scanbus` which might " "produce results like this:" msgstr "" #. type: delimited block . 4 #: documentation/content/en/books/handbook/disks/_index.adoc:633 #, no-wrap msgid "" "# cdrecord -scanbus\n" "ProDVD-ProBD-Clone 3.00 (amd64-unknown-freebsd10.0) Copyright (C) 1995-2010 Jörg Schilling\n" "Using libscg version 'schily-0.9'\n" "scsibus0:\n" " 0,0,0 0) 'SEAGATE ' 'ST39236LW ' '0004' Disk\n" " 0,1,0 1) 'SEAGATE ' 'ST39173W ' '5958' Disk\n" " 0,2,0 2) *\n" " 0,3,0 3) 'iomega ' 'jaz 1GB ' 'J.86' Removable Disk\n" " 0,4,0 4) 'NEC ' 'CD-ROM DRIVE:466' '1.26' Removable CD-ROM\n" " 0,5,0 5) *\n" " 0,6,0 6) *\n" " 0,7,0 7) *\n" "scsibus1:\n" " 1,0,0 100) *\n" " 1,1,0 101) *\n" " 1,2,0 102) *\n" " 1,3,0 103) *\n" " 1,4,0 104) *\n" " 1,5,0 105) 'YAMAHA ' 'CRW4260 ' '1.0q' Removable CD-ROM\n" " 1,6,0 106) 'ARTEC ' 'AM12S ' '1.06' Scanner\n" " 1,7,0 107) *\n" msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:638 msgid "" "Locate the entry for the CD burner and use the three numbers separated by " "commas as the value for `dev`. In this case, the Yamaha burner device is " "`1,5,0`, so the appropriate input to specify that device is `dev=1,5,0`. " "Refer to the manual page for `cdrecord` for other ways to specify this value " "and for information on writing audio tracks and controlling the write speed." msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:640 msgid "" "Alternately, run the following command to get the device address of the " "burner:" msgstr "" #. type: delimited block . 4 #: documentation/content/en/books/handbook/disks/_index.adoc:645 #, no-wrap msgid "" "# camcontrol devlist\n" " at scbus1 target 0 lun 0 (cd0,pass0)\n" msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:649 msgid "" "Use the numeric values for `scbus`, `target`, and `lun`. For this example, " "`1,0,0` is the device name to use." msgstr "" #. type: Title === #: documentation/content/en/books/handbook/disks/_index.adoc:651 #, no-wrap msgid "Writing Data to an ISO File System" msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:656 msgid "" "In order to produce a data CD, the data files that are going to make up the " "tracks on the CD must be prepared before they can be burned to the CD. In " "FreeBSD, package:sysutils/cdrtools[] installs `mkisofs`, which can be used " "to produce an ISO 9660 file system that is an image of a directory tree " "within a UNIX(R) file system. The simplest usage is to specify the name of " "the ISO file to create and the path to the files to place into the ISO 9660 " "file system:" msgstr "" #. type: delimited block . 4 #: documentation/content/en/books/handbook/disks/_index.adoc:660 #, no-wrap msgid "# mkisofs -o imagefile.iso /path/to/tree\n" msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:663 msgid "" "This command maps the file names in the specified path to names that fit the " "limitations of the standard ISO 9660 file system, and will exclude files " "that do not meet the standard for ISO file systems." msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:666 msgid "" "A number of options are available to overcome the restrictions imposed by " "the standard. In particular, `-R` enables the Rock Ridge extensions common " "to UNIX(R) systems and `-J` enables Joliet extensions used by Microsoft(R) " "systems." msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:669 msgid "" "For CDs that are going to be used only on FreeBSD systems, `-U` can be used " "to disable all filename restrictions. When used with `-R`, it produces a " "file system image that is identical to the specified FreeBSD tree, even if " "it violates the ISO 9660 standard." msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:677 msgid "" "The last option of general use is `-b`. This is used to specify the " "location of a boot image for use in producing an \"El Torito\" bootable CD. " "This option takes an argument which is the path to a boot image from the top " "of the tree being written to the CD. By default, `mkisofs` creates an ISO " "image in \"floppy disk emulation\" mode, and thus expects the boot image to " "be exactly 1200, 1440 or 2880 KB in size. Some boot loaders, like the one " "used by the FreeBSD distribution media, do not use emulation mode. In this " "case, `-no-emul-boot` should be used. So, if [.filename]#/tmp/myboot# holds " "a bootable FreeBSD system with the boot image in [.filename]#/tmp/myboot/" "boot/cdboot#, this command would produce [.filename]#/tmp/bootable.iso#:" msgstr "" #. type: delimited block . 4 #: documentation/content/en/books/handbook/disks/_index.adoc:681 #, no-wrap msgid "# mkisofs -R -no-emul-boot -b boot/cdboot -o /tmp/bootable.iso /tmp/myboot\n" msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:684 msgid "The resulting ISO image can be mounted as a memory disk with:" msgstr "" #. type: delimited block . 4 #: documentation/content/en/books/handbook/disks/_index.adoc:689 #, no-wrap msgid "" "# mdconfig -a -t vnode -f /tmp/bootable.iso -u 0\n" "# mount -t cd9660 /dev/md0 /mnt\n" msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:692 msgid "" "One can then verify that [.filename]#/mnt# and [.filename]#/tmp/myboot# are " "identical." msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:695 msgid "" "There are many other options available for `mkisofs` to fine-tune its " "behavior. Refer to man:mkisofs[8] for details." msgstr "" #. type: delimited block = 4 #: documentation/content/en/books/handbook/disks/_index.adoc:700 msgid "" "It is possible to copy a data CD to an image file that is functionally " "equivalent to the image file created with `mkisofs`. To do so, use [." "filename]#dd# with the device name as the input file and the name of the ISO " "to create as the output file:" msgstr "" #. type: delimited block . 4 #: documentation/content/en/books/handbook/disks/_index.adoc:704 #, no-wrap msgid "# dd if=/dev/cd0 of=file.iso bs=2048\n" msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:707 msgid "" "The resulting image file can be burned to CD as described in <>." msgstr "" #. type: Title === #: documentation/content/en/books/handbook/disks/_index.adoc:710 #, no-wrap msgid "Using Data CDs" msgstr "" #. type: delimited block = 4 #: documentation/content/en/books/handbook/disks/_index.adoc:713 msgid "" "Once an ISO has been burned to a CD, it can be mounted by specifying the " "file system type, the name of the device containing the CD, and an existing " "mount point:" msgstr "" #. type: delimited block . 4 #: documentation/content/en/books/handbook/disks/_index.adoc:717 #, no-wrap msgid "# mount -t cd9660 /dev/cd0 /mnt\n" msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:720 msgid "" "Since `mount` assumes that a file system is of type `ufs`, an `Incorrect " "super block` error will occur if `-t cd9660` is not included when mounting a " "data CD." msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:725 msgid "" "While any data CD can be mounted this way, disks with certain ISO 9660 " "extensions might behave oddly. For example, Joliet disks store all " "filenames in two-byte Unicode characters. If some non-English characters " "show up as question marks, specify the local charset with `-C`. For more " "information, refer to man:mount_cd9660[8]." msgstr "" #. type: delimited block = 4 #: documentation/content/en/books/handbook/disks/_index.adoc:730 msgid "" "In order to do this character conversion with the help of `-C`, the kernel " "requires the [.filename]#cd9660_iconv.ko# module to be loaded. This can be " "done either by adding this line to [.filename]#loader.conf#:" msgstr "" #. type: delimited block . 4 #: documentation/content/en/books/handbook/disks/_index.adoc:734 #, no-wrap msgid "cd9660_iconv_load=\"YES\"\n" msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:737 msgid "" "and then rebooting the machine, or by directly loading the module with " "`kldload`." msgstr "" #. type: delimited block = 4 #: documentation/content/en/books/handbook/disks/_index.adoc:742 msgid "" "Occasionally, `Device not configured` will be displayed when trying to mount " "a data CD. This usually means that the CD drive has not detected a disk in " "the tray, or that the drive is not visible on the bus. It can take a couple " "of seconds for a CD drive to detect media, so be patient." msgstr "" #. type: delimited block = 4 #: documentation/content/en/books/handbook/disks/_index.adoc:746 msgid "" "Sometimes, a SCSICD drive may be missed because it did not have enough time " "to answer the bus reset. To resolve this, a custom kernel can be created " "which increases the default SCSI delay. Add the following option to the " "custom kernel configuration file and rebuild the kernel using the " "instructions in crossref:kernelconfig[kernelconfig-building,“Building and " "Installing a Custom Kernel”]:" msgstr "" #. type: delimited block . 4 #: documentation/content/en/books/handbook/disks/_index.adoc:750 #, no-wrap msgid "options SCSI_DELAY=15000\n" msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:753 msgid "" "This tells the SCSI bus to pause 15 seconds during boot, to give the CD " "drive every possible chance to answer the bus reset." msgstr "" #. type: delimited block = 4 #: documentation/content/en/books/handbook/disks/_index.adoc:758 msgid "" "It is possible to burn a file directly to CD, without creating an ISO 9660 " "file system. This is known as burning a raw data CD and some people do this " "for backup purposes." msgstr "" #. type: delimited block = 4 #: documentation/content/en/books/handbook/disks/_index.adoc:762 msgid "" "This type of disk can not be mounted as a normal data CD. In order to " "retrieve the data burned to such a CD, the data must be read from the raw " "device node. For example, this command will extract a compressed tar file " "located on the second CD device into the current working directory:" msgstr "" #. type: delimited block . 4 #: documentation/content/en/books/handbook/disks/_index.adoc:766 #, no-wrap msgid "# tar xzvf /dev/cd1\n" msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:769 msgid "In order to mount a data CD, the data must be written using `mkisofs`." msgstr "" #. type: Title === #: documentation/content/en/books/handbook/disks/_index.adoc:772 #, no-wrap msgid "Duplicating Audio CDs" msgstr "" #. type: delimited block = 4 #: documentation/content/en/books/handbook/disks/_index.adoc:775 msgid "" "To duplicate an audio CD, extract the audio data from the CD to a series of " "files, then write these files to a blank CD." msgstr "" #. type: delimited block = 4 #: documentation/content/en/books/handbook/disks/_index.adoc:778 msgid "" "<> describes how to duplicate and burn an audio CD. If the " "FreeBSD version is less than 10.0 and the device is ATAPI, the `atapicam` " "module must be first loaded using the instructions in <>." msgstr "" #. type: Block title #: documentation/content/en/books/handbook/disks/_index.adoc:781 #, no-wrap msgid "Procedure: Duplicating an Audio CD" msgstr "" #. type: delimited block = 4 #: documentation/content/en/books/handbook/disks/_index.adoc:783 msgid "" "The package:sysutils/cdrtools[] package or port installs `cdda2wav`. This " "command can be used to extract all of the audio tracks, with each track " "written to a separate WAV file in the current working directory:" msgstr "" #. type: delimited block . 4 #: documentation/content/en/books/handbook/disks/_index.adoc:787 #, no-wrap msgid "% cdda2wav -vall -B -Owav\n" msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:791 msgid "" "A device name does not need to be specified if there is only one CD device " "on the system. Refer to the `cdda2wav` manual page for instructions on how " "to specify a device and to learn more about the other options available for " "this command." msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:792 msgid "Use `cdrecord` to write the [.filename]#.wav# files:" msgstr "" #. type: delimited block . 4 #: documentation/content/en/books/handbook/disks/_index.adoc:796 #, no-wrap msgid "% cdrecord -v dev=2,0 -dao -useinfo *.wav\n" msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:799 msgid "" "Make sure that _2,0_ is set appropriately, as described in <>." msgstr "" #. type: Title == #: documentation/content/en/books/handbook/disks/_index.adoc:801 #, no-wrap msgid "Creating and Using DVD Media" msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:805 msgid "" "Compared to the CD, the DVD is the next generation of optical media storage " "technology. The DVD can hold more data than any CD and is the standard for " "video publishing." msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:807 msgid "Five physical recordable formats can be defined for a recordable DVD:" msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:809 msgid "" "DVD-R: This was the first DVD recordable format available. The DVD-R " "standard is defined by the http://www.dvdforum.org/forum.shtml[DVD Forum]. " "This format is write once." msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:810 msgid "" "DVD-RW: This is the rewritable version of the DVD-R standard. A DVD-RW can " "be rewritten about 1000 times." msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:811 msgid "" "DVD-RAM: This is a rewritable format which can be seen as a removable hard " "drive. However, this media is not compatible with most DVD-ROM drives and " "DVD-Video players as only a few DVD writers support the DVD-RAM format. " "Refer to <> for more information on DVD-RAM use." msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:812 msgid "" "DVD+RW: This is a rewritable format defined by the https://en.wikipedia.org/" "wiki/DVD%2BRW_Alliance[DVD+RW Alliance]. A DVD+RW can be rewritten about " "1000 times." msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:813 msgid "DVD+R: This format is the write once variation of the DVD+RW format." msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:815 msgid "" "A single layer recordable DVD can hold up to 4,700,000,000 bytes which is " "actually 4.38 GB or 4485 MB as 1 kilobyte is 1024 bytes." msgstr "" #. type: delimited block = 4 #: documentation/content/en/books/handbook/disks/_index.adoc:821 msgid "" "A distinction must be made between the physical media and the application. " "For example, a DVD-Video is a specific file layout that can be written on " "any recordable DVD physical media such as DVD-R, DVD+R, or DVD-RW. Before " "choosing the type of media, ensure that both the burner and the DVD-Video " "player are compatible with the media under consideration." msgstr "" #. type: Title === #: documentation/content/en/books/handbook/disks/_index.adoc:823 #, no-wrap msgid "Configuration" msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:827 msgid "" "To perform DVD recording, use man:growisofs[1]. This command is part of the " "package:sysutils/dvd+rw-tools[] utilities which support all DVD media types." msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:831 msgid "" "These tools use the SCSI subsystem to access the devices, therefore " "<> must be loaded or statically compiled into " "the kernel. This support is not needed if the burner uses the USB " "interface. Refer to <> for more details on USB device " "configuration." msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:833 msgid "" "DMA access must also be enabled for ATAPI devices, by adding the following " "line to [.filename]#/boot/loader.conf#:" msgstr "" #. type: delimited block . 4 #: documentation/content/en/books/handbook/disks/_index.adoc:837 #: documentation/content/en/books/handbook/disks/_index.adoc:1070 #, no-wrap msgid "hw.ata.atapi_dma=\"1\"\n" msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:840 msgid "" "Before attempting to use dvd+rw-tools, consult the http://fy.chalmers.se/" "~appro/linux/DVD+RW/hcn.html[Hardware Compatibility Notes]." msgstr "" #. type: delimited block = 4 #: documentation/content/en/books/handbook/disks/_index.adoc:844 msgid "" "For a graphical user interface, consider using package:sysutils/k3b[] which " "provides a user friendly interface to man:growisofs[1] and many other " "burning tools." msgstr "" #. type: Title === #: documentation/content/en/books/handbook/disks/_index.adoc:846 #, no-wrap msgid "Burning Data DVDs" msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:850 msgid "" "Since man:growisofs[1] is a front-end to <>, it will invoke " "man:mkisofs[8] to create the file system layout and perform the write on the " "DVD. This means that an image of the data does not need to be created " "before the burning process." msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:852 msgid "" "To burn to a DVD+R or a DVD-R the data in [.filename]#/path/to/data#, use " "the following command:" msgstr "" #. type: delimited block . 4 #: documentation/content/en/books/handbook/disks/_index.adoc:856 #, no-wrap msgid "# growisofs -dvd-compat -Z /dev/cd0 -J -R /path/to/data\n" msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:860 msgid "" "In this example, `-J -R` is passed to man:mkisofs[8] to create an ISO 9660 " "file system with Joliet and Rock Ridge extensions. Refer to man:mkisofs[8] " "for more details." msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:865 msgid "" "For the initial session recording, `-Z` is used for both single and multiple " "sessions. Replace _/dev/cd0_, with the name of the DVD device. Using `-dvd-" "compat` indicates that the disk will be closed and that the recording will " "be unappendable. This should also provide better media compatibility with " "DVD-ROM drives." msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:867 msgid "To burn a pre-mastered image, such as _imagefile.iso_, use:" msgstr "" #. type: delimited block . 4 #: documentation/content/en/books/handbook/disks/_index.adoc:871 #, no-wrap msgid "# growisofs -dvd-compat -Z /dev/cd0=imagefile.iso\n" msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:875 msgid "" "The write speed should be detected and automatically set according to the " "media and the drive being used. To force the write speed, use `-speed=`. " "Refer to man:growisofs[1] for example usage." msgstr "" #. type: delimited block = 4 #: documentation/content/en/books/handbook/disks/_index.adoc:882 msgid "" "In order to support working files larger than 4.38GB, an UDF/ISO-9660 hybrid " "file system must be created by passing `-udf -iso-level 3` to man:mkisofs[8] " "and all related programs, such as man:growisofs[1]. This is required only " "when creating an ISO image file or when writing files directly to a disk. " "Since a disk created this way must be mounted as an UDF file system with man:" "mount_udf[8], it will be usable only on an UDF aware operating system. " "Otherwise it will look as if it contains corrupted files." msgstr "" #. type: delimited block = 4 #: documentation/content/en/books/handbook/disks/_index.adoc:884 msgid "To create this type of ISO file:" msgstr "" #. type: delimited block . 4 #: documentation/content/en/books/handbook/disks/_index.adoc:888 #, no-wrap msgid "% mkisofs -R -J -udf -iso-level 3 -o imagefile.iso /path/to/data\n" msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:891 msgid "To burn files directly to a disk:" msgstr "" #. type: delimited block . 4 #: documentation/content/en/books/handbook/disks/_index.adoc:895 #, no-wrap msgid "# growisofs -dvd-compat -udf -iso-level 3 -Z /dev/cd0 -J -R /path/to/data\n" msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:898 msgid "" "When an ISO image already contains large files, no additional options are " "required for man:growisofs[1] to burn that image on a disk." msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:901 msgid "" "Be sure to use an up-to-date version of package:sysutils/cdrtools[], which " "contains man:mkisofs[8], as an older version may not contain large files " "support. If the latest version does not work, install package:sysutils/" "cdrtools-devel[] and read its man:mkisofs[8]." msgstr "" #. type: Title === #: documentation/content/en/books/handbook/disks/_index.adoc:903 #, no-wrap msgid "Burning a DVD-Video" msgstr "" #. type: delimited block = 4 #: documentation/content/en/books/handbook/disks/_index.adoc:907 msgid "" "A DVD-Video is a specific file layout based on the ISO 9660 and micro-UDF (M-" "UDF) specifications. Since DVD-Video presents a specific data structure " "hierarchy, a particular program such as package:multimedia/dvdauthor[] is " "needed to author the DVD." msgstr "" #. type: delimited block = 4 #: documentation/content/en/books/handbook/disks/_index.adoc:910 msgid "" "If an image of the DVD-Video file system already exists, it can be burned in " "the same way as any other image. If `dvdauthor` was used to make the DVD " "and the result is in [.filename]#/path/to/video#, the following command " "should be used to burn the DVD-Video:" msgstr "" #. type: delimited block . 4 #: documentation/content/en/books/handbook/disks/_index.adoc:914 #, no-wrap msgid "# growisofs -Z /dev/cd0 -dvd-video /path/to/video\n" msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:918 msgid "" "`-dvd-video` is passed to man:mkisofs[8] to instruct it to create a DVD-" "Video file system layout. This option implies the `-dvd-compat` man:" "growisofs[1] option." msgstr "" #. type: Title === #: documentation/content/en/books/handbook/disks/_index.adoc:919 #, no-wrap msgid "Using a DVD+RW" msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:924 msgid "" "Unlike CD-RW, a virgin DVD+RW needs to be formatted before first use. It is " "_recommended_ to let man:growisofs[1] take care of this automatically " "whenever appropriate. However, it is possible to use `dvd+rw-format` to " "format the DVD+RW:" msgstr "" #. type: delimited block . 4 #: documentation/content/en/books/handbook/disks/_index.adoc:928 #: documentation/content/en/books/handbook/disks/_index.adoc:1018 #, no-wrap msgid "# dvd+rw-format /dev/cd0\n" msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:932 msgid "" "Only perform this operation once and keep in mind that only virgin DVD+RW " "medias need to be formatted. Once formatted, the DVD+RW can be burned as " "usual." msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:935 msgid "" "To burn a totally new file system and not just append some data onto a " "DVD+RW, the media does not need to be blanked first. Instead, write over " "the previous recording like this:" msgstr "" #. type: delimited block . 4 #: documentation/content/en/books/handbook/disks/_index.adoc:939 #, no-wrap msgid "# growisofs -Z /dev/cd0 -J -R /path/to/newdata\n" msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:944 msgid "" "The DVD+RW format supports appending data to a previous recording. This " "operation consists of merging a new session to the existing one as it is not " "considered to be multi-session writing. man:growisofs[1] will _grow_ the " "ISO 9660 file system present on the media." msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:946 msgid "For example, to append data to a DVD+RW, use the following:" msgstr "" #. type: delimited block . 4 #: documentation/content/en/books/handbook/disks/_index.adoc:950 #: documentation/content/en/books/handbook/disks/_index.adoc:1038 #, no-wrap msgid "# growisofs -M /dev/cd0 -J -R /path/to/nextdata\n" msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:953 msgid "" "The same man:mkisofs[8] options used to burn the initial session should be " "used during next writes." msgstr "" #. type: delimited block = 4 #: documentation/content/en/books/handbook/disks/_index.adoc:958 msgid "" "Use `-dvd-compat` for better media compatibility with DVD-ROM drives. When " "using DVD+RW, this option will not prevent the addition of data." msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:961 msgid "To blank the media, use:" msgstr "" #. type: delimited block . 4 #: documentation/content/en/books/handbook/disks/_index.adoc:965 #, no-wrap msgid "# growisofs -Z /dev/cd0=/dev/zero\n" msgstr "" #. type: Title === #: documentation/content/en/books/handbook/disks/_index.adoc:967 #, no-wrap msgid "Using a DVD-RW" msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:971 msgid "" "A DVD-RW accepts two disc formats: incremental sequential and restricted " "overwrite. By default, DVD-RW discs are in sequential format." msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:974 msgid "" "A virgin DVD-RW can be directly written without being formatted. However, a " "non-virgin DVD-RW in sequential format needs to be blanked before writing a " "new initial session." msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:976 msgid "To blank a DVD-RW in sequential mode:" msgstr "" #. type: delimited block . 4 #: documentation/content/en/books/handbook/disks/_index.adoc:980 #: documentation/content/en/books/handbook/disks/_index.adoc:1025 #, no-wrap msgid "# dvd+rw-format -blank=full /dev/cd0\n" msgstr "" #. type: delimited block = 4 #: documentation/content/en/books/handbook/disks/_index.adoc:987 msgid "" "A full blanking using `-blank=full` will take about one hour on a 1x media. " "A fast blanking can be performed using `-blank`, if the DVD-RW will be " "recorded in Disk-At-Once (DAO) mode. To burn the DVD-RW in DAO mode, use " "the command:" msgstr "" #. type: delimited block . 4 #: documentation/content/en/books/handbook/disks/_index.adoc:991 #, no-wrap msgid "# growisofs -use-the-force-luke=dao -Z /dev/cd0=imagefile.iso\n" msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:994 msgid "" "Since man:growisofs[1] automatically attempts to detect fast blanked media " "and engage DAO write, `-use-the-force-luke=dao` should not be required." msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:996 msgid "" "One should instead use restricted overwrite mode with any DVD-RW as this " "format is more flexible than the default of incremental sequential." msgstr "" #. type: delimited block = 4 #: documentation/content/en/books/handbook/disks/_index.adoc:999 msgid "" "To write data on a sequential DVD-RW, use the same instructions as for the " "other DVD formats:" msgstr "" #. type: delimited block . 4 #: documentation/content/en/books/handbook/disks/_index.adoc:1003 #, no-wrap msgid "# growisofs -Z /dev/cd0 -J -R /path/to/data\n" msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:1007 msgid "" "To append some data to a previous recording, use `-M` with man:" "growisofs[1]. However, if data is appended on a DVD-RW in incremental " "sequential mode, a new session will be created on the disc and the result " "will be a multi-session disc." msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:1012 msgid "" "A DVD-RW in restricted overwrite format does not need to be blanked before a " "new initial session. Instead, overwrite the disc with `-Z`. It is also " "possible to grow an existing ISO 9660 file system written on the disc with `-" "M`. The result will be a one-session DVD." msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:1014 msgid "" "To put a DVD-RW in restricted overwrite format, the following command must " "be used:" msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:1021 msgid "To change back to sequential format, use:" msgstr "" #. type: Title === #: documentation/content/en/books/handbook/disks/_index.adoc:1027 #, no-wrap msgid "Multi-Session" msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:1032 msgid "" "Few DVD-ROM drives support multi-session DVDs and most of the time only read " "the first session. DVD+R, DVD-R and DVD-RW in sequential format can accept " "multiple sessions. The notion of multiple sessions does not exist for the " "DVD+RW and the DVD-RW restricted overwrite formats." msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:1034 msgid "" "Using the following command after an initial non-closed session on a DVD+R, " "DVD-R, or DVD-RW in sequential format, will add a new session to the disc:" msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:1043 msgid "" "Using this command with a DVD+RW or a DVD-RW in restricted overwrite mode " "will append data while merging the new session to the existing one. The " "result will be a single-session disc. Use this method to add data after an " "initial write on these types of media." msgstr "" #. type: delimited block = 4 #: documentation/content/en/books/handbook/disks/_index.adoc:1048 msgid "" "Since some space on the media is used between each session to mark the end " "and start of sessions, one should add sessions with a large amount of data " "to optimize media space. The number of sessions is limited to 154 for a " "DVD+R, about 2000 for a DVD-R, and 127 for a DVD+R Double Layer." msgstr "" #. type: Title === #: documentation/content/en/books/handbook/disks/_index.adoc:1050 #, no-wrap msgid "For More Information" msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:1053 msgid "" "To obtain more information about a DVD, use `dvd+rw-mediainfo _/dev/cd0_` " "while the disc in the specified drive." msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:1055 msgid "" "More information about dvd+rw-tools can be found in man:growisofs[1], on the " "http://fy.chalmers.se/~appro/linux/DVD+RW/[dvd+rw-tools web site], and in " "the http://lists.debian.org/cdwrite/[cdwrite mailing list] archives." msgstr "" #. type: delimited block = 4 #: documentation/content/en/books/handbook/disks/_index.adoc:1059 msgid "" "When creating a problem report related to the use of dvd+rw-tools, always " "include the output of `dvd+rw-mediainfo`." msgstr "" #. type: Title === #: documentation/content/en/books/handbook/disks/_index.adoc:1062 #, no-wrap msgid "Using a DVD-RAM" msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:1066 msgid "" "DVD-RAM writers can use either a SCSI or ATAPI interface. For ATAPI " "devices, DMA access has to be enabled by adding the following line to [." "filename]#/boot/loader.conf#:" msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:1075 msgid "" "A DVD-RAM can be seen as a removable hard drive. Like any other hard drive, " "the DVD-RAM must be formatted before it can be used. In this example, the " "whole disk space will be formatted with a standard UFS2 file system:" msgstr "" #. type: delimited block . 4 #: documentation/content/en/books/handbook/disks/_index.adoc:1081 #, no-wrap msgid "" "# dd if=/dev/zero of=/dev/acd0 bs=2k count=1\n" "# bsdlabel -Bw acd0\n" "# newfs /dev/acd0\n" msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:1084 msgid "" "The DVD device, [.filename]#acd0#, must be changed according to the " "configuration." msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:1086 msgid "" "Once the DVD-RAM has been formatted, it can be mounted as a normal hard " "drive:" msgstr "" #. type: delimited block . 4 #: documentation/content/en/books/handbook/disks/_index.adoc:1090 #, no-wrap msgid "# mount /dev/acd0 /mnt\n" msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:1093 msgid "Once mounted, the DVD-RAM will be both readable and writeable." msgstr "" #. type: Title == #: documentation/content/en/books/handbook/disks/_index.adoc:1095 #, no-wrap msgid "Creating and Using Floppy Disks" msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:1098 msgid "This section explains how to format a 3.5 inch floppy disk in FreeBSD." msgstr "" #. type: delimited block = 4 #: documentation/content/en/books/handbook/disks/_index.adoc:1102 #, no-wrap msgid "*Procedure: Steps to Format a Floppy*\n" msgstr "" #. type: delimited block = 4 #: documentation/content/en/books/handbook/disks/_index.adoc:1107 msgid "" "A floppy disk needs to be low-level formatted before it can be used. This " "is usually done by the vendor, but formatting is a good way to check media " "integrity. To low-level format the floppy disk on FreeBSD, use man:" "fdformat[1]. When using this utility, make note of any error messages, as " "these can help determine if the disk is good or bad." msgstr "" #. type: delimited block = 4 #: documentation/content/en/books/handbook/disks/_index.adoc:1109 msgid "" "To format the floppy, insert a new 3.5 inch floppy disk into the first " "floppy drive and issue:" msgstr "" #. type: delimited block . 4 #: documentation/content/en/books/handbook/disks/_index.adoc:1113 #, no-wrap msgid "# /usr/sbin/fdformat -f 1440 /dev/fd0\n" msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:1116 msgid "" "After low-level formatting the disk, create a disk label as it is needed by " "the system to determine the size of the disk and its geometry. The supported " "geometry values are listed in [.filename]#/etc/disktab#." msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:1118 msgid "To write the disk label, use man:bsdlabel[8]:" msgstr "" #. type: delimited block . 4 #: documentation/content/en/books/handbook/disks/_index.adoc:1122 #, no-wrap msgid "# /sbin/bsdlabel -B -w /dev/fd0 fd1440\n" msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:1125 msgid "" "The floppy is now ready to be high-level formatted with a file system. The " "floppy's file system can be either UFS or FAT, where FAT is generally a " "better choice for floppies." msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:1127 msgid "To format the floppy with FAT, issue:" msgstr "" #. type: delimited block . 4 #: documentation/content/en/books/handbook/disks/_index.adoc:1131 #, no-wrap msgid "# /sbin/newfs_msdos /dev/fd0\n" msgstr "" #. type: delimited block = 4 #: documentation/content/en/books/handbook/disks/_index.adoc:1137 msgid "" "The disk is now ready for use. To use the floppy, mount it with man:" "mount_msdosfs[8]. One can also install and use package:emulators/mtools[] " "from the Ports Collection." msgstr "" #. type: Title == #: documentation/content/en/books/handbook/disks/_index.adoc:1139 #, no-wrap msgid "Using NTFS Disks" msgstr "" #. type: delimited block = 4 #: documentation/content/en/books/handbook/disks/_index.adoc:1142 msgid "This section explains how to mount NTFS disks in FreeBSD." msgstr "" #. type: delimited block = 4 #: documentation/content/en/books/handbook/disks/_index.adoc:1147 msgid "" "NTFS (New Technology File System) is a proprietary journaling file system " "developed by Microsoft(R). It has been the default file system in Microsoft " "Windows(R) for many years. FreeBSD can mount NTFS volumes using a FUSE file " "system. These file systems are implemented as user space programs which " "interact with the man:fusefs[5] kernel module via a well defined interface." msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:1151 #, no-wrap msgid "*Procedure: Steps to Mount a NTFS Disk*\n" msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:1154 msgid "" "Before using a FUSE file system we need to load the man:fusefs[5] kernel " "module:" msgstr "" #. type: delimited block . 4 #: documentation/content/en/books/handbook/disks/_index.adoc:1158 #, no-wrap msgid "# kldload fusefs\n" msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:1161 msgid "Use man:sysrc[8] to load the module at startup:" msgstr "" #. type: delimited block . 4 #: documentation/content/en/books/handbook/disks/_index.adoc:1165 #, no-wrap msgid "# sysrc kld_list+=fusefs\n" msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:1168 msgid "" "Install the actual NTFS file system from packages as in the example (see " "crossref:ports[pkgng-intro,Using pkg for Binary Package Management]) or from " "ports (see crossref:ports[ports-using,Using the Ports Collection]):" msgstr "" #. type: delimited block . 4 #: documentation/content/en/books/handbook/disks/_index.adoc:1172 #, no-wrap msgid "# pkg install fusefs-ntfs\n" msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:1175 msgid "" "Last we need to create a directory where the file system will be mounted:" msgstr "" #. type: delimited block . 4 #: documentation/content/en/books/handbook/disks/_index.adoc:1179 #, no-wrap msgid "# mkdir /mnt/usb\n" msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:1182 msgid "" "Suppose a USB disk is plugged in. The disk partition information can be " "viewed with man:gpart[8]:" msgstr "" #. type: delimited block . 4 #: documentation/content/en/books/handbook/disks/_index.adoc:1188 #, no-wrap msgid "" "# gpart show da0\n" "=>\t 63 1953525105 da0 MBR (932G)\n" "\t 63 1953525105 1 ntfs (932G)\n" msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:1191 msgid "We can mount the disk using the following command:" msgstr "" #. type: delimited block . 4 #: documentation/content/en/books/handbook/disks/_index.adoc:1195 #, no-wrap msgid "# ntfs-3g /dev/da0s1 /mnt/usb/\n" msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:1197 msgid "The disk is now ready to use." msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:1199 msgid "Additionally, an entry can be added to /etc/fstab:" msgstr "" #. type: delimited block . 4 #: documentation/content/en/books/handbook/disks/_index.adoc:1203 #, no-wrap msgid "/dev/da0s1 /mnt/usb\tntfs mountprog=/usr/local/bin/ntfs-3g,noauto,rw 0 0\n" msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:1206 msgid "Now the disk can be now mounted with:" msgstr "" #. type: delimited block . 4 #: documentation/content/en/books/handbook/disks/_index.adoc:1210 #, no-wrap msgid "# mount /mnt/usb\n" msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:1213 msgid "The disk can be unmounted with:" msgstr "" #. type: delimited block . 4 #: documentation/content/en/books/handbook/disks/_index.adoc:1217 #, no-wrap msgid "# umount /mnt/usb/\n" msgstr "" #. type: Title == #: documentation/content/en/books/handbook/disks/_index.adoc:1221 #, no-wrap msgid "Backup Basics" msgstr "" #. type: delimited block = 4 #: documentation/content/en/books/handbook/disks/_index.adoc:1224 msgid "" "Implementing a backup plan is essential in order to have the ability to " "recover from disk failure, accidental file deletion, random file corruption, " "or complete machine destruction, including destruction of on-site backups." msgstr "" #. type: delimited block = 4 #: documentation/content/en/books/handbook/disks/_index.adoc:1227 msgid "" "The backup type and schedule will vary, depending upon the importance of the " "data, the granularity needed for file restores, and the amount of acceptable " "downtime. Some possible backup techniques include:" msgstr "" #. type: delimited block = 4 #: documentation/content/en/books/handbook/disks/_index.adoc:1229 msgid "" "Archives of the whole system, backed up onto permanent, off-site media. This " "provides protection against all of the problems listed above, but is slow " "and inconvenient to restore from, especially for non-privileged users." msgstr "" #. type: delimited block = 4 #: documentation/content/en/books/handbook/disks/_index.adoc:1230 msgid "" "File system snapshots, which are useful for restoring deleted files or " "previous versions of files." msgstr "" #. type: delimited block = 4 #: documentation/content/en/books/handbook/disks/_index.adoc:1231 msgid "" "Copies of whole file systems or disks which are synchronized with another " "system on the network using a scheduled package:net/rsync[]." msgstr "" #. type: delimited block = 4 #: documentation/content/en/books/handbook/disks/_index.adoc:1232 msgid "" "Hardware or software RAID, which minimizes or avoids downtime when a disk " "fails." msgstr "" #. type: delimited block = 4 #: documentation/content/en/books/handbook/disks/_index.adoc:1236 msgid "" "Typically, a mix of backup techniques is used. For example, one could " "create a schedule to automate a weekly, full system backup that is stored " "off-site and to supplement this backup with hourly ZFS snapshots. In " "addition, one could make a manual backup of individual directories or files " "before making file edits or deletions." msgstr "" #. type: delimited block = 4 #: documentation/content/en/books/handbook/disks/_index.adoc:1238 msgid "" "This section describes some of the utilities which can be used to create and " "manage backups on a FreeBSD system." msgstr "" #. type: Title === #: documentation/content/en/books/handbook/disks/_index.adoc:1239 #, no-wrap msgid "File System Backups" msgstr "" #. type: delimited block = 4 #: documentation/content/en/books/handbook/disks/_index.adoc:1245 msgid "" "The traditional UNIX(R) programs for backing up a file system are man:" "dump[8], which creates the backup, and man:restore[8], which restores the " "backup. These utilities work at the disk block level, below the " "abstractions of the files, links, and directories that are created by file " "systems. Unlike other backup software, `dump` backs up an entire file " "system and is unable to backup only part of a file system or a directory " "tree that spans multiple file systems. Instead of writing files and " "directories, `dump` writes the raw data blocks that comprise files and " "directories." msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:1249 msgid "" "If `dump` is used on the root directory, it will not back up [.filename]#/" "home#, [.filename]#/usr# or many other directories since these are typically " "mount points for other file systems or symbolic links into those file " "systems." msgstr "" #. type: delimited block = 4 #: documentation/content/en/books/handbook/disks/_index.adoc:1253 msgid "" "When used to restore data, `restore` stores temporary files in [.filename]#/" "tmp/# by default. When using a recovery disk with a small [.filename]#/" "tmp#, set `TMPDIR` to a directory with more free space in order for the " "restore to succeed." msgstr "" #. type: delimited block = 4 #: documentation/content/en/books/handbook/disks/_index.adoc:1257 msgid "" "When using `dump`, be aware that some quirks remain from its early days in " "Version 6 of AT&T UNIX(R),circa 1975. The default parameters assume a " "backup to a 9-track tape, rather than to another type of media or to the " "high-density tapes available today. These defaults must be overridden on " "the command line." msgstr "" #. type: delimited block = 4 #: documentation/content/en/books/handbook/disks/_index.adoc:1260 msgid "" "It is possible to backup a file system across the network to a another " "system or to a tape drive attached to another computer. While the man:" "rdump[8] and man:rrestore[8] utilities can be used for this purpose, they " "are not considered to be secure." msgstr "" #. type: delimited block = 4 #: documentation/content/en/books/handbook/disks/_index.adoc:1263 msgid "" "Instead, one can use `dump` and `restore` in a more secure fashion over an " "SSH connection. This example creates a full, compressed backup of [." "filename]#/usr# and sends the backup file to the specified host over a SSH " "connection." msgstr "" #. type: Block title #: documentation/content/en/books/handbook/disks/_index.adoc:1264 #, no-wrap msgid "Using `dump` over ssh" msgstr "" #. type: delimited block . 4 #: documentation/content/en/books/handbook/disks/_index.adoc:1271 #, no-wrap msgid "" "# /sbin/dump -0uan -f - /usr | gzip -2 | ssh -c blowfish \\\n" " targetuser@targetmachine.example.com dd of=/mybigfiles/dump-usr-l0.gz\n" msgstr "" #. type: delimited block = 4 #: documentation/content/en/books/handbook/disks/_index.adoc:1275 msgid "" "This example sets `RSH` in order to write the backup to a tape drive on a " "remote system over a SSH connection:" msgstr "" #. type: Block title #: documentation/content/en/books/handbook/disks/_index.adoc:1276 #, no-wrap msgid "Using `dump` over ssh with `RSH` Set" msgstr "" #. type: delimited block . 4 #: documentation/content/en/books/handbook/disks/_index.adoc:1282 #, no-wrap msgid "# env RSH=/usr/bin/ssh /sbin/dump -0uan -f targetuser@targetmachine.example.com:/dev/sa0 /usr\n" msgstr "" #. type: Title === #: documentation/content/en/books/handbook/disks/_index.adoc:1285 #, no-wrap msgid "Directory Backups" msgstr "" #. type: delimited block = 4 #: documentation/content/en/books/handbook/disks/_index.adoc:1288 msgid "" "Several built-in utilities are available for backing up and restoring " "specified files and directories as needed." msgstr "" #. type: delimited block = 4 #: documentation/content/en/books/handbook/disks/_index.adoc:1292 msgid "" "A good choice for making a backup of all of the files in a directory is man:" "tar[1]. This utility dates back to Version 6 of AT&T UNIX(R) and by default " "assumes a recursive backup to a local tape device. Switches can be used to " "instead specify the name of a backup file." msgstr "" #. type: delimited block = 4 #: documentation/content/en/books/handbook/disks/_index.adoc:1295 msgid "" "This example creates a compressed backup of the current directory and saves " "it to [.filename]#/tmp/mybackup.tgz#. When creating a backup file, make " "sure that the backup is not saved to the same directory that is being backed " "up." msgstr "" #. type: Block title #: documentation/content/en/books/handbook/disks/_index.adoc:1296 #, no-wrap msgid "Backing Up the Current Directory with `tar`" msgstr "" #. type: delimited block . 4 #: documentation/content/en/books/handbook/disks/_index.adoc:1302 #, no-wrap msgid "# tar czvf /tmp/mybackup.tgz .\n" msgstr "" #. type: delimited block = 4 #: documentation/content/en/books/handbook/disks/_index.adoc:1308 msgid "" "To restore the entire backup, `cd` into the directory to restore into and " "specify the name of the backup. Note that this will overwrite any newer " "versions of files in the restore directory. When in doubt, restore to a " "temporary directory or specify the name of the file within the backup to " "restore." msgstr "" #. type: Block title #: documentation/content/en/books/handbook/disks/_index.adoc:1309 #, no-wrap msgid "Restoring Up the Current Directory with `tar`" msgstr "" #. type: delimited block . 4 #: documentation/content/en/books/handbook/disks/_index.adoc:1315 #, no-wrap msgid "# tar xzvf /tmp/mybackup.tgz\n" msgstr "" #. type: delimited block = 4 #: documentation/content/en/books/handbook/disks/_index.adoc:1320 msgid "" "There are dozens of available switches which are described in man:tar[1]. " "This utility also supports the use of exclude patterns to specify which " "files should not be included when backing up the specified directory or " "restoring files from a backup." msgstr "" #. type: delimited block = 4 #: documentation/content/en/books/handbook/disks/_index.adoc:1323 msgid "" "To create a backup using a specified list of files and directories, man:" "cpio[1] is a good choice. Unlike `tar`, `cpio` does not know how to walk " "the directory tree and it must be provided the list of files to backup." msgstr "" #. type: delimited block = 4 #: documentation/content/en/books/handbook/disks/_index.adoc:1326 msgid "" "For example, a list of files can be created using `ls` or `find`. This " "example creates a recursive listing of the current directory which is then " "piped to `cpio` in order to create an output backup file named [.filename]#/" "tmp/mybackup.cpio#." msgstr "" #. type: Block title #: documentation/content/en/books/handbook/disks/_index.adoc:1327 #, no-wrap msgid "Using `ls` and `cpio` to Make a Recursive Backup of the Current Directory" msgstr "" #. type: delimited block . 4 #: documentation/content/en/books/handbook/disks/_index.adoc:1333 #, no-wrap msgid "# ls -R | cpio -ovF /tmp/mybackup.cpio\n" msgstr "" #. type: delimited block = 4 #: documentation/content/en/books/handbook/disks/_index.adoc:1339 msgid "" "A backup utility which tries to bridge the features provided by `tar` and " "`cpio` is man:pax[1]. Over the years, the various versions of `tar` and " "`cpio` became slightly incompatible. POSIX(R) created `pax` which attempts " "to read and write many of the various `cpio` and `tar` formats, plus new " "formats of its own." msgstr "" #. type: delimited block = 4 #: documentation/content/en/books/handbook/disks/_index.adoc:1341 msgid "The `pax` equivalent to the previous examples would be:" msgstr "" #. type: Block title #: documentation/content/en/books/handbook/disks/_index.adoc:1342 #, no-wrap msgid "Backing Up the Current Directory with `pax`" msgstr "" #. type: delimited block . 4 #: documentation/content/en/books/handbook/disks/_index.adoc:1348 #, no-wrap msgid "# pax -wf /tmp/mybackup.pax .\n" msgstr "" #. type: Title === #: documentation/content/en/books/handbook/disks/_index.adoc:1352 #, no-wrap msgid "Using Data Tapes for Backups" msgstr "" #. type: delimited block = 4 #: documentation/content/en/books/handbook/disks/_index.adoc:1357 msgid "" "While tape technology has continued to evolve, modern backup systems tend to " "combine off-site backups with local removable media. FreeBSD supports any " "tape drive that uses SCSI, such as LTO or DAT. There is limited support for " "SATA and USB tape drives." msgstr "" #. type: delimited block = 4 #: documentation/content/en/books/handbook/disks/_index.adoc:1361 msgid "" "For SCSI tape devices, FreeBSD uses the man:sa[4] driver and the [." "filename]#/dev/sa0#, [.filename]#/dev/nsa0#, and [.filename]#/dev/esa0# " "devices. The physical device name is [.filename]#/dev/sa0#. When [." "filename]#/dev/nsa0# is used, the backup application will not rewind the " "tape after writing a file, which allows writing more than one file to a " "tape. Using [.filename]#/dev/esa0# ejects the tape after the device is " "closed." msgstr "" #. type: delimited block = 4 #: documentation/content/en/books/handbook/disks/_index.adoc:1364 msgid "" "In FreeBSD, `mt` is used to control operations of the tape drive, such as " "seeking through files on a tape or writing tape control marks to the tape. " "For example, the first three files on a tape can be preserved by skipping " "past them before writing a new file:" msgstr "" #. type: delimited block . 4 #: documentation/content/en/books/handbook/disks/_index.adoc:1368 #, no-wrap msgid "# mt -f /dev/nsa0 fsf 3\n" msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:1371 msgid "This utility supports many operations. Refer to man:mt[1] for details." msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:1373 msgid "" "To write a single file to tape using `tar`, specify the name of the tape " "device and the file to backup:" msgstr "" #. type: delimited block . 4 #: documentation/content/en/books/handbook/disks/_index.adoc:1377 #, no-wrap msgid "# tar cvf /dev/sa0 file\n" msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:1380 msgid "" "To recover files from a `tar` archive on tape into the current directory:" msgstr "" #. type: delimited block . 4 #: documentation/content/en/books/handbook/disks/_index.adoc:1384 #, no-wrap msgid "# tar xvf /dev/sa0\n" msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:1388 msgid "" "To backup a UFS file system, use `dump`. This examples backs up [." "filename]#/usr# without rewinding the tape when finished:" msgstr "" #. type: delimited block . 4 #: documentation/content/en/books/handbook/disks/_index.adoc:1392 #, no-wrap msgid "# dump -0aL -b64 -f /dev/nsa0 /usr\n" msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:1395 msgid "" "To interactively restore files from a `dump` file on tape into the current " "directory:" msgstr "" #. type: delimited block . 4 #: documentation/content/en/books/handbook/disks/_index.adoc:1399 #, no-wrap msgid "# restore -i -f /dev/nsa0\n" msgstr "" #. type: Title === #: documentation/content/en/books/handbook/disks/_index.adoc:1402 #, no-wrap msgid "Third-Party Backup Utilities" msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:1406 msgid "" "The FreeBSD Ports Collection provides many third-party utilities which can " "be used to schedule the creation of backups, simplify tape backup, and make " "backups easier and more convenient. Many of these applications are client/" "server based and can be used to automate the backups of a single system or " "all of the computers in a network." msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:1408 msgid "Popular utilities include Amanda, Bacula, rsync, and duplicity." msgstr "" #. type: Title === #: documentation/content/en/books/handbook/disks/_index.adoc:1409 #, no-wrap msgid "Emergency Recovery" msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:1412 msgid "" "In addition to regular backups, it is recommended to perform the following " "steps as part of an emergency preparedness plan." msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:1414 msgid "Create a print copy of the output of the following commands:" msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:1416 msgid "`gpart show`" msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:1417 msgid "`more /etc/fstab`" msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:1418 msgid "`dmesg`" msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:1422 msgid "" "Store this printout and a copy of the installation media in a secure " "location. Should an emergency restore be needed, boot into the installation " "media and select `Live CD` to access a rescue shell. This rescue mode can " "be used to view the current state of the system, and if needed, to reformat " "disks and restore data from backups." msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:1427 msgid "" "Next, test the rescue shell and the backups. Make notes of the procedure. " "Store these notes with the media, the printouts, and the backups. These " "notes may prevent the inadvertent destruction of the backups while under the " "stress of performing an emergency recovery." msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:1429 msgid "" "For an added measure of security, store the latest backup at a remote " "location which is physically separated from the computers and disk drives by " "a significant distance." msgstr "" #. type: Title == #: documentation/content/en/books/handbook/disks/_index.adoc:1431 #, no-wrap msgid "Memory Disks" msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:1435 msgid "" "In addition to physical disks, FreeBSD also supports the creation and use of " "memory disks. One possible use for a memory disk is to access the contents " "of an ISO file system without the overhead of first burning it to a CD or " "DVD, then mounting the CD/DVD media." msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:1439 msgid "" "In FreeBSD, the man:md[4] driver is used to provide support for memory " "disks. The [.filename]#GENERIC# kernel includes this driver. When using a " "custom kernel configuration file, ensure it includes this line:" msgstr "" #. type: delimited block . 4 #: documentation/content/en/books/handbook/disks/_index.adoc:1443 #, no-wrap msgid "device md\n" msgstr "" #. type: Title === #: documentation/content/en/books/handbook/disks/_index.adoc:1446 #, no-wrap msgid "Attaching and Detaching Existing Images" msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:1452 msgid "" "To mount an existing file system image, use `mdconfig` to specify the name " "of the ISO file and a free unit number. Then, refer to that unit number to " "mount it on an existing mount point. Once mounted, the files in the ISO " "will appear in the mount point. This example attaches _diskimage.iso_ to " "the memory device [.filename]#/dev/md0# then mounts that memory device on [." "filename]#/mnt#:" msgstr "" #. type: delimited block . 4 #: documentation/content/en/books/handbook/disks/_index.adoc:1457 #, no-wrap msgid "" "# mdconfig -f diskimage.iso -u 0\n" "# mount -t cd9660 /dev/md0 /mnt\n" msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:1462 msgid "" "Notice that `-t cd9660` was used to mount an ISO format. If a unit number " "is not specified with `-u`, `mdconfig` will automatically allocate an unused " "memory device and output the name of the allocated unit, such as [." "filename]#md4#. Refer to man:mdconfig[8] for more details about this " "command and its options." msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:1466 msgid "" "When a memory disk is no longer in use, its resources should be released " "back to the system. First, unmount the file system, then use `mdconfig` to " "detach the disk from the system and release its resources. To continue this " "example:" msgstr "" #. type: delimited block . 4 #: documentation/content/en/books/handbook/disks/_index.adoc:1471 #, no-wrap msgid "" "# umount /mnt\n" "# mdconfig -d -u 0\n" msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:1474 msgid "" "To determine if any memory disks are still attached to the system, type " "`mdconfig -l`." msgstr "" #. type: Title === #: documentation/content/en/books/handbook/disks/_index.adoc:1476 #, no-wrap msgid "Creating a File- or Memory-Backed Memory Disk" msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:1481 msgid "" "FreeBSD also supports memory disks where the storage to use is allocated " "from either a hard disk or an area of memory. The first method is commonly " "referred to as a file-backed file system and the second method as a memory-" "backed file system. Both types can be created using `mdconfig`." msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:1486 msgid "" "To create a new memory-backed file system, specify a type of `swap` and the " "size of the memory disk to create. Then, format the memory disk with a file " "system and mount as usual. This example creates a 5M memory disk on unit " "`1`. That memory disk is then formatted with the UFS file system before it " "is mounted:" msgstr "" #. type: delimited block . 4 #: documentation/content/en/books/handbook/disks/_index.adoc:1500 #, no-wrap msgid "" "# mdconfig -a -t swap -s 5m -u 1\n" "# newfs -U md1\n" "/dev/md1: 5.0MB (10240 sectors) block size 16384, fragment size 2048\n" " using 4 cylinder groups of 1.27MB, 81 blks, 192 inodes.\n" " with soft updates\n" "super-block backups (for fsck -b #) at:\n" " 160, 2752, 5344, 7936\n" "# mount /dev/md1 /mnt\n" "# df /mnt\n" "Filesystem 1K-blocks Used Avail Capacity Mounted on\n" "/dev/md1 4718 4 4338 0% /mnt\n" msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:1504 msgid "" "To create a new file-backed memory disk, first allocate an area of disk to " "use. This example creates an empty 5MB file named [.filename]#newimage#:" msgstr "" #. type: delimited block . 4 #: documentation/content/en/books/handbook/disks/_index.adoc:1510 #, no-wrap msgid "" "# dd if=/dev/zero of=newimage bs=1k count=5k\n" "5120+0 records in\n" "5120+0 records out\n" msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:1513 msgid "" "Next, attach that file to a memory disk, label the memory disk and format it " "with the UFS file system, mount the memory disk, and verify the size of the " "file-backed disk:" msgstr "" #. type: delimited block . 4 #: documentation/content/en/books/handbook/disks/_index.adoc:1527 #, no-wrap msgid "" "# mdconfig -f newimage -u 0\n" "# bsdlabel -w md0 auto\n" "# newfs -U md0a\n" "/dev/md0a: 5.0MB (10224 sectors) block size 16384, fragment size 2048\n" " using 4 cylinder groups of 1.25MB, 80 blks, 192 inodes.\n" "super-block backups (for fsck -b #) at:\n" " 160, 2720, 5280, 7840\n" "# mount /dev/md0a /mnt\n" "# df /mnt\n" "Filesystem 1K-blocks Used Avail Capacity Mounted on\n" "/dev/md0a 4710 4 4330 0% /mnt\n" msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:1532 msgid "" "It takes several commands to create a file- or memory-backed file system " "using `mdconfig`. FreeBSD also comes with `mdmfs` which automatically " "configures a memory disk, formats it with the UFS file system, and mounts " "it. For example, after creating _newimage_ with `dd`, this one command is " "equivalent to running the `bsdlabel`, `newfs`, and `mount` commands shown " "above:" msgstr "" #. type: delimited block . 4 #: documentation/content/en/books/handbook/disks/_index.adoc:1536 #, no-wrap msgid "# mdmfs -F newimage -s 5m md0 /mnt\n" msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:1539 msgid "" "To instead create a new memory-based memory disk with `mdmfs`, use this one " "command:" msgstr "" #. type: delimited block . 4 #: documentation/content/en/books/handbook/disks/_index.adoc:1543 #, no-wrap msgid "# mdmfs -s 5m md1 /mnt\n" msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:1547 msgid "" "If the unit number is not specified, `mdmfs` will automatically select an " "unused memory device. For more details about `mdmfs`, refer to man:mdmfs[8]." msgstr "" #. type: Title == #: documentation/content/en/books/handbook/disks/_index.adoc:1549 #, no-wrap msgid "File System Snapshots" msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:1552 msgid "" "FreeBSD offers a feature in conjunction with crossref:config[soft-updates," "Soft Updates]: file system snapshots." msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:1558 msgid "" "UFS snapshots allow a user to create images of specified file systems, and " "treat them as a file. Snapshot files must be created in the file system " "that the action is performed on, and a user may create no more than 20 " "snapshots per file system. Active snapshots are recorded in the superblock " "so they are persistent across unmount and remount operations along with " "system reboots. When a snapshot is no longer required, it can be removed " "using man:rm[1]. While snapshots may be removed in any order, all the used " "space may not be acquired because another snapshot will possibly claim some " "of the released blocks." msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:1561 msgid "" "The un-alterable `snapshot` file flag is set by man:mksnap_ffs[8] after " "initial creation of a snapshot file. man:unlink[1] makes an exception for " "snapshot files since it allows them to be removed." msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:1564 msgid "" "Snapshots are created using man:mount[8]. To place a snapshot of [." "filename]#/var# in the file [.filename]#/var/snapshot/snap#, use the " "following command:" msgstr "" #. type: delimited block . 4 #: documentation/content/en/books/handbook/disks/_index.adoc:1568 #, no-wrap msgid "# mount -u -o snapshot /var/snapshot/snap /var\n" msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:1571 msgid "Alternatively, use man:mksnap_ffs[8] to create the snapshot:" msgstr "" #. type: delimited block . 4 #: documentation/content/en/books/handbook/disks/_index.adoc:1575 #, no-wrap msgid "# mksnap_ffs /var /var/snapshot/snap\n" msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:1578 msgid "" "One can find snapshot files on a file system, such as [.filename]#/var#, " "using man:find[1]:" msgstr "" #. type: delimited block . 4 #: documentation/content/en/books/handbook/disks/_index.adoc:1582 #, no-wrap msgid "# find /var -flags snapshot\n" msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:1585 msgid "Once a snapshot has been created, it has several uses:" msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:1587 msgid "" "Some administrators will use a snapshot file for backup purposes, because " "the snapshot can be transferred to CDs or tape." msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:1588 msgid "" "The file system integrity checker, man:fsck[8], may be run on the snapshot. " "Assuming that the file system was clean when it was mounted, this should " "always provide a clean and unchanging result." msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:1589 msgid "" "Running man:dump[8] on the snapshot will produce a dump file that is " "consistent with the file system and the timestamp of the snapshot. man:" "dump[8] can also take a snapshot, create a dump image, and then remove the " "snapshot in one command by using `-L`." msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:1590 msgid "" "The snapshot can be mounted as a frozen image of the file system. To man:" "mount[8] the snapshot [.filename]#/var/snapshot/snap# run:" msgstr "" #. type: delimited block . 4 #: documentation/content/en/books/handbook/disks/_index.adoc:1595 #, no-wrap msgid "" "# mdconfig -a -t vnode -o readonly -f /var/snapshot/snap -u 4\n" "# mount -r /dev/md4 /mnt\n" msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:1601 msgid "" "The frozen [.filename]#/var# is now available through [.filename]#/mnt#. " "Everything will initially be in the same state it was during the snapshot " "creation time. The only exception is that any earlier snapshots will appear " "as zero length files. To unmount the snapshot, use:" msgstr "" #. type: delimited block . 4 #: documentation/content/en/books/handbook/disks/_index.adoc:1606 #, no-wrap msgid "" "# umount /mnt\n" "# mdconfig -d -u 4\n" msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:1609 msgid "" "For more information about `softupdates` and file system snapshots, " "including technical papers, visit Marshall Kirk McKusick's website at http://" "www.mckusick.com/[http://www.mckusick.com/]." msgstr "" #. type: Title == #: documentation/content/en/books/handbook/disks/_index.adoc:1611 #, no-wrap msgid "Disk Quotas" msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:1615 msgid "" "Disk quotas can be used to limit the amount of disk space or the number of " "files a user or members of a group may allocate on a per-file system basis. " "This prevents one user or group of users from consuming all of the available " "disk space." msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:1618 msgid "" "This section describes how to configure disk quotas for the UFS file " "system. To configure quotas on the ZFS file system, refer to crossref:" "zfs[zfs-zfs-quota,\"Dataset, User, and Group Quotas\"]" msgstr "" #. type: Title === #: documentation/content/en/books/handbook/disks/_index.adoc:1619 #, no-wrap msgid "Enabling Disk Quotas" msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:1622 msgid "To determine if the FreeBSD kernel provides support for disk quotas:" msgstr "" #. type: delimited block . 4 #: documentation/content/en/books/handbook/disks/_index.adoc:1627 #, no-wrap msgid "" "% sysctl kern.features.ufs_quota\n" "kern.features.ufs_quota: 1\n" msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:1631 msgid "" "In this example, the `1` indicates quota support. If the value is instead " "`0`, add the following line to a custom kernel configuration file and " "rebuild the kernel using the instructions in crossref:" "kernelconfig[kernelconfig,Configuring the FreeBSD Kernel]:" msgstr "" #. type: delimited block . 4 #: documentation/content/en/books/handbook/disks/_index.adoc:1635 #, no-wrap msgid "options QUOTA\n" msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:1638 msgid "Next, enable disk quotas in [.filename]#/etc/rc.conf#:" msgstr "" #. type: delimited block . 4 #: documentation/content/en/books/handbook/disks/_index.adoc:1642 #, no-wrap msgid "quota_enable=\"YES\"\n" msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:1648 msgid "" "Normally on bootup, the quota integrity of each file system is checked by " "man:quotacheck[8]. This program insures that the data in the quota database " "properly reflects the data on the file system. This is a time consuming " "process that will significantly affect the time the system takes to boot. " "To skip this step, add this variable to [.filename]#/etc/rc.conf#:" msgstr "" #. type: delimited block . 4 #: documentation/content/en/books/handbook/disks/_index.adoc:1652 #, no-wrap msgid "check_quotas=\"NO\"\n" msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:1657 msgid "" "Finally, edit [.filename]#/etc/fstab# to enable disk quotas on a per-file " "system basis. To enable per-user quotas on a file system, add `userquota` " "to the options field in the [.filename]#/etc/fstab# entry for the file " "system to enable quotas on. For example:" msgstr "" #. type: delimited block . 4 #: documentation/content/en/books/handbook/disks/_index.adoc:1661 #, no-wrap msgid "/dev/da1s2g /home ufs rw,userquota 1 2\n" msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:1665 msgid "" "To enable group quotas, use `groupquota` instead. To enable both user and " "group quotas, separate the options with a comma:" msgstr "" #. type: delimited block . 4 #: documentation/content/en/books/handbook/disks/_index.adoc:1669 #, no-wrap msgid "/dev/da1s2g /home ufs rw,userquota,groupquota 1 2\n" msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:1674 msgid "" "By default, quota files are stored in the root directory of the file system " "as [.filename]#quota.user# and [.filename]#quota.group#. Refer to man:" "fstab[5] for more information. Specifying an alternate location for the " "quota files is not recommended." msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:1676 msgid "" "Once the configuration is complete, reboot the system and [.filename]#/etc/" "rc# will automatically run the appropriate commands to create the initial " "quota files for all of the quotas enabled in [.filename]#/etc/fstab#." msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:1679 msgid "" "In the normal course of operations, there should be no need to manually run " "man:quotacheck[8], man:quotaon[8], or man:quotaoff[8]. However, one should " "read these manual pages to be familiar with their operation." msgstr "" #. type: Title === #: documentation/content/en/books/handbook/disks/_index.adoc:1680 #, no-wrap msgid "Setting Quota Limits" msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:1683 msgid "To verify that quotas are enabled, run:" msgstr "" #. type: delimited block . 4 #: documentation/content/en/books/handbook/disks/_index.adoc:1687 #, no-wrap msgid "# quota -v\n" msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:1690 msgid "" "There should be a one line summary of disk usage and current quota limits " "for each file system that quotas are enabled on." msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:1692 msgid "The system is now ready to be assigned quota limits with `edquota`." msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:1696 msgid "" "Several options are available to enforce limits on the amount of disk space " "a user or group may allocate, and how many files they may create. " "Allocations can be limited based on disk space (block quotas), number of " "files (inode quotas), or a combination of both. Each limit is further " "broken down into two categories: hard and soft limits." msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:1701 msgid "" "A hard limit may not be exceeded. Once a user reaches a hard limit, no " "further allocations can be made on that file system by that user. For " "example, if the user has a hard limit of 500 kbytes on a file system and is " "currently using 490 kbytes, the user can only allocate an additional 10 " "kbytes. Attempting to allocate an additional 11 kbytes will fail." msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:1705 msgid "" "Soft limits can be exceeded for a limited amount of time, known as the grace " "period, which is one week by default. If a user stays over their limit " "longer than the grace period, the soft limit turns into a hard limit and no " "further allocations are allowed. When the user drops back below the soft " "limit, the grace period is reset." msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:1709 msgid "" "In the following example, the quota for the `test` account is being edited. " "When `edquota` is invoked, the editor specified by `EDITOR` is opened in " "order to edit the quota limits. The default editor is set to vi." msgstr "" #. type: delimited block . 4 #: documentation/content/en/books/handbook/disks/_index.adoc:1718 #, no-wrap msgid "" "# edquota -u test\n" "Quotas for user test:\n" "/usr: kbytes in use: 65, limits (soft = 50, hard = 75)\n" " inodes in use: 7, limits (soft = 50, hard = 60)\n" "/usr/var: kbytes in use: 0, limits (soft = 50, hard = 75)\n" " inodes in use: 0, limits (soft = 50, hard = 60)\n" msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:1724 msgid "" "There are normally two lines for each file system that has quotas enabled. " "One line represents the block limits and the other represents the inode " "limits. Change the value to modify the quota limit. For example, to raise " "the block limit on [.filename]#/usr# to a soft limit of `500` and a hard " "limit of `600`, change the values in that line as follows:" msgstr "" #. type: delimited block . 4 #: documentation/content/en/books/handbook/disks/_index.adoc:1728 #, no-wrap msgid "/usr: kbytes in use: 65, limits (soft = 500, hard = 600)\n" msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:1731 msgid "The new quota limits take effect upon exiting the editor." msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:1736 msgid "" "Sometimes it is desirable to set quota limits on a range of users. This can " "be done by first assigning the desired quota limit to a user. Then, use `-" "p` to duplicate that quota to a specified range of user IDs (UIDs). The " "following command will duplicate those quota limits for UIDs `10,000` " "through `19,999`:" msgstr "" #. type: delimited block . 4 #: documentation/content/en/books/handbook/disks/_index.adoc:1740 #, no-wrap msgid "# edquota -p test 10000-19999\n" msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:1743 msgid "For more information, refer to man:edquota[8]." msgstr "" #. type: Title === #: documentation/content/en/books/handbook/disks/_index.adoc:1744 #, no-wrap msgid "Checking Quota Limits and Disk Usage" msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:1750 msgid "" "To check individual user or group quotas and disk usage, use man:quota[1]. " "A user may only examine their own quota and the quota of a group they are a " "member of. Only the superuser may view all user and group quotas. To get a " "summary of all quotas and disk usage for file systems with quotas enabled, " "use man:repquota[8]." msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:1754 msgid "" "Normally, file systems that the user is not using any disk space on will not " "show in the output of `quota`, even if the user has a quota limit assigned " "for that file system. Use `-v` to display those file systems. The " "following is sample output from `quota -v` for a user that has quota limits " "on two file systems." msgstr "" #. type: delimited block . 4 #: documentation/content/en/books/handbook/disks/_index.adoc:1761 #, no-wrap msgid "" "Disk quotas for user test (uid 1002):\n" " Filesystem usage quota limit grace files quota limit grace\n" " /usr 65* 50 75 5days 7 50 60\n" " /usr/var 0 50 75 0 50 60\n" msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:1765 msgid "" "In this example, the user is currently 15 kbytes over the soft limit of 50 " "kbytes on [.filename]#/usr# and has 5 days of grace period left. The " "asterisk `*` indicates that the user is currently over the quota limit." msgstr "" #. type: Title === #: documentation/content/en/books/handbook/disks/_index.adoc:1766 #, no-wrap msgid "Quotas over NFS" msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:1770 msgid "" "Quotas are enforced by the quota subsystem on the NFS server. The man:rpc." "rquotad[8] daemon makes quota information available to `quota` on NFS " "clients, allowing users on those machines to see their quota statistics." msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:1772 msgid "" "On the NFS server, enable `rpc.rquotad` by removing the `+#+` from this line " "in [.filename]*/etc/inetd.conf*:" msgstr "" #. type: delimited block . 4 #: documentation/content/en/books/handbook/disks/_index.adoc:1776 #, no-wrap msgid "rquotad/1 dgram rpc/udp wait root /usr/libexec/rpc.rquotad rpc.rquotad\n" msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:1779 msgid "Then, restart `inetd`:" msgstr "" #. type: delimited block . 4 #: documentation/content/en/books/handbook/disks/_index.adoc:1783 #, no-wrap msgid "# service inetd restart\n" msgstr "" #. type: Title == #: documentation/content/en/books/handbook/disks/_index.adoc:1786 #, no-wrap msgid "Encrypting Disk Partitions" msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:1791 msgid "" "FreeBSD offers excellent online protections against unauthorized data " "access. File permissions and crossref:mac[mac,Mandatory Access Control] " "(MAC) help prevent unauthorized users from accessing data while the " "operating system is active and the computer is powered up. However, the " "permissions enforced by the operating system are irrelevant if an attacker " "has physical access to a computer and can move the computer's hard drive to " "another system to copy and analyze the data." msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:1795 msgid "" "Regardless of how an attacker may have come into possession of a hard drive " "or powered-down computer, the GEOM-based cryptographic subsystems built into " "FreeBSD are able to protect the data on the computer's file systems against " "even highly-motivated attackers with significant resources. Unlike " "encryption methods that encrypt individual files, the built-in `gbde` and " "`geli` utilities can be used to transparently encrypt entire file systems. " "No cleartext ever touches the hard drive's platter." msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:1798 msgid "" "This chapter demonstrates how to create an encrypted file system on " "FreeBSD. It first demonstrates the process using `gbde` and then " "demonstrates the same example using `geli`." msgstr "" #. type: Title === #: documentation/content/en/books/handbook/disks/_index.adoc:1799 #, no-wrap msgid "Disk Encryption with gbde" msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:1804 msgid "" "The objective of the man:gbde[4] facility is to provide a formidable " "challenge for an attacker to gain access to the contents of a _cold_ storage " "device. However, if the computer is compromised while up and running and " "the storage device is actively attached, or the attacker has access to a " "valid passphrase, it offers no protection to the contents of the storage " "device. Thus, it is important to provide physical security while the system " "is running and to protect the passphrase used by the encryption mechanism." msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:1809 msgid "" "This facility provides several barriers to protect the data stored in each " "disk sector. It encrypts the contents of a disk sector using 128-bit AES in " "CBC mode. Each sector on the disk is encrypted with a different AES key. " "For more information on the cryptographic design, including how the sector " "keys are derived from the user-supplied passphrase, refer to man:gbde[4]." msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:1811 msgid "" "FreeBSD provides a kernel module for gbde which can be loaded with this " "command:" msgstr "" #. type: delimited block . 4 #: documentation/content/en/books/handbook/disks/_index.adoc:1815 #, no-wrap msgid "# kldload geom_bde\n" msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:1818 msgid "" "If using a custom kernel configuration file, ensure it contains this line:" msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:1820 msgid "`options GEOM_BDE`" msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:1822 msgid "" "The following example demonstrates adding a new hard drive to a system that " "will hold a single encrypted partition that will be mounted as [.filename]#/" "private#." msgstr "" #. type: Block title #: documentation/content/en/books/handbook/disks/_index.adoc:1824 #, no-wrap msgid "Procedure: Encrypting a Partition with gbde" msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:1826 msgid "Add the New Hard Drive" msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:1829 msgid "" "Install the new drive to the system as explained in <>. For " "the purposes of this example, a new hard drive partition has been added as [." "filename]#/dev/ad4s1c# and [.filename]#/dev/ad0s1*# represents the existing " "standard FreeBSD partitions." msgstr "" #. type: delimited block . 4 #: documentation/content/en/books/handbook/disks/_index.adoc:1836 #, no-wrap msgid "" "# ls /dev/ad*\n" "/dev/ad0 /dev/ad0s1b /dev/ad0s1e /dev/ad4s1\n" "/dev/ad0s1 /dev/ad0s1c /dev/ad0s1f /dev/ad4s1c\n" "/dev/ad0s1a /dev/ad0s1d /dev/ad4\n" msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:1839 msgid "Create a Directory to Hold `gbde` Lock Files" msgstr "" #. type: delimited block . 4 #: documentation/content/en/books/handbook/disks/_index.adoc:1843 #, no-wrap msgid "# mkdir /etc/gbde\n" msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:1848 msgid "" "The gbde lock file contains information that gbde requires to access " "encrypted partitions. Without access to the lock file, gbde will not be " "able to decrypt the data contained in the encrypted partition without " "significant manual intervention which is not supported by the software. " "Each encrypted partition uses a separate lock file." msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:1849 msgid "Initialize the `gbde` Partition" msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:1854 msgid "" "A gbde partition must be initialized before it can be used. This " "initialization needs to be performed only once. This command will open the " "default editor, in order to set various configuration options in a " "template. For use with the UFS file system, set the sector_size to 2048:" msgstr "" #. type: delimited block . 4 #: documentation/content/en/books/handbook/disks/_index.adoc:1867 #, no-wrap msgid "" "# gbde init /dev/ad4s1c -i -L /etc/gbde/ad4s1c.lock\n" "# $FreeBSD: src/sbin/gbde/template.txt,v 1.1.36.1 2009/08/03 08:13:06 kensmith Exp $\n" "#\n" "# Sector size is the smallest unit of data which can be read or written.\n" "# Making it too small decreases performance and decreases available space.\n" "# Making it too large may prevent filesystems from working. 512 is the\n" "# minimum and always safe. For UFS, use the fragment size\n" "#\n" "sector_size\t=\t2048\n" "[...]\n" msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:1873 msgid "" "Once the edit is saved, the user will be asked twice to type the passphrase " "used to secure the data. The passphrase must be the same both times. The " "ability of gbde to protect data depends entirely on the quality of the " "passphrase. For tips on how to select a secure passphrase that is easy to " "remember, see http://world.std.com/\\~reinhold/diceware.html[http://world." "std.com/~reinhold/diceware.htm]." msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:1877 msgid "" "This initialization creates a lock file for the gbde partition. In this " "example, it is stored as [.filename]#/etc/gbde/ad4s1c.lock#. Lock files " "must end in \".lock\" in order to be correctly detected by the [.filename]#/" "etc/rc.d/gbde# start up script." msgstr "" #. type: delimited block = 4 #: documentation/content/en/books/handbook/disks/_index.adoc:1882 msgid "" "Lock files _must_ be backed up together with the contents of any encrypted " "partitions. Without the lock file, the legitimate owner will be unable to " "access the data on the encrypted partition." msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:1885 msgid "Attach the Encrypted Partition to the Kernel" msgstr "" #. type: delimited block . 4 #: documentation/content/en/books/handbook/disks/_index.adoc:1889 #, no-wrap msgid "# gbde attach /dev/ad4s1c -l /etc/gbde/ad4s1c.lock\n" msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:1893 msgid "" "This command will prompt to input the passphrase that was selected during " "the initialization of the encrypted partition. The new encrypted device " "will appear in [.filename]#/dev# as [.filename]#/dev/device_name.bde#:" msgstr "" #. type: delimited block . 4 #: documentation/content/en/books/handbook/disks/_index.adoc:1900 #, no-wrap msgid "" "# ls /dev/ad*\n" "/dev/ad0 /dev/ad0s1b /dev/ad0s1e /dev/ad4s1\n" "/dev/ad0s1 /dev/ad0s1c /dev/ad0s1f /dev/ad4s1c\n" "/dev/ad0s1a /dev/ad0s1d /dev/ad4 /dev/ad4s1c.bde\n" msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:1903 msgid "Create a File System on the Encrypted Device" msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:1907 msgid "" "Once the encrypted device has been attached to the kernel, a file system can " "be created on the device. This example creates a UFS file system with soft " "updates enabled. Be sure to specify the partition which has a [.filename]#*." "bde# extension:" msgstr "" #. type: delimited block . 4 #: documentation/content/en/books/handbook/disks/_index.adoc:1911 #, no-wrap msgid "# newfs -U /dev/ad4s1c.bde\n" msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:1914 msgid "Mount the Encrypted Partition" msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:1916 msgid "Create a mount point and mount the encrypted file system:" msgstr "" #. type: delimited block . 4 #: documentation/content/en/books/handbook/disks/_index.adoc:1921 #, no-wrap msgid "" "# mkdir /private\n" "# mount /dev/ad4s1c.bde /private\n" msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:1924 msgid "Verify That the Encrypted File System is Available" msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:1926 msgid "The encrypted file system should now be visible and available for use:" msgstr "" #. type: delimited block . 4 #: documentation/content/en/books/handbook/disks/_index.adoc:1937 #, no-wrap msgid "" "% df -H\n" "Filesystem Size Used Avail Capacity Mounted on\n" "/dev/ad0s1a 1037M 72M 883M 8% /\n" "/devfs 1.0K 1.0K 0B 100% /dev\n" "/dev/ad0s1f 8.1G 55K 7.5G 0% /home\n" "/dev/ad0s1e 1037M 1.1M 953M 0% /tmp\n" "/dev/ad0s1d 6.1G 1.9G 3.7G 35% /usr\n" "/dev/ad4s1c.bde 150G 4.1K 138G 0% /private\n" msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:1941 msgid "" "After each boot, any encrypted file systems must be manually re-attached to " "the kernel, checked for errors, and mounted, before the file systems can be " "used. To configure these steps, add the following lines to [.filename]#/etc/" "rc.conf#:" msgstr "" #. type: delimited block . 4 #: documentation/content/en/books/handbook/disks/_index.adoc:1947 #, no-wrap msgid "" "gbde_autoattach_all=\"YES\"\n" "gbde_devices=\"ad4s1c\"\n" "gbde_lockdir=\"/etc/gbde\"\n" msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:1952 msgid "" "This requires that the passphrase be entered at the console at boot time. " "After typing the correct passphrase, the encrypted partition will be mounted " "automatically. Additional gbde boot options are available and listed in man:" "rc.conf[5]." msgstr "" #. type: delimited block = 4 #: documentation/content/en/books/handbook/disks/_index.adoc:1958 msgid "" "sysinstall is incompatible with gbde-encrypted devices. All [.filename]#*." "bde# devices must be detached from the kernel before starting sysinstall or " "it will crash during its initial probing for devices. To detach the " "encrypted device used in the example, use the following command:" msgstr "" #. type: delimited block . 4 #: documentation/content/en/books/handbook/disks/_index.adoc:1962 #, no-wrap msgid "# gbde detach /dev/ad4s1c\n" msgstr "" #. type: Title === #: documentation/content/en/books/handbook/disks/_index.adoc:1966 #, no-wrap msgid "Disk Encryption with `geli`" msgstr "" #. type: delimited block = 4 #: documentation/content/en/books/handbook/disks/_index.adoc:1971 msgid "" "An alternative cryptographic GEOM class is available using `geli`. This " "control utility adds some features and uses a different scheme for doing " "cryptographic work. It provides the following features:" msgstr "" #. type: delimited block = 4 #: documentation/content/en/books/handbook/disks/_index.adoc:1973 msgid "" "Utilizes the man:crypto[9] framework and automatically uses cryptographic " "hardware when it is available." msgstr "" #. type: delimited block = 4 #: documentation/content/en/books/handbook/disks/_index.adoc:1974 msgid "" "Supports multiple cryptographic algorithms such as AES, Blowfish, and 3DES." msgstr "" #. type: delimited block = 4 #: documentation/content/en/books/handbook/disks/_index.adoc:1975 msgid "" "Allows the root partition to be encrypted. The passphrase used to access the " "encrypted root partition will be requested during system boot." msgstr "" #. type: delimited block = 4 #: documentation/content/en/books/handbook/disks/_index.adoc:1976 msgid "Allows the use of two independent keys." msgstr "" #. type: delimited block = 4 #: documentation/content/en/books/handbook/disks/_index.adoc:1977 msgid "It is fast as it performs simple sector-to-sector encryption." msgstr "" #. type: delimited block = 4 #: documentation/content/en/books/handbook/disks/_index.adoc:1978 msgid "" "Allows backup and restore of master keys. If a user destroys their keys, it " "is still possible to get access to the data by restoring keys from the " "backup." msgstr "" #. type: delimited block = 4 #: documentation/content/en/books/handbook/disks/_index.adoc:1979 msgid "" "Allows a disk to attach with a random, one-time key which is useful for swap " "partitions and temporary file systems." msgstr "" #. type: delimited block = 4 #: documentation/content/en/books/handbook/disks/_index.adoc:1981 msgid "More features and usage examples can be found in man:geli[8]." msgstr "" #. type: delimited block = 4 #: documentation/content/en/books/handbook/disks/_index.adoc:1987 msgid "" "The following example describes how to generate a key file which will be " "used as part of the master key for the encrypted provider mounted under [." "filename]#/private#. The key file will provide some random data used to " "encrypt the master key. The master key will also be protected by a " "passphrase. The provider's sector size will be 4kB. The example describes " "how to attach to the `geli` provider, create a file system on it, mount it, " "work with it, and finally, how to detach it." msgstr "" #. type: Block title #: documentation/content/en/books/handbook/disks/_index.adoc:1989 #, no-wrap msgid "Procedure: Encrypting a Partition with `geli`" msgstr "" #. type: delimited block = 4 #: documentation/content/en/books/handbook/disks/_index.adoc:1991 msgid "Load `geli` Support" msgstr "" #. type: delimited block = 4 #: documentation/content/en/books/handbook/disks/_index.adoc:1993 msgid "" "Support for `geli` is available as a loadable kernel module. To configure " "the system to automatically load the module at boot time, add the following " "line to [.filename]#/boot/loader.conf#:" msgstr "" #. type: delimited block . 4 #: documentation/content/en/books/handbook/disks/_index.adoc:1997 #, no-wrap msgid "geom_eli_load=\"YES\"\n" msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:2000 msgid "To load the kernel module now:" msgstr "" #. type: delimited block . 4 #: documentation/content/en/books/handbook/disks/_index.adoc:2004 #, no-wrap msgid "# kldload geom_eli\n" msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:2007 msgid "" "For a custom kernel, ensure the kernel configuration file contains these " "lines:" msgstr "" #. type: delimited block . 4 #: documentation/content/en/books/handbook/disks/_index.adoc:2012 #, no-wrap msgid "" "options GEOM_ELI\n" "device crypto\n" msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:2015 msgid "Generate the Master Key" msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:2022 msgid "" "The following commands generate a master key that all data will be encrypted " "with. This key can never be changed. Rather than using it directly, it is " "encrypted with one or more user keys. The user keys are made up of an " "optional combination of random bytes from a file, [.filename]#/root/da2." "key#, and/or a passphrase. In this case, the data source for the key file " "is [.filename]#/dev/random#. This command also configures the sector size " "of the provider ([.filename]#/dev/da2.eli#) as 4kB, for better performance:" msgstr "" #. type: delimited block . 4 #: documentation/content/en/books/handbook/disks/_index.adoc:2029 #, no-wrap msgid "" "# dd if=/dev/random of=/root/da2.key bs=64 count=1\n" "# geli init -K /root/da2.key -s 4096 /dev/da2\n" "Enter new passphrase:\n" "Reenter new passphrase:\n" msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:2032 msgid "" "It is not mandatory to use both a passphrase and a key file as either method " "of securing the master key can be used in isolation." msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:2035 msgid "" "If the key file is given as \"-\", standard input will be used. For " "example, this command generates three key files:" msgstr "" #. type: delimited block . 4 #: documentation/content/en/books/handbook/disks/_index.adoc:2039 #, no-wrap msgid "# cat keyfile1 keyfile2 keyfile3 | geli init -K - /dev/da2\n" msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:2042 msgid "Attach the Provider with the Generated Key" msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:2044 msgid "" "To attach the provider, specify the key file, the name of the disk, and the " "passphrase:" msgstr "" #. type: delimited block . 4 #: documentation/content/en/books/handbook/disks/_index.adoc:2049 #, no-wrap msgid "" "# geli attach -k /root/da2.key /dev/da2\n" "Enter passphrase:\n" msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:2052 msgid "This creates a new device with an [.filename]#.eli# extension:" msgstr "" #. type: delimited block . 4 #: documentation/content/en/books/handbook/disks/_index.adoc:2057 #, no-wrap msgid "" "# ls /dev/da2*\n" "/dev/da2 /dev/da2.eli\n" msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:2060 msgid "Create the New File System" msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:2062 msgid "" "Next, format the device with the UFS file system and mount it on an existing " "mount point:" msgstr "" #. type: delimited block . 4 #: documentation/content/en/books/handbook/disks/_index.adoc:2068 #, no-wrap msgid "" "# dd if=/dev/random of=/dev/da2.eli bs=1m\n" "# newfs /dev/da2.eli\n" "# mount /dev/da2.eli /private\n" msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:2071 msgid "The encrypted file system should now be available for use:" msgstr "" #. type: delimited block . 4 #: documentation/content/en/books/handbook/disks/_index.adoc:2082 #, no-wrap msgid "" "# df -H\n" "Filesystem Size Used Avail Capacity Mounted on\n" "/dev/ad0s1a 248M 89M 139M 38% /\n" "/devfs 1.0K 1.0K 0B 100% /dev\n" "/dev/ad0s1f 7.7G 2.3G 4.9G 32% /usr\n" "/dev/ad0s1d 989M 1.5M 909M 0% /tmp\n" "/dev/ad0s1e 3.9G 1.3G 2.3G 35% /var\n" "/dev/da2.eli 150G 4.1K 138G 0% /private\n" msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:2085 msgid "" "Once the work on the encrypted partition is done, and the [.filename]#/" "private# partition is no longer needed, it is prudent to put the device into " "cold storage by unmounting and detaching the `geli` encrypted partition from " "the kernel:" msgstr "" #. type: delimited block . 4 #: documentation/content/en/books/handbook/disks/_index.adoc:2090 #, no-wrap msgid "" "# umount /private\n" "# geli detach da2.eli\n" msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:2093 msgid "" "An [.filename]#rc.d# script is provided to simplify the mounting of `geli`-" "encrypted devices at boot time. For this example, add these lines to [." "filename]#/etc/rc.conf#:" msgstr "" #. type: delimited block . 4 #: documentation/content/en/books/handbook/disks/_index.adoc:2098 #, no-wrap msgid "" "geli_devices=\"da2\"\n" "geli_da2_flags=\"-k /root/da2.key\"\n" msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:2108 msgid "" "This configures [.filename]#/dev/da2# as a `geli` provider with a master key " "of [.filename]#/root/da2.key#. The system will automatically detach the " "provider from the kernel before the system shuts down. During the startup " "process, the script will prompt for the passphrase before attaching the " "provider. Other kernel messages might be shown before and after the " "password prompt. If the boot process seems to stall, look carefully for the " "password prompt among the other messages. Once the correct passphrase is " "entered, the provider is attached. The file system is then mounted, " "typically by an entry in [.filename]#/etc/fstab#. Refer to crossref:" "basics[mount-unmount,“Mounting and Unmounting File Systems”] for " "instructions on how to configure a file system to mount at boot time." msgstr "" #. type: Title == #: documentation/content/en/books/handbook/disks/_index.adoc:2110 #, no-wrap msgid "Encrypting Swap" msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:2117 msgid "" "Like the encryption of disk partitions, encryption of swap space is used to " "protect sensitive information. Consider an application that deals with " "passwords. As long as these passwords stay in physical memory, they are not " "written to disk and will be cleared after a reboot. However, if FreeBSD " "starts swapping out memory pages to free space, the passwords may be written " "to the disk unencrypted. Encrypting swap space can be a solution for this " "scenario." msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:2120 msgid "" "This section demonstrates how to configure an encrypted swap partition using " "man:gbde[8] or man:geli[8] encryption. It assumes that [.filename]#/dev/" "ada0s1b# is the swap partition." msgstr "" #. type: Title === #: documentation/content/en/books/handbook/disks/_index.adoc:2121 #, no-wrap msgid "Configuring Encrypted Swap" msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:2125 msgid "" "Swap partitions are not encrypted by default and should be cleared of any " "sensitive data before continuing. To overwrite the current swap partition " "with random garbage, execute the following command:" msgstr "" #. type: delimited block . 4 #: documentation/content/en/books/handbook/disks/_index.adoc:2129 #, no-wrap msgid "# dd if=/dev/random of=/dev/ada0s1b bs=1m\n" msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:2132 msgid "" "To encrypt the swap partition using man:gbde[8], add the `.bde` suffix to " "the swap line in [.filename]#/etc/fstab#:" msgstr "" #. type: delimited block . 4 #: documentation/content/en/books/handbook/disks/_index.adoc:2137 #, no-wrap msgid "" "# Device\t\tMountpoint\tFStype\tOptions\t\tDump\tPass#\n" "/dev/ada0s1b.bde\tnone\t\tswap\tsw\t\t0\t0\n" msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:2140 msgid "" "To instead encrypt the swap partition using man:geli[8], use the `.eli` " "suffix:" msgstr "" #. type: delimited block . 4 #: documentation/content/en/books/handbook/disks/_index.adoc:2145 #, no-wrap msgid "" "# Device\t\tMountpoint\tFStype\tOptions\t\tDump\tPass#\n" "/dev/ada0s1b.eli\tnone\t\tswap\tsw\t\t0\t0\n" msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:2150 msgid "" "By default, man:geli[8] uses the AES algorithm with a key length of 128 " "bits. Normally the default settings will suffice. If desired, these " "defaults can be altered in the options field in [.filename]#/etc/fstab#. The " "possible flags are:" msgstr "" #. type: Labeled list #: documentation/content/en/books/handbook/disks/_index.adoc:2151 #, no-wrap msgid "aalgo" msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:2154 msgid "" "Data integrity verification algorithm used to ensure that the encrypted data " "has not been tampered with. See man:geli[8] for a list of supported " "algorithms." msgstr "" #. type: Labeled list #: documentation/content/en/books/handbook/disks/_index.adoc:2155 #, no-wrap msgid "ealgo" msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:2158 msgid "" "Encryption algorithm used to protect the data. See man:geli[8] for a list " "of supported algorithms." msgstr "" #. type: Labeled list #: documentation/content/en/books/handbook/disks/_index.adoc:2159 #, no-wrap msgid "keylen" msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:2162 msgid "" "The length of the key used for the encryption algorithm. See man:geli[8] " "for the key lengths that are supported by each encryption algorithm." msgstr "" #. type: Labeled list #: documentation/content/en/books/handbook/disks/_index.adoc:2163 #, no-wrap msgid "sectorsize" msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:2167 msgid "" "The size of the blocks data is broken into before it is encrypted. Larger " "sector sizes increase performance at the cost of higher storage overhead. " "The recommended size is 4096 bytes." msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:2169 msgid "" "This example configures an encrypted swap partition using the Blowfish " "algorithm with a key length of 128 bits and a sectorsize of 4 kilobytes:" msgstr "" #. type: delimited block . 4 #: documentation/content/en/books/handbook/disks/_index.adoc:2174 #, no-wrap msgid "" "# Device\t\tMountpoint\tFStype\tOptions\t\t\t\tDump\tPass#\n" "/dev/ada0s1b.eli\tnone\t\tswap\tsw,ealgo=blowfish,keylen=128,sectorsize=4096\t0\t0\n" msgstr "" #. type: Title === #: documentation/content/en/books/handbook/disks/_index.adoc:2176 #, no-wrap msgid "Encrypted Swap Verification" msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:2179 msgid "" "Once the system has rebooted, proper operation of the encrypted swap can be " "verified using `swapinfo`." msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:2181 msgid "If man:gbde[8] is being used:" msgstr "" #. type: delimited block . 4 #: documentation/content/en/books/handbook/disks/_index.adoc:2187 #, no-wrap msgid "" "% swapinfo\n" "Device 1K-blocks Used Avail Capacity\n" "/dev/ada0s1b.bde 542720 0 542720 0\n" msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:2190 msgid "If man:geli[8] is being used:" msgstr "" #. type: delimited block . 4 #: documentation/content/en/books/handbook/disks/_index.adoc:2196 #, no-wrap msgid "" "% swapinfo\n" "Device 1K-blocks Used Avail Capacity\n" "/dev/ada0s1b.eli 542720 0 542720 0\n" msgstr "" #. type: Title == #: documentation/content/en/books/handbook/disks/_index.adoc:2199 #, no-wrap msgid "Highly Available Storage (HAST)" msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:2205 msgid "" "High availability is one of the main requirements in serious business " "applications and highly-available storage is a key component in such " "environments. In FreeBSD, the Highly Available STorage (HAST) framework " "allows transparent storage of the same data across several physically " "separated machines connected by a TCP/IP network. HAST can be understood as " "a network-based RAID1 (mirror), and is similar to the DRBD(R) storage system " "used in the GNU/Linux(R) platform. In combination with other high-" "availability features of FreeBSD like CARP, HAST makes it possible to build " "a highly-available storage cluster that is resistant to hardware failures." msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:2207 msgid "The following are the main features of HAST:" msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:2209 msgid "Can be used to mask I/O errors on local hard drives." msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:2210 msgid "" "File system agnostic as it works with any file system supported by FreeBSD." msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:2211 msgid "" "Efficient and quick resynchronization as only the blocks that were modified " "during the downtime of a node are synchronized." msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:2212 msgid "" "Can be used in an already deployed environment to add additional redundancy." msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:2213 msgid "" "Together with CARP, Heartbeat, or other tools, it can be used to build a " "robust and durable storage system." msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:2215 msgid "After reading this section, you will know:" msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:2217 msgid "What HAST is, how it works, and which features it provides." msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:2218 msgid "How to set up and use HAST on FreeBSD." msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:2219 msgid "How to integrate CARP and man:devd[8] to build a robust storage system." msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:2221 msgid "Before reading this section, you should:" msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:2223 msgid "" "Understand UNIX(R) and FreeBSD basics (crossref:basics[basics,FreeBSD " "Basics])." msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:2224 msgid "" "Know how to configure network interfaces and other core FreeBSD subsystems " "(crossref:config[config-tuning,Configuration and Tuning])." msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:2225 msgid "" "Have a good understanding of FreeBSD networking (crossref:partiv[network-" "communication,\"Network Communication\"])." msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:2227 msgid "" "The HAST project was sponsored by The FreeBSD Foundation with support from " "http://www.omc.net/[http://www.omc.net/] and http://www.transip.nl/[http://" "www.transip.nl/]." msgstr "" #. type: Title === #: documentation/content/en/books/handbook/disks/_index.adoc:2228 #, no-wrap msgid "HAST Operation" msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:2232 msgid "" "HAST provides synchronous block-level replication between two physical " "machines: the _primary_ node and the _secondary_ node. These two machines " "together are referred to as a cluster." msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:2236 msgid "" "Since HAST works in a primary-secondary configuration, it allows only one of " "the cluster nodes to be active at any given time. The primary node, also " "called _active_, is the one which will handle all the I/O requests to HAST-" "managed devices. The secondary node is automatically synchronized from the " "primary node." msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:2238 msgid "" "The physical components of the HAST system are the local disk on primary " "node, and the disk on the remote, secondary node." msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:2242 msgid "" "HAST operates synchronously on a block level, making it transparent to file " "systems and applications. HAST provides regular GEOM providers in [." "filename]#/dev/hast/# for use by other tools or applications. There is no " "difference between using HAST-provided devices and raw disks or partitions." msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:2246 msgid "" "Each write, delete, or flush operation is sent to both the local disk and to " "the remote disk over TCP/IP. Each read operation is served from the local " "disk, unless the local disk is not up-to-date or an I/O error occurs. In " "such cases, the read operation is sent to the secondary node." msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:2250 msgid "" "HAST tries to provide fast failure recovery. For this reason, it is " "important to reduce synchronization time after a node's outage. To provide " "fast synchronization, HAST manages an on-disk bitmap of dirty extents and " "only synchronizes those during a regular synchronization, with an exception " "of the initial sync." msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:2253 msgid "" "There are many ways to handle synchronization. HAST implements several " "replication modes to handle different synchronization methods:" msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:2255 msgid "" "_memsync_: This mode reports a write operation as completed when the local " "write operation is finished and when the remote node acknowledges data " "arrival, but before actually storing the data. The data on the remote node " "will be stored directly after sending the acknowledgement. This mode is " "intended to reduce latency, but still provides good reliability. This mode " "is the default." msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:2256 msgid "" "_fullsync_: This mode reports a write operation as completed when both the " "local write and the remote write complete. This is the safest and the " "slowest replication mode." msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:2257 msgid "" "_async_: This mode reports a write operation as completed when the local " "write completes. This is the fastest and the most dangerous replication " "mode. It should only be used when replicating to a distant node where " "latency is too high for other modes." msgstr "" #. type: Title === #: documentation/content/en/books/handbook/disks/_index.adoc:2258 #, no-wrap msgid "HAST Configuration" msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:2261 msgid "The HAST framework consists of several components:" msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:2263 msgid "" "The man:hastd[8] daemon which provides data synchronization. When this " "daemon is started, it will automatically load `geom_gate.ko`." msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:2264 msgid "The userland management utility, man:hastctl[8]." msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:2265 msgid "" "The man:hast.conf[5] configuration file. This file must exist before " "starting hastd." msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:2267 msgid "" "Users who prefer to statically build `GEOM_GATE` support into the kernel " "should add this line to the custom kernel configuration file, then rebuild " "the kernel using the instructions in crossref:kernelconfig[kernelconfig," "Configuring the FreeBSD Kernel]:" msgstr "" #. type: delimited block . 4 #: documentation/content/en/books/handbook/disks/_index.adoc:2271 #, no-wrap msgid "options\tGEOM_GATE\n" msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:2277 msgid "" "The following example describes how to configure two nodes in primary-" "secondary operation using HAST to replicate the data between the two. The " "nodes will be called `hasta`, with an IP address of `172.16.0.1`, and " "`hastb`, with an IP address of `172.16.0.2`. Both nodes will have a " "dedicated hard drive [.filename]#/dev/ad6# of the same size for HAST " "operation. The HAST pool, sometimes referred to as a resource or the GEOM " "provider in [.filename]#/dev/hast/#, will be called `test`." msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:2281 msgid "" "Configuration of HAST is done using [.filename]#/etc/hast.conf#. This file " "should be identical on both nodes. The simplest configuration is:" msgstr "" #. type: delimited block . 4 #: documentation/content/en/books/handbook/disks/_index.adoc:2294 #, no-wrap msgid "" "resource test {\n" "\ton hasta {\n" "\t\tlocal /dev/ad6\n" "\t\tremote 172.16.0.2\n" "\t}\n" "\ton hastb {\n" "\t\tlocal /dev/ad6\n" "\t\tremote 172.16.0.1\n" "\t}\n" "}\n" msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:2297 msgid "For more advanced configuration, refer to man:hast.conf[5]." msgstr "" #. type: delimited block = 4 #: documentation/content/en/books/handbook/disks/_index.adoc:2301 msgid "" "It is also possible to use host names in the `remote` statements if the " "hosts are resolvable and defined either in [.filename]#/etc/hosts# or in the " "local DNS." msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:2305 msgid "" "Once the configuration exists on both nodes, the HAST pool can be created. " "Run these commands on both nodes to place the initial metadata onto the " "local disk and to start man:hastd[8]:" msgstr "" #. type: delimited block . 4 #: documentation/content/en/books/handbook/disks/_index.adoc:2310 #, no-wrap msgid "" "# hastctl create test\n" "# service hastd onestart\n" msgstr "" #. type: delimited block = 4 #: documentation/content/en/books/handbook/disks/_index.adoc:2316 msgid "" "It is _not_ possible to use GEOM providers with an existing file system or " "to convert an existing storage to a HAST-managed pool. This procedure needs " "to store some metadata on the provider and there will not be enough required " "space available on an existing provider." msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:2320 msgid "" "A HAST node's `primary` or `secondary` role is selected by an administrator, " "or software like Heartbeat, using man:hastctl[8]. On the primary node, " "`hasta`, issue this command:" msgstr "" #. type: delimited block . 4 #: documentation/content/en/books/handbook/disks/_index.adoc:2324 #, no-wrap msgid "# hastctl role primary test\n" msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:2327 msgid "Run this command on the secondary node, `hastb`:" msgstr "" #. type: delimited block . 4 #: documentation/content/en/books/handbook/disks/_index.adoc:2331 #, no-wrap msgid "# hastctl role secondary test\n" msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:2334 msgid "Verify the result by running `hastctl` on each node:" msgstr "" #. type: delimited block . 4 #: documentation/content/en/books/handbook/disks/_index.adoc:2338 #, no-wrap msgid "# hastctl status test\n" msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:2344 msgid "" "Check the `status` line in the output. If it says `degraded`, something is " "wrong with the configuration file. It should say `complete` on each node, " "meaning that the synchronization between the nodes has started. The " "synchronization completes when `hastctl status` reports 0 bytes of `dirty` " "extents." msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:2349 msgid "" "The next step is to create a file system on the GEOM provider and mount it. " "This must be done on the `primary` node. Creating the file system can take " "a few minutes, depending on the size of the hard drive. This example " "creates a UFS file system on [.filename]#/dev/hast/test#:" msgstr "" #. type: delimited block . 4 #: documentation/content/en/books/handbook/disks/_index.adoc:2355 #, no-wrap msgid "" "# newfs -U /dev/hast/test\n" "# mkdir /hast/test\n" "# mount /dev/hast/test /hast/test\n" msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:2359 msgid "" "Once the HAST framework is configured properly, the final step is to make " "sure that HAST is started automatically during system boot. Add this line " "to [.filename]#/etc/rc.conf#:" msgstr "" #. type: delimited block . 4 #: documentation/content/en/books/handbook/disks/_index.adoc:2363 #, no-wrap msgid "hastd_enable=\"YES\"\n" msgstr "" #. type: Title ==== #: documentation/content/en/books/handbook/disks/_index.adoc:2365 #, no-wrap msgid "Failover Configuration" msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:2369 msgid "" "The goal of this example is to build a robust storage system which is " "resistant to the failure of any given node. If the primary node fails, the " "secondary node is there to take over seamlessly, check and mount the file " "system, and continue to work without missing a single bit of data." msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:2375 msgid "" "To accomplish this task, the Common Address Redundancy Protocol (CARP) is " "used to provide for automatic failover at the IP layer. CARP allows " "multiple hosts on the same network segment to share an IP address. Set up " "CARP on both nodes of the cluster according to the documentation available " "in crossref:advanced-networking[carp,“Common Address Redundancy Protocol " "(CARP)”]. In this example, each node will have its own management IP " "address and a shared IP address of _172.16.0.254_. The primary HAST node of " "the cluster must be the primary CARP node." msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:2379 msgid "" "The HAST pool created in the previous section is now ready to be exported to " "the other hosts on the network. This can be accomplished by exporting it " "through NFS or Samba, using the shared IP address _172.16.0.254_. The only " "problem which remains unresolved is an automatic failover should the primary " "node fail." msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:2383 msgid "" "In the event of CARP interfaces going up or down, the FreeBSD operating " "system generates a man:devd[8] event, making it possible to watch for state " "changes on the CARP interfaces. A state change on the CARP interface is an " "indication that one of the nodes failed or came back online. These state " "change events make it possible to run a script which will automatically " "handle the HAST failover." msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:2385 msgid "" "To catch state changes on the CARP interfaces, add this configuration to [." "filename]#/etc/devd.conf# on each node:" msgstr "" #. type: delimited block . 4 #: documentation/content/en/books/handbook/disks/_index.adoc:2394 #, no-wrap msgid "" "notify 30 {\n" "\tmatch \"system\" \"IFNET\";\n" "\tmatch \"subsystem\" \"carp0\";\n" "\tmatch \"type\" \"LINK_UP\";\n" "\taction \"/usr/local/sbin/carp-hast-switch primary\";\n" "};\n" msgstr "" #. type: delimited block . 4 #: documentation/content/en/books/handbook/disks/_index.adoc:2401 #, no-wrap msgid "" "notify 30 {\n" "\tmatch \"system\" \"IFNET\";\n" "\tmatch \"subsystem\" \"carp0\";\n" "\tmatch \"type\" \"LINK_DOWN\";\n" "\taction \"/usr/local/sbin/carp-hast-switch secondary\";\n" "};\n" msgstr "" #. type: delimited block = 4 #: documentation/content/en/books/handbook/disks/_index.adoc:2406 msgid "" "If the systems are running FreeBSD 10 or higher, replace [.filename]#carp0# " "with the name of the CARP-configured interface." msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:2409 msgid "" "Restart man:devd[8] on both nodes to put the new configuration into effect:" msgstr "" #. type: delimited block . 4 #: documentation/content/en/books/handbook/disks/_index.adoc:2413 #, no-wrap msgid "# service devd restart\n" msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:2417 msgid "" "When the specified interface state changes by going up or down , the system " "generates a notification, allowing the man:devd[8] subsystem to run the " "specified automatic failover script, [.filename]#/usr/local/sbin/carp-hast-" "switch#. For further clarification about this configuration, refer to man:" "devd.conf[5]." msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:2419 msgid "Here is an example of an automated failover script:" msgstr "" #. type: delimited block . 4 #: documentation/content/en/books/handbook/disks/_index.adoc:2423 #, no-wrap msgid "#!/bin/sh\n" msgstr "" #. type: delimited block . 4 #: documentation/content/en/books/handbook/disks/_index.adoc:2427 #, no-wrap msgid "" "# Original script by Freddie Cash \n" "# Modified by Michael W. Lucas \n" "# and Viktor Petersson \n" msgstr "" #. type: delimited block . 4 #: documentation/content/en/books/handbook/disks/_index.adoc:2430 #, no-wrap msgid "" "# The names of the HAST resources, as listed in /etc/hast.conf\n" "resources=\"test\"\n" msgstr "" #. type: delimited block . 4 #: documentation/content/en/books/handbook/disks/_index.adoc:2434 #, no-wrap msgid "" "# delay in mounting HAST resource after becoming primary\n" "# make your best guess\n" "delay=3\n" msgstr "" #. type: delimited block . 4 #: documentation/content/en/books/handbook/disks/_index.adoc:2438 #, no-wrap msgid "" "# logging\n" "log=\"local0.debug\"\n" "name=\"carp-hast\"\n" msgstr "" #. type: delimited block . 4 #: documentation/content/en/books/handbook/disks/_index.adoc:2440 #, no-wrap msgid "# end of user configurable stuff\n" msgstr "" #. type: delimited block . 4 #: documentation/content/en/books/handbook/disks/_index.adoc:2445 #, no-wrap msgid "" "case \"$1\" in\n" "\tprimary)\n" "\t\tlogger -p $log -t $name \"Switching to primary provider for ${resources}.\"\n" "\t\tsleep ${delay}\n" msgstr "" #. type: delimited block . 4 #: documentation/content/en/books/handbook/disks/_index.adoc:2451 #, no-wrap msgid "" "\t\t# Wait for any \"hastd secondary\" processes to stop\n" "\t\tfor disk in ${resources}; do\n" "\t\t\twhile $( pgrep -lf \"hastd: ${disk} \\(secondary\\)\" > /dev/null 2>&1 ); do\n" "\t\t\t\tsleep 1\n" "\t\t\tdone\n" msgstr "" #. type: delimited block . 4 #: documentation/content/en/books/handbook/disks/_index.adoc:2459 #, no-wrap msgid "" "\t\t\t# Switch role for each disk\n" "\t\t\thastctl role primary ${disk}\n" "\t\t\tif [ $? -ne 0 ]; then\n" "\t\t\t\tlogger -p $log -t $name \"Unable to change role to primary for resource ${disk}.\"\n" "\t\t\t\texit 1\n" "\t\t\tfi\n" "\t\tdone\n" msgstr "" #. type: delimited block . 4 #: documentation/content/en/books/handbook/disks/_index.adoc:2466 #, no-wrap msgid "" "\t\t# Wait for the /dev/hast/* devices to appear\n" "\t\tfor disk in ${resources}; do\n" "\t\t\tfor I in $( jot 60 ); do\n" "\t\t\t\t[ -c \"/dev/hast/${disk}\" ] && break\n" "\t\t\t\tsleep 0.5\n" "\t\t\tdone\n" msgstr "" #. type: delimited block . 4 #: documentation/content/en/books/handbook/disks/_index.adoc:2472 #, no-wrap msgid "" "\t\t\tif [ ! -c \"/dev/hast/${disk}\" ]; then\n" "\t\t\t\tlogger -p $log -t $name \"GEOM provider /dev/hast/${disk} did not appear.\"\n" "\t\t\t\texit 1\n" "\t\t\tfi\n" "\t\tdone\n" msgstr "" #. type: delimited block . 4 #: documentation/content/en/books/handbook/disks/_index.adoc:2474 #, no-wrap msgid "\t\tlogger -p $log -t $name \"Role for HAST resources ${resources} switched to primary.\"\n" msgstr "" #. type: delimited block . 4 #: documentation/content/en/books/handbook/disks/_index.adoc:2481 #, no-wrap msgid "" "\t\tlogger -p $log -t $name \"Mounting disks.\"\n" "\t\tfor disk in ${resources}; do\n" "\t\t\tmkdir -p /hast/${disk}\n" "\t\t\tfsck -p -y -t ufs /dev/hast/${disk}\n" "\t\t\tmount /dev/hast/${disk} /hast/${disk}\n" "\t\tdone\n" msgstr "" #. type: delimited block . 4 #: documentation/content/en/books/handbook/disks/_index.adoc:2483 #, no-wrap msgid "\t;;\n" msgstr "" #. type: delimited block . 4 #: documentation/content/en/books/handbook/disks/_index.adoc:2486 #, no-wrap msgid "" "\tsecondary)\n" "\t\tlogger -p $log -t $name \"Switching to secondary provider for ${resources}.\"\n" msgstr "" #. type: delimited block . 4 #: documentation/content/en/books/handbook/disks/_index.adoc:2504 #, no-wrap msgid "" "\t\t# Switch roles for the HAST resources\n" "\t\tfor disk in ${resources}; do\n" "\t\t\tif ! mount | grep -q \"^/dev/hast/${disk} on \"\n" "\t\t\tthen\n" "\t\t\telse\n" "\t\t\t\tumount -f /hast/${disk}\n" "\t\t\tfi\n" "\t\t\tsleep $delay\n" "\t\t\thastctl role secondary ${disk} 2>&1\n" "\t\t\tif [ $? -ne 0 ]; then\n" "\t\t\t\tlogger -p $log -t $name \"Unable to switch role to secondary for resource ${disk}.\"\n" "\t\t\t\texit 1\n" "\t\t\tfi\n" "\t\t\tlogger -p $log -t $name \"Role switched to secondary for resource ${disk}.\"\n" "\t\tdone\n" "\t;;\n" "esac\n" msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:2507 msgid "" "In a nutshell, the script takes these actions when a node becomes primary:" msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:2509 msgid "Promotes the HAST pool to primary on the other node." msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:2510 msgid "Checks the file system under the HAST pool." msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:2511 msgid "Mounts the pool." msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:2513 msgid "When a node becomes secondary:" msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:2515 msgid "Unmounts the HAST pool." msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:2516 msgid "Degrades the HAST pool to secondary." msgstr "" #. type: delimited block = 4 #: documentation/content/en/books/handbook/disks/_index.adoc:2521 msgid "" "This is just an example script which serves as a proof of concept. It does " "not handle all the possible scenarios and can be extended or altered in any " "way, for example, to start or stop required services." msgstr "" #. type: delimited block = 4 #: documentation/content/en/books/handbook/disks/_index.adoc:2527 msgid "" "For this example, a standard UFS file system was used. To reduce the time " "needed for recovery, a journal-enabled UFS or ZFS file system can be used " "instead." msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:2530 msgid "" "More detailed information with additional examples can be found at http://" "wiki.FreeBSD.org/HAST[http://wiki.FreeBSD.org/HAST]." msgstr "" #. type: Title === #: documentation/content/en/books/handbook/disks/_index.adoc:2531 #, no-wrap msgid "Troubleshooting" msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:2536 msgid "" "HAST should generally work without issues. However, as with any other " "software product, there may be times when it does not work as supposed. The " "sources of the problems may be different, but the rule of thumb is to ensure " "that the time is synchronized between the nodes of the cluster." msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:2540 msgid "" "When troubleshooting HAST, the debugging level of man:hastd[8] should be " "increased by starting `hastd` with `-d`. This argument may be specified " "multiple times to further increase the debugging level. Consider also using " "`-F`, which starts `hastd` in the foreground." msgstr "" #. type: Title ==== #: documentation/content/en/books/handbook/disks/_index.adoc:2542 #, no-wrap msgid "Recovering from the Split-brain Condition" msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:2547 msgid "" "_Split-brain_ occurs when the nodes of the cluster are unable to communicate " "with each other, and both are configured as primary. This is a dangerous " "condition because it allows both nodes to make incompatible changes to the " "data. This problem must be corrected manually by the system administrator." msgstr "" #. type: Plain text #: documentation/content/en/books/handbook/disks/_index.adoc:2551 msgid "" "The administrator must either decide which node has more important changes, " "or perform the merge manually. Then, let HAST perform full synchronization " "of the node which has the broken data. To do this, issue these commands on " "the node which needs to be resynchronized:" msgstr "" #. type: delimited block . 4 #: documentation/content/en/books/handbook/disks/_index.adoc:2557 #, no-wrap msgid "" "# hastctl role init test\n" "# hastctl create test\n" "# hastctl role secondary test\n" msgstr ""