Hi all, it's been a while since I posted here! Various updates to chapters 1,2,4 and 5 of the XFS User Guide. Fixed various spelling/grammar mistakes, updated outdated and/or incorrect facts, added some new slides for delayed allocation and direct i/o and fixed some XML formatting for command line examples. Lachlan diff --git a/XFS_User_Guide/en-US/XFS-Background.xml b/XFS_User_Guide/en-US/XFS-Background.xml index e20f6e0..bdf6910 100644 --- a/XFS_User_Guide/en-US/XFS-Background.xml +++ b/XFS_User_Guide/en-US/XFS-Background.xml @@ -195,12 +195,12 @@ </listitem> <listitem> <para> - Large filesystems: one terabyte, 2<superscript>40</superscript>, on 32 bit systems; unlimited on 64 bit systems + Large files: up to 9 ExaBytes. </para> </listitem> <listitem> <para> - Large files: one terabyte, 2<superscript>40</superscript>, on 32 bit systems; 2<superscript>63</superscript> on 64 bit systems + Large filesystems: up to 18 ExaBytes. </para> </listitem> <listitem> @@ -220,7 +220,7 @@ </listitem> <listitem> <para> - Parallel access to inodes + Parallelized access via allocation groups </para> </listitem> <listitem> @@ -230,17 +230,32 @@ </listitem> <listitem> <para> - Asynchronous metadata transaction logging for quick recover + Asynchronous metadata transaction logging for quick recovery </para> </listitem> <listitem> <para> - Delayed allocation to improve data contiguity + Delayed allocation to improve data contiguity and performance </para> </listitem> <listitem> <para> - ACL's --Access Control Lists (see <command>chacl(1)</command>, <command>acl(4)</command>, <command>acl_get_file(3c)</command>, <command>acl_set_file(3c)</command> + Extended attributes (ie Access Control Lists) + </para> + </listitem> + <listitem> + <para> + Extent based allocation (incl. unwritten extents) + </para> + </listitem> + <listitem> + <para> + Variable allocation block sizes + </para> + </listitem> + <listitem> + <para> + Direct I/O </para> </listitem> </itemizedlist> @@ -264,9 +279,6 @@ <para> 2.4 kernel (2004) </para> - <para> - SLES9 and beyond - </para> </listitem> </itemizedlist> <para> @@ -286,19 +298,30 @@ <section> <title>Who is using XFS</title> <para> - <ulink url="http://xfs.org/index.php/XFS_Companies" /> - <ulink url="http://xfs.org/index.php/Linux_Distributions_shipping_XFS" /> + XFS is included in a number of distributions: </para> <itemizedlist> <listitem> <para> + <ulink url="http://xfs.org/index.php/Linux_Distributions_shipping_XFS" /> + </para> + </listitem> + <listitem> + <para> List is not always current, but it gives an indication of the spread of users </para> </listitem> </itemizedlist> <para> - XFS is included in a number of distributions + Some of the companies using XFS: </para> + <itemizedlist> + <listitem> + <para> + <ulink url="http://xfs.org/index.php/XFS_Companies" /> + </para> + </listitem> + </itemizedlist> </section> <section> <title>XFS Distributions – kernelspace</title> diff --git a/XFS_User_Guide/en-US/XFS-Overview.xml b/XFS_User_Guide/en-US/XFS-Overview.xml index 1762b39..796729b 100644 --- a/XFS_User_Guide/en-US/XFS-Overview.xml +++ b/XFS_User_Guide/en-US/XFS-Overview.xml @@ -52,7 +52,7 @@ <itemizedlist> <listitem><para>Filesystem blocks are comprised of one or more device-level sectors.</para></listitem> </itemizedlist> - <para>The page management implementation in Linux limits the FSB size to the page size</para> + <para>The page management implementation in Linux limits the maximum FSB size to the page size</para> <itemizedlist> <listitem><para>4KB on ia32 and x86_64 architectures</para></listitem> <listitem><para>16KB on ia64</para></listitem> @@ -66,13 +66,19 @@ <title>Extents</title> <para>An extent is a set of one or more contiguous FSBs that define a region in the filesystem for file data or metadata</para> <itemizedlist> - <listitem><para>A single extent can be up to 8GB in length</para></listitem> + <listitem><para>A single extent can be up to 4GB in length</para></listitem> </itemizedlist> <para>A file’s inode lists the extents associated with that file</para> <itemizedlist> <listitem><para>For very large files, the file’s inode may have thousands of extents, or one very large extent. Usually something in between.</para></listitem> </itemizedlist> - <para>Extents are also used for file and directory metadata when the information exceeds the space reserved for an inode</para> + <para>Extents are used for files, directory metadata and extended attributes when the information exceeds the space reserved in the inode</para> + <para>Using extents helps to</para> + <itemizedlist> + <listitem><para>minimize the disk space required to store a file's block map</para></listitem> + <listitem><para>reduce the effects of fragmentation</para></listitem> + <listitem><para>improve I/O performance by allowing fewer and larger I/O operations</para></listitem> + </itemizedlist> </section> <section> <title>Unwritten Extents</title> @@ -87,11 +93,10 @@ </itemizedlist> </para></listitem> <listitem><para><command>fallocate(1)</command> on newer glibc versions</para></listitem> - <listitem><para>Through direct IOs of specific (un)alignment.</para></listitem> + <listitem><para>Through direct IOs of specific alignment (ie stripe boundaries)</para></listitem> </itemizedlist> - <para>They are a security measure, to ensure allocated but not yet initialised space - ondisk is not visible to arbitrary users</para> <para>Unwritten extents apply only to regular files.</para> + <para>The unwritten state prevents the uninitialised data in the extent from being exposed to the user.</para> <para>Once such an extent is written to, or partially written to, a transaction is issued to convert the written part into a regular written extent, and mark the remaining (up to 2) extents as unwritten.</para> @@ -99,20 +104,66 @@ <para><command># xfs_io -f -c 'resvsp 0 10m' -c 'bmap -vp' /tmp/foo</command></para> </section> <section> + <title>Delayed Allocation</title> + <para>Delayed allocation splits file block allocation into two stages:</para> + <itemizedlist> + <listitem><para>Reservation - disk space is reserved (but not allocated) when writing to cache + <itemizedlist> + <listitem><para>free block count is decremented</para></listitem> + <listitem><para>creates a virtual 'delalloc' extent</para></listitem> + </itemizedlist> + </para></listitem> + <listitem><para>Allocation - disk blocks are allocated when flushing data from cache to disk + <itemizedlist> + <listitem><para>converts 'delalloc' extent to real extent</para></listitem> + </itemizedlist> + </para></listitem> + </itemizedlist> + <para>Benefits of delayed allocation</para> + <itemizedlist> + <listitem><para>Reduces fragmentation by combining writes and allocating extents in large chunks</para></listitem> + <listitem><para>Short lived files may never need to be allocated</para></listitem> + <listitem><para>Files written randomly (ie memory mapped) can now be allocated contiguously</para></listitem> + </itemizedlist> + </section> + <section> + <title>Direct I/O</title> + <para>Direct I/O allows an application to transfer data directly to disk from an application buffer and vice versa.</para> + <itemizedlist> + <listitem><para>Data does not pass through the file system cache</para></listitem> + <listitem><para>Data is transferred by DMA and does not involve CPU overhead</para></listitem> + <listitem><para>Synchronous I/O</para></listitem> + <listitem><para>XFS allows for parallel writes to same file</para></listitem> + </itemizedlist> + <para>Uses of direct I/O</para> + <itemizedlist> + <listitem><para>Backup programs can work without polluting the page cache</para></listitem> + <listitem><para>Applications that need 'intelligent' caching</para></listitem> + <listitem><para>High performance, bandwidth intensive workloads</para></listitem> + </itemizedlist> + </section> + <section> + <title>Stripe Alignment</title> + <para>Delayed allocations can be aligned to stripe unit/width boundaries if past eof</para> + <para>Direct I/O can align block allocations on strip unit/width boundaries</para> + </section> + <section> <title>Inodes</title> <para>XFS has three inode structures</para> - <para>Ondisk inode</para> + <para>XFS inode</para> <itemizedlist> - <listitem><para>Used for storing the metadata for all files, directories and other file types</para></listitem> - <listitem><para>By default 256 bytes but can be up to 2KiB</para></listitem> + <listitem><para>In memory XFS inode used only by the filesystem</para></listitem> </itemizedlist> - <para> Linux inode</para> + <para>Ondisk inode</para> <itemizedlist> - <listitem><para>xfs_inode_t has the Linux inode embedded in it</para></listitem> + <listitem><para>Used for storing the metadata for files, directories and other file types</para></listitem> + <listitem><para>Default size is 256 bytes and can be up to 2KB</para></listitem> + <listitem><para>Embedded within the XFS inode</para></listitem> </itemizedlist> - <para>XFS inode</para> + <para> Linux inode</para> <itemizedlist> - <listitem><para>xfs_inode contains the ondisk inode structure in memory</para></listitem> + <listitem><para>Generic inode structure used by VFS</para></listitem> + <listitem><para>Embedded within the XFS inode</para></listitem> </itemizedlist> </section> <section> @@ -123,16 +174,19 @@ </section> <section> <title>Journal Log</title> - <para>XFS Journal logs all metadata transactions</para> + <para>XFS Journal logs all metadata changes</para> <itemizedlist> - <listitem><para>No record of data, only that the file size had changed</para></listitem> + <listitem><para>Only filesystem metadata is logged, not user data</para></listitem> </itemizedlist> - <para>Allows the filesystem to replay and recover the filesystem in seconds</para> + <para>Allows the filesystem to replay the log and recover the filesystem quickly after a crash</para> <itemizedlist> <listitem><para>No requirement to run fsck</para></listitem> </itemizedlist> - <para>Log replay will apply filesystem and metadata changes that had been - logged but may not have been applied to the filesystem when it went down</para> + <para>Log replay will apply filesystem and metadata changes during mount that had been + logged but may not have yet been applied to the filesystem</para> <para>The log may be located on a separate device</para> + <itemizedlist> + <listitem><para>Can improve performance due to reduced disk contention</para></listitem> + </itemizedlist> </section> </chapter> diff --git a/XFS_User_Guide/en-US/XFS-allocators.xml b/XFS_User_Guide/en-US/XFS-allocators.xml index ba5bad0..41ba28a 100644 --- a/XFS_User_Guide/en-US/XFS-allocators.xml +++ b/XFS_User_Guide/en-US/XFS-allocators.xml @@ -20,7 +20,6 @@ <para>New directories are placed in different AGs where possible</para> <para>Watch the inode numbers as directory inodes are created:</para> <para><programlisting> -> mkdir a b > mkdir a b > ls -li total 0 131 drwxr-xr-x 2 sjv users 6 2006-10-20 12:12 a diff --git a/XFS_User_Guide/en-US/XFS-mkfs.xml b/XFS_User_Guide/en-US/XFS-mkfs.xml index ce26572..adb12bd 100644 --- a/XFS_User_Guide/en-US/XFS-mkfs.xml +++ b/XFS_User_Guide/en-US/XFS-mkfs.xml @@ -5,7 +5,7 @@ <title>mkfs</title> <section> <title>Creating XFS Filesystems</title> - <para>mkfs.xfs supports a large number of options for configuration a large number of different XFS filesystems</para> + <para>mkfs.xfs supports a large number of options for configurating many different XFS filesystems</para> <itemizedlist> <listitem><para>See <command>mkfs.xfs(8)</command></para></listitem> </itemizedlist> @@ -14,42 +14,42 @@ <listitem><para>100s = 100 sectors = 100 x 512 bytes*</para></listitem> <listitem><para>100b = 100 blocks = 100 x 4 kilobytes*</para></listitem> <listitem><para>100k = 100 * 1024 bytes</para></listitem> - <listitem><para>Assuming 512 bytes sectors and 4 KB filesyste</para></listitem> + <listitem><para>Assuming 512 bytes sectors and 4 KB filesystem block size</para></listitem> </itemizedlist> <para>-N option can be used to show filesystem parameters without creating a filesystem</para> <para>Also provides the capability to pre-initialise the filesystem with directories and inodes, which is useful for testing</para> </section> <section> <title>mkfs - Allocation Block Size</title> - <para>Specify the fundamental block size of the filesystem.</para> - <para>The default value is 4096 bytes (4 KB), the minimum is 512, and the maximum is 65536 (64 KB).</para> + <para>Specify the fundamental allocation block size of the filesystem.</para> + <para>The default value is 4KB, the minimum is 512 bytes, and the maximum is 64KB</para> <para>XFS on Linux currently only supports pagesize or smaller blocks.</para> <para>To create a filesystem with a block size of 2048 bytes you would use:</para> - <para><command>mkfs.xfs -b size=2048 device</command></para> + <para><command>mkfs.xfs -b size=2048 <replaceable>device</replaceable> </command></para> <para><emphasis>Smaller block sizes reduce wasted space for lots of small files.</emphasis></para> </section> <section> <title>mkfs - Allocation groups</title> - <para>The data section of an XFS filesystem is divided into allocation groups</para> - <para>More allocation groups imply more parallelism when allocation blocks and inodes.</para> - <para>To create filesystem with 16 allocation groups you would use:</para> - <para><command>mkfs.xfs -d acount=16 device</command></para> - <para>To create a filesystem with fixed size allocation groups</para> - <para><command>mkfs.xfs -d agsize=4g device</command></para> + <para>An XFS filesystem is divided into allocation groups</para> + <para>More allocation groups offer more parallelism when allocating blocks and inodes</para> + <para>To create filesystem with 16 allocation groups you would use</para> + <para><command>mkfs.xfs -d acount=16 <replaceable>device</replaceable></command></para> + <para>To create a filesystem with a specific size for the allocation groups</para> + <para><command>mkfs.xfs -d agsize=4g <replaceable>device</replaceable></command></para> <para><emphasis>Filesystems with too few or too many allocation groups should be avoided.</emphasis></para> </section> <section> <title>mkfs - Stripe Alignment</title> - <para>Aligning file data on stripe width boundaries can significantly improve performance on large RAIDs</para> + <para>Aligning file data I/Os on stripe width boundaries can significantly improve performance on large RAIDs</para> <itemizedlist> <listitem><para>A 2MB write to filesystem with a 2MB stripe width and 512KB stripe unit will result in four I/Os, one to each lun. Without alignment this would often require two I/Os to one disk, and one I/O to the other three, taking longer than it should.</para></listitem> </itemizedlist> <para>To create a filesystem with a stripe unit of 1MB for an 8+1 RAID you would use:</para> - <para><command>mkfs.xfs -d sunit=2048,swidth=16384 device</command></para> + <para><command>mkfs.xfs -d sunit=2048,swidth=16384 <replaceable>device</replaceable></command></para> <para>or</para> - <para><command>mkfs.xfs -d su=1m,sw=8m device</command></para> + <para><command>mkfs.xfs -d su=1m,sw=8m <replaceable>device</replaceable></command></para> <note><para>xfsprogs 3.1.0 and newer will use the blkid library to correctly identify stripe geometry for lvm, md, and some hardware raid devices which export this information</para></note> @@ -69,33 +69,38 @@ <listitem><para>how much data may be associated with the inode before data goes out of line</para></listitem> </itemizedlist> <para>To allocate 512 bytes to each inode:</para> - <para><command>mkfs.xfs -i size=512 device</command></para> + <para><command>mkfs.xfs -i size=512 <replaceable>device</replaceable></command></para> </section> <section> <title>mkfs - Extended Attributes</title> <para>Specify the version of extended attribute inline allocation policy to be used.</para> - <para>Default is zero, when extended attributes are used for the first time the version - will be set to either one or two.</para> - <para>Version two uses a more efficient algorithm for managing the available inline inode space - than version one, however, for backward compatibility, version one is selected by default.</para> + <itemizedlist> + <listitem><para>Version 1 has fixed regions for attribute and extent data</para></listitem> + <listitem><para>Version 2 (default) uses a more efficient algorithm for managing the available inline inode space</para></listitem> + <listitem><para>Version 1 inodes are automatically converted to version 2 on the fly</para></listitem> + </itemizedlist> <para>To force the use of version two extended attributes you would use:</para> - <para><command>mkfs.xfs -i attr=2 device</command></para> + <para><command>mkfs.xfs -i attr=2 <replaceable>device</replaceable></command></para> </section> <section> <title>mkfs - Naming options</title> <para>Specify the version and size parameters for the naming (directory) area of the filesystem.</para> - <para>The naming (directory) version is 1 or 2, defaulting to 2 if unspecified.</para> - <para>XFS on Linux does not support naming (directory) version 1.</para> + <itemizedlist> + <listitem><para>The naming (directory) version is either 2 (default) or ci (implies version 2).</para></listitem> + <listitem><para>Version 2 allows for the directory block size to be a multiple of the allocation block size</para></listitem> + <listitem><para>Version ci supports ASCII-only case-insensitive naming</para></listitem> + <listitem><para>XFS on Linux does not support naming (directory) version 1.</para></listitem> + </itemizedlist> <para>To create a filesystem with a directory block size of 16KB you would use:</para> - <para><command>mkfs.xfs -n size=16384 device</command></para> - <para>ASCII-only case-insensitive naming is also supported:</para> - <para><command>mkfs.xfs -n version=ci device</command></para> + <para><command>mkfs.xfs -n size=16384 <replaceable>device</replaceable></command></para> + <para>ASCII-only case-insensitive naming:</para> + <para><command>mkfs.xfs -n version=ci <replaceable>device</replaceable></command></para> </section> <section> <title>mkfs - External Log</title> <para>The journal log can be on a different device to the rest of the filesystem</para> <itemizedlist> - <listitem><para>At least 512 blocks.</para></listitem> + <listitem><para>At least 512 filesystem blocks</para></listitem> <listitem><para>No more than 64K blocks or 128MB, whichever is smaller</para></listitem> <listitem><para>Defaults to maximum size for >1TB filesystems</para></listitem> </itemizedlist> @@ -103,9 +108,8 @@ <itemizedlist> <listitem><para>15K RPM disk or battery-backed memory</para></listitem> </itemizedlist> - <para><command>mkfs.xfs -l logdev=log_device device</command></para> - <para><command>mount -o logdev=log_device device path</command></para> - <para>XXX Image goes here</para> + <para><command>mkfs.xfs -l logdev=<replaceable>log_device</replaceable> <replaceable>device</replaceable></command></para> + <para><command>mount -o logdev=<replaceable>log_device</replaceable> <replaceable>device</replaceable> <replaceable>path</replaceable></command></para> </section> <section> <title>mkfs - Realtime</title> @@ -117,19 +121,18 @@ <itemizedlist> <listitem><para>Bitmap allocator only has to manage file data allocations</para></listitem> </itemizedlist> - <para><command>mkfs.xfs -l logdev=log_device -r rtdev=rt_device device</command></para> - <para><command>mount -o logdev=log_device,rtdev=rt_device device path</command></para> + <para><command>mkfs.xfs -l logdev=<replaceable>log_device</replaceable> -r rtdev=<replaceable>rt_device</replaceable> <replaceable>device</replaceable></command></para> + <para><command>mount -o logdev=<replaceable>log_device</replaceable>,rtdev=<replaceable>rt_device</replaceable> <replaceable>device</replaceable> <replaceable>path</replaceable></command></para> <para><emphasis>rt_device</emphasis> is the device for the file data, device is for the metadata</para> <para>Receives limited testing and support in Linux</para> <note><para>Filesystems created with a realtime subvolume can only be mounted on kernels with CONFIG_XFS_RT enabled</para></note> - <para>XXX Image goes here</para> </section> <section> <title>mkfs - Filesystem Image</title> <para>mkfs allows you to create a filesystem as a regular file</para> <para>This can be used to create a filesystem on a loop-back device</para> - <para><command>mkfs.xfs -d file=1,name=filename,size=2g filename</command></para> + <para><command>mkfs.xfs -d file=1,name=<replaceable>filename</replaceable>,size=2g <replaceable>filename</replaceable></command></para> </section> <section> <title>mkfs - Sector Size</title> @@ -137,7 +140,7 @@ <para>Default value is 512 bytes.</para> <para>The minimum value for sector size is 512; the maximum is 32768 (32 KB) or the filesystem block size (whichever is smaller).</para> <para>To create a filesystem on a device that has a sector size of 1KB you would use:</para> - <para><command>mkfs.xfs -s size=1024 device</command></para> + <para><command>mkfs.xfs -s size=1024 <replaceable>device</replaceable></command></para> <note><para>xfsprogs 3.1.0 and newer will automatically detect the appropriate sector size for a device</para></note> </section> <section> @@ -145,7 +148,7 @@ <para>Set the filesystem label.</para> <para>XFS filesystem labels can be at most 12 characters long.</para> <para>To create a filesystem and specify the label you would use:</para> - <para><command>mkfs.xfs -L label device</command></para> + <para><command>mkfs.xfs -L <replaceable>label</replaceable> <replaceable>device</replaceable></command></para> <note><para>A label may later be added or changed by using the <command>xfs_admin</command> command</para></note> </section> <section> diff --git a/XFS_User_Guide/en-US/XFS-mount.xml b/XFS_User_Guide/en-US/XFS-mount.xml index e175f95..91cd4dc 100644 --- a/XFS_User_Guide/en-US/XFS-mount.xml +++ b/XFS_User_Guide/en-US/XFS-mount.xml @@ -25,37 +25,41 @@ <section> <title>Mount Options - Log & Realtime Devices</title> <para>Use an external log (metadata journal) device:</para> - <para><command>mount -o logdev=log_device device mountpoint</command></para> + <para><command>mount -o logdev=<replaceable>log_device</replaceable> <replaceable>device</replaceable> <replaceable>mountpoint</replaceable></command></para> <para>Use an external log (metadata journal) and real-time device:</para> - <para><command>mount -o logdev=log_device,rtdev=rt_device device mountpoint</command></para> + <para><command>mount -o logdev=<replaceable>log_device</replaceable>,rtdev=<replaceable>rt_device</replaceable> <replaceable>device</replaceable> <replaceable>mountpoint</replaceable></command></para> </section> <section> - <title>Mount Options - 64bit Inodes</title> - <para>By default XFS uses 32bit inodes</para> - <itemizedlist> - <listitem><para>The inode’s number roughly equates to its location on disk + <title>Mount Options - 32 or 64 bit Inodes?</title> + <para>The inode’s number roughly equates to its location on disk <itemizedlist> <listitem><para>Combination of allocation group, cluster and block</para></listitem> </itemizedlist> - </para></listitem> - <listitem><para>Inode on Linux is 32bit on 32bit machines + </para> + <para>32 bit inodes (default):</para> + <itemizedlist> + <listitem><para>Must use 32bit inodes on 32bit machines <itemizedlist> <listitem><para>May change in future kernels</para></listitem> </itemizedlist> </para></listitem> - <listitem><para>Allocator will place 32bit inodes in the first terabyte + <listitem><para>Allocator can only place 32bit inodes in the first terabyte <itemizedlist> <listitem><para>Using a larger inode size means less inodes per cluster allowing 32bit inodes to be located beyond the first terabyte</para></listitem> </itemizedlist> </para></listitem> + <listitem><para>Allocator will rotor data extents across allocations groups to leave room for inodes</para></listitem> </itemizedlist> - <para>inode64 option on 64bit machines allows inodes to span the entire filesystem</para> + <para>64 bit inodes:</para> <itemizedlist> + <listitem><para>Only available on 64 bit machines</para></listitem> + <listitem><para>Use inode64 mount option to enable</para></listitem> + <listitem><para>Allows inodes to span the entire filesystem</para></listitem> <listitem><para>Allocator will try to put file extents in same allocation group as inode</para></listitem> <listitem><para>Not all backup tools support 64bit inodes <itemizedlist> - <listitem><para>Inode number used to identify file between backups</para></listitem> + <listitem><para>Inode number used to uniquely identify files in backups</para></listitem> </itemizedlist> </para></listitem> </itemizedlist> @@ -65,8 +69,8 @@ <para>Specify the stripe unit and width for a RAID device or a stripe volume.</para> <para>Values must be specified in 512-byte block units.</para> <para>For example, to use a stripe unit of 1MB and a stripe width of 8MB:</para> - <para><command>mount -o sunit=2048,swidth=16384 device mountpoint</command></para> - <para><command>swalloc</command> option</para> + <para><command>mount -o sunit=2048,swidth=16384 <replaceable>device</replaceable> <replaceable>mountpoint</replaceable></command></para> + <para><command>swalloc</command> mount option</para> <itemizedlist> <listitem><para>data allocations will be rounded up to stripe width boundaries when the current end of file is being extended and the file size is larger than the @@ -75,6 +79,7 @@ </section> <section> <title>Mount Options - Large I/O</title> + <para>These mount options affect the preferred filesystem I/O size reported by <command>stat(2)</command></para> <para><command>largeio</command></para> <itemizedlist> <listitem><para>A filesystem that has a <command>swidth</command> specified will return the @@ -82,29 +87,30 @@ <listitem><para>If the filesystem does not have a <command>swidth</command> specified but does specify an <command>allocsize</command> then <command>allocsize</command> (in bytes) will be returned instead.</para></listitem> - <listitem><para>If neither of these two options are specified, then filesystem will behave as - if <command>nolargeio</command> was specified.</para></listitem> </itemizedlist> - <para><command>largeio</command></para> + <para><command>nolargeio</command> (default)</para> <itemizedlist> - <listitem><para>The optimal I/O reported in <command>st_blksize</command> by <command>stat(2)</command> - will be as small as possible to allow user applications to avoid inefficient - read/modify/write I/O.</para></listitem> + <listitem><para>The optimal I/O reported in st_blksize will be as small as possible to + allow user applications to avoid inefficient read/modify/write I/O.</para></listitem> </itemizedlist> + <para>If neither of these two options are specified, then filesystem will behave as if + <command>nolargeio</command> was specified.</para> </section> <section> <title>Mount Options - Performance Tweaks</title> - <para><command>osyncisdsync (default/deprecated)</command></para> + <para><command>osyncisdsync</command> (default/deprecated)</para> <itemizedlist> <listitem><para>Writes to files opened with the O_SYNC flag set will behave as if the O_DSYNC flag had been used instead.</para></listitem> <listitem><para>This can result in better performance without compromising data safety.</para></listitem> <listitem><para>However timestamp updates from O_SYNC writes can be lost if the system crashes. - Use osyncisosync to disable this setting.</para></listitem> + Use <command>osyncisosync</command> to disable this setting.</para></listitem> </itemizedlist> - <para><command>ikeep</command></para> + <para><command>ikeep</command> (default)</para> <itemizedlist> <listitem><para>When inode clusters are emptied of inodes, keep them around on the disk.</para></listitem> + <listitem><para>Use the <command>noikeep</command> option to force empty inode clusters to be returned to + the free space pool.</para></listitem> </itemizedlist> </section> <section> @@ -119,7 +125,7 @@ </itemizedlist> <para>When the new form is used for the first time (by setting or removing extended attributes) the on-disk superblock feature bit field will be updated to reflect this format being in use.</para> - <para><command>mount -o attr2 device mountpoint</command></para> + <para><command>mount -o attr2 <replaceable>device</replaceable> <replaceable>mountpoint</replaceable></command></para> </section> <section> <title>Mount Options - Group Ids</title> @@ -141,25 +147,28 @@ <para>If the filesystem was not cleanly unmounted, it is likely to be inconsistent when mounted in <command>norecovery</command> mode. Some files or directories may not be accessible because of this.</para> <para>Filesystems mounted <command>norecovery</command> must be mounted read-only or the mount will fail.</para> - <para><command>mount -o ro,norecovery device mountpoint</command></para> + <para><command>mount -o ro,norecovery <replaceable>device</replaceable> <replaceable>mountpoint</replaceable></command></para> </section> <section> <title>Mount Options - Barriers</title> - <para>Write cache on disk can result in filesystem corruption since XFS is told the + <para>Write caches on disks can result in filesystem corruption since XFS may be told a log transaction has reached the disk when in fact it is still in the disk cache.</para> <itemizedlist> <listitem><para>A journal log assumes that the log transaction is updated on disk before - the metadata is updated, but this may not be true with write caching</para></listitem> + updating the metadata in the filesystem, but this may not be true with + write caching</para></listitem> </itemizedlist> - <para>XFS is able to issue write barriers if the device supports it</para> + <para>XFS is able to issue write barriers if the underlying devices support it</para> <itemizedlist> <listitem><para>Ensures that the log entry is written before any other data</para></listitem> </itemizedlist> <para>Write barriers are enabled by default in XFS</para> <itemizedlist> - <listitem><para>Filesystem will attempt to determine is barriers are supported and will + <listitem><para>Filesystem will attempt to determine if barriers are supported and will issue a warning to the syslog if they are not</para></listitem> <listitem><para>The <command>nobarrier</command> option disables write barriers</para></listitem> + <listitem><para>Barriers should be disabled when using a RAID with battery backed controller + cache (but only if the individual disk write caches are disabled)</para></listitem> </itemizedlist> <para>See</para> <itemizedlist> @@ -170,12 +179,13 @@ <section> <title>Mount Options - User/Group/Project Quotas</title> <para>User disk quota accounting enabled, and limits (optionally) enforced.</para> - <para><command>mount -o uquota device mountpoint</command></para> + <para><command>mount -o uquota <replaceable>device</replaceable> <replaceable>mountpoint</replaceable></command></para> <para>Group disk quota accounting enabled, and limits (optionally) enforced.</para> - <para><command>mount -o grpquota device mountpoint</command></para> + <para><command>mount -o grpquota <replaceable>device</replaceable> <replaceable>mountpoint</replaceable></command></para> <para>Project quota accounting enabled, and limits (optionally) enforced.</para> - <para><command>mount -o prjquota device mountpoint</command></para> - <para>Can optionally specify <command>uqnoenforce, gqnoenforce</command> and - <command>pqnoenforce</command> to use soft limits.</para> + <para><command>mount -o prjquota <replaceable>device</replaceable> <replaceable>mountpoint</replaceable></command></para> + <para>Can optionally specify <command>uqnoenforce</command>, + <command>gqnoenforce</command> and <command>pqnoenforce</command> + to use soft limits.</para> </section> </chapter> _______________________________________________ xfs mailing list xfs@xxxxxxxxxxx http://oss.sgi.com/mailman/listinfo/xfs