|
1 | 1 | Glossary
|
2 | 2 | ========
|
3 | 3 |
|
4 |
| -Terms in *italics* also appear in this glossary. |
5 |
| - |
6 |
| -allocator |
7 |
| - Usually *allocator* means the *block* allocator, i.e. the logic |
8 |
| - inside filesystem which decides where to place newly allocated blocks |
9 |
| - in order to maintain several constraints (like data locality, low |
10 |
| - fragmentation). |
11 |
| - |
12 |
| - In btrfs, allocator may also refer to *chunk* allocator, i.e. the |
13 |
| - logic behind placing chunks on devices. |
14 |
| - |
15 |
| -balance |
16 |
| - An operation that can be done to a btrfs filesystem, for example |
17 |
| - through :command:`btrfs fi balance /path`. A |
18 |
| - balance passes all data in the filesystem through the *allocator* |
19 |
| - again. It is primarily intended to rebalance the data in the filesystem |
20 |
| - across the *devices* when a device is added or removed. A balance |
21 |
| - will regenerate missing copies for the redundant *RAID* levels, if a |
22 |
| - device has failed. As of Linux kernel 3.3, a balance operation can be |
23 |
| - made selective about which parts of the filesystem are rewritten. |
24 |
| - |
25 |
| -barrier |
26 |
| - An instruction to the disk hardware to ensure that everything before |
27 |
| - the barrier is physically written to permanent storage before anything |
28 |
| - after it. Used in btrfs's *copy on write* approach to ensure |
29 |
| - filesystem consistency. |
30 |
| - |
31 |
| -block |
32 |
| - A single physically and logically contiguous piece of storage on a |
33 |
| - device, of size e.g. 4K. |
34 |
| - |
35 |
| -block group |
36 |
| - The unit of allocation of space in btrfs. A block group is laid out on |
37 |
| - the disk by the btrfs *allocator*, and will consist of one or more |
38 |
| - *chunks*, each stored on a different *device*. The number of chunks |
39 |
| - used in a block group will depend on its *RAID* level. |
40 |
| - |
41 |
| -B-tree |
42 |
| - The fundamental storage data structure used in btrfs. Except for the |
43 |
| - *superblocks*, all of btrfs *metadata* is stored in one of several |
44 |
| - B-trees on disk. B-trees store key/item pairs. While the same code is |
45 |
| - used to implement all of the B-trees, there are a few different |
46 |
| - categories of B-tree. The name *btrfs* |
47 |
| - refers to its use of B-trees. |
48 |
| - |
49 |
| -btrfsck |
50 |
| - Tool in *btrfs-progs* that checks a filesystem *offline* (i.e. |
51 |
| - unmounted), and reports on any errors in the filesystem structures it |
52 |
| - finds. By default the tool runs in read-only mode as fixing errors is |
53 |
| - potentially dangerous. See also *scrub*. |
54 |
| - |
55 |
| -btrfs-progs |
56 |
| - User mode tools to manage btrfs-specific features. Maintained at |
57 |
| - http://github.com/kdave/btrfs-progs.git . The main frontend to btrfs |
58 |
| - features is the standalone tool *btrfs*, although |
59 |
| - other tools such as *mkfs.btrfs* and *btrfstune* are also part of |
60 |
| - btrfs-progs. |
61 |
| - |
62 |
| -chunk |
63 |
| - A part of a *block group*. Chunks are either 1 GiB in size (for data) |
64 |
| - or 256 MiB (for *metadata*). |
65 |
| - |
66 |
| -chunk tree |
67 |
| - A layer that keeps information about mapping between physical and |
68 |
| - logical block addresses. It's stored within the *system* group. |
69 |
| - |
70 |
| -cleaner |
71 |
| - Usually referred to in context of deleted subvolumes. It's a background |
72 |
| - process that removes the actual data once a subvolume has been deleted. |
73 |
| - Cleaning can involve lots of IO and CPU activity depending on the |
74 |
| - fragmentation and amount of shared data with other subvolumes. |
75 |
| - |
76 |
| -copy-on-write |
77 |
| - Also known as *COW*. The method that btrfs uses for modifying data. |
78 |
| - Instead of directly overwriting data in place, btrfs takes a copy of |
79 |
| - the data, alters it, and then writes the modified data back to a |
80 |
| - different (free) location on the disk. It then updates the *metadata* |
81 |
| - to reflect the new location of the data. In order to update the |
82 |
| - metadata, the affected metadata blocks are also treated in the same |
83 |
| - way. In COW filesystems, files tend to fragment as they are modified. |
84 |
| - Copy-on-write is also used in the implementation of *snapshots* and |
85 |
| - *reflink copies*. A copy-on-write filesystem is, in theory, |
86 |
| - *always* consistent, provided the underlying hardware supports |
87 |
| - *barriers*. |
88 |
| - |
89 |
| -COW |
90 |
| - See *copy-on-write*. |
91 |
| - |
92 |
| -default subvolume |
93 |
| - The *subvolume* in a btrfs filesystem which is mounted when mounting |
94 |
| - the filesystem without using the ``subvol=`` mount option. |
95 |
| - |
96 |
| -device |
97 |
| - A Linux block device, e.g. a whole disk, partition, LVM logical volume, |
98 |
| - loopback device, or network block device. A btrfs filesystem can reside |
99 |
| - on one or more devices. |
100 |
| - |
101 |
| -df |
102 |
| - A standard Unix tool for reporting the amount of space used and free in |
103 |
| - a filesystem. The standard tool does not give accurate results, but the |
104 |
| - *btrfs* command from *btrfs-progs* has |
105 |
| - an implementation of *df* which shows space available in more detail. See |
106 |
| - the |
107 |
| - [[FAQ#Why_does_df_show_incorrect_free_space_for_my_RAID_volume.3F|FAQ]] |
108 |
| - for a more detailed explanation of btrfs free space accounting. |
109 |
| - |
110 |
| -DUP |
111 |
| - A form of "*RAID*" which stores two copies of each piece of data on |
112 |
| - the same *device*. This is similar to *RAID-1*, and protects |
113 |
| - against *block*-level errors on the device, but does not provide any |
114 |
| - guarantees if the entire device fails. By default, btrfs uses *DUP* |
115 |
| - profile for metadata on filesystems with one rotational device, |
116 |
| - *single* profile on filesystems with one non-rotational device, and |
117 |
| - *RAID1* profile on filesystems with more than one device. |
118 |
| - |
119 |
| -ENOSPC |
120 |
| - Error code returned by the OS to a user program when the filesystem |
121 |
| - cannot allocate enough data to fulfill the user request. In most |
122 |
| - filesystems, it indicates there is no free space available in the |
123 |
| - filesystem. Due to the additional space requirements from btrfs's |
124 |
| - *COW* behaviour, btrfs can sometimes return ENOSPC when there is |
125 |
| - apparently (in terms of *df*) a large amount of space free. This is |
126 |
| - effectively a bug in btrfs, and (if it is repeatable), using the mount |
127 |
| - option ``enospc_debug`` may give a report |
128 |
| - that will help the btrfs developers. See the |
129 |
| - [[FAQ#if_your_device_is_large_.28.3E16GiB.29|FAQ entry]] on free space. |
130 |
| - |
131 |
| -extent |
132 |
| - Contiguous sequence of bytes on disk that holds file data. |
133 |
| - |
134 |
| - A file stored on disk with 3 extents means that it consists of three |
135 |
| - fragments of contiguous bytes. See *filefrag*. A file in one extent |
136 |
| - would mean it is not fragmented. |
137 |
| - |
138 |
| -Extent buffer |
139 |
| - An abstraction to allow access to *B-tree* blocks larger than a page size. |
140 |
| - |
141 |
| -fallocate |
142 |
| - Command line tool in util-linux, and a syscall, that reserves space in |
143 |
| - the filesystem for a file, without actually writing any file data to |
144 |
| - the filesystem. First data write will turn the preallocated extents |
145 |
| - into regular ones. See :manref:`fallocate(1)` and :manref:`fallocate(2)` manual pages |
146 |
| - for more details. |
147 |
| - |
148 |
| -filefrag |
149 |
| - A tool to show the number of extents in a file, and hence the amount of |
150 |
| - fragmentation in the file. It is usually part of the e2fsprogs package |
151 |
| - on most Linux distributions. While initially developed for the ext2 |
152 |
| - filesystem, it works on Btrfs as well. It uses the *FIEMAP* ioctl. |
153 |
| - |
154 |
| -free space cache |
155 |
| - Btrfs doesn't track free space, it only tracks allocated space. Free |
156 |
| - space is by definition any holes in the allocated space, but finding |
157 |
| - these holes is actually fairly I/O intensive. The free space cache |
158 |
| - stores a condensed representation of what is free. It is updated on |
159 |
| - every *transaction* commit. |
160 |
| - |
161 |
| -fsync |
162 |
| - On Unix and Unix-like operating systems (of which Linux is the latter), |
163 |
| - the :manref:`fsync(2)` system call causes all buffered file |
164 |
| - descriptor related data changes to be flushed to the underlying block |
165 |
| - device. When a file is modified on a modern operating system the |
166 |
| - changes are generally not written to the disk immediately but rather |
167 |
| - those changes are buffered in memory for reasons of performance, |
168 |
| - calling :manref:`fsync(2)` causes any in-memory changes to be written |
169 |
| - to disk. |
170 |
| - |
171 |
| -generation |
172 |
| - An internal counter which updates for each *transaction*. When a |
173 |
| - *metadata* block is written (using *copy on write*), current |
174 |
| - generation is stored in the block, so that blocks which are too new |
175 |
| - (and hence possibly inconsistent) can be identified. |
176 |
| - |
177 |
| -key |
178 |
| - A fixed sized tuple used to identify and sort items in a *B-tree*. |
179 |
| - The key is broken up into 3 parts: *objectid*, *type*, and |
180 |
| - *offset*. The *type* field indicates how each of the other two |
181 |
| - fields should be used, and what to expect to find in the item. |
182 |
| - |
183 |
| -item |
184 |
| - A variable sized structure stored in B-tree leaves. Items hold |
185 |
| - different types of data depending on key type. |
186 |
| - |
187 |
| -log tree |
188 |
| - A b-tree that temporarily tracks ongoing metadata updates until a full |
189 |
| - transaction commit is done. It's a performance optimization of |
190 |
| - ``fsync``. The log tracked in the tree are replayed if the filesystem |
191 |
| - is not unmounted cleanly. |
192 |
| - |
193 |
| -metadata |
194 |
| - Data about data. In btrfs, this includes all of the internal data |
195 |
| - structures of the filesystem, including directory structures, |
196 |
| - filenames, file permissions, checksums, and the location of each file's |
197 |
| - *extents*. All btrfs metadata is stored in *B-trees*. |
198 |
| - |
199 |
| -mkfs.btrfs |
200 |
| - The tool (from *btrfs-progs*) to create a btrfs filesystem. |
201 |
| - |
202 |
| -offline |
203 |
| - A filesystem which is not mounted is offline. Some tools (e.g. |
204 |
| - *btrfsck*) will only work on offline filesystems. Compare *online*. |
205 |
| - |
206 |
| -online |
207 |
| - A filesystem which is mounted is online. Most btrfs tools will only |
208 |
| - work on online filesystems. Compare *offline*. |
209 |
| - |
210 |
| -orphan |
211 |
| - A file that's still in use (opened by a running process) but all |
212 |
| - directory entries of that file have been removed. |
213 |
| - |
214 |
| -RAID |
215 |
| - A class of different methods for writing some additional redundant data |
216 |
| - across multiple *devices* so that if one device fails, the missing |
217 |
| - data can be reconstructed from the remaining ones. See *RAID-0*, |
218 |
| - *RAID-1*, *RAID-5*, *RAID-6*, *RAID-10*, *DUP* and |
219 |
| - *single*. Traditional RAID methods operate across multiple devices of |
220 |
| - equal size, whereas btrfs's RAID implementation works inside *block |
221 |
| - groups*. |
222 |
| - |
223 |
| -RAID-0 |
224 |
| - A form of *RAID* which provides no form of error recovery, but |
225 |
| - stripes a single copy of data across multiple devices for performance |
226 |
| - purposes. The stripe size is fixed to 64KB for now. |
227 |
| - |
228 |
| -RAID-1 |
229 |
| - A form of *RAID* which stores two complete copies of each piece of |
230 |
| - data. Each copy is stored on a different *device*. btrfs requires a |
231 |
| - minimum of two devices to use RAID-1. This is the default for btrfs's |
232 |
| - *metadata* on more than one device. |
233 |
| - |
234 |
| -RAID-5 |
235 |
| - A form of *RAID* which stripes a single copy of data across multiple |
236 |
| - *devices*, including one device's worth of additional parity data. |
237 |
| - Can be used to recover from a single device failure. |
238 |
| - |
239 |
| -RAID-6 |
240 |
| - A form of *RAID* which stripes a single copy of data across multiple |
241 |
| - *devices*, including two device's worth of additional parity data. Can |
242 |
| - be used to recover from the failure of two devices. |
243 |
| - |
244 |
| -RAID-10 |
245 |
| - A form of *RAID* which stores two complete copies of each piece of |
246 |
| - data, and also stripes each copy across multiple devices for |
247 |
| - performance. |
248 |
| - |
249 |
| -reflink |
250 |
| - Parameter to :command:`cp`, allowing it to take advantage of the |
251 |
| - capabilities of *COW*-capable filesystems. Allows for files to be |
252 |
| - copied and modified, with only the modifications taking up additional |
253 |
| - storage space. May be considered as *snapshots* on a single file rather |
254 |
| - than a *subvolume*. Example: :command:`cp --reflink file1 file2` |
255 |
| - |
256 |
| -relocation |
257 |
| - The process of moving block groups within the filesystem while |
258 |
| - maintaining full filesystem integrity and consistency. This |
259 |
| - functionality is underlying *balance* and *device* removing features. |
260 |
| - |
261 |
| -scrub |
262 |
| - An *online* filesystem checking tool. Reads all the data and metadata |
263 |
| - on the filesystem, and uses *checksums* and the duplicate copies from |
264 |
| - *RAID* storage to identify and repair any corrupt data. |
265 |
| - |
266 |
| -seed device |
267 |
| - A readonly device can be used as a filesystem seed or template (e.g. a |
268 |
| - CD-ROM containing an OS image). Read/write devices can be added to |
269 |
| - store modifications (using *copy on write*), changes to the writable |
270 |
| - devices are persistent across reboots. The original device remains |
271 |
| - unchanged and can be removed at any time (after Btrfs has been |
272 |
| - instructed to copy over all missing blocks). Multiple read/write file |
273 |
| - systems can be built from the same seed. |
274 |
| - |
275 |
| -single |
276 |
| - A "*RAID*" level in btrfs, storing a single copy of each piece of data. |
277 |
| - The default for data (as opposed to *metadata*) in btrfs. Single is |
278 |
| - also default metadata profile for non-rotational (SSD, flash) devices. |
279 |
| - |
280 |
| -snapshot |
281 |
| - A *subvolume* which is a *copy on write* copy of another subvolume. The |
282 |
| - two subvolumes share all of their common (unmodified) data, which means |
283 |
| - that snapshots can be used to keep the historical state of a filesystem |
284 |
| - very cheaply. After the snapshot is made, the original subvolume and |
285 |
| - the snapshot are of equal status: the original does not "own" the |
286 |
| - snapshot, and either one can be deleted without affecting the other |
287 |
| - one. |
288 |
| - |
289 |
| -subvolume |
290 |
| - A tree of files and directories inside a btrfs that can be mounted as |
291 |
| - if it were an independent filesystem. A subvolume is created by taking |
292 |
| - a reference on the root of another subvolume. Each btrfs filesystem has |
293 |
| - at least one subvolume, the *top-level subvolume*, which contains |
294 |
| - everything else in the filesystem. Additional subvolumes can be created |
295 |
| - and deleted with the *btrfs<* tool. All subvolumes share the same pool |
296 |
| - of free space in the filesystem. See also *default subvolume*. |
297 |
| - |
298 |
| -superblock |
299 |
| - The *block* on the disk, at a fixed known location and of fixed size, |
300 |
| - which contains pointers to the disk blocks containing all the other |
301 |
| - filesystem *metadata* structures. btrfs stores multiple copies of the |
302 |
| - superblock on each *device* in the filesystem at offsets 64 KiB, 64 |
303 |
| - MiB, 256 GiB, 1 TiB and PiB. |
304 |
| - |
305 |
| -system array |
306 |
| - Cryptic name of *superblock* metadata describing how to assemble a |
307 |
| - filesystem from multiple device. Prior to mount, the command *btrfs dev |
308 |
| - scan* has to be called, or all the devices have to be specified via |
309 |
| - mount option *device=/dev/ice*. |
310 |
| - |
311 |
| -top-level subvolume |
312 |
| - The *subvolume* at the very top of the filesystem. This is the only |
313 |
| - subvolume present in a newly-created btrfs filesystem, and internally has ID 5, |
314 |
| - otherwise could be referenced as 0 (e.g. within the *set-default* subcommand of |
315 |
| - *btrfs*). |
316 |
| - |
317 |
| -transaction |
318 |
| - A consistent set of changes. To avoid generating very large amounts of |
319 |
| - disk activity, btrfs caches changes in RAM for up to 30 seconds |
320 |
| - (sometimes more often if the filesystem is running short on space or |
321 |
| - doing a lot of *fsync*s), and then writes (commits) these changes out |
322 |
| - to disk in one go (using *copy on write* behaviour). This period of |
323 |
| - caching is called a transaction. Only one transaction is active on the |
324 |
| - filesystem at any one time. |
325 |
| - |
326 |
| -transid |
327 |
| - An alternative term for *generation*. |
328 |
| - |
329 |
| -writeback |
330 |
| - *Writeback* in the context of the Linux kernel can be defined as the |
331 |
| - process of writing "dirty" memory from the page cache to the disk, |
332 |
| - when certain conditions are met (timeout, number of dirty pages over a |
333 |
| - ratio). |
| 4 | +.. include:: ch-glossary.rst |
0 commit comments