From 9a71840f3ce0a12b038527c8c5957dff671a6a74 Mon Sep 17 00:00:00 2001 From: Joe Gmitter Date: Thu, 15 Mar 2018 15:52:12 -0700 Subject: [PATCH] LUDOC-384 flr: File Level Redundancy (FLR) Documenation This patch creates the initial documentation for the File Level Redundancy (FLR) feature introduced by LU-9771 in the Lustre 2.11.0 release. The FLR feature allows for storing of the same data on multiple OSTs for a variety of possible benefits and use cases. Signed-off-by: Joe Gmitter Signed-off-by: Jian Yu Change-Id: I4c4ccb9e5c90144f4686e3853d56ebee459cee70 Reviewed-on: https://review.whamcloud.com/31657 Tested-by: Jenkins Reviewed-by: Jinshan Xiong Reviewed-by: James Nunez --- FileLevelRedundancy.xml | 1298 ++++++++++++++++++++++++++++++++++++++++++ III_LustreAdministration.xml | 1 + figures/FLR_DelayedWrite.png | Bin 0 -> 63780 bytes 3 files changed, 1299 insertions(+) create mode 100644 FileLevelRedundancy.xml create mode 100644 figures/FLR_DelayedWrite.png diff --git a/FileLevelRedundancy.xml b/FileLevelRedundancy.xml new file mode 100644 index 0000000..40bcf7a --- /dev/null +++ b/FileLevelRedundancy.xml @@ -0,0 +1,1298 @@ + + File Level Redundancy (FLR) + This chapter describes File Level Redundancy (FLR). +
+ Introduction + The Lustre file system was initially designed and implemented for HPC + use. It has been working well on high-end storage that has internal + redundancy and fault-tolerance. However, despite the expense and + complexity of these storage systems, storage failures still occur, and + before release 2.11, Lustre could not be more reliable than the + individual storage and servers’ components on which it was based. The + Lustre file system had no mechanism to mitigate storage hardware + failures and files would become inaccessible if a server was inaccessible + or otherwise out of service. + With the File Level Redundancy (FLR) feature introduced in Lustre + Release 2.11, any Lustre file can store the same data on multiple OSTs in + order for the system to be robust in the event of storage failures or + other outages. With the choice of multiple mirrors, the best suited + mirror can be chosen to satisfy an individual request, which has a direct + impact on IO availability. Furthermore, for files that are concurrently + read by many clients (e.g. input decks, shared libraries, or executables) + the aggregate parallel read performance of a single file can be improved + by creating multiple mirrors of the file data. + The first phase of the FLR feature has been implemented with delayed + write (). While writing to a + mirrored file, only one primary or preferred mirror will be updated + directly during the write, while other mirrors will be simply marked as + stale. The file can subsequently return to a mirrored state again by + synchronizing among mirrors with command line tools (run by the user or + administrator directly or via automated monitoring tools). +
+ FLR Delayed Write + + + + + FLR Delayed Write Diagram + +
+
+
+ Operations + Lustre provides lfs mirror command line tools for + users to operate on mirrored files or directories. +
+ Creating a Mirrored File or Directory + Command: + lfs mirror create <--mirror-count|-N[mirror_count] +[setstripe_options|[--flags<=flags>]]> ... <filename|directory> + The above command will create a mirrored file or directory specified + by filename or + directory, respectively. + + + + + + + Option + Description + + + + + --mirror-count|-N[mirror_count] + + Indicates the number of mirrors to be created with the + following setstripe options. It can be repeated multiple + times to separate mirrors that have different layouts. + + The mirror_count argument is + optional and defaults to 1 if it is not + specified; if specified, it must follow the option without a + space. + + + + setstripe_options + + Specifies a specific layout for the mirror. It can be a + plain layout with a specific striping pattern or a composite + layout, such as . The options are + the same as those for the lfs setstripe + command. + If setstripe_options are not + specified, then the stripe options inherited from the previous + component will be used. If there is no previous component, + then the stripe_count and + stripe_size options inherited from the + filesystem-wide default values will be used, and the OST + pool_name inherited from the parent + directory will be used. + + + + --flags<=flags> + + Sets flags to the mirror to be created. + Only the prefer flag is supported at + this time. This flag will be set to all components that belong + to the corresponding mirror. The prefer + flag gives a hint to Lustre for which mirrors should be used + to serve I/O. When a mirrored file is being read, the + component(s) with the prefer flag is likely + to be picked to serve the read; and when a mirrored file is + prepared to be written, the MDT will tend to choose the + component with the prefer flag set and + mark the other components with overlapping extents as stale. + This flag just provides a hint to Lustre, which means Lustre + may still choose mirrors without this flag set, for instance, + if all preferred mirrors are unavailable when the I/O occurs. + This flag can be set on multiple components. + Note: This flag will + be set to all components that belong to the corresponding + mirror. The --comp-flags option also + exists, which can be set to individual components at mirror + creation time. + + + + + + Note: For redundancy and + fault-tolerance, users need to make sure that different mirrors must + be on different OSTs, even OSSs and racks. An understanding of cluster + topology is necessary to achieve this architecture. In the initial + implementation the use of the existing OST pools mechanism will allow + separating OSTs by any arbitrary criteria: i.e. fault domain. + In practice, users can take advantage of OST pools by grouping OSTs + by topological information. Therefore, when creating a mirrored file, + users can indicate which OST pools can be used by mirrors. + Examples: + The following command creates a mirrored file with 2 plain layout + mirrors: + client# lfs mirror create -N -S 4M -c 2 -p flash \ + -N -c -1 -p archive /mnt/testfs/file1 + The following command displays the layout information of the + mirrored file /mnt/testfs/file1: + client# lfs getstripe /mnt/testfs/file1 +/mnt/testfs/file1 + lcm_layout_gen: 2 + lcm_mirror_count: 2 + lcm_entry_count: 2 + lcme_id: 65537 + lcme_mirror_id: 1 + lcme_flags: init + lcme_extent.e_start: 0 + lcme_extent.e_end: EOF + lmm_stripe_count: 2 + lmm_stripe_size: 4194304 + lmm_pattern: raid0 + lmm_layout_gen: 0 + lmm_stripe_offset: 1 + lmm_pool: flash + lmm_objects: + - 0: { l_ost_idx: 1, l_fid: [0x100010000:0x2:0x0] } + - 1: { l_ost_idx: 0, l_fid: [0x100000000:0x2:0x0] } + + lcme_id: 131074 + lcme_mirror_id: 2 + lcme_flags: init + lcme_extent.e_start: 0 + lcme_extent.e_end: EOF + lmm_stripe_count: 6 + lmm_stripe_size: 4194304 + lmm_pattern: raid0 + lmm_layout_gen: 0 + lmm_stripe_offset: 3 + lmm_pool: archive + lmm_objects: + - 0: { l_ost_idx: 3, l_fid: [0x100030000:0x2:0x0] } + - 1: { l_ost_idx: 4, l_fid: [0x100040000:0x2:0x0] } + - 2: { l_ost_idx: 5, l_fid: [0x100050000:0x2:0x0] } + - 3: { l_ost_idx: 6, l_fid: [0x100060000:0x2:0x0] } + - 4: { l_ost_idx: 7, l_fid: [0x100070000:0x2:0x0] } + - 5: { l_ost_idx: 2, l_fid: [0x100020000:0x2:0x0] } + The first mirror has 4MB stripe size and two stripes across OSTs in + the “flash” OST pool. The second mirror has 4MB stripe size inherited + from the first mirror, and stripes across all of the available OSTs in + the “archive” OST pool. + As mentioned above, it is recommended to use the + --pool|-p option (one of the + lfs setstripe options) with OST pools configured with + independent fault domains to ensure different mirrors will be placed on + different OSTs, servers, and/or racks, thereby improving availability + and performance. If the setstripe options are not specified, it is + possible to create mirrors with objects on the same OST(s), which would + remove most of the benefit of using replication. + In the layout information printed by lfs getstripe, + lcme_mirror_id shows mirror ID, which is the unique + numerical identifier for a mirror. And lcme_flags shows + mirrored component flags. Valid flag names are: + + + init - indicates mirrored component has been + initialized (has allocated OST objects). + + + stale - indicates mirrored component does not + have up-to-date data. Stale components will not be used for read or + write operations, and need to be resynchronized by running + lfs mirror resync command before they can be + accessed again. + + + prefer - indicates mirrored component is + preferred for read or write. For example, the mirror is located on + SSD-based OSTs or is closer, fewer hops, on the network to the + client. This flag can be set by users at mirror creation time. + + + The following command creates a mirrored file with 3 PFL mirrors: + + client# lfs mirror create -N -E 4M -p flash --flags=prefer -E eof -c 2 \ +-N -E 16M -S 8M -c 4 -p archive --comp-flags=prefer -E eof -c -1 \ +-N -E 32M -c 1 -p none -E eof -c -1 /mnt/testfs/file2 + The following command displays the layout information of the + mirrored file /mnt/testfs/file2: + client# lfs getstripe /mnt/testfs/file2 +/mnt/testfs/file2 + lcm_layout_gen: 6 + lcm_mirror_count: 3 + lcm_entry_count: 6 + lcme_id: 65537 + lcme_mirror_id: 1 + lcme_flags: init,prefer + lcme_extent.e_start: 0 + lcme_extent.e_end: 4194304 + lmm_stripe_count: 1 + lmm_stripe_size: 1048576 + lmm_pattern: raid0 + lmm_layout_gen: 0 + lmm_stripe_offset: 1 + lmm_pool: flash + lmm_objects: + - 0: { l_ost_idx: 1, l_fid: [0x100010000:0x3:0x0] } + + lcme_id: 65538 + lcme_mirror_id: 1 + lcme_flags: prefer + lcme_extent.e_start: 4194304 + lcme_extent.e_end: EOF + lmm_stripe_count: 2 + lmm_stripe_size: 1048576 + lmm_pattern: raid0 + lmm_layout_gen: 0 + lmm_stripe_offset: -1 + lmm_pool: flash + + lcme_id: 131075 + lcme_mirror_id: 2 + lcme_flags: init,prefer + lcme_extent.e_start: 0 + lcme_extent.e_end: 16777216 + lmm_stripe_count: 4 + lmm_stripe_size: 8388608 + lmm_pattern: raid0 + lmm_layout_gen: 0 + lmm_stripe_offset: 4 + lmm_pool: archive + lmm_objects: + - 0: { l_ost_idx: 4, l_fid: [0x100040000:0x3:0x0] } + - 1: { l_ost_idx: 5, l_fid: [0x100050000:0x3:0x0] } + - 2: { l_ost_idx: 6, l_fid: [0x100060000:0x3:0x0] } + - 3: { l_ost_idx: 7, l_fid: [0x100070000:0x3:0x0] } + + lcme_id: 131076 + lcme_mirror_id: 2 + lcme_flags: 0 + lcme_extent.e_start: 16777216 + lcme_extent.e_end: EOF + lmm_stripe_count: 6 + lmm_stripe_size: 8388608 + lmm_pattern: raid0 + lmm_layout_gen: 0 + lmm_stripe_offset: -1 + lmm_pool: archive + + lcme_id: 196613 + lcme_mirror_id: 3 + lcme_flags: init + lcme_extent.e_start: 0 + lcme_extent.e_end: 33554432 + lmm_stripe_count: 1 + lmm_stripe_size: 8388608 + lmm_pattern: raid0 + lmm_layout_gen: 0 + lmm_stripe_offset: 0 + lmm_objects: + - 0: { l_ost_idx: 0, l_fid: [0x100000000:0x3:0x0] } + + lcme_id: 196614 + lcme_mirror_id: 3 + lcme_flags: 0 + lcme_extent.e_start: 33554432 + lcme_extent.e_end: EOF + lmm_stripe_count: -1 + lmm_stripe_size: 8388608 + lmm_pattern: raid0 + lmm_layout_gen: 0 + lmm_stripe_offset: -1 + For the first mirror, the first component inherits the stripe count + and stripe size from filesystem-wide default values. The second + component inherits the stripe size and OST pool from the first + component, and has two stripes. Both of the components are allocated + from the “flash” OST pool. Also, the flag prefer is + applied to all the components of the first mirror, which tells the + client to read data from those components whenever they are available. + + For the second mirror, the first component has an 8MB stripe size + and 4 stripes across OSTs in the “archive” OST pool. The second + component inherits the stripe size and OST pool from the first + component, and stripes across all of the available OSTs in the “archive” + OST pool. The flag prefer is only applied to the + first component. + For the third mirror, the first component inherits the stripe size + of 8MB from the last component of the second mirror, and has one single + stripe. The OST pool name is cleared and inherited from the parent + directory (if it was set with OST pool name). The second component + inherits stripe size from the first component, and stripes across all of + the available OSTs. +
+
+ Extending a Mirrored File + Command: + lfs mirror extend [--no-verify] <--mirror-count|-N[mirror_count] +[setstripe_options|-f <victim_file>]> ... <filename> + The above command will append mirror(s) indicated by + setstripe options or just take the layout from + existing file victim_file into the file + filename. The + filename must be an existing file, however, + it can be a mirrored or regular non-mirrored file. If it is a + non-mirrored file, the command will convert it to a mirrored file. + + + + + + + + Option + Description + + + + + --mirror-count|-N[mirror_count] + + Indicates the number of mirrors to be added with the + following setstripe options. It can be + repeated multiple times to separate mirrors that have + different layouts. + The mirror_count argument is + optional and defaults to 1 if it is not + specified; if specified, it must follow the option without a + space. + + + + setstripe_options + + Specifies a specific layout for the mirror. It can be a + plain layout with specific striping pattern or a composite + layout, such as . The options are the + same as those for the lfs setstripe + command. + If setstripe_options are not + specified, then the stripe options inherited from the previous + component will be used. If there is no previous component, + then the stripe_count and + stripe_size options inherited from + filesystem-wide default values will be used, and the OST + pool_name inherited from parent directory + will be used. + + + + -f <victim_file> + + If victim_file exists, the + command will split the layout from that file and use it as a + mirror added to the mirrored file. After the command is + finished, the victim_file will be + removed. + Note: The + setstripe_options cannot be + specified with -f <victim_file> + option in one command line. + + + + --no-verify + If victim_file is specified, the + command will verify that the file contents from + victim_file are the same as + filename. Otherwise, the command + will return a failure. However, the option + --no-verify can be used to override this + verification. This option can save significant time on file + comparison if the file size is large, but use it only when the + file contents are known to be the same. + + + + + Note: The + lfs mirror extend operation won't be applied to the + directory. + Examples: + The following commands create a non-mirrored file, convert it to + a mirrored file, and extend it with a plain layout mirror: + # lfs setstripe -p flash /mnt/testfs/file1 +# lfs getstripe /mnt/testfs/file1 +/mnt/testfs/file1 +lmm_stripe_count: 1 +lmm_stripe_size: 1048576 +lmm_pattern: raid0 +lmm_layout_gen: 0 +lmm_stripe_offset: 0 +lmm_pool: flash + obdidx objid objid group + 0 4 0x4 0 + +# lfs mirror extend -N -S 8M -c -1 -p archive /mnt/testfs/file1 +# lfs getstripe /mnt/testfs/file1 +/mnt/testfs/file1 + lcm_layout_gen: 2 + lcm_mirror_count: 2 + lcm_entry_count: 2 + lcme_id: 65537 + lcme_mirror_id: 1 + lcme_flags: init + lcme_extent.e_start: 0 + lcme_extent.e_end: EOF + lmm_stripe_count: 1 + lmm_stripe_size: 1048576 + lmm_pattern: raid0 + lmm_layout_gen: 0 + lmm_stripe_offset: 0 + lmm_pool: flash + lmm_objects: + - 0: { l_ost_idx: 0, l_fid: [0x100000000:0x4:0x0] } + + lcme_id: 131073 + lcme_mirror_id: 2 + lcme_flags: init + lcme_extent.e_start: 0 + lcme_extent.e_end: EOF + lmm_stripe_count: 6 + lmm_stripe_size: 8388608 + lmm_pattern: raid0 + lmm_layout_gen: 0 + lmm_stripe_offset: 3 + lmm_pool: archive + lmm_objects: + - 0: { l_ost_idx: 3, l_fid: [0x100030000:0x3:0x0] } + - 1: { l_ost_idx: 4, l_fid: [0x100040000:0x4:0x0] } + - 2: { l_ost_idx: 5, l_fid: [0x100050000:0x4:0x0] } + - 3: { l_ost_idx: 6, l_fid: [0x100060000:0x4:0x0] } + - 4: { l_ost_idx: 7, l_fid: [0x100070000:0x4:0x0] } + - 5: { l_ost_idx: 2, l_fid: [0x100020000:0x3:0x0] } + The following commands split the PFL layout from a + victim_file and use it as a mirror added to + the mirrored file /mnt/testfs/file1 created in the + above example without data verification: + # lfs setstripe -E 16M -c 2 -p none \ + -E eof -c -1 /mnt/testfs/victim_file +# lfs getstripe /mnt/testfs/victim_file +/mnt/testfs/victim_file + lcm_layout_gen: 2 + lcm_mirror_count: 1 + lcm_entry_count: 2 + lcme_id: 1 + lcme_mirror_id: 0 + lcme_flags: init + lcme_extent.e_start: 0 + lcme_extent.e_end: 16777216 + lmm_stripe_count: 2 + lmm_stripe_size: 1048576 + lmm_pattern: raid0 + lmm_layout_gen: 0 + lmm_stripe_offset: 5 + lmm_objects: + - 0: { l_ost_idx: 5, l_fid: [0x100050000:0x5:0x0] } + - 1: { l_ost_idx: 6, l_fid: [0x100060000:0x5:0x0] } + + lcme_id: 2 + lcme_mirror_id: 0 + lcme_flags: 0 + lcme_extent.e_start: 16777216 + lcme_extent.e_end: EOF + lmm_stripe_count: -1 + lmm_stripe_size: 1048576 + lmm_pattern: raid0 + lmm_layout_gen: 0 + lmm_stripe_offset: -1 + +# lfs mirror extend --no-verify -N -f /mnt/testfs/victim_file \ + /mnt/testfs/file1 +# lfs getstripe /mnt/testfs/file1 +/mnt/testfs/file1 + lcm_layout_gen: 3 + lcm_mirror_count: 3 + lcm_entry_count: 4 + lcme_id: 65537 + lcme_mirror_id: 1 + lcme_flags: init + lcme_extent.e_start: 0 + lcme_extent.e_end: EOF + lmm_stripe_count: 1 + lmm_stripe_size: 1048576 + lmm_pattern: raid0 + lmm_layout_gen: 0 + lmm_stripe_offset: 0 + lmm_pool: flash + lmm_objects: + - 0: { l_ost_idx: 0, l_fid: [0x100000000:0x4:0x0] } + + lcme_id: 131073 + lcme_mirror_id: 2 + lcme_flags: init + lcme_extent.e_start: 0 + lcme_extent.e_end: EOF + lmm_stripe_count: 6 + lmm_stripe_size: 8388608 + lmm_pattern: raid0 + lmm_layout_gen: 0 + lmm_stripe_offset: 3 + lmm_pool: archive + lmm_objects: + - 0: { l_ost_idx: 3, l_fid: [0x100030000:0x3:0x0] } + - 1: { l_ost_idx: 4, l_fid: [0x100040000:0x4:0x0] } + - 2: { l_ost_idx: 5, l_fid: [0x100050000:0x4:0x0] } + - 3: { l_ost_idx: 6, l_fid: [0x100060000:0x4:0x0] } + - 4: { l_ost_idx: 7, l_fid: [0x100070000:0x4:0x0] } + - 5: { l_ost_idx: 2, l_fid: [0x100020000:0x3:0x0] } + + lcme_id: 196609 + lcme_mirror_id: 3 + lcme_flags: init + lcme_extent.e_start: 0 + lcme_extent.e_end: 16777216 + lmm_stripe_count: 2 + lmm_stripe_size: 1048576 + lmm_pattern: raid0 + lmm_layout_gen: 0 + lmm_stripe_offset: 5 + lmm_objects: + - 0: { l_ost_idx: 5, l_fid: [0x100050000:0x5:0x0] } + - 1: { l_ost_idx: 6, l_fid: [0x100060000:0x5:0x0] } + + lcme_id: 196610 + lcme_mirror_id: 3 + lcme_flags: 0 + lcme_extent.e_start: 16777216 + lcme_extent.e_end: EOF + lmm_stripe_count: -1 + lmm_stripe_size: 1048576 + lmm_pattern: raid0 + lmm_layout_gen: 0 + lmm_stripe_offset: -1 + After extending, the victim_file was + removed: + # ls /mnt/testfs/victim_file +ls: cannot access /mnt/testfs/victim_file: No such file or directory +
+
+ Splitting a Mirrored File + Command: + lfs mirror split <--mirror-id <mirror_id>> +[--destroy|-d] [-f <new_file>] <mirrored_file> + The above command will split a specified mirror with ID + <mirror_id> out of an existing mirrored + file specified by + mirrored_file. By default, a new file named + <mirrored_file>.mirror~<mirror_id> will + be created with the layout of the split mirror. If the + --destroy|-d option is specified, then the split + mirror will be destroyed. If the -f <new_file> + option is specified, then a file named + new_file will be created with the layout of + the split mirror. If mirrored_file has only + one mirror existing after split, it will be converted to a regular + non-mirrored file. If the original + mirrored_file is not a mirrored file, then + the command will return an error. + + + + + + + Option + Description + + + + + --mirror-id <mirror_id> + The unique numerical identifier for a mirror. The mirror + ID is unique within a mirrored file and is automatically + assigned at file creation or extension time. It can be fetched + by the lfs getstripe command. + + + + --destroy|-d + Indicates the split mirror will be destroyed. + + + -f <new_file> + Indicates a file named new_file + will be created with the layout of the split mirror. + + + + + Examples: + The following commands create a mirrored file with 4 mirrors, then + split 3 mirrors separately from the mirrored file. + Creating a mirrored file with 4 mirrors: + # lfs mirror create -N2 -E 4M -p flash -E eof -c -1 \ + -N2 -S 8M -c 2 -p archive /mnt/testfs/file1 +# lfs getstripe /mnt/testfs/file1 +/mnt/testfs/file1 + lcm_layout_gen: 6 + lcm_mirror_count: 4 + lcm_entry_count: 6 + lcme_id: 65537 + lcme_mirror_id: 1 + lcme_flags: init + lcme_extent.e_start: 0 + lcme_extent.e_end: 4194304 + lmm_stripe_count: 1 + lmm_stripe_size: 1048576 + lmm_pattern: raid0 + lmm_layout_gen: 0 + lmm_stripe_offset: 1 + lmm_pool: flash + lmm_objects: + - 0: { l_ost_idx: 1, l_fid: [0x100010000:0x4:0x0] } + + lcme_id: 65538 + lcme_mirror_id: 1 + lcme_flags: 0 + lcme_extent.e_start: 4194304 + lcme_extent.e_end: EOF + lmm_stripe_count: 2 + lmm_stripe_size: 1048576 + lmm_pattern: raid0 + lmm_layout_gen: 0 + lmm_stripe_offset: -1 + lmm_pool: flash + + lcme_id: 131075 + lcme_mirror_id: 2 + lcme_flags: init + lcme_extent.e_start: 0 + lcme_extent.e_end: 4194304 + lmm_stripe_count: 1 + lmm_stripe_size: 1048576 + lmm_pattern: raid0 + lmm_layout_gen: 0 + lmm_stripe_offset: 0 + lmm_pool: flash + lmm_objects: + - 0: { l_ost_idx: 0, l_fid: [0x100000000:0x5:0x0] } + + lcme_id: 131076 + lcme_mirror_id: 2 + lcme_flags: 0 + lcme_extent.e_start: 4194304 + lcme_extent.e_end: EOF + lmm_stripe_count: 2 + lmm_stripe_size: 1048576 + lmm_pattern: raid0 + lmm_layout_gen: 0 + lmm_stripe_offset: -1 + lmm_pool: flash + + lcme_id: 196613 + lcme_mirror_id: 3 + lcme_flags: init + lcme_extent.e_start: 0 + lcme_extent.e_end: EOF + lmm_stripe_count: 2 + lmm_stripe_size: 8388608 + lmm_pattern: raid0 + lmm_layout_gen: 0 + lmm_stripe_offset: 4 + lmm_pool: archive + lmm_objects: + - 0: { l_ost_idx: 4, l_fid: [0x100040000:0x5:0x0] } + - 1: { l_ost_idx: 5, l_fid: [0x100050000:0x6:0x0] } + + lcme_id: 262150 + lcme_mirror_id: 4 + lcme_flags: init + lcme_extent.e_start: 0 + lcme_extent.e_end: EOF + lmm_stripe_count: 2 + lmm_stripe_size: 8388608 + lmm_pattern: raid0 + lmm_layout_gen: 0 + lmm_stripe_offset: 7 + lmm_pool: archive + lmm_objects: + - 0: { l_ost_idx: 7, l_fid: [0x100070000:0x5:0x0] } + - 1: { l_ost_idx: 2, l_fid: [0x100020000:0x4:0x0] } + Splitting the mirror with ID 1 from + /mnt/testfs/file1 and creating + /mnt/testfs/file1.mirror~1 with the layout of the + split mirror: + # lfs mirror split --mirror-id 1 /mnt/testfs/file1 +# lfs getstripe /mnt/testfs/file1.mirror~1 +/mnt/testfs/file1.mirror~1 + lcm_layout_gen: 1 + lcm_mirror_count: 1 + lcm_entry_count: 2 + lcme_id: 65537 + lcme_mirror_id: 1 + lcme_flags: init + lcme_extent.e_start: 0 + lcme_extent.e_end: 4194304 + lmm_stripe_count: 1 + lmm_stripe_size: 1048576 + lmm_pattern: raid0 + lmm_layout_gen: 0 + lmm_stripe_offset: 1 + lmm_pool: flash + lmm_objects: + - 0: { l_ost_idx: 1, l_fid: [0x100010000:0x4:0x0] } + + lcme_id: 65538 + lcme_mirror_id: 1 + lcme_flags: 0 + lcme_extent.e_start: 4194304 + lcme_extent.e_end: EOF + lmm_stripe_count: 2 + lmm_stripe_size: 1048576 + lmm_pattern: raid0 + lmm_layout_gen: 0 + lmm_stripe_offset: -1 + lmm_pool: flash + Splitting the mirror with ID 2 from + /mnt/testfs/file1 and destroying it: + # lfs mirror split --mirror-id 2 -d /mnt/testfs/file1 +# lfs getstripe /mnt/testfs/file1 +/mnt/testfs/file1 + lcm_layout_gen: 8 + lcm_mirror_count: 2 + lcm_entry_count: 2 + lcme_id: 196613 + lcme_mirror_id: 3 + lcme_flags: init + lcme_extent.e_start: 0 + lcme_extent.e_end: EOF + lmm_stripe_count: 2 + lmm_stripe_size: 8388608 + lmm_pattern: raid0 + lmm_layout_gen: 0 + lmm_stripe_offset: 4 + lmm_pool: archive + lmm_objects: + - 0: { l_ost_idx: 4, l_fid: [0x100040000:0x5:0x0] } + - 1: { l_ost_idx: 5, l_fid: [0x100050000:0x6:0x0] } + + lcme_id: 262150 + lcme_mirror_id: 4 + lcme_flags: init + lcme_extent.e_start: 0 + lcme_extent.e_end: EOF + lmm_stripe_count: 2 + lmm_stripe_size: 8388608 + lmm_pattern: raid0 + lmm_layout_gen: 0 + lmm_stripe_offset: 7 + lmm_pool: archive + lmm_objects: + - 0: { l_ost_idx: 7, l_fid: [0x100070000:0x5:0x0] } + - 1: { l_ost_idx: 2, l_fid: [0x100020000:0x4:0x0] } + Splitting the mirror with ID 3 from + /mnt/testfs/file1 and creating + /mnt/testfs/file2 with the layout of the split + mirror: + # lfs mirror split --mirror-id 3 -f /mnt/testfs/file2 \ + /mnt/testfs/file1 +# lfs getstripe /mnt/testfs/file2 +/mnt/testfs/file2 + lcm_layout_gen: 1 + lcm_mirror_count: 1 + lcm_entry_count: 1 + lcme_id: 196613 + lcme_mirror_id: 3 + lcme_flags: init + lcme_extent.e_start: 0 + lcme_extent.e_end: EOF + lmm_stripe_count: 2 + lmm_stripe_size: 8388608 + lmm_pattern: raid0 + lmm_layout_gen: 0 + lmm_stripe_offset: 4 + lmm_pool: archive + lmm_objects: + - 0: { l_ost_idx: 4, l_fid: [0x100040000:0x5:0x0] } + - 1: { l_ost_idx: 5, l_fid: [0x100050000:0x6:0x0] } + +# lfs getstripe /mnt/testfs/file1 +/mnt/testfs/file1 + lcm_layout_gen: 9 + lcm_mirror_count: 1 + lcm_entry_count: 1 + lcme_id: 262150 + lcme_mirror_id: 4 + lcme_flags: init + lcme_extent.e_start: 0 + lcme_extent.e_end: EOF + lmm_stripe_count: 2 + lmm_stripe_size: 8388608 + lmm_pattern: raid0 + lmm_layout_gen: 0 + lmm_stripe_offset: 7 + lmm_pool: archive + lmm_objects: + - 0: { l_ost_idx: 7, l_fid: [0x100070000:0x5:0x0] } + - 1: { l_ost_idx: 2, l_fid: [0x100020000:0x4:0x0] } + The above layout information showed that mirrors with ID + 1, 2, and 3 were all split from the mirrored file + /mnt/testfs/file1. +
+
+ Resynchronizing out-of-sync Mirrored File(s) + Command: + lfs mirror resync [--only <mirror_id[,...]>] +<mirrored_file> [<mirrored_file2>...] + The above command will resynchronize out-of-sync mirrored file(s) + specified by mirrored_file. It + supports specifying multiple mirrored files in one command line. + If there is no stale mirror for the specified mirrored file(s), then + the command does nothing. Otherwise, it will copy data from synced + mirror to the stale mirror(s), and mark all successfully copied + mirror(s) as SYNC. If the + --only <mirror_id[,...]> option is specified, + then the command will only resynchronize the mirror(s) specified by the + mirror_id(s). This option cannot be used when + multiple mirrored files are specified. + + + + + + + Option + Description + + + + + --only <mirror_id[,...]> + Indicates which mirror(s) specified by + mirror_id(s) needs to be + resynchronized. The mirror_id is the + unique numerical identifier for a mirror. Multiple + mirror_ids are separated by comma. + This option cannot be used when multiple mirrored files are + specified. + + + + + Note: With delayed write + implemented in FLR phase 1, after writing to a mirrored file, users + need to run lfs mirror resync command to get all + mirrors synchronized. + Examples: + The following commands create a mirrored file with 3 mirrors, then + write some data into the file and resynchronizes stale mirrors. + Creating a mirrored file with 3 mirrors: + # lfs mirror create -N -E 4M -p flash -E eof \ + -N2 -p archive /mnt/testfs/file1 +# lfs getstripe /mnt/testfs/file1 +/mnt/testfs/file1 + lcm_layout_gen: 4 + lcm_mirror_count: 3 + lcm_entry_count: 4 + lcme_id: 65537 + lcme_mirror_id: 1 + lcme_flags: init + lcme_extent.e_start: 0 + lcme_extent.e_end: 4194304 + lmm_stripe_count: 1 + lmm_stripe_size: 1048576 + lmm_pattern: raid0 + lmm_layout_gen: 0 + lmm_stripe_offset: 1 + lmm_pool: flash + lmm_objects: + - 0: { l_ost_idx: 1, l_fid: [0x100010000:0x5:0x0] } + + lcme_id: 65538 + lcme_mirror_id: 1 + lcme_flags: 0 + lcme_extent.e_start: 4194304 + lcme_extent.e_end: EOF + lmm_stripe_count: 1 + lmm_stripe_size: 1048576 + lmm_pattern: raid0 + lmm_layout_gen: 0 + lmm_stripe_offset: -1 + lmm_pool: flash + + lcme_id: 131075 + lcme_mirror_id: 2 + lcme_flags: init + lcme_extent.e_start: 0 + lcme_extent.e_end: EOF + lmm_stripe_count: 1 + lmm_stripe_size: 1048576 + lmm_pattern: raid0 + lmm_layout_gen: 0 + lmm_stripe_offset: 3 + lmm_pool: archive + lmm_objects: + - 0: { l_ost_idx: 3, l_fid: [0x100030000:0x4:0x0] } + + lcme_id: 196612 + lcme_mirror_id: 3 + lcme_flags: init + lcme_extent.e_start: 0 + lcme_extent.e_end: EOF + lmm_stripe_count: 1 + lmm_stripe_size: 1048576 + lmm_pattern: raid0 + lmm_layout_gen: 0 + lmm_stripe_offset: 4 + lmm_pool: archive + lmm_objects: + - 0: { l_ost_idx: 4, l_fid: [0x100040000:0x6:0x0] } + Writing some data into the mirrored file + /mnt/testfs/file1: + # yes | dd of=/mnt/testfs/file1 bs=1M count=2 +2+0 records in +2+0 records out +2097152 bytes (2.1 MB) copied, 0.0320613 s, 65.4 MB/s + +# lfs getstripe /mnt/testfs/file1 +/mnt/testfs/file1 + lcm_layout_gen: 5 + lcm_mirror_count: 3 + lcm_entry_count: 4 + lcme_id: 65537 + lcme_mirror_id: 1 + lcme_flags: init + lcme_extent.e_start: 0 + lcme_extent.e_end: 4194304 + ...... + + lcme_id: 65538 + lcme_mirror_id: 1 + lcme_flags: 0 + lcme_extent.e_start: 4194304 + lcme_extent.e_end: EOF + ...... + + lcme_id: 131075 + lcme_mirror_id: 2 + lcme_flags: init,stale + lcme_extent.e_start: 0 + lcme_extent.e_end: EOF + ...... + + lcme_id: 196612 + lcme_mirror_id: 3 + lcme_flags: init,stale + lcme_extent.e_start: 0 + lcme_extent.e_end: EOF + ...... + + The above layout information showed that data were written into the + first component of mirror with ID 1, and mirrors with + ID 2 and 3 were marked with + “stale” flag. + Resynchronizing the stale mirror with ID 2 for + the mirrored file /mnt/testfs/file1: + # lfs mirror resync --only 2 /mnt/testfs/file1 +# lfs getstripe /mnt/testfs/file1 +/mnt/testfs/file1 + lcm_layout_gen: 7 + lcm_mirror_count: 3 + lcm_entry_count: 4 + lcme_id: 65537 + lcme_mirror_id: 1 + lcme_flags: init + lcme_extent.e_start: 0 + lcme_extent.e_end: 4194304 + ...... + + lcme_id: 65538 + lcme_mirror_id: 1 + lcme_flags: 0 + lcme_extent.e_start: 4194304 + lcme_extent.e_end: EOF + ...... + + lcme_id: 131075 + lcme_mirror_id: 2 + lcme_flags: init + lcme_extent.e_start: 0 + lcme_extent.e_end: EOF + ...... + + lcme_id: 196612 + lcme_mirror_id: 3 + lcme_flags: init,stale + lcme_extent.e_start: 0 + lcme_extent.e_end: EOF + ...... + + The above layout information showed that after resynchronizing, the + “stale” flag was removed from mirror with ID 2. + Resynchronizing all of the stale mirrors for the mirrored file + /mnt/testfs/file1: + # lfs mirror resync /mnt/testfs/file1 +# lfs getstripe /mnt/testfs/file1 +/mnt/testfs/file1 + lcm_layout_gen: 9 + lcm_mirror_count: 3 + lcm_entry_count: 4 + lcme_id: 65537 + lcme_mirror_id: 1 + lcme_flags: init + lcme_extent.e_start: 0 + lcme_extent.e_end: 4194304 + ...... + + lcme_id: 65538 + lcme_mirror_id: 1 + lcme_flags: 0 + lcme_extent.e_start: 4194304 + lcme_extent.e_end: EOF + ...... + + lcme_id: 131075 + lcme_mirror_id: 2 + lcme_flags: init + lcme_extent.e_start: 0 + lcme_extent.e_end: EOF + ...... + + lcme_id: 196612 + lcme_mirror_id: 3 + lcme_flags: init + lcme_extent.e_start: 0 + lcme_extent.e_end: EOF + ...... + + The above layout information showed that after resynchronizing, none + of the mirrors were marked as stale. +
+
+ Verifying Mirrored File(s) + Command: + lfs mirror verify [--only <mirror_id,mirror_id2[,...]>] +[--verbose|-v] <mirrored_file> [<mirrored_file2> ...] + The above command will verify that each SYNC mirror (contains + up-to-date data) of a mirrored file, specified by + mirrored_file, has exactly the same data. It + supports specifying multiple mirrored files in one command line. + This is a scrub tool that should be run on regular basis to make + sure that mirrored files are not corrupted. The command won't repair the + file if it turns out to be corrupted. Usually, an administrator should + check the file content from each mirror and decide which one is correct + and then invoke lfs mirror resync to repair it + manually. + + + + + + + Option + Description + + + + + --only <mirror_id,mirror_id2[,...]> + Indicates which mirrors specified by + mirror_ids need to be verified. The + mirror_id is the unique numerical + identifier for a mirror. Multiple + mirror_ids are separated by comma. + + Note: At least two mirror_ids + are required. This option cannot be used when multiple + mirrored files are specified. + + + + --verbose|-v + Indicates the command will print where the differences are + if the data do not match. Otherwise, the command will just + return an error in that case. This option can be repeated for + multiple times to print more information. + + + + + Note: + Mirror components that have “stale” or “offline” flags will be + skipped and not verified. + Examples: + The following command verifies that each mirror of a mirrored file + contains exactly the same data: + # lfs mirror verify /mnt/testfs/file1 + The following command has the -v option specified + to print where the differences are if the data does not match: + # lfs mirror verify -vvv /mnt/testfs/file2 +Chunks to be verified in /mnt/testfs/file2: +[0, 0x200000) [1, 2, 3, 4] 4 +[0x200000, 0x400000) [1, 2, 3, 4] 4 +[0x400000, 0x600000) [1, 2, 3, 4] 4 +[0x600000, 0x800000) [1, 2, 3, 4] 4 +[0x800000, 0xa00000) [1, 2, 3, 4] 4 +[0xa00000, 0x1000000) [1, 2, 3, 4] 4 +[0x1000000, 0xffffffffffffffff) [1, 2, 3, 4] 4 + +Verifying chunk [0, 0x200000) on mirror: 1 2 3 4 +CRC-32 checksum value for chunk [0, 0x200000): +Mirror 1: 0x207b02f1 +Mirror 2: 0x207b02f1 +Mirror 3: 0x207b02f1 +Mirror 4: 0x207b02f1 + +Verifying chunk [0, 0x200000) on mirror: 1 2 3 4 PASS + +Verifying chunk [0x200000, 0x400000) on mirror: 1 2 3 4 +CRC-32 checksum value for chunk [0x200000, 0x400000): +Mirror 1: 0x207b02f1 +Mirror 2: 0x207b02f1 +Mirror 3: 0x207b02f1 +Mirror 4: 0x207b02f1 + +Verifying chunk [0x200000, 0x400000) on mirror: 1 2 3 4 PASS + +Verifying chunk [0x400000, 0x600000) on mirror: 1 2 3 4 +CRC-32 checksum value for chunk [0x400000, 0x600000): +Mirror 1: 0x42571b66 +Mirror 2: 0x42571b66 +Mirror 3: 0x42571b66 +Mirror 4: 0xabdaf92 + +lfs mirror verify: chunk [0x400000, 0x600000) has different +checksum value on mirror 1 and mirror 4. +Verifying chunk [0x600000, 0x800000) on mirror: 1 2 3 4 +CRC-32 checksum value for chunk [0x600000, 0x800000): +Mirror 1: 0x1f8ad0d8 +Mirror 2: 0x1f8ad0d8 +Mirror 3: 0x1f8ad0d8 +Mirror 4: 0x18975bf9 + +lfs mirror verify: chunk [0x600000, 0x800000) has different +checksum value on mirror 1 and mirror 4. +Verifying chunk [0x800000, 0xa00000) on mirror: 1 2 3 4 +CRC-32 checksum value for chunk [0x800000, 0xa00000): +Mirror 1: 0x69c17478 +Mirror 2: 0x69c17478 +Mirror 3: 0x69c17478 +Mirror 4: 0x69c17478 + +Verifying chunk [0x800000, 0xa00000) on mirror: 1 2 3 4 PASS + +lfs mirror verify: '/mnt/testfs/file2' chunk [0xa00000, 0x1000000] +exceeds file size 0xa00000: skipped + The following command uses the --only option to + only verify the specified mirrors: + # lfs mirror verify -v --only 1,4 /mnt/testfs/file2 +CRC-32 checksum value for chunk [0, 0x200000): +Mirror 1: 0x207b02f1 +Mirror 4: 0x207b02f1 + +CRC-32 checksum value for chunk [0x200000, 0x400000): +Mirror 1: 0x207b02f1 +Mirror 4: 0x207b02f1 + +CRC-32 checksum value for chunk [0x400000, 0x600000): +Mirror 1: 0x42571b66 +Mirror 4: 0xabdaf92 + +lfs mirror verify: chunk [0x400000, 0x600000) has different +checksum value on mirror 1 and mirror 4. +CRC-32 checksum value for chunk [0x600000, 0x800000): +Mirror 1: 0x1f8ad0d8 +Mirror 4: 0x18975bf9 + +lfs mirror verify: chunk [0x600000, 0x800000) has different +checksum value on mirror 1 and mirror 4. +CRC-32 checksum value for chunk [0x800000, 0xa00000): +Mirror 1: 0x69c17478 +Mirror 4: 0x69c17478 + +lfs mirror verify: '/mnt/testfs/file2' chunk [0xa00000, 0x1000000] +exceeds file size 0xa00000: skipped +
+
+ Finding Mirrored File(s) + The lfs find command is used to list files and + directories with specific attributes. The following two attribute + parameters are specific to a mirrored file or directory: + lfs find <directory|filename ...> + [[!] --mirror-count|-N [+-]n] + [[!] --mirror-state <[^]state>] + + + + + + + Option + Description + + + + + --mirror-count|-N [+-]n + Indicates mirror count. + + + --mirror-state <[^]state> + + Indicates mirrored file state. + If ^state is used, print only + files not matching state. Only one + state can be specified. + Valid state names are: + ro – indicates the mirrored file is in + read-only state. All of the mirrors contain the up-to-date + data. + wp – indicates the mirrored file is in + a state of being written. + sp – indicates the mirrored file is in + a state of being resynchronized. + + + + + + Note: + Specifying ! before an option negates its meaning + (files NOT matching the parameter). Using + before a + numeric value means 'more than n', while - before a + numeric value means 'less than n'. If neither is used, it means + 'equal to n', within the bounds of the unit specified (if any). + Examples: + The following command recursively lists all mirrored files that have + more than 2 mirrors under directory /mnt/testfs: + + # lfs find --mirror-count +2 --type f /mnt/testfs + The following command recursively lists all out-of-sync mirrored + files under directory /mnt/testfs: + # lfs find --mirror-state=^ro --type f /mnt/testfs +
+
+
+ Interoperability + Introduced in Lustre release 2.11.0, the FLR feature is based on the + feature introduced in Lustre 2.10.0 + For Lustre release 2.9 and older clients, which do not understand the + PFL layout, they cannot access and open mirrored files created in the + Lustre 2.11 filesystem. + The following example shows the errors returned by accessing and + opening a mirrored file (created in Lustre 2.11 filesystem) on a Lustre + 2.9 client: + # ls /mnt/testfs/mirrored_file +ls: cannot access /mnt/testfs/mirrored_file: Invalid argument + +# cat /mnt/testfs/mirrored_file +cat: /mnt/testfs/mirrored_file: Operation not supported + For Lustre release 2.10 clients, which understand the PFL layout, but + do not understand a mirrored layout, they can access mirrored files + created in Lustre 2.11 filesystem, however, they cannot open them. This is + because the Lustre 2.10 clients do not verify overlapping components so + they would read and write mirrored files just as if they were normal PFL + files, which will cause a problem where synced mirrors actually contain + different data. + The following example shows the results returned by accessing and + opening a mirrored file (created in Lustre 2.11 filesystem) on a Lustre + 2.10 client: + # ls /mnt/testfs/mirrored_file +/mnt/testfs/mirrored_file + +# cat /mnt/testfs/mirrored_file +cat: /mnt/testfs/mirrored_file: Operation not supported +
+
diff --git a/III_LustreAdministration.xml b/III_LustreAdministration.xml index 304e1d8..26b2392 100644 --- a/III_LustreAdministration.xml +++ b/III_LustreAdministration.xml @@ -95,6 +95,7 @@ + diff --git a/figures/FLR_DelayedWrite.png b/figures/FLR_DelayedWrite.png new file mode 100644 index 0000000000000000000000000000000000000000..0f436cd6150c9d5b8652c9db0ff7742765aca6bf GIT binary patch literal 63780 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