xref: /linux/drivers/md/Kconfig (revision d8730f0c)
1# SPDX-License-Identifier: GPL-2.0-only
2#
3# Block device driver configuration
4#
5
6menuconfig MD
7	bool "Multiple devices driver support (RAID and LVM)"
8	depends on BLOCK
9	help
10	  Support multiple physical spindles through a single logical device.
11	  Required for RAID and logical volume management.
12
13if MD
14
15config BLK_DEV_MD
16	tristate "RAID support"
17	select BLOCK_HOLDER_DEPRECATED if SYSFS
18	select BUFFER_HEAD
19	# BLOCK_LEGACY_AUTOLOAD requirement should be removed
20	# after relevant mdadm enhancements - to make "names=yes"
21	# the default - are widely available.
22	select BLOCK_LEGACY_AUTOLOAD
23	help
24	  This driver lets you combine several hard disk partitions into one
25	  logical block device. This can be used to simply append one
26	  partition to another one or to combine several redundant hard disks
27	  into a RAID1/4/5 device so as to provide protection against hard
28	  disk failures. This is called "Software RAID" since the combining of
29	  the partitions is done by the kernel. "Hardware RAID" means that the
30	  combining is done by a dedicated controller; if you have such a
31	  controller, you do not need to say Y here.
32
33	  More information about Software RAID on Linux is contained in the
34	  Software RAID mini-HOWTO, available from
35	  <https://www.tldp.org/docs.html#howto>. There you will also learn
36	  where to get the supporting user space utilities raidtools.
37
38	  If unsure, say N.
39
40config MD_AUTODETECT
41	bool "Autodetect RAID arrays during kernel boot"
42	depends on BLK_DEV_MD=y
43	default y
44	help
45	  If you say Y here, then the kernel will try to autodetect raid
46	  arrays as part of its boot process.
47
48	  If you don't use raid and say Y, this autodetection can cause
49	  a several-second delay in the boot time due to various
50	  synchronisation steps that are part of this step.
51
52	  If unsure, say Y.
53
54config MD_BITMAP_FILE
55	bool "MD bitmap file support (deprecated)"
56	default y
57	help
58	  If you say Y here, support for write intent bitmaps in files on an
59	  external file system is enabled.  This is an alternative to the internal
60	  bitmaps near the MD superblock, and very problematic code that abuses
61	  various kernel APIs and can only work with files on a file system not
62	  actually sitting on the MD device.
63
64config MD_RAID0
65	tristate "RAID-0 (striping) mode"
66	depends on BLK_DEV_MD
67	help
68	  If you say Y here, then your multiple devices driver will be able to
69	  use the so-called raid0 mode, i.e. it will combine the hard disk
70	  partitions into one logical device in such a fashion as to fill them
71	  up evenly, one chunk here and one chunk there. This will increase
72	  the throughput rate if the partitions reside on distinct disks.
73
74	  Information about Software RAID on Linux is contained in the
75	  Software-RAID mini-HOWTO, available from
76	  <https://www.tldp.org/docs.html#howto>. There you will also
77	  learn where to get the supporting user space utilities raidtools.
78
79	  To compile this as a module, choose M here: the module
80	  will be called raid0.
81
82	  If unsure, say Y.
83
84config MD_RAID1
85	tristate "RAID-1 (mirroring) mode"
86	depends on BLK_DEV_MD
87	help
88	  A RAID-1 set consists of several disk drives which are exact copies
89	  of each other.  In the event of a mirror failure, the RAID driver
90	  will continue to use the operational mirrors in the set, providing
91	  an error free MD (multiple device) to the higher levels of the
92	  kernel.  In a set with N drives, the available space is the capacity
93	  of a single drive, and the set protects against a failure of (N - 1)
94	  drives.
95
96	  Information about Software RAID on Linux is contained in the
97	  Software-RAID mini-HOWTO, available from
98	  <https://www.tldp.org/docs.html#howto>.  There you will also
99	  learn where to get the supporting user space utilities raidtools.
100
101	  If you want to use such a RAID-1 set, say Y.  To compile this code
102	  as a module, choose M here: the module will be called raid1.
103
104	  If unsure, say Y.
105
106config MD_RAID10
107	tristate "RAID-10 (mirrored striping) mode"
108	depends on BLK_DEV_MD
109	help
110	  RAID-10 provides a combination of striping (RAID-0) and
111	  mirroring (RAID-1) with easier configuration and more flexible
112	  layout.
113	  Unlike RAID-0, but like RAID-1, RAID-10 requires all devices to
114	  be the same size (or at least, only as much as the smallest device
115	  will be used).
116	  RAID-10 provides a variety of layouts that provide different levels
117	  of redundancy and performance.
118
119	  RAID-10 requires mdadm-1.7.0 or later, available at:
120
121	  https://www.kernel.org/pub/linux/utils/raid/mdadm/
122
123	  If unsure, say Y.
124
125config MD_RAID456
126	tristate "RAID-4/RAID-5/RAID-6 mode"
127	depends on BLK_DEV_MD
128	select RAID6_PQ
129	select LIBCRC32C
130	select ASYNC_MEMCPY
131	select ASYNC_XOR
132	select ASYNC_PQ
133	select ASYNC_RAID6_RECOV
134	help
135	  A RAID-5 set of N drives with a capacity of C MB per drive provides
136	  the capacity of C * (N - 1) MB, and protects against a failure
137	  of a single drive. For a given sector (row) number, (N - 1) drives
138	  contain data sectors, and one drive contains the parity protection.
139	  For a RAID-4 set, the parity blocks are present on a single drive,
140	  while a RAID-5 set distributes the parity across the drives in one
141	  of the available parity distribution methods.
142
143	  A RAID-6 set of N drives with a capacity of C MB per drive
144	  provides the capacity of C * (N - 2) MB, and protects
145	  against a failure of any two drives. For a given sector
146	  (row) number, (N - 2) drives contain data sectors, and two
147	  drives contains two independent redundancy syndromes.  Like
148	  RAID-5, RAID-6 distributes the syndromes across the drives
149	  in one of the available parity distribution methods.
150
151	  Information about Software RAID on Linux is contained in the
152	  Software-RAID mini-HOWTO, available from
153	  <https://www.tldp.org/docs.html#howto>. There you will also
154	  learn where to get the supporting user space utilities raidtools.
155
156	  If you want to use such a RAID-4/RAID-5/RAID-6 set, say Y.  To
157	  compile this code as a module, choose M here: the module
158	  will be called raid456.
159
160	  If unsure, say Y.
161
162config MD_FAULTY
163	tristate "Faulty test module for MD (deprecated)"
164	depends on BLK_DEV_MD
165	help
166	  The "faulty" module allows for a block device that occasionally returns
167	  read or write errors.  It is useful for testing.
168
169	  In unsure, say N.
170
171
172config MD_CLUSTER
173	tristate "Cluster Support for MD"
174	depends on BLK_DEV_MD
175	depends on DLM
176	default n
177	help
178	Clustering support for MD devices. This enables locking and
179	synchronization across multiple systems on the cluster, so all
180	nodes in the cluster can access the MD devices simultaneously.
181
182	This brings the redundancy (and uptime) of RAID levels across the
183	nodes of the cluster. Currently, it can work with raid1 and raid10
184	(limited support).
185
186	If unsure, say N.
187
188source "drivers/md/bcache/Kconfig"
189
190config BLK_DEV_DM_BUILTIN
191	bool
192
193config BLK_DEV_DM
194	tristate "Device mapper support"
195	select BLOCK_HOLDER_DEPRECATED if SYSFS
196	select BLK_DEV_DM_BUILTIN
197	select BLK_MQ_STACKING
198	depends on DAX || DAX=n
199	help
200	  Device-mapper is a low level volume manager.  It works by allowing
201	  people to specify mappings for ranges of logical sectors.  Various
202	  mapping types are available, in addition people may write their own
203	  modules containing custom mappings if they wish.
204
205	  Higher level volume managers such as LVM2 use this driver.
206
207	  To compile this as a module, choose M here: the module will be
208	  called dm-mod.
209
210	  If unsure, say N.
211
212config DM_DEBUG
213	bool "Device mapper debugging support"
214	depends on BLK_DEV_DM
215	help
216	  Enable this for messages that may help debug device-mapper problems.
217
218	  If unsure, say N.
219
220config DM_BUFIO
221       tristate
222       depends on BLK_DEV_DM
223	help
224	 This interface allows you to do buffered I/O on a device and acts
225	 as a cache, holding recently-read blocks in memory and performing
226	 delayed writes.
227
228config DM_DEBUG_BLOCK_MANAGER_LOCKING
229       bool "Block manager locking"
230       depends on DM_BUFIO
231	help
232	 Block manager locking can catch various metadata corruption issues.
233
234	 If unsure, say N.
235
236config DM_DEBUG_BLOCK_STACK_TRACING
237       bool "Keep stack trace of persistent data block lock holders"
238       depends on STACKTRACE_SUPPORT && DM_DEBUG_BLOCK_MANAGER_LOCKING
239       select STACKTRACE
240	help
241	 Enable this for messages that may help debug problems with the
242	 block manager locking used by thin provisioning and caching.
243
244	 If unsure, say N.
245
246config DM_BIO_PRISON
247       tristate
248       depends on BLK_DEV_DM
249	help
250	 Some bio locking schemes used by other device-mapper targets
251	 including thin provisioning.
252
253source "drivers/md/persistent-data/Kconfig"
254
255config DM_UNSTRIPED
256       tristate "Unstriped target"
257       depends on BLK_DEV_DM
258	help
259	  Unstripes I/O so it is issued solely on a single drive in a HW
260	  RAID0 or dm-striped target.
261
262config DM_CRYPT
263	tristate "Crypt target support"
264	depends on BLK_DEV_DM
265	depends on (ENCRYPTED_KEYS || ENCRYPTED_KEYS=n)
266	depends on (TRUSTED_KEYS || TRUSTED_KEYS=n)
267	select CRYPTO
268	select CRYPTO_CBC
269	select CRYPTO_ESSIV
270	help
271	  This device-mapper target allows you to create a device that
272	  transparently encrypts the data on it. You'll need to activate
273	  the ciphers you're going to use in the cryptoapi configuration.
274
275	  For further information on dm-crypt and userspace tools see:
276	  <https://gitlab.com/cryptsetup/cryptsetup/wikis/DMCrypt>
277
278	  To compile this code as a module, choose M here: the module will
279	  be called dm-crypt.
280
281	  If unsure, say N.
282
283config DM_SNAPSHOT
284       tristate "Snapshot target"
285       depends on BLK_DEV_DM
286       select DM_BUFIO
287	help
288	 Allow volume managers to take writable snapshots of a device.
289
290config DM_THIN_PROVISIONING
291       tristate "Thin provisioning target"
292       depends on BLK_DEV_DM
293       select DM_PERSISTENT_DATA
294       select DM_BIO_PRISON
295	help
296	 Provides thin provisioning and snapshots that share a data store.
297
298config DM_CACHE
299       tristate "Cache target (EXPERIMENTAL)"
300       depends on BLK_DEV_DM
301       default n
302       select DM_PERSISTENT_DATA
303       select DM_BIO_PRISON
304	help
305	 dm-cache attempts to improve performance of a block device by
306	 moving frequently used data to a smaller, higher performance
307	 device.  Different 'policy' plugins can be used to change the
308	 algorithms used to select which blocks are promoted, demoted,
309	 cleaned etc.  It supports writeback and writethrough modes.
310
311config DM_CACHE_SMQ
312       tristate "Stochastic MQ Cache Policy (EXPERIMENTAL)"
313       depends on DM_CACHE
314       default y
315	help
316	 A cache policy that uses a multiqueue ordered by recent hits
317	 to select which blocks should be promoted and demoted.
318	 This is meant to be a general purpose policy.  It prioritises
319	 reads over writes.  This SMQ policy (vs MQ) offers the promise
320	 of less memory utilization, improved performance and increased
321	 adaptability in the face of changing workloads.
322
323config DM_WRITECACHE
324	tristate "Writecache target"
325	depends on BLK_DEV_DM
326	help
327	   The writecache target caches writes on persistent memory or SSD.
328	   It is intended for databases or other programs that need extremely
329	   low commit latency.
330
331	   The writecache target doesn't cache reads because reads are supposed
332	   to be cached in standard RAM.
333
334config DM_EBS
335	tristate "Emulated block size target (EXPERIMENTAL)"
336	depends on BLK_DEV_DM && !HIGHMEM
337	select DM_BUFIO
338	help
339	  dm-ebs emulates smaller logical block size on backing devices
340	  with larger ones (e.g. 512 byte sectors on 4K native disks).
341
342config DM_ERA
343       tristate "Era target (EXPERIMENTAL)"
344       depends on BLK_DEV_DM
345       default n
346       select DM_PERSISTENT_DATA
347       select DM_BIO_PRISON
348	help
349	 dm-era tracks which parts of a block device are written to
350	 over time.  Useful for maintaining cache coherency when using
351	 vendor snapshots.
352
353config DM_CLONE
354       tristate "Clone target (EXPERIMENTAL)"
355       depends on BLK_DEV_DM
356       default n
357       select DM_PERSISTENT_DATA
358	help
359	 dm-clone produces a one-to-one copy of an existing, read-only source
360	 device into a writable destination device. The cloned device is
361	 visible/mountable immediately and the copy of the source device to the
362	 destination device happens in the background, in parallel with user
363	 I/O.
364
365	 If unsure, say N.
366
367config DM_MIRROR
368       tristate "Mirror target"
369       depends on BLK_DEV_DM
370	help
371	 Allow volume managers to mirror logical volumes, also
372	 needed for live data migration tools such as 'pvmove'.
373
374config DM_LOG_USERSPACE
375	tristate "Mirror userspace logging"
376	depends on DM_MIRROR && NET
377	select CONNECTOR
378	help
379	  The userspace logging module provides a mechanism for
380	  relaying the dm-dirty-log API to userspace.  Log designs
381	  which are more suited to userspace implementation (e.g.
382	  shared storage logs) or experimental logs can be implemented
383	  by leveraging this framework.
384
385config DM_RAID
386       tristate "RAID 1/4/5/6/10 target"
387       depends on BLK_DEV_DM
388       select MD_RAID0
389       select MD_RAID1
390       select MD_RAID10
391       select MD_RAID456
392       select BLK_DEV_MD
393	help
394	 A dm target that supports RAID1, RAID10, RAID4, RAID5 and RAID6 mappings
395
396	 A RAID-5 set of N drives with a capacity of C MB per drive provides
397	 the capacity of C * (N - 1) MB, and protects against a failure
398	 of a single drive. For a given sector (row) number, (N - 1) drives
399	 contain data sectors, and one drive contains the parity protection.
400	 For a RAID-4 set, the parity blocks are present on a single drive,
401	 while a RAID-5 set distributes the parity across the drives in one
402	 of the available parity distribution methods.
403
404	 A RAID-6 set of N drives with a capacity of C MB per drive
405	 provides the capacity of C * (N - 2) MB, and protects
406	 against a failure of any two drives. For a given sector
407	 (row) number, (N - 2) drives contain data sectors, and two
408	 drives contains two independent redundancy syndromes.  Like
409	 RAID-5, RAID-6 distributes the syndromes across the drives
410	 in one of the available parity distribution methods.
411
412config DM_ZERO
413	tristate "Zero target"
414	depends on BLK_DEV_DM
415	help
416	  A target that discards writes, and returns all zeroes for
417	  reads.  Useful in some recovery situations.
418
419config DM_MULTIPATH
420	tristate "Multipath target"
421	depends on BLK_DEV_DM
422	# nasty syntax but means make DM_MULTIPATH independent
423	# of SCSI_DH if the latter isn't defined but if
424	# it is, DM_MULTIPATH must depend on it.  We get a build
425	# error if SCSI_DH=m and DM_MULTIPATH=y
426	depends on !SCSI_DH || SCSI
427	help
428	  Allow volume managers to support multipath hardware.
429
430config DM_MULTIPATH_QL
431	tristate "I/O Path Selector based on the number of in-flight I/Os"
432	depends on DM_MULTIPATH
433	help
434	  This path selector is a dynamic load balancer which selects
435	  the path with the least number of in-flight I/Os.
436
437	  If unsure, say N.
438
439config DM_MULTIPATH_ST
440	tristate "I/O Path Selector based on the service time"
441	depends on DM_MULTIPATH
442	help
443	  This path selector is a dynamic load balancer which selects
444	  the path expected to complete the incoming I/O in the shortest
445	  time.
446
447	  If unsure, say N.
448
449config DM_MULTIPATH_HST
450	tristate "I/O Path Selector based on historical service time"
451	depends on DM_MULTIPATH
452	help
453	  This path selector is a dynamic load balancer which selects
454	  the path expected to complete the incoming I/O in the shortest
455	  time by comparing estimated service time (based on historical
456	  service time).
457
458	  If unsure, say N.
459
460config DM_MULTIPATH_IOA
461	tristate "I/O Path Selector based on CPU submission"
462	depends on DM_MULTIPATH
463	help
464	  This path selector selects the path based on the CPU the IO is
465	  executed on and the CPU to path mapping setup at path addition time.
466
467	  If unsure, say N.
468
469config DM_DELAY
470	tristate "I/O delaying target"
471	depends on BLK_DEV_DM
472	help
473	A target that delays reads and/or writes and can send
474	them to different devices.  Useful for testing.
475
476	If unsure, say N.
477
478config DM_DUST
479	tristate "Bad sector simulation target"
480	depends on BLK_DEV_DM
481	help
482	A target that simulates bad sector behavior.
483	Useful for testing.
484
485	If unsure, say N.
486
487config DM_INIT
488	bool "DM \"dm-mod.create=\" parameter support"
489	depends on BLK_DEV_DM=y
490	help
491	Enable "dm-mod.create=" parameter to create mapped devices at init time.
492	This option is useful to allow mounting rootfs without requiring an
493	initramfs.
494	See Documentation/admin-guide/device-mapper/dm-init.rst for dm-mod.create="..."
495	format.
496
497	If unsure, say N.
498
499config DM_UEVENT
500	bool "DM uevents"
501	depends on BLK_DEV_DM
502	help
503	Generate udev events for DM events.
504
505config DM_FLAKEY
506       tristate "Flakey target"
507       depends on BLK_DEV_DM
508	help
509	 A target that intermittently fails I/O for debugging purposes.
510
511config DM_VERITY
512	tristate "Verity target support"
513	depends on BLK_DEV_DM
514	select CRYPTO
515	select CRYPTO_HASH
516	select DM_BUFIO
517	help
518	  This device-mapper target creates a read-only device that
519	  transparently validates the data on one underlying device against
520	  a pre-generated tree of cryptographic checksums stored on a second
521	  device.
522
523	  You'll need to activate the digests you're going to use in the
524	  cryptoapi configuration.
525
526	  To compile this code as a module, choose M here: the module will
527	  be called dm-verity.
528
529	  If unsure, say N.
530
531config DM_VERITY_VERIFY_ROOTHASH_SIG
532	def_bool n
533	bool "Verity data device root hash signature verification support"
534	depends on DM_VERITY
535	select SYSTEM_DATA_VERIFICATION
536	help
537	  Add ability for dm-verity device to be validated if the
538	  pre-generated tree of cryptographic checksums passed has a pkcs#7
539	  signature file that can validate the roothash of the tree.
540
541	  By default, rely on the builtin trusted keyring.
542
543	  If unsure, say N.
544
545config DM_VERITY_VERIFY_ROOTHASH_SIG_SECONDARY_KEYRING
546	bool "Verity data device root hash signature verification with secondary keyring"
547	depends on DM_VERITY_VERIFY_ROOTHASH_SIG
548	depends on SECONDARY_TRUSTED_KEYRING
549	help
550	  Rely on the secondary trusted keyring to verify dm-verity signatures.
551
552	  If unsure, say N.
553
554config DM_VERITY_FEC
555	bool "Verity forward error correction support"
556	depends on DM_VERITY
557	select REED_SOLOMON
558	select REED_SOLOMON_DEC8
559	help
560	  Add forward error correction support to dm-verity. This option
561	  makes it possible to use pre-generated error correction data to
562	  recover from corrupted blocks.
563
564	  If unsure, say N.
565
566config DM_SWITCH
567	tristate "Switch target support (EXPERIMENTAL)"
568	depends on BLK_DEV_DM
569	help
570	  This device-mapper target creates a device that supports an arbitrary
571	  mapping of fixed-size regions of I/O across a fixed set of paths.
572	  The path used for any specific region can be switched dynamically
573	  by sending the target a message.
574
575	  To compile this code as a module, choose M here: the module will
576	  be called dm-switch.
577
578	  If unsure, say N.
579
580config DM_LOG_WRITES
581	tristate "Log writes target support"
582	depends on BLK_DEV_DM
583	help
584	  This device-mapper target takes two devices, one device to use
585	  normally, one to log all write operations done to the first device.
586	  This is for use by file system developers wishing to verify that
587	  their fs is writing a consistent file system at all times by allowing
588	  them to replay the log in a variety of ways and to check the
589	  contents.
590
591	  To compile this code as a module, choose M here: the module will
592	  be called dm-log-writes.
593
594	  If unsure, say N.
595
596config DM_INTEGRITY
597	tristate "Integrity target support"
598	depends on BLK_DEV_DM
599	select BLK_DEV_INTEGRITY
600	select DM_BUFIO
601	select CRYPTO
602	select CRYPTO_SKCIPHER
603	select ASYNC_XOR
604	select DM_AUDIT if AUDIT
605	help
606	  This device-mapper target emulates a block device that has
607	  additional per-sector tags that can be used for storing
608	  integrity information.
609
610	  This integrity target is used with the dm-crypt target to
611	  provide authenticated disk encryption or it can be used
612	  standalone.
613
614	  To compile this code as a module, choose M here: the module will
615	  be called dm-integrity.
616
617config DM_ZONED
618	tristate "Drive-managed zoned block device target support"
619	depends on BLK_DEV_DM
620	depends on BLK_DEV_ZONED
621	select CRC32
622	help
623	  This device-mapper target takes a host-managed or host-aware zoned
624	  block device and exposes most of its capacity as a regular block
625	  device (drive-managed zoned block device) without any write
626	  constraints. This is mainly intended for use with file systems that
627	  do not natively support zoned block devices but still want to
628	  benefit from the increased capacity offered by SMR disks. Other uses
629	  by applications using raw block devices (for example object stores)
630	  are also possible.
631
632	  To compile this code as a module, choose M here: the module will
633	  be called dm-zoned.
634
635	  If unsure, say N.
636
637config DM_AUDIT
638	bool "DM audit events"
639	depends on AUDIT
640	help
641	  Generate audit events for device-mapper.
642
643	  Enables audit logging of several security relevant events in the
644	  particular device-mapper targets, especially the integrity target.
645
646endif # MD
647