\documentclass{report}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{textcomp}
\usepackage{geometry}
\geometry{top=15mm, bottom=15mm, left=1cm, right=1cm}
\usepackage[french]{babel}
\usepackage{pslatex}
\usepackage[colorlinks=true,urlcolor=black]{hyperref}
\usepackage{graphicx}
\usepackage{fancyhdr}
\pagestyle{fancy}
\renewcommand{\footrulewidth}{0.4pt}
\fancyfoot[L]{Uubu.fr}
\fancyfoot[R]{mer. févr. 3 10:26:27 CET 2016}
\lfoot{\Large \textit{Uubu.fr}}
\hypersetup{pdfinfo={
Title={/dev/loop},
Author={Sylvain Girod},
Creator={Bash script from uubu.fr's format version 1},
Producer={Bash script and PDFLaTeX},
Subject={périphériques loop},
CreationDate={D:20160203102627},
ModDate={D:20160203102627},
Keywords={Linux}
}}
\begin{document}
 
\begin{center}
{\Huge /dev/loop, /dev/loop-control }
\end{center}
\vspace{1cm}
 
\begin{flushleft}
 
{\large périphériques loop}
 
\vspace{10mm}
 
\hspace{1mm}  Le périphérique loop est un périphérique loop qui map ses blocks de données non pas sur un périphérique physique comme un disque dur, mais aux blocks d'un fichier régulier dans un système de fichier ou dans un autre périphérique block. Cela peut être utile par exemple pour fournir un périphérique block pour une image de système de fichier stocké dans un fichier, pour qu'il puisse être monté avec la commande mount.
\vspace{5mm} \\
 
 
\hspace{1mm} On peut faire:
 
{\ttfamily
dd if=/dev/zero of=file.img bs=1MiB count=10\\ sudo losetup /dev/loop4 file.img\\ sudo mkfs -t ext4 /dev/loop4\\ sudo mkdir /myloopdev\\ sudo mount /dev/loop4 /myloopdev\\
}
\vspace{8mm}
 
\hspace{1mm}  Un fonction tranfert peut être spécifiée pour chaque périphérique loop pour chiffrer/déchiffrer.
\vspace{5mm} \\
 
 
\hspace{1mm}  Depuis Linux 3.1, le kernel fournis le périphérique /dev/loop-control, qui permet à une application de trouver dynamiquement un périphérique libre, et d'ajouter et supprimer des périphériques du système.
\vspace{5mm} \\
 
 
\hspace{1mm} Le programme ci-dessous utilise le périphérique /dev/loop-control pour trouver un périphérique loop, l'ouvre, ouvre un fichie à utiliser comme stockage sous-jacent, puis l'associe avec le périphérique loop. La session shell suivante démontre l'utilisation du programme:
 
{\ttfamily
> dd if=/dev/zero of=file.img bs=1MiB count=10\\ 10+0 records in\\ 10+0 records out\\ 10485760 bytes (10 MB) copied, 0.00609385 s, 1.7 GB/s\\ > sudo ./mnt\_loop file.img\\ loopname = /dev/loop5\\
}
\vspace{8mm}
 
\hspace{1mm} Programme source:
 
{\ttfamily
\#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); \textbackslash{}\\ \hspace{2mm}\hspace{2mm}\hspace{2mm}\hspace{2mm}\} while (0)\\ \hspace{2mm}\\ int\\ main(int argc, char *argv\texttt{[}\texttt{]})\\ \{\\ \hspace{2mm}int loopctlfd, loopfd, backingfile;\\ \hspace{2mm}long devnr;\\ \hspace{2mm}char loopname\texttt{[}4096\texttt{]};\\ \hspace{2mm}\\ \hspace{2mm}if (argc != 2) \{\\ \hspace{2mm}\hspace{2mm}fprintf(stderr, "Usage: \%s backing-file\textbackslash{}n", argv\texttt{[}0\texttt{]});\\ \hspace{2mm}\hspace{2mm}exit(EXIT\_FAILURE);\\ \hspace{2mm}\}\\ \hspace{2mm}\\ \hspace{2mm}loopctlfd = open("/dev/loop-control", O\_RDWR);\\ \hspace{2mm}if (loopctlfd == -1)\\ \hspace{2mm}\hspace{2mm}errExit("open: /dev/loop-control");\\ \hspace{2mm}\\ \hspace{2mm}devnr = ioctl(loopctlfd, LOOP\_CTL\_GET\_FREE);\\ \hspace{2mm}if (devnr == -1)\\ \hspace{2mm}\hspace{2mm}errExit("ioctl-LOOP\_CTL\_GET\_FREE");\\ \hspace{2mm}\\ \hspace{2mm}sprintf(loopname, "/dev/loop\%ld", devnr);\\ \hspace{2mm}printf("loopname = \%s\textbackslash{}n", loopname);\\ \hspace{2mm}\\ \hspace{2mm}loopfd = open(loopname, O\_RDWR);\\ \hspace{2mm}if (loopfd == -1)\\ \hspace{2mm}\hspace{2mm}errExit("open: loopname");\\ \hspace{2mm}\\ \hspace{2mm}backingfile = open(argv\texttt{[}1\texttt{]}, O\_RDWR);\\ \hspace{2mm}if (backingfile == -1)\\ \hspace{2mm}\hspace{2mm}errExit("open: backing-file");\\ \hspace{2mm}\\ \hspace{2mm}if (ioctl(loopfd, LOOP\_SET\_FD, backingfile) == -1)\\ \hspace{2mm}\hspace{2mm}errExit("ioctl-LOOP\_SET\_FD");\\ \hspace{2mm}\\ \hspace{2mm}exit(EXIT\_SUCCESS);\\ \}\\
}
\vspace{8mm}
\end{flushleft}
\end{document}
