diff options
Diffstat (limited to 'man4/loop.4')
-rw-r--r-- | man4/loop.4 | 361 |
1 files changed, 0 insertions, 361 deletions
diff --git a/man4/loop.4 b/man4/loop.4 deleted file mode 100644 index 273456c..0000000 --- a/man4/loop.4 +++ /dev/null @@ -1,361 +0,0 @@ -.\" Copyright 2002 Urs Thuermann (urs@isnogud.escape.de) -.\" and Copyright 2015 Michael Kerrisk <mtk.manpages@gmail.com> -.\" -.\" SPDX-License-Identifier: GPL-2.0-or-later -.\" -.TH loop 4 2023-10-31 "Linux man-pages 6.7" -.SH NAME -loop, loop-control \- loop devices -.SH SYNOPSIS -.nf -#include <linux/loop.h> -.fi -.SH DESCRIPTION -The loop device is a block device that maps its data blocks not to a -physical device such as a hard disk or optical disk drive, -but to the blocks of -a regular file in a filesystem or to another block device. -This can be useful for example to provide a block device for a filesystem -image stored in a file, so that it can be mounted with the -.BR mount (8) -command. -You could do -.P -.in +4n -.EX -$ \fBdd if=/dev/zero of=file.img bs=1MiB count=10\fP -$ \fBsudo losetup /dev/loop4 file.img\fP -$ \fBsudo mkfs \-t ext4 /dev/loop4\fP -$ \fBsudo mkdir /myloopdev\fP -$ \fBsudo mount /dev/loop4 /myloopdev\fP -.EE -.in -.P -See -.BR losetup (8) -for another example. -.P -A transfer function can be specified for each loop device for -encryption and decryption purposes. -.P -The following -.BR ioctl (2) -operations are provided by the loop block device: -.TP -.B LOOP_SET_FD -Associate the loop device with the open file whose file descriptor is -passed as the (third) -.BR ioctl (2) -argument. -.TP -.B LOOP_CLR_FD -Disassociate the loop device from any file descriptor. -.TP -.B LOOP_SET_STATUS -Set the status of the loop device using the (third) -.BR ioctl (2) -argument. -This argument is a pointer to a -.I loop_info -structure, defined in -.I <linux/loop.h> -as: -.IP -.in +4n -.EX -struct loop_info { - int lo_number; /* ioctl r/o */ - dev_t lo_device; /* ioctl r/o */ - unsigned long lo_inode; /* ioctl r/o */ - dev_t lo_rdevice; /* ioctl r/o */ - int lo_offset; - int lo_encrypt_type; - int lo_encrypt_key_size; /* ioctl w/o */ - int lo_flags; /* ioctl r/w (r/o before - Linux 2.6.25) */ - char lo_name[LO_NAME_SIZE]; - unsigned char lo_encrypt_key[LO_KEY_SIZE]; - /* ioctl w/o */ - unsigned long lo_init[2]; - char reserved[4]; -}; -.EE -.in -.IP -The encryption type -.RI ( lo_encrypt_type ) -should be one of -.BR LO_CRYPT_NONE , -.BR LO_CRYPT_XOR , -.BR LO_CRYPT_DES , -.BR LO_CRYPT_FISH2 , -.BR LO_CRYPT_BLOW , -.BR LO_CRYPT_CAST128 , -.BR LO_CRYPT_IDEA , -.BR LO_CRYPT_DUMMY , -.BR LO_CRYPT_SKIPJACK , -or (since Linux 2.6.0) -.BR LO_CRYPT_CRYPTOAPI . -.IP -The -.I lo_flags -field is a bit mask that can include zero or more of the following: -.RS -.TP -.B LO_FLAGS_READ_ONLY -The loopback device is read-only. -.TP -.BR LO_FLAGS_AUTOCLEAR " (since Linux 2.6.25)" -.\" commit 96c5865559cee0f9cbc5173f3c949f6ce3525581 -The loopback device will autodestruct on last close. -.TP -.BR LO_FLAGS_PARTSCAN " (since Linux 3.2)" -.\" commit e03c8dd14915fabc101aa495828d58598dc5af98 -Allow automatic partition scanning. -.TP -.BR LO_FLAGS_DIRECT_IO " (since Linux 4.10)" -.\" commit 2e5ab5f379f96a6207c45be40c357ebb1beb8ef3 -Use direct I/O mode to access the backing file. -.RE -.IP -The only -.I lo_flags -that can be modified by -.B LOOP_SET_STATUS -are -.B LO_FLAGS_AUTOCLEAR -and -.BR LO_FLAGS_PARTSCAN . -.TP -.B LOOP_GET_STATUS -Get the status of the loop device. -The (third) -.BR ioctl (2) -argument must be a pointer to a -.IR "struct loop_info" . -.TP -.BR LOOP_CHANGE_FD " (since Linux 2.6.5)" -Switch the backing store of the loop device to the new file identified -file descriptor specified in the (third) -.BR ioctl (2) -argument, which is an integer. -This operation is possible only if the loop device is read-only and -the new backing store is the same size and type as the old backing store. -.TP -.BR LOOP_SET_CAPACITY " (since Linux 2.6.30)" -.\" commit 53d6660836f233df66490707365ab177e5fb2bb4 -Resize a live loop device. -One can change the size of the underlying backing store and then use this -operation so that the loop driver learns about the new size. -This operation takes no argument. -.TP -.BR LOOP_SET_DIRECT_IO " (since Linux 4.10)" -.\" commit ab1cb278bc7027663adbfb0b81404f8398437e11 -Set DIRECT I/O mode on the loop device, so that -it can be used to open backing file. -The (third) -.BR ioctl (2) -argument is an unsigned long value. -A nonzero represents direct I/O mode. -.TP -.BR LOOP_SET_BLOCK_SIZE " (since Linux 4.14)" -.\" commit 89e4fdecb51cf5535867026274bc97de9480ade5 -Set the block size of the loop device. -The (third) -.BR ioctl (2) -argument is an unsigned long value. -This value must be a power of two in the range -[512,pagesize]; -otherwise, an -.B EINVAL -error results. -.TP -.BR LOOP_CONFIGURE " (since Linux 5.8)" -.\" commit 3448914e8cc550ba792d4ccc74471d1ca4293aae -Setup and configure all loop device parameters in a single step using -the (third) -.BR ioctl (2) -argument. -This argument is a pointer to a -.I loop_config -structure, defined in -.I <linux/loop.h> -as: -.IP -.in +4n -.EX -struct loop_config { - __u32 fd; - __u32 block_size; - struct loop_info64 info; - __u64 __reserved[8]; -}; -.EE -.in -.IP -In addition to doing what -.B LOOP_SET_STATUS -can do, -.B LOOP_CONFIGURE -can also be used to do the following: -.RS -.IP \[bu] 3 -set the correct block size immediately by setting -.IR loop_config.block_size ; -.IP \[bu] -explicitly request direct I/O mode by setting -.B LO_FLAGS_DIRECT_IO -in -.IR loop_config.info.lo_flags ; -and -.IP \[bu] -explicitly request read-only mode by setting -.B LO_FLAGS_READ_ONLY -in -.IR loop_config.info.lo_flags . -.RE -.P -Since Linux 2.6, there are two new -.BR ioctl (2) -operations: -.TP -.B LOOP_SET_STATUS64 -.TQ -.B LOOP_GET_STATUS64 -These are similar to -.BR LOOP_SET_STATUS " and " LOOP_GET_STATUS -described above but use the -.I loop_info64 -structure, -which has some additional fields and a larger range for some other fields: -.IP -.in +4n -.EX -struct loop_info64 { - uint64_t lo_device; /* ioctl r/o */ - uint64_t lo_inode; /* ioctl r/o */ - uint64_t lo_rdevice; /* ioctl r/o */ - uint64_t lo_offset; - uint64_t lo_sizelimit; /* bytes, 0 == max available */ - uint32_t lo_number; /* ioctl r/o */ - uint32_t lo_encrypt_type; - uint32_t lo_encrypt_key_size; /* ioctl w/o */ - uint32_t lo_flags; i /* ioctl r/w (r/o before - Linux 2.6.25) */ - uint8_t lo_file_name[LO_NAME_SIZE]; - uint8_t lo_crypt_name[LO_NAME_SIZE]; - uint8_t lo_encrypt_key[LO_KEY_SIZE]; /* ioctl w/o */ - uint64_t lo_init[2]; -}; -.EE -.in -.SS /dev/loop-control -Since Linux 3.1, -.\" commit 770fe30a46a12b6fb6b63fbe1737654d28e84844 -the kernel provides the -.I /dev/loop\-control -device, which permits an application to dynamically find a free device, -and to add and remove loop devices from the system. -To perform these operations, one first opens -.I /dev/loop\-control -and then employs one of the following -.BR ioctl (2) -operations: -.TP -.B LOOP_CTL_GET_FREE -Allocate or find a free loop device for use. -On success, the device number is returned as the result of the call. -This operation takes no argument. -.TP -.B LOOP_CTL_ADD -Add the new loop device whose device number is specified -as a long integer in the third -.BR ioctl (2) -argument. -On success, the device index is returned as the result of the call. -If the device is already allocated, the call fails with the error -.BR EEXIST . -.TP -.B LOOP_CTL_REMOVE -Remove the loop device whose device number is specified -as a long integer in the third -.BR ioctl (2) -argument. -On success, the device number is returned as the result of the call. -If the device is in use, the call fails with the error -.BR EBUSY . -.SH FILES -.TP -.I /dev/loop* -The loop block special device files. -.SH EXAMPLES -The program below uses the -.I /dev/loop\-control -device to find a free loop device, opens the loop device, -opens a file to be used as the underlying storage for the device, -and then associates the loop device with the backing store. -The following shell session demonstrates the use of the program: -.P -.in +4n -.EX -$ \fBdd if=/dev/zero of=file.img bs=1MiB count=10\fP -10+0 records in -10+0 records out -10485760 bytes (10 MB) copied, 0.00609385 s, 1.7 GB/s -$ \fBsudo ./mnt_loop file.img\fP -loopname = /dev/loop5 -.EE -.in -.SS Program source -\& -.EX -#include <fcntl.h> -#include <linux/loop.h> -#include <sys/ioctl.h> -#include <stdio.h> -#include <stdlib.h> -#include <unistd.h> -\& -#define errExit(msg) do { perror(msg); exit(EXIT_FAILURE); \e - } while (0) -\& -int -main(int argc, char *argv[]) -{ - int loopctlfd, loopfd, backingfile; - long devnr; - char loopname[4096]; -\& - if (argc != 2) { - fprintf(stderr, "Usage: %s backing\-file\en", argv[0]); - exit(EXIT_FAILURE); - } -\& - loopctlfd = open("/dev/loop\-control", O_RDWR); - if (loopctlfd == \-1) - errExit("open: /dev/loop\-control"); -\& - devnr = ioctl(loopctlfd, LOOP_CTL_GET_FREE); - if (devnr == \-1) - errExit("ioctl\-LOOP_CTL_GET_FREE"); -\& - sprintf(loopname, "/dev/loop%ld", devnr); - printf("loopname = %s\en", loopname); -\& - loopfd = open(loopname, O_RDWR); - if (loopfd == \-1) - errExit("open: loopname"); -\& - backingfile = open(argv[1], O_RDWR); - if (backingfile == \-1) - errExit("open: backing\-file"); -\& - if (ioctl(loopfd, LOOP_SET_FD, backingfile) == \-1) - errExit("ioctl\-LOOP_SET_FD"); -\& - exit(EXIT_SUCCESS); -} -.EE -.SH SEE ALSO -.BR losetup (8), -.BR mount (8) |